Zigbee安全漏洞分析

1. 摘要

ZigBee被认为是一种安全的通信协议。它的安全体系结构是对IEEE 802.15.4标准提供的安全服务的补充。ZigBee提供的安全服务范围包括:安全密钥建立、安全密钥传输、通过对称加密的帧保护以及安全设备管理。

但是,其安全功能基于某些固有假设:

  • ZigBee采用“开放信任”模型;也就是说,协议栈层相互信任,并且发起帧的层负责最初对其进行保护。
  • 安全服务仅以密码方式保护不同设备之间的接口。
  • 同一设备上不同堆栈层之间的接口以非加密方式排列。
  • 密钥传输过程中不会无意间泄露出秘密密钥。(例外是在新设备的预配置加入期间,其中单个密钥可能不受保护地发送。)
  • 随机数生成器的高可用性
  • 防篡改硬件的高可用性。

本文探讨了ZigBee标准提供的安全模型,用于安全通信的各种密钥,ZigBee建议的密钥管理方法以及其他固有的安全机制,例如身份验证,重播保护等。

2. Zigbee 协议

Zigbee网络结构图如下:
Zigbee网络结构图

  • Coordinator:ZigBee协调器是负责建立,执行和管理整个ZigBee网络的设备。它负责配置网络的安全级别并配置信任中心的地址(此地址的默认值是ZigBee协调器自己的地址,否则ZigBee协调器可以指定备用信任中心)。ZigBee协调器还维护当前关联设备的列表,并促进对孤立扫描和重新加入处理的支持,以使先前关联的设备能够重新加入网络。每个网络只有一个协调器,因此,它永远无法进入睡眠状态(网络中可能没有协调器)。协调器还可以根据需要兼作路由器
  • Router:ZigBee路由器是一个中间节点设备,负责在终端设备之间或终端设备与协调器之间路由数据包。如果在网络上启用了安全性,则路由器需要信任中心的许可才能加入网络,并且还可以兼作终端设备。在某些情况下,路由器可以允许其他路由器和终端设备加入网络,并将维护当前关联设备的列表,并促进对孤立扫描和重新加入处理的支持,以使先前关联的设备能够重新加入网络。由于路由器链接网络的多个部分,因此它们无法进入睡眠状态。
  • End Device:ZigBee终端设备通常是监视和收集环境数据的传感器节点设备。与路由器或协调器不同,终端设备是低功率或电池供电的。因此,如果没有要监视的活动,只要路由器或协调器不加倍作为终端设备,它们就可以休眠一定时间以节省能量。终端设备通常不会路由流量或允许其他节点加入网络,只要路由器或协调器不加倍作为终端设备。

3. Zigbee安全模型

ZigBee支持两种类型的安全模型,如下图所示,主要区别在于它们如何允许新设备进入网络以及如何保护网络上的消息。
Zigbee安全模型
集中式安全模型:复杂但最安全的模型,涉及第三个逻辑设备;信任中心(网络协调者,例如智能家居网关)。信任中心负责:

  • 配置和验证加入网络的路由器和终端设备
  • 生成用于通过网络进行加密通信的网络密钥
  • 定期或根据需要切换到新的网络密钥。因此,如果攻击者获取了网络密钥,则该密钥在到期之前将具有有限的生存期
  • 当每个设备加入网络以与信任中心安全通信时,为每个设备建立唯一的信任中心链接密钥
  • 维护网络的整体安全性

分布式安全模型:简单,但是安全性较低。该模型仅支持路由器和终端设备。路由器形成分布式网络,并负责注册其他路由器和终端设备。路由器向新加入的路由器和终端设备发布网络密钥(用于加密消息)。网络中的所有节点都使用相同的网络密钥来加密消息。同样,所有节点在注册入网络之前都已预先配置了一个链接密钥(用于加密网络密钥)。

4. 安全密钥

4.1 密钥类型

ZigBee标准中使用三种类型的密钥(每种密钥长度为128位)。

