ZigBee网络安全攻防

一次性进群,长期免费索取教程,没有付费教程。

ID:Computer-network

ZigBee是一项已经建立,然而仍在不停增长的无线技术,为多种工业领域所采纳。这些领域都希望使用一款有简单的协议堆栈、小规格、低数据速率,以及较长的电池寿命的电子产品,于是大家选择了ZigBee技术。ZigBee技术由“ZigBee联盟”(ZigBeeAlliance)开发,它作为一项集成组件,在工业生产和家庭应用中首先被发现,然后迅速扩散到广大的技术领域,从家庭影院的遥控,到医院的患者监护系统。

一、ZigBee简介

1、ZigBee在无线标准中的地位

一个最普遍的,也是最重要的问题是,当人们听到ZigBee的时候,他们常常会问“为什么说ZigBee是必不可少的?”。在一个拥有Wi-Fi、蓝牙,以及其他专有的解决方案的世界里,为什么我们还需要使用ZigBee呢?

2、ZigBee的部署

图1Nest智能恒温调节器

“ZigBee联盟”(ZigBeeAlliance)负责维护一个产品列表,所列的产品都是已被认证为“ZigBee兼容”(ZigBeecompliant)的产品。

除了商业ZigBee产品之外,许多组织开发他们自己的软件来使用ZigBee传输技术,可以使用的ZigBee无线芯片有“德克萨斯仪器”(TexasInstrument)、Ember、Microchip,以及Atmel等诸多芯片。这些项目中的许多产品都在积极使用,支持生产运营、环境监测,甚至在零售业务上也可以将信用卡号码通过ZigBee无线技术进行传输。

3、ZigBee协议层次结构

有一个机制被“ZigBee联盟”用来保持ZigBee的简单化设计,那就是使用一个结构化的协议栈来定义各个协议层,以及每个协议层上要做的事情。这个协议栈共由四层组成,分别是“物理层”(Physicallayer,PHY)、“介质访问控制层”(MAClayer,MAC),“网络层”(Networklayer,NWK),“应用层”(Applicationlayer,APL),如图2所示。ZigBee协议所使用的“物理层”和“介质访问层”都是在“IEEE802.15.4规范”中进行定义的,然后以这个成熟的规范为基础来定义ZigBee协议。

图2ZigBee协议栈的层次结构图

(1)ZigBee的物理层

ZigBee的物理层由IEEE802.15.4规范进行定义。该层所使用的频率波段在欧洲使用的是868MHz,在北美洲或南美洲使用的是915MHz,在全世界除了上述地区之外使用的都是2.4GHz。所有这些频率波段一共占用了27个信道,每个波段使用了不同的数据传输速率,如下所示:

(2)ZigBee的介质访问控制层

ZigBee的介质访问控制层也是由IEEE802.15.4规范进行定义的。这一层包含了构建扩展ZigBee网络的各项功能,包括设备互连的拓扑结构、“设备的角色”(devicerole)、数据包的帧结构设计,以及网络上的“建立关联”(association)与“解除关联”(disassociation)的操作。

ZigBee网络采用“设备角色”的概念,即对于每个设备,根据自己的可参与操作的角色,都有一组不同的功能。常见的“设备角色”有以下几种:

星形拓扑网络

Mesh网格网络

数据帧(Dataframe)“数据帧”的作用是用来在设备之间交换任意数据,所交换数据包的大小是一个变化量,最高可以达到114字节。具体使用多少,要看“ZigBee介质访问控制层”头部的选项。

确认帧(Acknowledgementframe)如果需要的话,发送方的ZigBee设备可以主动要求接收方ZigBee设备发送一个“确认帧”来进行回应。“确认帧”的作用就是用来表示接收方已经成功地接收到发送方所发送的请求。

图3IEEE802.15.4“介质访问控制层”的帧格式

(3)ZigBee的网络层

ZigBee协议的网络层被单独定义在ZigBee规范中,它负责实现高层的功能,比如“网络成形”(networkformation)、“设备发现”(devicediscovery)、“地址分配”(addressallocation)和“数据路由”(routing)。

(4)ZigBee的应用层

ZigBee的应用层是ZigBee规范中定义的最高层,规定了“应用对象”(applicationobject)的操作和接口,而这里的“应用对象”定义了一个ZigBee设备的功能。“应用对象”是由“ZigBee联盟”参照标准功能规范开发的。还有一种可能,就是制造商为了专有的功能,也会在“应用层”开发一些“应用对象”,其目的是作为一种与ZigBee协议栈的下一层进行数据通信时所用的机制。一个简单的ZigBee设备可以支持的“应用对象”上限可以达到240个。

“应用支撑子层”(ApplicationSupportSublayer,APS)为ZigBee上的应用规范提供最基本的功能。通过“应用支撑子层”,ZigBee应用规范可以请求发送和接收无线传输系统上的数据,包括指定可选的“可靠数据传输”(reliabledatadelivery)方式。从“应用支撑子层”的角度来说,“可靠数据传输”不仅要求发送方在发送一个数据包后,需要接收到针对这个数据包的响应数据包,并且从该数据包中看到有“确认”(acknowledgment)的字段信息,而且还包括了在源设备和目标设备之间存在一个路由,以及包括低层ZigBee的功能可以成功地处理和传送这些帧。

4、ZigBee规范

除了“ZigBee规范”本身,“ZigBee联盟”同样联合了其他工作组作为“ZigBee联盟”的成员来共同开发“ZigBee规范”。“ZigBee规范”定义了ZigBee设备的实际功能,包括“互通性(interoperability)测试计划”,这一功能可以用于验证设备对一个特定的“ZigBee规范”的吻合度。

完整的或者正在研发中的“ZigBee规范”示例包括下面这些:

ZigBee网络的建筑自动化(ZigBeeBuildingAutomation,ZBA)它提供以下功能:测量和管理照明镇流器、照明管理系统、传感器占用情况,以及其他商业建筑中常见的设备。

ZigBee家居自动化(ZigBeeHomeAutomation,AHA)实现家居的自动管理,包括照明自动控制、暖通空调控制、遮阳防晒和家庭安全报警系统。

ZigBee光连接(ZigBeeLightLink,ZLL)实现了一个简单的LED灯具控制的规范。通过该规范可以控制灯泡、定时器、遥控器,并在“部署形式工厂”中进行远程切换。这里的部署形式工厂是作为“易于使用的是一种常见的调光开关”。

智能能源规范(SmartEnergyProfile,SEP)实现“家域网”(HomeAreaNetworking,HAN),使其能通过接口提供一个“智能温控计”和“智能家电组合”,从而实现实时电费查询,以及远端设备管理和关闭功能(又称“负载控制”)。

随着越来越多的公共“ZigBee规范”推出,以及大量为满足专有技术而开发的私有规范的不断出现,使得ZigBee技术在功能和应用范围上变得日益成熟。纵观ZigBee的功能和使用目的,很显然伴随所提供的功能以外,它还需要一个安全的协议堆栈。

二、ZigBee安全

“标准安全”模式(standardsecuritymode)“标准安全”模式之前的名称是“住宅安全”模式(residentialsecuritymode)。“标准安全”模式使用单个共享密钥向ZigBee节点提供认证,“ZigBee信任中心”使用“访问控制列表”(AccessControlList,ACL)对设备进行认证。这个模式对于设备来说并不占用太多的资源,因为网络中的每个设备都不需要维护一份设备认证证书列表。

1、ZigBee的安全设计规则

“ZigBee规范”定义了多条会影响ZigBee通信安全的原则:

每个负责发送帧的层都要负责保护它。如果“应用层”要求数据必须是安全的,那么“应用层”就会对数据进行保护。“应用层”和“网络层”可以分别独立地使用加密和认证校验对每一个数据进行保护。

