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. 九十分钟极速入门Linux——Linux Guide for Developments 学习笔记

    系统信息:CentOS 64位. 一张图了解命令提示符和命令行 一些实用小命令 mkdir(make directory,创建目录).ls(list,列出当前目录下的内容).rm(remove,删除文 ...

  2. JS调用OC方法并传值,OC调用JS方法并传值////////////////////////zz

     iOS开发-基于原生JS与OC方法互相调用并传值(附HTML代码)     最近项目里面有有个商品活动界面,要与web端传值,将用户在网页点击的商品id 传给客户端,也就是js交互,其实再说明白一点 ...

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

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

  4. extjs 学习小窍门

    一.从form中获取field的三个方法: 1.Ext.getCmp('id'); 2.FormPanel.getForm().findField('id/name'); 3.Ext.get('id/ ...

  5. CSS 盒子

    转载自:http://www.zblog.us/programing/web/css/cssbox-introduce-2.html 盒子模型定义 如果CSS对HTML文档元素生成了一个描述该元素在H ...

  6. UILabel内容模糊

    在非retina的ipad mini的屏幕上,一个UIlabel的frame的origin值如果有小数位数(例如0.5),就会造成显示模糊,所以最好使用整数的值作为origin坐标.

  7. 判断是否IPv6网络

    bool isIPV6Net(const std::string ip_v4, std::string& out_ip) { bool is_v6 = false; struct addrin ...

  8. PHP获取时间、时间戳的各种格式

    1.获取当前时间方法date() 很简单,这就是获取时间的方法,格式为:date($format, $timestamp),format为格式.timestamp为时间戳--可填参数. 2.获取时间戳 ...

  9. Linux_用户级_常用命令(1):ls

    开篇语:懒是人类进步的源动力 本文原创,专为光荣之路公众号所有,欢迎转发,但转发请务必写出处! Linux常用命令第1集包含命令:ls 一.何为常用命令 人和系统交互的指令集合,构成了shell.Sh ...

  10. FunsionCharts图标控件点击

    1.点击执行js 在页面中添加点击chart后需要触发的js事件: <script>        functionmyJS(myVar){          window.alert(m ...