网络密钥:用于广播通信,由NWK和ZigBee的APL应用。每个节点都需要网络密钥,以便与网络上的其他设备进行安全通信。信任中心将生成网络密钥,并将其分发给网络上的所有设备。网络上的设备通过密钥传输(用于保护传输的网络密钥)或预安装来获取网络密钥。有两种不同类型的网络密钥:标准(公开发送网络密钥)和高安全性(网络密钥已加密)。网络密钥的类型决定了网络密钥的分发方式。并可以控制如何初始化网络帧计数器。但是,其类型不影响消息的保护方式。

链接密钥:用于单播通信,并由ZigBee堆栈的APS应用。设备通过密钥传输(密钥加载密钥用于保护传输的链路密钥),密钥建立(基于“主”密钥和其他网络参数)或预安装(例如,在安装过程中)获取链路密钥。出厂安装)。通常,与信任中心相关的链接密钥是使用带外方法预先配置的,例如包装中的QR码,而节点之间的链接密钥由信任中心生成并在使用之前使用网络密钥加密发送到节点。

ZigBee定义了两种类型的链接密钥:全局和唯一(可以依次为两种类型:第一种是信任中心链接密钥;其中密钥在信任中心和设备之间建立,第二种是在两个设备之间建立的应用程序链接密钥在信任中心以外的网络中)。链接密钥的类型确定设备如何处理各种信任中心消息(APS命令),包括是否应用APS加密。

此外,每个节点还可以具有以下预配置的链接密钥,这些链接密钥将用于导出信任中心链接密钥(通过基于证书的密钥建立协议(如果启用了SE安全性),APS请求密钥方法来进行导出 ,Touchlink调试或通过使用Matyas-Meyer-Oseas哈希函数):

  • 一个默认的全局信任中心链路密钥由ZigBee联盟定义。它的默认值为5A 69 67 42 65 65 41 6C 6C 69 61 6E 63 65 30 39(ZigBeeAlliance09),并且如果在连接时应用程序未指定其他链接密钥,则设备会使用或支持该默认值。
  • 一个分布式安全的全球链路密钥,用于从同一厂商的设备之间交互的制造者特有的密钥。
  • 安装代码是预配置的链接密钥。所有ZigBee设备都可以包含唯一的安装代码,即由16位循环冗余校验(CRC)保护的随机128位数字。信任中心可能要求每个新设备使用唯一的安装代码来加入集中式安全网络,并且安装代码必须与先前带外输入到信任中心的代码(即QR码)匹配。验证安装代码后,加入设备和信任中心将使用Matyas-Meyer-Oseas(MMO)哈希函数从安装代码中获得唯一的128位信任中心链接密钥。
  • Touchlink预配置的链接ley。

主密钥:构成两个设备之间长期安全性的基础,并且仅由APS使用。它的功能是对对称密钥密钥建立协议(SKKE)中两个节点之间的链接密钥交换保密。设备通过密钥传输(密钥加载密钥用于保护传输的主密钥),预安装或用户输入的数据(例如PIN或密码)获取主密钥。

4.2 密钥管理

ZigBee的一个特点是,如上所述,它具有多种关键管理机制:

预安装:制造商将密钥安装到设备本身中。用户可以使用设备中的一系列跳线(在预安装了多个密钥的设备中)选择一个已安装的密钥。

密钥建立:这是基于主密钥生成链接密钥的本地方法。ZigBee网络的不同安全服务使用从单向功能派生的密钥(以链接密钥作为输入),以避免由于服务之间不必要的交互作用而导致的安全泄漏。使用不相关的密钥可确保对不同安全协议的执行进行逻辑隔离。该密钥建立是基于 SKKE(对称密钥密钥建立) 协议的。通信所涉及的设备必须拥有主密钥,该主密钥可能是通过预安装或密钥传输或用户输入获得的。