如果要求非认证访问的保护,那么在关联和密钥派生后,“网络层”的安全机制会使用在所有的帧上。“网络层”的安全对它的上层紧挨着它的应用层协议,提供了机密性和完整性控制。

在单个设备上使用开放信任模型,这就表示允许在各层之间重用密钥,比如“网络层”和“应用层”之间可以使用同一个“高级加密标准”密钥。

使用“端到端”(end-to-end)的安全机制,这样只有通信双方的源和目标设备能够对对方的信息进行解密。

为了保持规范的简洁性,网络中所有的设备以及每个设备的所有层都必须采用同一种安全等级。

2、ZigBee的加密

(1)ZigBee的密钥类型

主密钥(Masterkey)“主密钥”除了在“ZigBeePro”这一最新版的规范中的协议栈中是必选的之外,在其他各版本规范中都是可选项,“主密钥”的主要作用是联合ZigBee“对称密钥的密钥建立”(Symmetric-KeyKeyEstablishment,SKKE)进程一起来派生其他的密钥。

网络密钥(Networkkey)“网络密钥”的作用是保护“广播”和“组播”(broadcastandgroup)通信数据包的机密性和完整性,同时也为网络的认证提供保护。“网络密钥”通常保存在网络上的所有节点中。当一个新的ZigBee设备加入该网络的时候,或者当密钥在标准安全环境下在各个ZigBee设备之间进行更新的时候,“网络密钥”都会以明文的形式分配给这个新加入的ZigBee设备,或新更新的ZigBee设备上。这本身就与“高安全”模式是背道而驰的,因为“高安全”模式下,跨越空气这种传输介质,通过无线传输明文的密钥素材很显然是禁止的。

链路密钥(Linkkey)“链路密钥”用来保护两个设备之间“单播”(unicast)通信数据包的机密性和完整性。同“网络密钥”类似,在“标准安全”模式下链路密钥是以明文形式分配的。

为了进行加密以及保护ZigBee帧的完整性,所有的节点都需要“网络密钥”,而“链路密钥”只是两个通信设备之间用来保护这两个通信设备“端到端”的会话。对于某一个具体的设备来说,它的每一个会话都需要有一个“链路密钥”,所以它需要多个“链路密钥”来保护每个“端到端”会话。

(2)ZigBee密钥的提供方式

预安装(pre-installation)管理员提前在所有的设备上预配好所需的加密密钥,就像工厂内产品出厂前的“出厂默认参数”那样。这个过程非常具有挑战性,因为要协调密钥撤销和更新的方法颇有难度,并且当网络或者链路密钥更改时,需要对每个ZigBee设备进行手动更新。

3、ZigBee的可靠性

4、ZigBee的认证

有三种方法可以对刚加入ZigBee网络的设备进行身份认证:一种是通过“访问控制列表”(AccessControlList,ACL)模式进行“介质访问控制层”地址有效性的验证,这种方式又称“ACL模式”,还有两种“信任中心”(TrustCenter)认证,主要用于“标准安全模式”和“高安全模式”。

至此,我们检验了ZigBee的运作方式和功能,并且详细地围绕协议的操作,介绍了一些使用的安全和识别细节。下面我们来看一些有用的网络工具,这些工具基本上都是专为攻击ZigBee网络而设计的。

三、ZigBee攻击

1、KillerBee的介绍

(1)创建一个KillerBee工具包

要想使用KillerBee工具包的全部功能,有一些组件,需要被通过编译连接,创建到工具包中,其中主要包括下面的硬件和软件:

Atmel公司的RZRavenUSB接口的记忆棒,简称“RZUSBstick记忆棒”(硬件)。

Atmel公司100毫米到50毫米“联合测试行动小组”(JTAG)支撑架适配器(硬件)。

50毫米“公头对公头”的连接头(male-to-maleheader)(硬件)。

10针2排5列(2×5)排列100毫米“母头对母头”(female-to-female)带状连接线(ribboncable),或者采用10针跳线(硬件)。

免费的AVRDUDE工具(软件)。

“RZUSBstick记忆棒”的免费的KillerBee固件(软件)。

下面我们详细地看一下这些需要中的每一项。

即使是有了“RZUSBstick记忆棒”,但如果KillerBee软件未使用上述“专门针对‘RZUSBstick记忆棒’的免费的KillerBee固件”对KillerBee软件进行升级,那么该KillerBee软件的功能会受到限制,将只能使用其中的“只能侦听”(sniffer-only)功能,而不能使用向网络中“注入数据包”的功能,以及冒充一个合法的ZigBee网络诱骗其他ZigBee设备加入本网络等功能。

1)Atmel公司的RZRavenUSB接口的记忆棒

图4RZUSBstick记忆棒

我们建议至少使用两个“RZUSBstick记忆棒”接口,一个接口来发送欺骗对方的帧,而另一个接口用来侦听网络上传输的数据包。

“RZUSBstick记忆棒”中默认的固件型号是AVR2017。使用默认的固件,“RZUSBstick记忆棒”能够创建一个与“ZigBee-2006”规范兼容(ZigBee-2006–compliant)的网络,或者用来作为一个“被动式数据包嗅探器”(passivepacketsniffer)。不幸的是,要完成安全分析功能,需要增加额外的功能模块,比如说需要增加数据包的注入能力,而这些功能在默认的固件都不能使用,需要通过固件升级才行。

图5AVRDragon片上编程器

在握着“AVRDragon”产品插入到一个USB设备的时候,可能会破坏设备。这可能是由于接地不当造成的,同时也是“AVRDragon”产品的一个硬件设计缺陷。所以在使用“AVRDragon”产品的时候,需要小心一点,特别是在拔插的时候,最好是在外边套一个防静电袋(ESDbag),或者使用一个卡盒包在芯片或外边,然后再插入,甚至可以考虑使用一块在家装店买的热收缩管覆盖在敏感的集成电路元件外边。总之,就是在使用的时候,要防止静电打坏器件。

3)Atmel公司100毫米到50毫米JTAG支撑架适配器

在“JTAGICEmkII”接口和“RZUSBstick记忆棒”接口之间进行连接,需要一个100毫米间距的“联合测试行动小组”适配器和一个50毫米间距的“联合测试行动小组”适配器之间的转换器。Atmel公司销售一组四种适配器,适合各种情况下的物理连接属性的转换。其中,用于与“AtmelDragon”接口相连的产品编号是ATAVR-SOAKIT,售价大约是39美元,可以从流行的电子产品经销商处购买。在“AVRDragon”接口和“RZUSBstick记忆棒”接口之间进行连接,我们使用的“联合测试行动小组”适配器,编号是ATAVR-SOAKIT,该实物图如图6所示。

图6ATAVR-SOAKIT适配器

4)50毫米“公头对公头”的连接头

“AVRDragon”板上的“联合测试行动小组”连接器是一个50毫米的母头插座,而“RZUSBstick记忆棒”上的“联合测试行动小组”插槽也是一个50毫米的母头插座,要在二者之间进行转换,就需要用于50毫米“公头对公头”的连接头。这个50毫米“公头对公头”的连接头的用法,就是将其插入到一个“联合测试行动小组”的母头插座上,将其转换成公头插头,然后才能插入到“RZUSBstick记忆棒”上的“联合测试行动小组”插槽中。这个小部件通常可以从多个电子网站上买到,包括Digi-Key公司的网站,产品编号是S9015E-05,零售价为1美元,如图7所示。

图750毫米“公头对公头”的连接头

5)10针2排5列(2×5)排列100毫米“母头对母头”带状连接线

从“AVRDragon”出来,需要连接一个带状连接线,一头套在“联合测试行动小组”接口的引脚上,带状连接线需要10针,头端需要呈2排5列,即“2×5”的连接布局。这种通用部件通常可以从多个电子网站上买到,包括Digi-Key公司的网站,产品编号是H3AAH-1018G-ND,售价为1.5美元一根。

