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. UIBUTTON titlelabel.text 不显示

    button.titlelabel.text=@"查询";设置后运行发现没事正确显示. 查找后原来UIButton分状态的,textLabel不管用 [button setTitl ...

  2. SourceTree如何连接ssh的仓库地址,这里记录的是客户端需要做的事

    1. 2. 打开命令行以后输入ssh-keygen -t rsa -C "example@example.com"',这个地方输入的是你注册gitlab所使用的邮箱.按回车,之后还 ...

  3. 关于baseflight cleanflight naze32不能解锁的办法

    需要修改源代码,重新编译.. mcfg.mincheck = 1150; mcfg.maxcheck = 1850; 当然,这是笨方法.还有个办法设置解锁检查的最大最小油门 在控制台,也就是 CLI那 ...

  4. linux下flash的安装

    linux的初学者可能会遇到各种各样的问题,其中的问题就有一个,linux下的flash插件怎么安装呢? 首先前往flash官网下载好对应的文件,然后提取里面的一个叫做 libflashplayer. ...

  5. Android原生(Native)C开发之一:环境搭建篇

    引用:http://blog.sina.com.cn/s/blog_4a0a39c30100auh9.html Android是基于Linux的操作系统,处理器是ARM的,所以要在Linux或Wind ...

  6. Mvc4中使用Spring.Net实现IOC和DI

    一个Hello类,一个IHello接口 1.引用dll 2.修改Global文件 (SpringMvcApplication) 3.控制器添加属性 4.WebConfig配置 5.Spring.xml ...

  7. uexQQ插件学习心得

    uexQQ插件学习心得 uexQQ插件的作用:通过qq可以分享图文,音乐,应用到相应的qq空间.支持手机客户端分享和手机webQQ分享.下面我们就来看一看他的一些方法. 我们先说一下分享的步骤,这个步 ...

  8. Js 拖动效果

    <!DOCTYPE html> <html> <head> <meta charset="utf8"> <title>j ...

  9. C#:复杂条件判断类型(练习)

    /// <summary> /// 文件类型 /// </summary> public enum FileType { Courseware, //"课件" ...

  10. android 补间动画和Animation

    介绍: 补间动画是一种设定动画开始状态.结束状态,其中间的变化由系统计算补充.这也是他叫做补间动画的原因. 补间动画由Animation类来实现具体效果,包括平移(TranslateAnimation ...