密钥传输:网络设备向信任中心发出请求,要求将密钥发送给它。此方法适用于在商业模式下请求三种密钥中的任何一种,而在住宅模式下,信任中心仅保留网络密钥。信任中心使用密钥装入密钥来保护主密钥的传输。

另外,在集中式模型中,可以使用基于证书的密钥建立协议(CBKE)来分发密钥。CBKE提供了一种机制,可以根据制造时存储在两个设备中并由证书颁发机构(CA)签名的证书与信任中心协商对称密钥。

5. ZigBee Stack安全措施

在这里插入图片描述
IEEE 802.15.4 提供了抵抗来自其他网络的干扰的鲁棒性,并将具有 128位密钥长度(16字节)的AES (高级加密标准)用于:

  • 数据安全性 –通过加密数据有效负载和
  • 数据完整性 –使用 消息完整性代码(MIC)或消息认证代码(MAC) 附加到要发送的消息中来实现。此代码确保MAC报头和附加的有效载荷数据的完整性。它是通过使用128位密钥对IEEE MAC帧的一部分进行加密来创建的)

在IEEE 802.15.4 MAC帧中,仅当打开了“帧控制字段”的“已启用安全性”子字段时,才启用“辅助安全标头”。这个特殊的标头包含3个字段:

  • 安全控制指定网络提供的保护类型。这是设置全局安全策略的地方。安全级别的选择确定密钥的长度以及要加密的内容。即,每个安全级别提供一定程度的帧加密和完整性检查。ZigBee定义了可供NWK和APS层使用的8种不同的安全级别,如下图所示。
    在这里插入图片描述
  • 帧计数器是由当前帧的源给定的计数器,以防止消息受到重播保护。
  • 密钥标识符指定了解节点用于通信的密钥类型所需的信息。

尽管IEEE 802.15.4提供了安全措施,但是它没有指定必须如何管理密钥或要应用的身份验证策略的类型。这些问题由ZigBee管理。ZigBee标准支持以下可选的安全服务:

  • 加密/解密 :ZigBee帧可以选择使用安全套件AES-CCM *保护,以提供数据保密性,数据身份验证和数据完整性。AES-CCM *是经过修改的CCM模式(带有CBC-MAC的计数器)的AES(高级加密标准)的一个较小变体。
  • 重放保护:ZigBee网络中的每个节点都包含一个32位帧计数器,该计数器在每次数据包传输时都会增加。每个节点还跟踪其连接到的每个设备(节点)的前一个32位帧计数器。如果节点从邻居节点接收到的帧计数器值与先前接收到的帧计数器值相同或更小的数据包,则该数据包将被丢弃。此机制通过跟踪数据包并将其丢弃(如果节点已接收到它们)来启用重播保护。帧计数器的最大值可以为0XFFFFFFFF,但是如果达到最大值,则无法进行传输。帧计数器唯一重置为0的时间是在更新网络密钥时。
  • 设备认证:ZigBee标准支持设备认证和数据认证。设备身份验证是确认加入网络的新设备为真实设备的行为。新设备必须能够在给定时间内接收网络密钥并设置适当的属性,才能视为已通过身份验证。设备身份验证由信任中心执行。在住宅和商业模式下,身份验证过程有所不同。
  • 安全的空中(OTA)固件升级:OTA更新允许制造商添加新功能,修复其产品中的缺陷以及在发现新威胁时应用安全补丁。但是,如果协议未提供足够的保护,或者设备制造商未使用所有可用的防护措施,则OTA更新也可能构成潜在的安全漏洞。ZigBee设备和关联的硅平台提供了多层安全性,可以在现场更新设备并确保未恶意修改更新的代码映像。
  • 基于逻辑链接的加密:另一个关键安全工具是能够在网络中的一对设备之间创建应用程序级安全链接。通过在一对设备之间建立一组唯一的AES-128加密密钥来进行管理。这允许在网络中的任何两个设备之间建立逻辑,安全的链接,从而支持网络中的一对设备与许多其他设备之间的“虚拟专用链接”。此措施限制了攻击者通过拦截或注入其他设备将要执行的消息来获取网络密钥的能力。
  • 运行时密钥更新:定期或在需要时,信任中心会主动更改网络密钥。信任中心会生成一个新的网络密钥,并使用旧的网络密钥对其进行加密,从而将其分布在整个网络中。在更新后,所有设备将在短时间内继续保留旧的网络密钥,直到网络上的每个设备都已切换到新的网络密钥。此外,设备在收到新的网络密钥后会将其帧计数器初始化为零。
  • 网络干扰保护:在低成本ZigBee节点中,由于成本或节点大小的限制,可能无法选择使用带选择滤波器来保护网络免受干扰。但是,IEEE 802.15.4和ZigBee网络的基本属性(例如低RF传输功率,低占空比和CSMA / CA信道访问机制)有助于减少ZigBee无线网络的存在对附近其他系统的影响,反之亦然。反之亦然。有两种方法可以提高ZigBee网络的共存性能:协作和非协作。