作为替代品,可以简单地只用一根10针的“母头对母头”的成型跳线,手工将各自十个引脚一一连接起来即可。要确保所连接的所有连线都要匹配“AVRDragon”的引脚和“联合测试行动小组”适配器引脚,并且二者在物理特性上“一一对应”。这种成型的母头跳线,一组40根,其产品编号为266,必须成组购买,一组售价7美元,其实物图如图8所示。

图8成型的母头跳线

在紧要关头,一个老式的IDE硬盘驱动器电缆的工作也可以拿来使用,使用美工刀将连接器的头端切下来,然后将多余的部分切掉,最后只剩下10针,并且呈2×5排列的头部形状即可。

6)免费的AVRDUDE工具

7)“RZUSBstick记忆棒”的免费的KillerBee固件

(2)安装AVRDragon设备

图9检测到AVRDragon设备

在列表中,选择AVRDRAGON这一项,然后单击“下一步”(Next)。这时Inf-Wizard工具的安装向导提供一个设备配置窗口,如图10所示。单击“下一步”(Next)接受系统默认的十六进制“供应商VID”(即界面中的“VendorID(hexformat)”)、十六进制“产品PID”(即界面中的“ProductID(hexformat)”)和本产品“制造商名称”(即界面中的“ManufacturerName”)和“设备名称”(即界面中的“DevieName”)等描述性的值。

图10设备配置窗口

在Inf-Wizard工具的安装向导的最后一步,单击“马上安装”(InstallNow)按钮,如图11所示,向导就会将“AVRDragon”设备的libusb-win32驱动程序安装好,如果安装途中出现一些提示,就选择“按默认配置强制安装这个驱动程序”(InstallThisDriverSoftwareAnyway)按钮,直到安装成功。

图11安装驱动程序

当“AVRDragon”已经配置完毕,剩下要做的就是准备刷新“RZUSBstick记忆棒”上的闪存替代固件。

(3)创建一个KillerBee设备上的RZUSBstick记忆棒

在获取了所有需要的部件后,通过KillerBee设备升级“RZRavenUSB”硬件就易如反掌了:

2)下载KillerBee的固件。下载成功并解压缩后,在“killerbee/firmware”目录中,会发现一个名为kb-rzusbstick-001.hex或类似的文件。使用此文件就可以更新“RZUSBstick记忆棒”的固件。

3)准备AVRDUDE程序。打开“命令提示符”,并将目录改变到下载KillerBee固件的目录。输入下面的命令,但不要按回车键!因为这个时候,只有一只手可以按回车键,另一只手则需要握着“RZUSBstick记忆棒”。

4)打开“RZUSBstick记忆棒”的电源。“RZUSBstick记忆棒”本身是无源的,所用的电是从电脑上机上通过USB线取电。供电以后,微处理器开始运行程序。微处理器会通过USB总线连接到“RZUSBstick记忆棒”上,建议使用USB延长线连接电脑主机,这样的好处是方便后面将“RZUSBstick记忆棒”和“AVRDragon”设备放在一起。将“RZUSBstick记忆棒”插入到电脑主机以后,“RZUSBstick记忆棒”上的蓝色LED指示灯就会亮起来。使用“联合测试行动小组”支撑架适配器连接到“AVRDragon”设备上,再将“联合测试行动小组”支撑架适配器连同“公头对公头”的连接头插入到“RZUSBstick记忆棒”顶端的引针插座上,捏着引脚针在一个很小的角度将其引脚与与PCB插座接触,如图12所示。在“AVRDragon”设备接口上,“引脚1”(Pin1)的位置是“RZUSBstick记忆棒”上距离USB接口最远的那个位置。

图12将“联合测试行动小组”编程器插入到“RZUSBstick记忆棒”上

KillerBee硬件的替代品

TelosBMote记忆棒“TelosBMote记忆棒”硬件(见图13)以前被“弩系统”(CrossbowSystem)销售的时候,是作为一个研究和开发IEEE802.15.4网络的平台。虽然现在它已不再是可供销售的商品,但该硬件在研究性的高校里却非常流行。这款产品也可以应用于KillerBee,要想使其支持KillerBee作为数据源,只需要使用其替代固件就可以了,替代的方式是运行该系统提供的flash_telosb.sh脚本。

图13TelosBMote记忆棒

Api-Mote记忆棒“Api-Mote记忆棒”硬件(见图14)是一个持续开发的项目,项目的名称是“河水循环的安全系统”(RiverLoopSecurity),项目是由RyanSpeers和RickyMelgares领导的。“Api-Mote记忆棒”硬件集成到KillerBee系统以后,就可以使KillerBee系统使用“Api-Mote记忆棒”发起所有可访问到的进攻方式。控制这个硬件是通过一系列通过USB的接口实现的,这使得该系统从开发的角度来看,系统的可靠性非常强。

图14Api-Mote记忆棒

2、网络发现

在ZigBee网络的评估中,首要任务是要在自己的功率覆盖范围内先“发现”(discovery)有网络的存在,然后枚举出网络中各设备上采用的配置。收集这些信息的一个简单方法是使用KillerBee模仿ZigBee网络的发现过程。

使用zbstumbler工具进行ZigBee发现

回想一下Wi-Fi网络的“网络发现”中,使用的工具有好几个,比如NetStumbler程序,而在KillerBee网络的“网络发现”中,所用的技术和Wi-Fi网络的“网络发现”所用的技术很类似。在KillerBee网络中的zbstumbler工具也会在信道中进行跳频,并且在跳频的同时发送信标帧,然后根据回应的信标帧中提取有价值的信息并且显示出来。不带任何参数地运行zbstumbler程序,它会开始在ZigBee信道中进行扫描,每两秒跳频到新的信道中,其输出信息如下所示:

zbstumbler也可以以日志信息的方式显示出所发现的网络信息,如果在命令中使用“-w”参数,那么zbstumbler程序就会将发现的网络信息记录到一个CSV文件中,该文件的特点就是以逗号将一条记录(即,行)中的每个字段(即,列)隔开:

一旦发现了ZigBee网络,并将其作为目标,我们可以根据zbstumbler显示的信道编号,选择ZigBee数据包捕获工具来进行数据通信数据包侦听攻击。

防御针对ZigBee网络的主动扫描

由于“信标请求”机制对于ZigBee来说是不可或缺的,所以这个机制无法被禁用,这样就使攻击者能够任意使用同样的技术进行ZigBee网络发现。因此,最佳的防御措施就是了解攻击可能会造成的影响,评估攻击者通过这种攻击,能够拿到网络中的何种信息。

3、侦听攻击

有几种工具提供了捕获ZigBee网络通信数据包的能力。

使用Microchip公司的ZENA网络分析器

ZENA硬件如图15所示,既可以从Microchip技术公司,也可以从大部分电子经销商那里购买到,它的售价是130美元。ZENA设备不需要安装特定的驱动程序,使用USB接线直接将设备插在可用的USB端口上,然后使用配套的CD光盘安装ZENA数据包侦听软件即可。

图15ZENA硬件

“ZENA数据包嗅探器”(ZENAPacketSniffer)软件的功能比较有限。它只能够对无线活动数据进行简略的解码,而不是详细的十六进制数据转储(dump)形式。用户可以选择要进行捕获的信道编号,该值一般是信道11~26,同时选择忽略或者分析“帧校验序列”(FrameCheckSequence,FCS)不正确的帧。它可以对“介质访问控制层”、“网络层”和“应用支撑子层”施加控制,同时以“数字”(numeric)、“摘要”(condensed)、“冗余视图”(verboseviews)等多项进行显示。单击“视图(View)|网络信息(NetworkMessages)”菜单可以显示捕获的数据帧包含的内容,如图16所示。

图16捕获的数据帧包含的内容

