ZigBee 安全探究

0x02 ZigBee安全机制


(注:对于本节内容,可能在新版ZigBee协议标准中会有所变化,请以新版为准。)

ZigBee主要提供有三个等级的安全模式:

1、 非安全模式:为默认安全模式,即不采取任何安全服务,因此可能被窃听;

2、 访问控制模式:通过访问控制列表(Access Control ListACL,包含有允许接入的硬件设备MAC地址) 限制非法节点获取数据;

3、 安全模式:采用AES 128位加密算法进行通讯加密,同时提供有0,32,64,128位的完整性校验,该模式又分为标准安全模式(明文传输密钥)和高级安全模式(禁止传输密钥)。   在一些模式里面又分有多种安全子级,整体来看可以直接参考Wireshark里面提供的安全级别(Edit=>Preferences=>Protocols=>ZigBee NWK)【如图3】,里面也支持预设密钥用于解析数据包。

如果使用安全模式,那么它会提供3种类型的密钥用于保证通讯安全:

主密钥(Master Key):用于配合ZigBee对称密钥的建立(SKKE)过程来派生其它密钥,也就是说,设备要先拥有信任中心(ZigBee网络中有且仅有的一个可信任设备,负责密钥分发与管理,以及网络的建立与维护)生成的主密钥才能派生网络密钥和链路密钥给其它设备,它可以由信任中心设置,也可基于用户访问数据,比如个人识别码(PIN),口令或密码等信息;

网络密钥(Network Key):用于保护广播和组数据的机密性和完整性,同时也为网络认证提供保护,被网络中的多个设备所共享,仅在广播消息中使用;

链接密钥(Link Key):用于保护两个设备之间单播数据的机密性和完整性,仅通讯中的2个设备持有,而单个设备需要多个链接密钥来保护每个端对端会话。

在ZigBee Pro(更高安全级别的ZigBee版本)中,管理员使用对称密钥建立方法来派生设备上使用的网络密钥和链接密钥,但是这要求设备拥有从信任中心生成的主密钥,同时要求设备已经加入网络。关于密钥生成的方法主要有两种方式:

1、 密钥传输:采用此方法后,网络密钥与链接密钥可能以明文形式发送到网络中的其它设备,因此密钥有可能被窃听到,从而解密出所有通讯数据,或者伪造合法设备去控制相应智能设备。为了避免密钥明文传输,以及实现不同厂商设备之间的兼容性,协议还提供有默认的信任中心链接密 (TCLK:0x5A 0x69 0x67 0x42 0x65 0x65 0x41 0x6C 0x6C 0x69 0x61 0x6E 0x63 0x65 0x30 0x39)去加密传输的密钥,这就引入新的安全风险。此次BlackHat大会的ZigBee Exploited议题也正是通过该默认密钥去ZLL灯泡进行攻击,实现远程控制。

2、 预安装:在设备上直接配置好密钥,如果需要更改,就需要重新刷设备固件,虽然这种方式更加安全可信,但也是最繁琐复杂的方式。此次360安全团队在Defcon大会上演示的正是对某种智能灯泡的固件进行逆向,从中找到密钥,从而实现对智能设备的控制。

0x03 安全风险


1、窃听攻击

当ZigBee采用非安全模式时,对传输数据将不作加密处理,因此可能被外部窃取到通讯数据【如图4】。

2、密钥攻击

由于在密钥传输过程中,可能会以明文形式传输网络/链接密钥【如图5】,因此可能被窃取到密钥,从而解密出通讯数据,或者伪造合法设备。也有可能通过逆向一些智能设备固件,从中获取密钥进行通讯命令解密,然后伪造命令进行攻击。

有些联合厂商在ZigBee基础上作了改进,比如ZigBee Light Link(ZLL)全球互联照明标准(源自2014年第二届家电节能与智能化技术大会)就采用ZLL密钥对传输密钥进行一次AES 128位加密再发出去【如图6】,以避免密钥泄露的情况,该ZZL密钥是ZigBee联盟在产品认证后授予的。

0x04 总结


目前针对ZigBee协议的攻击,主要还是围绕密钥安全问题进行攻击。虽然ZigBee的流行度和使用范围并没有达到像WiFi、蓝牙那样普遍,但随着此次小米智能家庭套装的引用,可能会带动一波厂商使用到智能设备之中,因此有必要继续关注下ZigBee在智能设备中的安全问题。

0x05 参考资料

1、 ZigBee Specification Document 053474r17:http://home.deib.polimi.it/cesana/teaching/IoT/papers/ZigBee/ZigBeeSpec.pdf

2、 KillerBee - Practical ZigBee Exploitation Framework

3、 Security Issues And Vulnerability Assessment Of ZigBee Enable Home Area Network Implementations

