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. FORTRAN 90标准函数(一) (转)

    符号约定: l  I代表整型;R代表实型;C代表复型;CH代表字符型;S代表字符串;L代表逻辑型;A代表数组;P代表指针;T代表派生类型;AT为任意类型. l  s:P表示s类型为P类型(任意kind ...

  2. spring boot 添加jsp支持注意事项

    1.一定要使用war包<packaging>war</packaging>2.将provided改为compile,具体如下: <dependency> <g ...

  3. Linux下make与makefile

    make 用来解析 makefile 文件 make 的选项:-d   显示调试信息-f 文件  默认是从 makefile 或 Makefile 中读取依赖信息,用该选项可更改文件-h   显示所有 ...

  4. 当java出现异常,应如何进行处理

    Java异常是一个描述在代码段中发生的异常(也就是出错)情况的对象.当异常情况发生,一个代表该异常的对象被创建并且在导致该错误的方法中被抛出(throw).该方法可以选择自己处理异常或传递该异常.两种 ...

  5. 【数学】Jersey Politics

                                                            Jersey Politics Time Limit: 1000MS   Memory ...

  6. [转] 经典SQL练习题

    原题目来自qaz13177_58_CSDN博客 http://blog.csdn.net/qaz13177_58_/article/details/5575711/#sql 只是更新个人答案供参考 表 ...

  7. qt qml fuzzyPanel 毛玻璃效果

    毛玻璃效果,用qml来写代码真是简短,大爱qml:) [下载地址]http://download.csdn.net/detail/surfsky/8426641 [核心代码] Rectangle{ c ...

  8. phpcms V9 内容模型管理

    [1]理解模型 模型,系统知识的抽象表示.既然抽象了,那就得脑补一下.大家都是面向对象设计的专业人员,类就很抽象的,对比类的定义想象一下模型的概念. 举个例子,一般新闻类的信息,都具有标题.内容.作者 ...

  9. Razor语法&ActionResult&MVC

    Razor代码复用 mvc 4 razor语法讲解和使用 了解ASP.NET MVC几种ActionResult的本质:EmptyResult & ContentResult 了解ASP.NE ...

  10. sql逻辑执行顺序

    要知道SQL语句,我想我们有必要知道SQL Server查询分析器怎么执行我们的SQL语句的,我们很多人会看执行计划,或者用Profiler来监视和调优查询语句或者存储过程慢的原因,但是如果我们知道查 ...