在编译连接创建ZenaNG程序以后,就可以通过“-h”参数在命令行中检验该程序的运行效果了。例如,运行ZenaNG程序,对信道15进行数据包嗅探(使用“-c”参数),并且以十六进制的输出格式将所接收到的数据包显示出来(使用“-f”参数),其命令格式及运行效果如下所示:

在没有指定捕获数据包的文件保存类型时,ZenaNG程序会将接收并捕获到的数据包以libpcap的格式进行保存,如果用户想将该程序在命令行上的输出保存到一个文件中,那么可以使用“重定向”(redirect)命令进行转换,其命令格式及显示效果如下所示:

ZenaNG软件也可以捕获通信数据包,将这些数据包“重定向”后直接转向Wireshark程序,并作为Wireshark程序的输入源,此时数据数据命令格式如下所示。作为数据包捕获行业的专业软件,这时的Wireshark程序将启动一个数据包的捕获线程,并且马上立竿见影,程序立即开始捕获和显示所接收到的数据包,Wireshark程序软件的捕获界面如图17所示。

图17Wireshark捕获由ZenaNG软件重定向过来的数据包

破解Microchip公司的ZENA网络分析器

在“ZENA网络分析器”设备的原本设计中,在电路板板载天线(circuit-boardantenna)的附近还有一个能够安装一个外部天线连接器的接口。利用“印制电路板”(PrintedCircuitBoard,PCB)上的这个插座接口,可以使用表面贴装(surface-mount)技术焊接一个的“RP-SMARF”连接器。有了这个连接器,就可以通过它选择使用外部天线或者PCB天线了。现在,“RP-SMARF”连接器焊接完毕,然后使用“RP-SMARF”连接器尾端的“小辫子”连接线连接任何一款2.4GHz的外置天线。这样就能够在更大的范围内捕获ZigBee网络活动的通信数据包了。

KillerBee数据包侦听工具zbdump

KillerBee软件的工具套件,提供了用于捕获ZigBee协议和IEEE802.15.4协议设备通信数据包的几个选项。其中的zbdump工具,就是一款包含在KillerBee工具集中的常用工具,其设计理念和流行的tcpdump数据包捕获工具类似。要使用该工具进行正常的数据包侦听工作,可以使用一个定制的KillerBee固件,或者在使用出厂默认固件情况下,使用“RZUSBstick记忆棒”一起协同工作。完成固件升级或加装“RZUSBstick记忆棒”以后的zbdump工具,就可以捕获ZigBee网络和IEEE802.15.4协议网络的数据通信数据包,并将捕获到的数据包保存到libpcap文件中。

一旦安装完毕以后,就可以使用zbdump工具进行数据包的捕获,并将捕获到的通信数据包保存到文件中。使用“-f”参数可以设置“RZUSBstick记忆棒”,以便捕获指定信道的数据包。使用“-w”参数则表示输出文件是libpcap格式。通过Ctrl+C组合键可以中止当前的数据包捕获流程,回到提示符状态。

如果想进行进一步分析libpcap格式的savefile.dump文件,可以使用Wireshark软件打开,这时的程序分析效果如图18所示。该格式的保存文件,还可以被KillerBee工具包中和zbdump工具一起的其他几个工具程序所使用。

图18savefile.dump文件分析效果

zbdump工具的“-w”参数可以以libpcap的格式创建数据包捕获文件,或者通过“-W”参数以dcf的格式进行捕获数据包的保存,dcf格式是“商业Daintree网络”(commercialDaintreeNetwork)的“传感器网络分析器”(SensorNetworkAnalyzer,SNA)数据包嗅探文件的格式。不过,需要注意的是,尽管KillerBee网络设备为了与软件保护“向后兼容”(backwardcompatibility)还在支持这种格式,现在的“商业Daintree网络”反而不再支持Daintree公司的“传感器网络分析器”产品了。

还有一个能使用zbdump工具捕获ZigBee网络通信数据包,并且所保存的文件能在Wireshark程序中打开的工具,那就是Wireshark程序本身了。不过,Wireshark程序并不能直接从KillerBee设备中捕获数据包。

使用KillerBee设备,加上“RZUSBstick记忆棒”硬件,再加上Microchip公司的“ZENA网络分析器”工具,这套组合的一个很重要的不足是它们都只能侦听2.4GHz信道中的无线ZigBee网络通信数据包。其实ZigBee的这一频率只是全球通用频率,还有一些频率虽然不太常见,但在一些ZigBee网络和IEEE802.15.4网络部署中还是会看到有些网络部署是在“低于1GHz频率”sub-1-GHz信道中。要对这些频率进行侦听,上面的组合工具就无能为力了,只能查找其他的嗅探工具,以便适应这个频率范围内的ZigBee网络的侦听。

在Sewio网络上使用OpenSniffer软件

Sewio网络生产了一个相对低成本ZigBee网络或IEEE802.15.4网络的嗅探设备,称为“OpenSniffer”,如图19所示。“OpenSniffer”设备是一个“已自足的”(self-contained)的网络节点设备,提供对以太网的支持。该设备不像前面那些设备一样需要将捕获设备与目标的系统通过USB线相连,以至于攻击设备和捕获设备之间的距离因为USB延长线的距离而变的有限,而在“OpenSniffer”中,设备可以部署到一个很远的地方(只要能够通过网络访问到),这样极利于捕获设备捕获对方网络的通信数据包。

图19Sewio公司的“OpenSniffer”产品

图20Sewio公司“OpenSniffer”设备IP地址的配置页面

默认情况下,该Sewio公司的“OpenSniffer”设备会传送一个正确的或不正确的“循环冗余校验校验”校验码,如果想限制接口只接收数据包为有效的数据包,那么就导航到“OpenSniffer”设备浏览器界面中的“设置”页面,然后设置“循环冗余校验校验”过滤选项。

“OpenSniffer”设备可作为一个数据包捕获源,向KillerBee设备的zbdump程序输送捕获来的数据。要完成这种数据流的“重新定向”,只需要简单地在zbdump工具的配置界面中指定一个将“OpenSniffer”设备的IP地址作为一个“设备名称”字符串即可。详细的格式如下所示:

Sewio公司的“OpenSniffer”设备是当前目前唯一一个能在“低于1GHz频率”信道上支持KillerBee设备进行侦听操作的设备。随着越来越多的设备拥挤在2.4GHz频段,许多制造商正在寻找可用的频率,比如美洲的900MHz、欧洲的868MHz、中国的780MHz都是可以作为无干扰(interference-free)的频谱。表1中列出这些频率的“信道数”、匹配的频率和国际上使用这一频率的地域范围。

捕获“低于1GHz频率”上的ZigBee网络或IEEE802.15.4网络活动,只需简单地指定相应的信道即可,命令格式如下所示:

虽然“低于1GHz频率”的ZigBee网络和IEEE802.15.4网络与2.4GHz的同类网络相比并不太常见,但是我们可能更希望继续看到有新产品切换到这个频率范围。许多行业分析师预测,“低于1GHz频率”将成为“物联网”演变中至关重要的一个环节,另外,在ZigBee网络和IEEE802.15.4网络的安全评估的部署中,这也是不应忽视的一个环节。

防御数据侦听

4、重播攻击

“重播攻击”的概念非常简单:“使用之前观测到的数据重新发送这些数据包,就好像原始的发送者重新发送了一遍一样。”一次“重播攻击”的效果,很大程度上取决于重播时所使用的数据内容,以及所使用的协议本身的自然特点。

举例来说,有一个网络用来支持电子银行,如果攻击者可以实施一次“重播攻击”,重新发送之前向银行发送过的交易数据,这样原来发送的金额可能会翻上两倍、三倍或者四倍,具体的倍数取决于攻击者重新发送重复数据的次数。在ZigBee设备中,重播攻击的手法是类似的,但是效果却并不相同。

KillerBee数据包重播工具zbreplay