4、 ZigBee技术及其安全性研究_虞志飞

5、 ZigBee Exploited (BlackHat USA 2015):http://cognosec.com/zigbee_exploited_8F_Ca9.pdf

6、 Take Unauthorized Control Over ZigBee Devices(Defcon 23):https://media.defcon.org/DEF%20CON%2023/DEF%20CON%2023%20presentations/Speaker%20&%20Workshop%20Materials/Li%20Jun%20&%20Yang%20Qing/DEFCON-23-Li-Jun-Yang-Qing-I-AM-A-NEWBIE-YET-I-CAN-HACK-ZIGB.pdf

7、 docs-09-5378-00-0mwg-zigbee-security

8、 docs-05-3765-00-0mwg-zigbee-security-layer-technical-overview

9、ZigBee 3.0 – The Open, Global Standard for the Internet of Things

来自 @腾讯安全平台部

ZigBee 安全探究的更多相关文章

  1. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  2. [原] KVM 虚拟化原理探究(1)— overview

    KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...

  3. [原] KVM 虚拟化原理探究 —— 目录

    KVM 虚拟化原理探究 -- 目录 标签(空格分隔): KVM KVM 虚拟化原理探究(1)- overview KVM 虚拟化原理探究(2)- QEMU启动过程 KVM 虚拟化原理探究(3)- CP ...

  4. [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化

    KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...

  5. [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化

    KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...

  6. [原] KVM 虚拟化原理探究(4)— 内存虚拟化

    KVM 虚拟化原理探究(4)- 内存虚拟化 标签(空格分隔): KVM 内存虚拟化简介 前一章介绍了CPU虚拟化的内容,这一章介绍一下KVM的内存虚拟化原理.可以说内存是除了CPU外最重要的组件,Gu ...

  7. [原] KVM 虚拟化原理探究(3)— CPU 虚拟化

    KVM 虚拟化原理探究(3)- CPU 虚拟化 标签(空格分隔): KVM [TOC] CPU 虚拟化简介 上一篇文章笼统的介绍了一个虚拟机的诞生过程,从demo中也可以看到,运行一个虚拟机再也不需要 ...

  8. [原] KVM 虚拟化原理探究(2)— QEMU启动过程

    KVM 虚拟化原理探究- QEMU启动过程 标签(空格分隔): KVM [TOC] 虚拟机启动过程 第一步,获取到kvm句柄 kvmfd = open("/dev/kvm", O_ ...

  9. Grunt(页面静态引入的文件地址的改变探究)-V2.0

    相关插件的引用: grunt-usemin  对页面的操作 grunt-contrib-cssmin  压缩css load-grunt-tasks 瘦身gruntfile grunt-rev给md5 ...

随机推荐

  1. postgresql修炼之道学习笔记(1)

    好好学习吧. 本笔记 仅作为摘要记录 前两章,主要是数据库对比和安装等. 对比,就比多说了,总是和别人比较,会显得自己身价低,呵呵. 安装也有很多文章,不多说. 第二章提到了一些简单的配置, 其在 d ...

  2. Leetcode: Sentence Screen Fitting

    Given a rows x cols screen and a sentence represented by a list of words, find how many times the gi ...

  3. zjuoj 3780 Paint the Grid Again

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3780 Paint the Grid Again Time Limit: 2 ...

  4. WebForm Repeater使用

    Repeater: HeaderTemplate: 在加载开始执行一遍 ItemTemplate : 有多少条数据,执行多少遍 FooterTemplate :在加载最后执行一遍 Alternatin ...

  5. 创建 MIME 类型////////////zzz

    用 Apache 创建 MIME 类型 在 Apache 里, MIME 类型和文件扩展名之间的映射是被存放在配置文件 "apache根目录/conf/mime.types" 里的 ...

  6. 收集一些关于OI/ACM的奇怪的东西……

    一.代码: 1.求逆元(原理貌似就是拓展欧几里得,要求MOD是素数): int inv(int a) { if(a == 1) return 1; return ((MOD - MOD / a) * ...

  7. 安装hive+mysql

    1.源码安装mysql 以root用户首先安装libaio-0.3.104.tar.gz tar zxvf libaio-0.3.104.tar.gz cd libaio-0.3.104 make p ...

  8. AppSettings从数据库读取

    /// <summary> /// 提供对配置信息的访问 /// </summary> public static class AppSettings { /// <su ...

  9. struts 异常机制

    1.try-catch 在Action中通过try-catch捕获异常,在catch中返回字符串, 通过返回的字符串在Action的result元素中进行匹配,最终返回响应的页面 2. 局部异常映射 ...

  10. javascript 创建 div

        纯JAVASCRIPPT创建 (1):document.getElementById("要创建DIV位置的ID").innerHTML='<div>div里面的 ...