13.2 ZigBee安全
“ZigBee规范”包含了很多新设计,使用“高级加密标准”加密算法来加密保护无线通信的机密性和完整性,通过使用一个网络密钥进行设备和数据的认证。为了满足ZigBee设备不同的安全需求,“ZigBee规范”定义了两种安全模式:
·“标准安全”模式 (standard security mode) “标准安全”模式之前的名称是“住宅安全”模式 (residential security mode)。“标准安全”模式使用单个共享密钥向ZigBee节点提供认证,“ZigBee信任中心”使用“访问控制列表”(Access Control List,ACL)对设备进行认证。这个模式对于设备来说并不占用太多的资源,因为网络中的每个设备都不需要维护一份设备认证证书列表。
·“高安全”模式 (high security mode) “高安全”模式之前的名称是“商业安全”模式 (commercial security mode)。“高安全”模式要求ZigBee网络中的一个设备作为“ZigBee信任中心”,来跟踪网络中使用的所有加密算法和认证密钥,并且强制执行网络认证和密钥升级策略。“ZigBee信任中心”设备需要有足够的资源来保持跟踪网络中使用的认证证书,表示该设备也代表了整个ZigBee网络的一个“失败入口点”(point of failure),言下之意,就是如果这个“ZigBee信任中心”出现问题,导致功能失败,那么当前ZigBee仍然有效,但是不允许任何新设备加入到该ZigBee网络中,直到该点恢复正常工作。
13.2.1 ZigBee的安全设计规则
“ZigBee规范”定义了多条会影响ZigBee通信安全的原则:
·每个负责发送帧的层都要负责保护它。如果“应用层”要求数据必须是安全的,那么“应用层”就会对数据进行保护。“应用层”和“网络层”可以分别独立地使用加密和认证校验对每一个数据进行保护。
·如果要求非认证访问的保护,那么在关联和密钥派生后,“网络层”的安全机制会使用在所有的帧上。“网络层”的安全对它的上层紧挨着它的应用层协议,提供了机密性和完整性控制。
·在单个设备上使用开放信任模型,这就表示允许在各层之间重用密钥,比如“网络层”和“应用层”之间可以使用同一个“高级加密标准”密钥。
·使用“端到端”(end-to-end)的安全机制,这样只有通信双方的源和目标设备能够对对方的信息进行解密。
·为了保持规范的简洁性,网络中所有的设备以及每个设备的所有层都必须采用同一种安全等级。
在知道了上述这些设计理念后,我们就可以开始检验ZigBee设备中所用的加密算法和认证机制了。
13.2.2 ZigBee的加密
ZigBee使用128位“高级加密标准”加密算法来保护数据的机密性和完整性。许多公开发表的出版材料中都声称ZigBee使用了“高级加密标准”作为系统中统一使用的加密算法,因为ZigBee在安全评价上,获得到安全评级都是“高安全”的评价,但是围绕着ZigBee是怎么使用“高级加密标准”加密算法的细节几乎都缄口不言或寥寥的三言两语带过。就ZigBee本身而言,简单地使用“高级加密标准”加密算法,尽管可以算是一个良好的开始,但还远远不能够称为“高安全”,因为在很多情况下,还是有大量的机会以一种不安全的方式使用“高级加密标准”加密算法的。鉴于此,我们会在下面的内容中探索这些话题,主要围绕“高级加密标准”加密算法的使用方法,讨论“ZigBee联盟”在实现这一算法时,所采用的技术是怎么样的。
1.ZigBee的密钥类型
“ZigBee规范”提供了3种类型的密钥来管理ZigBee网络安全:
·主密钥 (Master key) “主密钥”除了在“ZigBee Pro”这一最新版的规范中的协议栈中是必选的之外,在其他各版本规范中都是可选项,“主密钥”的主要作用是联合ZigBee“对称密钥的密钥建立”(Symmetric-Key Key Establishment,SKKE)进程一起来派生其他的密钥。
·网络密钥 (Network key) “网络密钥”的作用是保护“广播”和“组播”(broadcast and group)通信数据包的机密性和完整性,同时也为网络的认证提供保护。“网络密钥”通常保存在网络上的所有节点中。当一个新的ZigBee设备加入该网络的时候,或者当密钥在标准安全环境下在各个ZigBee设备之间进行更新的时候,“网络密钥”都会以明文的形式分配给这个新加入的ZigBee设备,或新更新的ZigBee设备上。这本身就与“高安全”模式是背道而驰的,因为“高安全”模式下,跨越空气这种传输介质,通过无线传输明文的密钥素材很显然是禁止的。
·链路密钥 (Link key) “链路密钥”用来保护两个设备之间“单播”[1](unicast)通信数据包的机密性和完整性。同“网络密钥”类似,在“标准安全”模式下链路密钥是以明文形式分配的。
为了进行加密以及保护ZigBee帧的完整性,所有的节点都需要“网络密钥”,而“链路密钥”只是两个通信设备之间用来保护这两个通信设备“端到端”的会话。对于某一个具体的设备来说,它的每一个会话都需要有一个“链路密钥”,所以它需要多个“链路密钥”来保护每个“端到端”会话。
2.ZigBee密钥的提供方式
在ZigBee网络的安全部署中,一个意义重大的挑战,就是设备上密钥的提供(provisioning)、更新(rotating)和撤销(revoking)过程,在“ZigBee Pro”中,一个管理员可以使用ZigBee“对称密钥的密钥建立”算法去派生“网络密钥”和“链路密钥”,但是这要求设备已经拥有了一个从“ZigBee信任中心”生成的“主密钥”,同时要求设备已经加入到了该网络中。有两种密钥生成方法可供选择:
·密钥传输 (key transport) 在这种生成方法中,“网络密钥”和“链路密钥”通过无线网络以明文形式发送到加入网络的设备中。因为密钥是以明文显示的,所以攻击者能够对网络进行侦听,从而直接捕获到“链路密钥”,进而使用“链路密钥”来解密被侦听设备之后所有的通信数据,或者冒充一个合法ZigBee设备去做其他的事情。
·预安装 (pre-installation) 管理员提前在所有的设备上预配好所需的加密密钥,就像工厂内产品出厂前的“出厂默认参数”那样。这个过程非常具有挑战性,因为要协调密钥撤销和更新的方法颇有难度,并且当网络或者链路密钥更改时,需要对每个ZigBee设备进行手动更新。
13.2.3 ZigBee的可靠性
在采用修订版本的“高级加密标准-计数模式和密码块链消息认证码”(Counter Mode with Cipher Block Chaining Message Authentication Code,AES-CCM)协议进行认证以后,ZigBee能够对每个帧进行可靠性控制。“高级加密标准-计数模式和密码块链消息认证码”协议,又可以简称为“CCM*”协议。作为修订版的CCM协议,CCM*和传统的AES-CCM协议相比,CCM*协议只用于提供“只加密”控制、“只完整性”控制,或者既提供加密,也提供完整性控制。
完整性控制能够在接收方认证帧的内容是否完整,它被称为“信息完整性检查码” (Message Integrity Check,MIC)。根据网络的安全性要求,较长的“信息完整检查码”可用于防范暴力攻击。其原因不难理解,在这种攻击中,攻击者以帧的长度和CPU周期为代价,不断地修改一个帧的内容,然后不停地重新发送这个数据帧,直到找到一个合法的“信息完整性检查码”。对于短的“信息完整检查码”,就意味着总的尝试次数,同时也是尝试时间很短;而长的“信息完整检查码”则需要总的破解次数和破解时间都很长。值得一提的是:完整性保护是ZigBee网络中的一个可选项目,这是因为在一些情况下,根本就不需要采用“信息完整检查码”进行完整性的检测。
13.2.4 ZigBee的认证
有三种方法可以对刚加入ZigBee网络的设备进行身份认证:一种是通过“访问控制列表”(Access Control List,ACL)模式进行“介质访问控制层”地址有效性的验证,这种方式又称“ACL模式”,还有两种“信任中心”(Trust Center)认证,主要用于“标准安全模式”和“高安全模式”。
在ACL模式下,一个节点想要识别某个他想进行通信的其他某个设备,这个节点就会根据那个设备的“介质访问控制层”地址进行区分。但这也意味着每个节点都要维护一份授权设备列表来实现这种安全模型。因为攻击者需要知道“网络密钥”或者“链路密钥”才能够冒充一个ZigBee设备,所以如果我们将这个列表的安全性与“CCM*”协议本身特有的完整性保护机制配合使用时,ACL模式就能够提供相当可靠的设备身份认证等级了。尽管ACL模式有时并不需要使用CCM*完整性进行保护,但上面的说法仍然不失为一种好办法,因为ACL模式的重点在于需要在每个设备上维护一份“介质访问控制层”地址列表,这对网络运行带来了一定的难度。比如当有一个新的设备加入网络时,每次都需要所有的设备更新自己的设备列表,同时也需要额外的“非易失性随机访问存储器”内存和常规内存RAM来保存和处理这个列表。
在“标准安全模式”下的网络中,当一个节点被允许加入到一个网络之前,“信任中心”必须明确地授权一个节点具有访问权限,授权方式就是给这个节点指定一个密钥。当一个“ZigBee路由器”节点和一个“ZigBee终端设备”节点开始网络加入的过程时,这个ZigBee设备在与其他ZigBee设备通信之前,将会等待接收来自于“信息中心”发过来的一个密钥确认信息。如果在这个ZigBee设备上已经生成了一个“网络密钥”,比如这个网络采用的是密钥“预安装”机制,那么“信任中心”会向节点发送一个全0的“网络密钥”。这个全0的密钥类似于摆设,是个临时性的密钥,但至少表示这个ZigBee设备可以在网络中与其他设备进行通信了。如果节点没有创建“网络密钥”,“信任中心”会采用密钥“传输机制”模式,以明文形式为它分配一个密钥。在接收到密钥后,这个新加入的ZigBee设备节点就能够自由地同网络中的其他ZigBee设备进行通信了。如果节点没有通过“信任中心”的认证,比如它的“介质访问控制层”地址不满足“信任中心”的“访问控制列表”中对“介质访问控制层”地址的要求,那么“信任中心”就会向这个ZigBee设备节点发送一条断开信息。
⊗ 注意
在“标准安全模式”下,ZigBee设备是不会相互进行身份认证。需要认证的ZigBee设备节点只会接受“信任中心”的身份认证,认证的方式就是“信息中心”向它发送“网络密钥”,而这个ZigBee设备则不会通过针对网络的身份进行任何合法性检查。所以,如果一个ZigBee设备,只要使用相同的“个人局域网”的ID来冒充一个合法的网络,那么就很容易吸引其他被攻击的ZigBee设备加入到这个网络中。
在“高安全模式”下的ZigBee网络中,“网络密钥”不能够以明文方式发送。当一个ZigBee设备节点要进行认证时,“信任中心”和这个ZigBee设备节点会使用“主密钥”,然后通过“对称密钥的密钥建立”算法来派生“网络密钥”。如果这个ZigBee设备节点不知道“主密钥”的话,“信任中心”会通过明文方式给这个ZigBee设备节点发送“主密钥”,这就在ZigBee网络中为黑客创造了一个可以侦听的漏洞。
“对称密钥的密钥建立”算法的建立过程共需要四个步骤,其主要目的就是要在发起方(initiator)和回应方(responder)之间使用一种标准的“质疑-响应”机制,然后在两个设备上相互验证“主密钥”的知识是否正确,而不会泄露“主密钥”本身。在“对称密钥的密钥建立”算法的“四次握手”的操作完成之后,节点和“信任中心”就能够派生出“链路密钥”,通过“链路密钥”可以用来保护之后由“信息中心”向这个节点传送“网络密钥”时,二者之间的通信安全了。
至此,我们检验了ZigBee的运作方式和功能,并且详细地围绕协议的操作,介绍了一些使用的安全和识别细节。下一步,我们将看一些有用的网络工具,这些工具基本上都是专为攻击ZigBee网络而设计的。
- 其实本来通信中没有“单播”这种说法,只是因为有了“广播”(一对所有)和“组播”(一对多)这些名词后,为了名称上的统一,而将正常的一对一通信改称为“单播”。并且该词只在有“广播”和“组播”出现的时候使用。——译者注
本书评论