zbreplay不会重新发送“确认帧”,原因也很简单,因为这些帧是在接收方成功接收后自动生成的。也就是说,所谓“重播攻击”不是停掉原来的协议职能,而一味重发,而是重播的过程中,原来的功能还在,并且当被“重播攻击”的对方向您发出“确认请求帧”的时候,您的协议会自动向对方发送“确认帧”,所以您就不需要再重播“确认帧”了。

在本例中,zbreplay重新发送了libpcap捕获文件中的内容。这个捕获文件所捕获的也正是“灯光切换开关”的动作,保存的文件名是lightswitch-onoff.pcap。ZigBee运行的信道是20信道,这个是通过参数“-f20”指定的,延时为十分之一秒,这是通过参数“-s.1”体现的。在重播完捕获的数据包内容后,zbreplay显示总共发送了4个数据帧。另外,作为可选的参数,可以使用“-n”参数来限制需要重播的数据帧的数量,比如只想重播数据包捕获文件中的前两个帧,那么只需指定“-n2”参数即可。

在同一个接口上,既使用zbdump工具捕获数据帧又使用zbreplay工具重新发送这些数据帧是行不通的,所以如果想在zbdump工具记录数据的同时,也能查看通过zbreplay工具生成的ZigBee设备的活动,需要有两根“RZUSBstick记忆棒”。

因为zbreplay会重播所捕获数据包的内容,所以有时需要在发起“重播攻击”之前先对所捕获的文件进行一番“整理”,使得文件中只保存要发送的数据帧,这样重播工具就只需要发送这些需要重播的帧了。这个操作非常容易,只要使用Wireshark软件所提供的功能即可完成。

首先,在Wireshark程序中打开捕获的数据包文件。右键单击选中一个想要提取或解包的数据帧,然后选择“标记数据包”(MarkPacket),这是一个“反转”(toggle)操作模式,所以如果发现误标了某个数据包,只需要按这个过程再操作一遍即可。被标记选中的数据包,Wireshark会以黑色背景高亮显示该数据包所在行。一旦“高量标记”完所有在数据包捕获压缩文件中所需的数据包项以后,选择“文件(File)|导出所选数据包(ExportSpecifiedPackets)”菜单,然后输入一个新的文件名。在“数据包范围”(PacketRange)分组框中,选择“只保存已标记的数据包”(MarkedPacketsOnly)单选项,这时的界面截图如图21所示。

图21标记数据包

一个“重播攻击”的有效性,在很大程度上取决于作为目标的那个ZigBee设备在软硬件设计时采用的实现方式,也就是说,只能具体问题具体分析,必须是在具体必须在逐项(case-by-case)分析的基础,再进行总的评价。通常情况下,“重播攻击”所针对的是未加密的网络,或者是那些我们已经知道“加密密钥”(encryptionkey)的网络。幸运的是,对于一个攻击者来说,如果遇到一个加密的ZigBee网络,攻击者仍然也还是有专门针对加密网络的攻击选项。

防御重播攻击

要弱化“重播攻击”,ZigBee协议堆栈中应该在接收数据包中配置一个“序列码”(sequencenumber),以便验证数据的有效性。在每次新的数据包中,这个“序列码”都至少比上一次成功地接收到的数据包中的“序列码”大1。不过,不幸的是,“ZigBee规范”并不要求这点,并且虽然ZigBee“网络层”中也有一个“序列号”的字段是可以用来当此用途的,但是这里的“序列号”字段,它的“熵”(entropy)也只有8位,也就是说它总共可以表示的有效数据量只有28=256种可能,明显偏少。举例来说,假设ZigBee的“网络层”采用了这一机制,一个攻击者可以捕获到一个数据包,如果现在发送这个数据包,就会因为“序列码”不满足“大于1”的要求而失效,但这个问题不大,因为发送程序只要再等待255个帧之后,再次发送这个捕获的数据包时就能够匹配到正确的“序列号”了。

在高层应用中,一些安全防御的方法也可以作为一种额外的方法用于防御“重播攻击”,比如可以应用上面提到过的“序列号”机制,设计一套“高级序列号强化机制”(high-levelsequencenumberenforcementmechanism)来防御“重播攻击”。就目前来说,这些机制应该从单独使用的基础上进行评估,然后根据具体的应用决定所使用的“序列号”的有效位数(也就是上面提供的“熵”)是否够用。

5、针对加密的攻击

加密密钥的生成、更新、撤销以及管理对于ZigBee网络来说是一个很难安全处理的挑战性问题。几乎所有的ZigBee设备都没有“人机接口”(Man-MachineInterface,MMI),所以即使是管理员用户在将设备用于实际使用之前,也很少有机会买到一个能在本地配置密钥的产品。在其他情况下,比如在“家域网”(HomeAreaNetworking,HAN)中,一个智能温控计和一个智能电表之间进行通信,由于加入这个ZigBee网络中的多个设备之间,每个ZigBee设备的责任都是分离的,所以不存在管理上的关系,因而这就使它们的密钥管理成为了一个复杂的问题。

在“ZigBee-2012网络”、“ZigBee-2007网络”,以及更早的使用“标准安全模式”的网络中,如果设备还不知道自己的特定密钥,那么它可以通过向“应用支撑子层”发送一个“请求密钥”(Request-Key)命令的方式,请求“ZigBee信任中心”分配给它一个密钥即可。如果“ZigBee信任中心”的配置策略允许新设备请求密钥,那么“ZigBee信任中心”就通过“应用支撑子层”向发出请求的设备回送一个“传输密钥”(Key-Transport)命令。

知道了“网络密钥”后,其他的密钥都可以通过这个“网络密钥”进行派生,比如“链路密钥”。可见,“链路密钥”交换的安全性取决于前面“网络密钥”的完整性,但是,这里的“网络密钥”是以明文的方式发送的,所以隐患极大。不过,尽管这是一个很大的威胁,但是许多ZigBee网络中,也都只能依靠这一个可用的传输机制来动态分配密钥和实现密钥的更新,并将这一机制作为网络所要求的安全模型,所以这是一种无奈之举。

KillerBee密钥侦听工具zbdsniff

一旦获取了“网络密钥”之后,就可以使用Wireshark工具解密数据包捕获文件的内容了。操作步骤是先打开Wireshark程序的“用户图形界面”,首先选择一个密钥加密方式(即图中左边列表中的“ZigBee网络层”(ZigBeeNWK)),然后通过选择“编辑(Edit)|偏好(Preferences)|协议(Protocols)|ZigBee网络层(ZigBeeNWK)”菜单打开“ZigBee网络层”(ZigBeeNetworkLayer)对话框,并且在对话框指定位置输入密钥,如图22所示。同时,还必须指定“信息完整检查码”的长度(即图22中“安全级别”(SecurityLevel)),该长度通常都是32位的密钥长度,这同时也是Wireshark软件的默认值。密钥输入完毕后,Wireshark程序就会在数据包捕获文件解密数据包中的每个帧,这样就能看到每个帧解密后的内容了。

图22输入网络密钥

防御密钥传输攻击

“ZigBee规范”也支持提供加密密钥的其他机制,其中包括“预配置密钥”机制和“密钥协商”。其中的“预配置密钥”就是当设备在工厂制造阶段就预先设置好密钥;“密钥协商”就是使用“对称密钥建立”(SymmetricKey-KeyEstablishment,SKKE)协议,动态地交换密钥。

“预配置密钥”机制的优势在于,在工厂的生产阶段就配置好了密钥,所以就缓解了密钥在传送过程中遭受攻击的威胁,因为ZigBee网络上的设备在传输以前就已经知道网络上其他设备的密钥,所以可以直接用来保护要发送的数据。不过,“预配置密钥”机制的劣势也很明显,那就是密钥的更新(rotating)和撤销(revoking)变得非常困难,一旦遇到这两种操作,就不得不需要管理员手工依次处理ZigBee网络中的每个设备了。

