物联网(IOT)掀起了近几十年来最大的技术浪潮之一。预计到2020年将有500亿台设备实现互连,形成可能覆盖我们周围一切事物的网络。物联网将跨越工业、商业、医疗、汽车和其它应用,影响数十亿人。鉴于其对个人、机构和系统的影响范围甚广,安全性上升成为所有物联网系统中最关键的组成部分,任何负责任的商业物联网企业都必须真正把握安全性的理念受到了广泛认可。
在评估物联网网络脆弱性时,开发人员将目光对准了最基本的元素—边缘节点。而作为物联网中的“物”,数量众多的传感器和执行器向物联网提供数据并执行来自云端或用户与电脑、手机、车载系统、智能家电或其它平台交互产生的指令。边缘节点通常是小型低成本的智能设备,但正是由于它们访问的资源有限,往往被错误地认为不易受到攻击。与边缘节点交互的服务器以及与之连接的网络已经拥有了成熟的安全技术,而边缘节点到目前为止还未具备这样的技术。 当谈到保护这样的系统时,人们常把“加密”与“安全”视为相等,但其实那只是安全难题的一个方面。创建安全环境的首要任务之一是稳妥地发现和证明连接到您网络的设备的身份。必须首先确定是谁要连接到网络,因为如果没有预先建立起安全的身份认证,加密和传输层安全协议(如SSL/TLS)做的就是“保护”那些根本不应该进入您的网络访问者。
图1.尽管有安全通道,攻击者仍然可以从边缘节点侵入网络 为了更好地理解节点安全,让我们以登录网上银行账户作类比。首先在您的电脑和银行网站之间建立一个安全的(即经过加密和认证的)连接(这是一个https链接)。然而,这个安全链接只是在您的电脑和银行之间创建加密通信通道时对您的电脑进行了验证,而并没有对您本人进行认证。此时,银行还不了解您是不是一个骗子。您需要输入密码。这个密码是您的加密密钥,所以从理论上来讲,只有您和银行知道。一旦它被发送到银行就会与已经保存的您的密码进行比较。如果相匹配,那么对银行而言,这证明您就是您所声称的人。从这个例子可以看到,网上银行的安全性由两个层次来提供:1)传输层建立安全连接,2)应用层通过密码证明(认证)您的身份。同样,如果物联网受到足够重视,那么物联网的节点安全也必须由多个层次来提供。 物联网节点也使用传输层安全协议来创建连到云端的安全连接。但要实现真正的安全,物联网节点还必须获得应用层的安全性。这意味着不只是通信通道(即,管道),节点本身也需要经过认证。除了通道认证,应用层应建立加密和数据完整性检查机制来保护流经管道的数据。 考虑到这一点,由于这些物联网设备往往是一些简单小型设备,而其操作绝少或无需与人互动,因此,也带来了一种新的网络连接范式。这通常会引发各种各样的疑问。一方面,对基础设施安全性的担忧让人们怀疑“如何确定一台物联网设备是可信的?甚至怎么知道连接到您的网络的是一台真实的物联网设备,而不是假扮物联网节点的某台恶意入侵设备?”。这遭到了一些现实问题的反驳,比如“有人知道我的温控器设定了几度又有什么大不了的呢?”、“谁在乎是否有人知道我的灯是开着的?”、“谁想知道我的计步器记录我走了几步路呢?”。 如果您不仅考虑该设备访问了自身的哪些数据,还开始关心该设备已经在网络上访问了超出其本身范围的哪些数据,就会遇到更加实质性的问题。几宗广泛报道的数据泄漏事故是由非安全网络节点通过假冒身份造成的,而恶意入侵者可以伪装成一个物联网节点从而进入公司网络。一旦进入网络,安全性变得更加脆弱,它们最终能够访问受害者的客户数据库并破坏生产流程。如果恶意入侵者除了访问云服务,还可能访问并控制节点本身的操作,那么确定节点的身份(认证)将成为一个极为重要的考虑因素。 尽管现有的SSL/TLS等网络安全技术可以很好地保护未遭受入侵的边缘节点与服务器之间的通信通道,它们却不是无敌的——不能防止非入网型攻击。可以很容易地看到,如果攻击者控制了边缘节点,SSL/TLS将无济于事。 严密的安全性包括三个基本要素,其首字母缩写为“CIA”: ●保密性-Confidentiality:储存或以正进行发送的数据都应只供授权人可见; ●完整性-Integrity:发送的消息不应在到达目的地之前被修改; ●真实性-Authenticity:可以向人们保证“消息的发送者正是声称的本人”。 满足这些元素要求的技术有多种,其共性是使用密钥或私钥作为验证识别标签的独特部分。如何管理这些密钥的存储和通信决定了系统的安全性。 目前面临的挑战是在实现边缘节点安全性的同时确保可用计算能力、内存、电源以及预算维持在有限范围内。本文的目的是确定边缘节点的关键安全策略,说明密钥在所有安全解决方案中发挥的核心作用,并勾勒出成功的密钥管理技术。 安全身份的级联裨益 一旦某个节点或设备被确认为是“可信的”,便可充分获得无数的其它好处。包括安全通信、生态系统控制和安全存储。
图2.通过身份验证的节点可以获得的众多好处。 正如您所看到的,一旦可以验证物联网设备与自称相符,您就可以获得只可在可信、安全的环境中才能拥有的好处。 边缘节点的隐患:什么可能出错? 在讨论解决方案之前,我们需要更好地了解边缘节点存在哪些隐患,以便提供有效的保护。这其中包含两个方面:识别攻击者侵害节点的方法和了解这种攻击的后果。 攻击模式 有四种方法来侵入边缘节点:通过网络、通过外部端口、通过毗邻攻击(有时被称为“旁路攻击”),以及直接侵入设备。 网络攻击。只有网络的入口得到最好的保护才能算是安全的。处在密切监控下却毫无保护的节点不再能够幸免:Shodan1等网络工具可以查找网络、识别出所有未受保护的节点。虽然TLS保护可以发挥巨大作用,但是边缘节点的TLS实现缺陷、加密算法未充分使用随机数、未监测出的恶意软件、黑客专家发起的猛烈协议攻击,甚至是最近发现的FREAK2攻击等协议本身的弱点都可能导致细微的漏洞。即使在受到全面保护的网络中,攻击者也可以通过伪造固件更新并以其编写的代码替换合法代码的方式来入侵防御薄弱的边缘节点。 端口攻击。(有线或无线的)网络端口可能是小型基础边缘节点上唯一可用的连接。然而,复杂的边缘节点可能配有插入不同传感器的模块端口、USB或其它端口,甚至是无线端口来连接一些配件、耗材(如墨盒),或是用于测试和调试设备。每种端口均提供了一个接入边缘节点的机会。攻击可能通过一个未使用的端口,或者一个可以被拆卸并更换为设计用于实现攻击的其它硬件的配件来实施。与网络端口不同,没有既定的标准来保护这些端口。 毗邻攻击。不连接任何边缘节点也可能发生复杂攻击。通过在无保护装置上进行电源线窃听,或是测量信号发送或振动,可以提取出密钥信息。利用制造功率波动等非法行为或故障可以把设备置于无记录非安全的状态下。 物理攻击。最后,坚定的攻击者可能会拆卸边缘节点来探查其(有/无电源的)内部电路,甚至取出并逆向处理芯片来获取嵌入式存储器的内容。 全面的安全保护必须防范所有这些攻击模式。 后果 当然,我们只看护那些我们认为有价值的东西。简单的传感器节点对于攻击者来说似乎没什么价值,但是成功攻击的后果却可以把整个网络和连接到该网络的所有东西都置于危险境地。 通过突破边缘节点,甚至是网络的安全漏洞,攻击者可以获得其安全性应受到保护的所有秘密,特别是实现安全性所需的密钥。一旦获取了钥匙,便可突破包括加密和消息认证在内的所有其它安全保护。 一旦攻击者控制了边缘节点,他或她就可以在不引发任何警报的情况下改变网络节点的行为。对于其它的服务器而言,被控制的边缘节点仍然是一个“可信”的实体,于是继续主动向其泄露秘密而丝毫没有发觉它们已经落入坏人之手。 这种泄密会削弱消费者对其财务、医疗,身份及其它数据的隐私和安全的信心。同时(在美国)还可能违反美国联邦贸易委员会(FTC)对于贸易问题、美国医治保险携带和责任法案(HIPAA)/美国食品药品监督管理局(FDA)对于医疗保健应用,或美国证券交易委员会(SEC)/联邦存款保险公司(FDIC)对于金融交易的规定。对空域控制和道路交通系统等网络、电网、飞机和汽车的攻击还可能影响公共安全,部分不安全会造成工业运作的不可靠。 密钥加密形成良好安全性的基础 有很多种协议和方法可以解决各种安全问题,而所有这些均以一种或另一种方式使用了加密“密钥”。密钥类似于密码,但有两个关键不同: ●密码归可以控制和随意改变它们的用户所有。相反,密钥是系统固有的一部分,密钥的某些方面必须保秘,用户并不知道其安全事务中涉及的秘密或私钥。 ●密码往往很短,只有十几个字左右。相比之下,钥匙长而神秘,只能由计算机而不是人类来读取。 密钥可能是永久性的也可能是暂时性的,这意味着可以为特定的交易或通信生成、然后销毁密钥。在大多数情况下,密钥是系统中的秘密。为保证这些系统的安全通信,必须在创建系统时插入预先共享的密钥,或在部署之后实地进行安全的密钥交换。一旦获知对方的密钥,系统可以使用它们来验证消息或作为加密和解密算法的输入。由于多台终端设备可能拥有相同的密钥,将设备序列号引入算法有助于确保如果单台设备遭到黑客攻击,其获取的密钥只在该设备所在系统有效,而不会伤及其它。(这种技术被称为采用多元化密钥的“对称”认证。 还有许多其它类型的交易。人们可能通过互联网从某个公司购买一件商品,这种交易就没有必要与其分享用户的秘密。因此,最安全的做法是使用公钥/私钥对,即所谓的“非对称”或“公钥基础设施(PKI)”系统。这意味着用户有两个密钥:从来不与任何人分享的私钥和共享的公钥。它们之间通过复杂的数学关系(如RSA或椭圆曲线Elliptic Curve)关联起来。关键是要确保用公钥计算出私钥是极端困难的。基于大素数分解的RSA密钥已使用多年。椭圆曲线密码机制(ECC)是一种新方法,由于可以用更短的密钥达到类似的安全级别,因此减少计算量,而越来越受欢迎。这两种密钥都是所谓的数学“陷门”系统,意味着其计算是极难反转的。(他们因为很容易通过,却不可能反向走出而被称之为“陷门”。)使用ECC和RSA(陷门函数)分解来尝试确定私钥的值是行不通的。
|