6. Zigbee 安全漏洞

密钥分发嗅探攻击

密钥分发攻击主要是在新节点入网向信任中心请求密钥时对密钥进行窃听,有多种工具都可以用于窃听,例如Killerbee、Ubiqua、Packet Sniffer等。当密钥采用协调器分发而不是预置在设备中时,分发密钥很可能被嗅探窃取,攻击者可以利用获取的密钥对通信解密。

  • 被动式密钥嗅探是藉由ZigBee设备加入安全网络的流程,会有传输密钥的过程,因此攻击者可以监听ZigBee网络的流量,并等待新设备加入网络,借此嗅探到传输密钥的封包。
  • 主动式密钥嗅探是针对信任中心重新加入(Trust Center Rejoin)的资安弱点来取得密钥,信任中心重新加入是当设备可能没有目前使用的网路密钥时(例如:网络密钥更新时,设备没有收到。),因此需要在没有网络层安全性的情况下发送rejoin指令,而且允许设备能够取得目前的网络密钥。根据上述的流程,攻击者可能藉由信任中心重新加入的资安弱点,轻易的伪造此流程主动的获取传输密钥的封包。

从设备中获取密钥

如果采用的是密钥预置的方式或者密钥派生的方式部署密钥,那么预置的网络密钥或者主密钥需要与固件一起存储在设备的ROM中,而这些密钥是网络中的所有设备共享的,如果能够读出设备的固件就可以设法找到密钥。

篡改攻击

修改Frame Counter大于当前最新的数据包的Frame Counter,篡改数据后使用链接密钥重新加密,发送出去。

拒绝服务攻击

EPID冲突、媒体存取控制位址冲突、最大Frame Counter、不安全的Leave

常用攻击工具: KillerBee,是攻击ZigBee和IEEE
802.15.4网络的框架和工具。使用killerBee工具和一个兼容的IEEE 802.15.4无线接口,你就能窃取zigbee网络流量,重放流量,攻击密码系统等等。使用KillerBee框架,你能构建你自己的工具,定义zigbee
fuzzing,模仿和攻击终端设备,路由器设备和协调器设备等等。可以在GitHub下载使用Killerbee

7. 总结

尽管ZigBee在设计时就考虑到安全性,但仍需要做出权衡以保持设备的低成本,低能耗和高度兼容性。它允许在同一设备上不同层之间重复使用相同的密钥材料,并允许在设备到设备的基础上而不是在成对的特定层(甚至是成对的应用程序)之间实现端到端的安全性)在两个通讯设备上。此外,为了实现设备的互操作性,ZigBee对给定网络上的所有设备以及设备的所有层使用相同的安全级别。但是,这些措施不可避免地会导致安全风险。因此,开发人员有责任解决这些问题,并包括检测和处理错误,丢失密钥同步,定期更新密钥等的策略。

猜你喜欢

转载自blog.csdn.net/qq_32505207/article/details/107682978