“ZigBeePro规范”支持“对称密钥建立”协议,通过该协议的派生功能可以派生出密钥,“ZigBee信任中心”可以将这个派生的密钥作为一个“群组密钥”(groupkey),然后在ZigBee设备进入网络要求认证的时候,使用这一“群组密钥”进行通信。然而,要想使用“对称密钥建立”协议,通信双方的设备都必须配置一个“主密钥”(masterkey)。“主密钥”的分配有两种方式,一种是通过空中在没有保护的无线传输,另一种是在设备上“预配置密钥”的方式。无论采用哪种方式,都存在前面作为密钥建立过程中已讨论过的风险和劣势。

6、伪造数据包攻击

不过,Scapy框架本身既不支持IEEE802.15.4协议或ZigBee协议,也不能与像“RZUSBstick记忆棒”这样KillerBee所支持的硬件设备进行交互操作。为此,在KillerBee项目中,RickyMelgares和SpencerMcIntyre为了将KillerBee设备和Scapy框架集成到一起做出了重大贡献。通过这些工作,KillerBee也提供了个zbscapy工具,该工具允许用户嗅探和伪造ZigBee协议和IEEE802.15.4协议的数据包,并且使用了与Scapy框架相似的语法。

(1)设置zbscapy程序

(2)通过zbscapy伪造数据包

zbscapy工具引入了一个名为killerbee_channel的配置项,目的是用于指定发送数据包时要使用的信道号码。在设置此值之后,就可以通过KillerBee对象的killerBee()方法完成对KillerBee对象的初始化工作,并且手工伪造一个数据包,并将其发送出去。下面的例子演示了zbstumbler工具中的一些功能,即从信道15上发送一个单一的IEEE802.15.4协议信标请求数据帧。

在这个例子中,我们通过Dot15d4Cmd()函数进行数据包内容的填充,手工创建了一个基本的IEEE802.15.4数据帧,将该数据帧指定为信标请求命令类型以后,就可以通过调用kbsendp()函数发送这个数据包的数据了。作为可选项,可以在调用kbsendp()函数的时候,将其参数设置为mypkt,除此之外通过在命令中增加“loop=1”和“inter=1”参数设定发送的动作不停地重复,并且每个数据包之间的间隔是1秒。由于程序会无限地循环下去,所以如果要中止这个发送过程,可以通过组合键Ctrl+C中断传输:

除了伪造数据包,zbscapy也可以让接收数据包变得简单,接收到的数据包同样可以用于后续的处理。

(3)通过zbscapy嗅探数据包

在前面的例子中,我们发送了各式各样,或有效,或无效的IEEE802.15.4数据帧,包括信标请求数据包。默认情况下,通过发送信标请求数据帧,我们可以复制一些zbstumbler工具曾经做过的动作,但对接收到的数据包并不会显示任何信息。不过,这没关系,因为我们可以通过修改这个脚本来让zbscapy工具既可以发送数据包,也可以同时接收数据包。对如何接收数据包,一个简单的小结如下:

在这个例子中,我们伪造了一个有效的IEEE802.15.4协议数据帧,所用的类型就是“信标请求”,指定“目的地址”是广播地址0xffff。发送数据帧的命令不是用kbsendp()函数,因为这个命令发送完一帧数据以后就会立即返回,至于是否收到对方的回复并不知道。为了避免这种效果,我们改用kbsrp1()函数进行发送,这种发送方式会在发送该数据帧后进入等待状态,直到等到一个来自网络的响应数据包才返回。这样做的好处是我们可以很容易在一个单一的流程(asingleline)中,通过show()函数将接收到的数据包进行汇总分析并显示出来。同时,如果想显示“响应列表”(resplist)中接收到的数据帧的附加信息,还可以使用show2()函数。

像Scapy框架中的sniff()函数一样,kbsniff()函数还提供了以“回调函数”(callbackfunction)的方式进行调用的能力。这样每次接收到一个数据包,系统就会主动调用“回调函数”完成指定的功能,具体是什么功能,则取决于我们如何编写“回调函数”,比如我们可在“回调函数”中编写定制的代码,当有数据包捕获的时候,可以处理这些数据包。本例就是在接到数据包的时候,将该数据包填充给一个“列表对象”(listobject):

在上面例子的输出内容中,有些内容已被修改,以便在不影响理解的同时,保持格式上的简洁。

在这个例子中,我们定义了一个processpkt函数,每当有一个数据包被捕获到的时候,processpkt函数就会被kbsniff函数所调用。这时,processpkt函数会检查是否这个捕获到的数据包是否有“ZigBee的安全头部数据”(ZigBeeSecurityHeader)这一层数据,如果有,processpkt函数会继续检查这个头部中的“帧类型”(frametype)字段是否为0,根据“ZigBee规范”中约定,如果该字段为0,就表示这是一个“数据的数据帧”(dataframe)。还有一个代表当前数据包中“ZigBee安全状态”字段是否已设置的数据“位”,如果没有设置,那就表示这是一个“数据没有加密的数据帧”(unencrypteddataframe)。如果这些条件都满足,那就意味着,当前所捕获到的这个数据包是一个没有加密的明文数据包。那么processpkt函数就会调用hexdump函数,将数据包内有效载荷直接以十六进制的方式全部打印出来。

通过zbscapy攻击IEEE802.15.4网络

接收节点需要记住来自网络上所有其他节点发送来的最后一个观察到的“数据帧计数器”值,这样做的目的也是很明确的,作为其通信安全的一种机制,避免对方欺骗自己,发起“重播攻击”,从而不需要对对方重复发送的数据包进行多次处理。这样一来,接收节点只接收来自对方的数据包中,“数据帧计数器”值比上一次来自同一对方设备中至少大1的那些数据包。这种数据包有效性的通用检验机制被应用于许多协议中,对协议进一步的解释,详见图23。

图23IEEE802.15.4协议中,处理数据包的步骤

对于接收节点,另外一个要考虑的地方是IEEE802.15.4规范将“数据帧计数器”值作为一个输入参数,用来加密和解密处理,也就是在“每一个数据包生成”(per-packetkey-generation)机制中,IEEE802.15.4规范都要求“数据帧计数器”的值作为该机制的一部分参与运算。“数据帧计数器”的生成一般是使用一个nonce类型的值。该值所处的结构如下所示。

在IEEE802.15.4规范的预期使用情况中,设备是不可能达到这个最大的“数据帧计数器”值的。因为我们假设,某一个ZigBee设备每秒钟发送一个数据包,那么即使是用这么一个不太可能的数据包持续发送速率,一个ZigBee设备节点要想达到这个最大的“数据帧计数器”值,也需要136年之久。我们总不会希望到了下个世纪还依赖于IEEE802.15.4规范进行ZigBee设备的安全控制吧。

自动通过数据包嗅探的方式,确定对方的网络是一个IEEE802.15.4网络。

使用上述字段,再将“数据帧计数器”值设定为0xfffffffe(即0xffffffff-1),一起伪造一个数据包,并发送出去。

还有一个可选的步骤:周期性的跳频,以最大化地攻击分布于各个频率点的所有潜在的ZigBee设备。

在这个例子中,“while(1)”命令的意义是,后面的命令将是一个循环,该循环会无限地运行下去,那么这个命令的作用就是让攻击永远不停地进行下去。在循环的内部,信道变量是用来覆盖每一个2.4GHz频率的IEEE802.15.4通道的,程序会在每一个信道嗅探10秒钟,然后移到下一个信道中继续嗅探。在这里的进攻中,嗅探不是目的,嗅探只是为了接收一个数据包,然后提取必要的参数,所以每次kbsniff()函数一接收到一个数据包,程序就会调用attack()函数。

