KillerBee 框架使用(二)
ZigBee简介
ZigBee是一种无线通信网络标准,广泛用于IoT设备中,这些设备专为低数据传输率的低功耗使用场景而设计。 ZigBee协议可用于多种设置,包括智能家居,楼宇自动化,工业控制设备(ICS),智能医疗保健等。ZigBee联盟是一个由多家公司组织联合而成的协会,它为低功耗无线物联网(IoT)创建、维护和提供了开放的全球标准。所以,这也允许各种ZigBee设备相互交互。例如,给定制造商的启用ZigBee的智能插座可以与其他制造商的ZigBee智能灯泡进行通信。
ZigBee网络可以具有各种设备,如:
- 协调器:整个网络中的单个设备,负责许多操作,例如选择正确的通道,创建网络,形成安全设置,处理身份验证,甚至以后充当路由器。
- 路由器:为ZigBee网络上存在的各种网络设备提供路由服务。
- 终端设备:执行诸如读取温度的操作或诸如打开灯的操作。
终端设备大多数时候都处于睡眠状态以节省功耗,并且仅在读取或写入请求时才唤醒。在讨论ZigBee网络中的基本概念时,还必须了解ZigBee中的寻址模式,这一点很重要。 ZigBee设备将具有两个地址-一个来自802.15标准,这是一个全球唯一的64位数字,一个是16位的NWK地址。
要与设备通信,寻址需要包含三个信息部分:
- 目标设备的地址。
- 端点号。
- 群集ID。
但是,要发送广播,所有设备所需要做的就是将广播数据包发送到地址0xFFFF,ZigBee网络上存在的所有设备都将接收该数据包。
ZigBee设备中总共使用了16个信道,因此,当我们研究ZigBee设备通信时,我们首先需要弄清楚该设备在哪个信道上运行,然后在该特定信道上捕获ZigBee数据包。
搭建ZigBee环境
CC2530是TI公司开发的一款专门用于无线传感器网络中进行数据传输的集成芯片,可以用于2.4-GHz IEEE802.15.4、ZigBee 和RF4CE 应用的一个真正的SoC解决方案。
硬件:
基于CC2530模块的ZigBee开发板,CC-DEBUGGER编程器:
软件:
Smartrf Flash Programmer,IAREmbedded Workbench IDE,CH340 驱动,CC-DEBUGGER 驱动
通过IAR打开开发代码,使用CC-DEBUGGER 连接开发板,选择 CoodinatorEB(作为协调器) , 下载到开发板 A(协调器), 如:
接下来选择 EndDeviceEB(终端) , 下载到开发板 B,如:
在继电器的位置接在上个小灯, 通过协调器的 key1 去控制这个小灯的状态变化;
注:协调器(左),终端设备(右)
也可以协调器连接PC串口工具,发送 on 或者 off 可以实现开灯和关灯
KillerBee框架
现在,我们搭建好了ZigBee测试环境,作为下一步的攻击目标。为此,我们使用KillBee的测试框架工具,killerBee框架的安装及使用在上一章做了简单的介绍,这是RiverLoop Security开发的开源工具,用于帮助评估和利用基于ZigBee的设备。 。
Atmel RzRaven USB Stick
KillerBee支持多种硬件设备,例如Atmel RzRaven USB Stick,APIMote,MoteIV Tmote Sky,TelosB mote和Sewino Sniffer。与之前不同使用的APIMote,现在我们使用Atmel RzRaven USB记忆棒,如图所示。
在开始使用KillerBee和Rz USBstick评估基于ZigBee的设备之前,第一步是使用AVR Dragon over JTAG接口将KillerBee固件写入到Rz USBstick上。
可以通过运行 sudo zbid
来验证固件,并列出设备。
如果使用的是APIMote而不是Rz USBstick,则会看到该设备列为GoodFET,如图所示,而不是KillBee。
ZigBee安全评估的下一步就是确定目标设备的通道。
可以使用KillerBee框架中名为zbstumbler的工具来完成嗅探操作,使用–v参数运行zbstumbler以确保收到详细消息,例如在某些情况下,当zbstumbler检测到的数据包格式不正确时,如果没有详细标志,它将不会在终端上显示。运行zbstumbler时查找关键字Received Frame,如图中看到的,在这种情况下,我们已经在11信道上确定了ZigBee协调器设备。
zbstumble也可以以日志信息方式显示所发现的网络信息,并且可使用-w
参数将发现的网络信息记录到CSV文件中:
通过zbstumble发现ZigBee网络,这一技术被用于ZigBee设备本身,当一个新的设备(ZigBee协调器或ZigBee路由器)建立完毕后,它会发送一个“信标请求帧”来通知其它ZigBee网络,以避免个域网标识符PANID的冲突。由于“信标请求”机制对于ZigBee来说是不可或缺的,所以无法禁用,所以攻击者能够这一技术进行ZigBee网络发现。
对于网络发现以及定位,KillerBee还包含一个 GUI 程序zbfind,通过zbfind,当这些设备都在范围内向外发送信息,我们就可以识别出周围的IEEE 802.15.4设备。
使用 sudo zbfind -c 11选择11信道,捕获到ZigBee设备,选中设备后就会显示有关这个设备更详细的信息,以观察该设备活动时第一次和最后一次捕获到该设备数据包的时间。在左边仪表盘处还会显示最后一次接收到数据包时接收到对方发送信号的强度,再根据信号的强弱,对设备进行跟踪,直到最大信号。
嗅探ZigBee数据包
我们接下来使用KillerBee嗅探两块开发板(协调器和终端设备)通讯的数据包。
我们可以使用zbwireshark并通过指定要捕获数据包的信道(-c
或-f
参数指定信道为11)来主动嗅探它们,而不是将数据包捕获到转储文件中。
如图,我们可以通过ZigBee设备的信道,并嗅探该通道上的数据包,从而揭示了我们的明文流量。
我们还可以通过zbdump捕获数据包,并以pcap和DainTree文件格式保存。
重播ZigBee数据包
KillerBee可以做的另一件有趣的事情是执行基于重播的攻击。
为了执行此捕获,我们使用Attify ZigBee框架,这是在KillerBee之上构建的GUI工具箱。然后需要指定要执行捕获的通道,要捕获的数据包数量以及需要存储数据包的文件名,如图所示。
在嗅探期间,首先,我们需要在协调器连接PC端串口工具中,对终端设备进行操作,例如控制小灯的亮灭。
现在我们捕获了数据包,下一步就是简单地重播数据包。
当我们重放数据包时,会看到灯泡受到控制,而且无需任何用户交互。
一个“重播攻击”的有效性,很大程度上取决于作为被攻击设备的软硬设计时采用的实现方式,通常情况下,“重播攻击”所针对的是未加密的网络,或者是已经指定“加密密钥”的网络。
伪造数据包攻击
KillerBee还集成了Philippe Biondi开发的数据包嗅探的开发框架类交互程序Scapy,经过开发人员集成对ZigBee协议的支持,所以KillerBee提供了zbscapy工具,该工具可以进行嗅探和伪造ZigBee协议以及IEEE 802.15.4 协议数据包。
使用ls()命令可以列出可用函数,其中很多介质访问控制层的附加函数都是以Dot15d4()作为前缀。
zbscapy使用killerbee_channel配置项指定信道,下面使用zbstumbler工具的功能,即手工发送一个IEEE 802.15.4 协议信标请求帧,通过Dot15d4Cmd()函数进行数据包填充,然后将该数据帧指定为信标请求命令类型,最后通过调用kbsendp()函数发送这个数据包。
除了伪造数据包,还可以接收数据包,同时进行后续处理。前面的情况下,通过发送信标请求数据帧,对接收到的数据包并不会显示任何信息。下面修改脚本进行发送数据,同时接收数据包。
我们伪造了一个有效的数据帧,数据帧类型是信标请求,指定地址0xffff(广播地址),使用另一个函数kbsrp1()进行发送,该函数区别在于,发该数据帧会进入等待,直到得到一个网络的响应数据包才返回(终端设备地址0x599a)。
除了数据包注入外,还可以通过kbsniff()函数进行数据包嗅探。
除了KillerBee框架的套件之外,zbscapy是一个非常强大的工具,最大的特点就是可以自行使用脚本开发,灵活运用。具体到攻击,很多ZigBee和IEEE 802.15.4产品设备经过部署,想要完成对其成功攻击还需要额外的实验。