attack()函数会检查所捕获的数据包的内容,先确定这个数据包是否具有“辅助安全头信息”(auxiliarysecurityheaderinformation)和“数据帧计数器”字段。如果这些字段存在,那么这个数据包就会被修改,其中的“数据帧计数器”值会被设置成最大允许值0xfffffffe。修改后的数据包以“注入”的方式连续三次发送到对方被攻击的ZigBee设备上,每次发送有一个1秒的延迟间隔。发送的信道当然就是接收到该数据包的信道。发送结束后,就可以结束该函数的功能了。

在生产环境中运行这个脚本是不可取的,因为它会盲目地停止所有的IEEE802.15.4设备的通信。从这一攻击的结果中进行正常状态的恢复,将会是代价昂贵,甚至是不可能的,因为有些ZigBee产品根本就不向管理员提供密钥修改的功能。

四、攻击演练

1、网络发现和定位

KillerBee设备位置分析工具zbfind

图24信号历史图

安装好KillerBee设备之后,从命令行运行zbfind命令,格式如下所示:

为了跟踪设备的位置,攻击者需要向信号逐渐变强的方向移动,直到信号的强度最大为止。一旦达到信号最大强度的地方后,攻击者可以通过“目视检查”(visualinspection)的方式对区域内的目标设备进行寻找。

2、分析ZigBee硬件

盗取了ZigBee设备后,攻击者可以打开设备的外壳,或者是连接到实验盒中核查该设备所用的线路图外的那些外围设备接口,识别其中的ZigBee设备的无线接口和微处理器。在一些新的无线接口设计中,为了更好地节能,这些组件都会被集成到“片上系统”(System-on-Chip,SoC)中,比如像来自“德克萨斯仪器”(TexasInstrument)公司生产的“ChipconCC2540”芯片。这个芯片集成了Intel公司的8051微处理器,它能够支持128KB的永久闪存以及8KB的RAM内存。

通过GoodFET工具连接CC2540芯片

图25GoodFET4.2版本的电路板实物图

可以使用Subversion工具下载最新的源代码,然后安装Debian风格的附属插件:

GoodFET工具通过ChipCon芯片的调试接口连接到“ChipConCC2540”芯片上。这个接口同“串行周边设备总线”(SerialPeripheralBus,SPI)类似,都是用于电路板上的“集成电路”(IntegratedCircuit,IC)这一级别互联互通的主要接口类型,但是它使用单条双向数据线而不是“主输出从输入”(Master-OutSlave-In,MOSI)和“主输入从输出”(Master-InSlave-Out,MISO)数据线。

在GoodFET工具和“ChipConCC2540”芯片之间有4条连接线。“ChipConCC2540”芯片上的“调试”引脚(debugpin)可以从下面的“‘ChipConCC2540’芯片调试引脚”列表中查到,这个总结性的表格如表2所示。

表2GoodFET工具和CC2540引脚说明

对于一个使用“ChipConCC2540”芯片的ZigBee设备,要将GoodFET工具连接到这个指定的设备上,其详细的步骤会因设备型号的不同而有所不同。尽管通常的处理步骤都是先通过“通断测试器”(continuitytester)识别出“ChipConCC2540”芯片,然后将一个“好点”(fine-point)连接到目标“ChipConCC2540”芯片的引脚上。比如连接到DEBUG_DATA引脚上,也就是“ChipConCC2540”芯片的第46引脚上,然后依次测试其他的“阻焊层”(soldermask)、通孔(复杂的电路板内部的线路一般都是分层的,通孔就是从顶部一直贯穿到底部的孔)和分支引脚来测试导通性。在最糟糕的情况下,可以使用类似医用注射管这样的工具来探测“ChipConCC2540”芯片的引脚,相比之下,确认在开发调试过程中使用的焊点或者分支引脚会相对容易一些。一旦确认了第一个目标引脚同电路板的连通性后,对其余的引脚重复这些步骤。确认完每个引脚后,根据表2中的描述使用小的跳线将GoodFET同引脚连接起来。图26是一张GoodFET工具同“ChipConCC2540”芯片的连接图,其中通过连通性测试确认了两个分支引脚。

图26GoodFET工具与ChipConCC2540芯片的连接图

在确认了从芯片上读到的数据以后,就可以将目标设备上的所有内存中的内容,转储到外设上硬盘的一个dump文件中,其操作格式和命令效果如下所示:

一旦您已经完成了对“ChipConCC2540”芯片中RAM内存数据包的提取,就可以从目标设备上复制出来,生成到一个文件中,继续从设备中提取感兴趣的敏感信息了。

3、设备RAM数据分析

在最近几年公开发表的论文中,讨论的都是如何使用取证分析的方法从设备的RAM内在中获取敏感的信息。在微处理器的世界里,它们的理论是相同的,包括搜索数据模式、使用“熵分析技术”(entropyanalysistechnique)测量数据的随机性。此外,由于可用于处理的数据量只有8K,而不是好几GB的内存,所以使用暴力破解的方式也未尝不可。

KillerBee密钥还原工具zbgoodfind

首先,我们需要安装binutils工具包,以便从中解压出objdump工具,其操作命令如下所示:

接下来,我们将GoodFET工具转储输出的内容,由十六进制文件转换为二进制文件:

最后,我们在内存转储文件中查找存在的密钥,该文件是使用zbgoodfind工具捕获到的数据包转储文件,文件名为encdata.dcf,其操作命令及输出样例如下所示:

zbgoodfind工具既可以读取libpcap格式文件,也可以读取Daintree网络中“传感器网络分析器”所保存的格式。如果是读取前者格式,则使用“-r”参数;如果是读取后者格式,则使用“-R”参数。

在本例中,我们发现在6379次猜解后,最终成功破解了用来解密数据的“网络密钥”。一旦密钥值被还原,攻击者既可以破解所有加密的内容,也可以亲自完成对数据的加密,所以,这时的攻击者可以返回到目标网络中,在通信数据包都被加密的情况下进行侦听,或者伪造一个合法设备,加入到要攻击的ZigBee网络中。

防御硬件攻击

在这种攻击中,我们高调地突出了实物盗取ZigBee设备,以及通过还原加密的密钥原材料的方式来攻击硬件的所有步骤。那么对于这种方式的防御也只能对症下药,从物理安全的角度来看,可以通过传统的视频监控和防盗技术防止ZigBee设备的盗窃,这包括视频监控、保安看守、硬件上锁,以及设备栓绑等生活中的非技术手段。然而这些措施通常不能很好地与ZigBee技术相融合,在很多情况下,这些设备暴露在一个未受保护的物理区域内,或者在另一些情况下,因为消费者需要使用这些系统,而使得这些设备干脆就在消费者的手中。比如,在一个零售商店里,可以刷卡的自动结账和付款设备(俗称“POS机”)就属于这种情况。由此可见,设备的实物盗取方式是完全可能的。

针对上述破解攻击,可以考虑引入“防篡改检测系统”(Tamper-proofdetectionsystem),比如只要ZigBee设备被打开,那么系统自动销毁无线芯片。尽管这些“防篡改检测系统”的成本对于ZigBee设备来说都是无法接受的,但这样做无疑会增加入侵者实施攻击的难度。同样还可以采取物理防护措施,比如使用黑色的绝缘环形树脂将电路板包裹起来,但是这些措施都不是万无一失的,因为有许多方法可以在不破坏电路板的情况下去除环形树脂胶带。

THE END
1.Excel基础操作小技巧这里有多少行数据,便会填充到多少,如果我们需要从1填充到10000,则可以在单元格里面输入1,然后点击开始菜单栏右边的填充,选择序列 在填充的序列里面,选择列,然后步长从1,终止至10000即可 2、删除行后,序号不变 有时候我们会数据进行删除,然后又不想重新弄一次序号,希望序号能自动的接上,那么我们可以使用公式: ...https://www.meipian.cn/2f0gnkph
2.财务会计总账EASCloudV8.6【BOS基础交互_基础数据】 【BOS基础交互_企业门户管理】 【BOS基础交互_同步工具】 【BOS基础交互_登陆认证】 【BOS基础交互_移动商务】 【BOS基础交互_辅助数据】 【BOS基础交互_内容管理】 财务会计与共享 【财务会计_总账】 【总账三个中心&核算机器人】 ...https://vip.kingdee.com/article/428504861009549056
3.Excel常用函数公式及技巧(1)=LEN(B2) 下拖,单击C2,单击工具栏上的“升序排列”即可,删除C列。 9.排序字母与数字的混合内容 日常使用中,表格经常会有包含字母和数字混合的数据,对此类数据排序时,通常是先比较字母的大小,再比较数字的大小,但EXCEL是按照对字符进行逐位比较来排序的,如下表:A7排在第5位,而不是第1位。排序结果无法令人满...https://www.360doc.cn/article/7785337_408786493.html
4.excel常用函数公式及技巧搜集2阳光风采=LEN(B2)下拖,单击C2,单击工具栏上的“升序排列”即可,删除C列。 排序字母与数字的混合内容 日常使用中,表格经常会有包含字母和数字混合的数据,对此类数据排序时,通常是先比较字母的大小,再比较数字的大小,但EXCEL是按照对字符进行逐位比较来排序的,如下表:A7排在第5位,而不是第1位。排序结果无法令人满意。https://www.iteye.com/blog/freeskywcy-1181170
1.Excel中如何输入重号:轻松解决重复数据问题(excel重号如何输入...重号,即重复的编号或序号,这在处理大量数据时尤其常见。但是,如何才能在Excel中快速输入重号呢?以下是一些简单有效的方法。 首先,我们可以使用填充柄来输入重号。填充柄是位于单元格右下角的小方块。选中包含初始编号的单元格,将鼠标指针移动到填充柄上,直到指针变成一个十字形。然后,按住鼠标左键拖...https://excel666.zaixianjisuan.com/question/excelzhong-ru-he-shu-ru-zhong-hao-qing-song-jie-jue-zhong-fu-shu-ju-wen-ti.html
2.大数据常见面试问题汇总江阴雨辰互联1.5.5 Kafka数据重复 1.5.6Kafka如何保证数据有序or怎么解决乱序 1.5.7 Kafka分区Leader选举规则 1.5.8 Kafka中AR的顺序 1.5.9 Kafka日志保存时间 1.5.10 Kafka过期数据清理 1.5.11 Kafka为什么能高效读写数据 1.5.12 自动创建主题 1.5.13 副本数设定 ...https://www.yc00.com/news/1698791689a880360.html
3.python如何实现排序,并标上序号python这篇文章主要介绍了python如何实现排序,并标上序号,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教+ 目录 python排序并标上序号 需求:利用python实现排序功能 测试数据:data.csv 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 "id","date","amount" "1...https://www.jb51.net/article/251074.htm
4.Word表格处理技巧大全21 Word表格自动排“序号” 在Word表格中,经常需要填写一些有规律的数据,如序号,可不可以让Word自动完成呢? 答:可以的。首先在Word表格中选中要填序号的区域,再单击“格式→项目符号和编号”命令,在打开的“项目符号和编号”对话框中选择“编号”选项卡,根据需要选择好编号形式后,再单击框下边的“自定义”按钮,出...https://www.oh100.com/kaoshi/bangong/525718.html
5.字段常见编辑/设置排他 在调查问卷场景中,若你希望填表者选择其中一个选项时,其他选项自动变为不可选,与其它选项互斥,可以使用此功能,例如:选择「以上都不是」。 目前支持的字段:「多项选择」「图片多选」。 点击体验示例表单 数据校验 白名单 如果你的表单只希望公司内部人员或名单内的人才能填写,「字段白名单」开启后,可限制只...https://help.jinshuju.net/articles/field-edit
6.程序员看了都要收藏系列:Mysql进阶知识干货笔记!实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERTE,UPDATE,和DELETE。因为更新表时,MYSQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的...https://maimai.cn/article/detail?fid=1429193820&efid=ohukMsGiKGFGyfCQMSvrJg
7.二年级上册数学教案通用[15篇]作为一无名无私奉献的教育工作者,可能需要进行教案编写工作,教案是保证教学取得成功、提高教学质量的基本条件。那么应当如何写教案呢?以下是小编精心整理的二年级上册数学教案,欢迎阅读与收藏。 二年级上册数学教案1 教学目标 知识与技能: (1)结合具体情境中了解乘法运算的意义,认识乘号、知道乘法算式中各部分的名称。 https://www.fwsir.com/jiaoan/html/jiaoan_20240525110122_3853243.html
8.excel怎么自重排序5、我们就会看到Excel表格自动生成排序序号了。 2.如何在Excel中让数据自动排序?各位好,祝各位周末愉快在下想 自动排序是可以实现的,这需要用到 worksheet_change 事件。 在“自动排序”工作表模块中输入以下代码: Private Sub Worksheet_Change(ByVal Target As Range) Dim h As Range 'If Target。 Count > 1...http://m.z8000w.com/ningxia/ningxia660195766.html
9.新手档案员如何整理档案?编制档案目录,建立档案目录数据库 以“件”为保管单位的文书档案,应依据档号顺序编制归档文件目录。目录编制应准确、详细,便于检索。 归档文件应逐件编目。归档文件目录设置序号、档号、文号、责任者、题名、日期、密级、页数、备注等项目。 (1)序号:填写归档文件顺序号。 https://da.xzdw.gov.cn/zwxx/xyltyw/202402/t20240223_443926.html
10.wpsexcel查重功能并且相同的排序结果是数字的,就是有重复,显示出对应数据在数据表中的行号,空白就是没有重复。 问:wps表格让相同数据用相同的序号排序? 答:wps表格让相同数据用相同的序号排序,根据图片内容来看,可以使用SUMPRODUCT函数和COUNTIF函数组合公式,或是IF函数公式来完成。 SUMPRODUCT函数及COUNTIF函数组合公式如下: ...https://www.lw50.cn/article/1d2bd655d892b4dc435ca97c.html
11.c/c++笔试题51CTO博客存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程用于实现频繁使用的查询、业务规则、被其他过程使用的公共例行程序存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快...https://blog.51cto.com/u_15329201/3418943
12.排列序号low序号排列序号II 给出一个可能包含重复数字的排列,求这些数字的所有排列按字典序排序后该排列在其中的编号。编号从1开始。 样例 给出排列[1, 4, 2, 2],其编号为3。 题目分析:这题和前面一题的区别为中间有重复数字出现,则产生的变化为每一位的权值变了。不再是阶乘,必须在原有阶乘的基础上除去交换之后所得右边...https://blog.csdn.net/u014115273/article/details/51418120
13.WPS表格的序号不连续了,怎么能自动排序.8条回答:【推荐答案】如果WPS表格的序号不连续了,可以尝试以下方法来自动排序:1.使用自动筛选功能:在选中要排序的数据区域后,点击“数据”,选择“筛选”选项,在弹出的对话框中勾选“自动筛选”,然后点击“确定”。2.使用自定义排序:选中要排序的数据区域后,https://wap.zol.com.cn/ask/x_21097012.html
14.2024年重庆市公务员考试报考指南22.是否会公布每个职位的报名数据统计情况?在哪里查看? 为方便广大报考者了解各个职位的报名情况,重庆市人事考试中心将从报名开始日的第2天(2月2日)起至2月4日止,每天上午11:00左右,在重庆市人力资源和社会保障局网站首页“重庆市2024年度考试录用公务员专栏”,公布各职位报名相关数据。此后,不再公布每日报名数据,...https://www.chinagwy.org/html/gdzk/congqing/202401/76_618798.html