Zigbee安全基础篇Part.3
原文地址: https://www.4hou.com/wireless/14294.html
导语:在之前的文章中提供了ZigBee协议及其安全功能的简要概述。在本文中,我们将探讨可在ZigBee网络上执行的ZigBee漏洞和一些实际攻击。本文还概述了可用于评估ZigBee协议和网络的工具。
介绍
在之前的文章(ZigBee安全:基础篇Part 1和Part 2)中提供了ZigBee协议及其安全功能的简要概述。ZigBee联盟在实现机密性、完整性和身份验证方面取得了令人瞩目的成就。但是,它未能提供全面的安全套件。在本文中,我们将探讨可在ZigBee网络上执行的ZigBee漏洞和一些实际攻击。本文还概述了可用于评估ZigBee协议和网络的工具。
ZigBee漏洞
ZigBee网络中的漏洞可归因于协议问题(协议功能选择的某些组合使网络易受攻击)或开发人员对协议的不良实现。常见的漏洞包括:
实现漏洞
不安全的密钥存储:ZigBee协议的安全性是基于其密钥安全存储的假设。通常,协调器预先配置有网络密钥,并且其他设备(例如路由器和终端设备)预先配置有链路密钥。如果密钥(网络,链接或主服务器)被不安全的存储; 从设备的固件中提取密钥将变得简单。因此,当节点以这种方式被破坏时,黑客可以提取网络密钥并危害整个网络或提取链接密钥并获得该设备的所有单播通信。
不安全的密钥传输:在标准安全模式下,加入ZigBee网络的任何节点都通过无线方式获取其网络密钥,有时以明文形式获取。这可以仅通过窃听网络来获得密钥。由于网络密钥在所有设备之间共享; 攻击者拿到网络密钥,将危及整个网络。
重用初始化向量(IV):攻击者可以使用相同密钥的重用初始化向量值发起攻击,该漏洞是ZigBee从802.15.4遗留的安全漏洞。使用相同密钥重用nonce(随机数)值(初始化向量(IV))会引入一个漏洞,使攻击者能够在AES-CTR模式下使用其密文恢复两个明文。恢复两个明文是一个简单的操作,XOR操作在两个使用相同的密钥和随机数值加密的密文。这种攻击被称为同一次攻击。有两种情况允许使用相同的密钥重用nonce:
多个独立访问控制条目:802.15.4无线电设备具有访问控制列表(ACL),用于配置要使用的安全套件。由于每个芯片具有多个独立的ACL,因此相同的IV或nonce可以使用相同的密钥重用。
重新填充访问控制表:当ZigBee设备无意中断电时会发生这种情况,导致ACL条目丢失以及需要重新填充条目。如果在电源故障发生后最后的nonce状态未知,则系统可能会将nonce状态重置为默认值。此重置操作增加了使用电源故障前所使用的密钥重用相同的随机数的可能性,并可能导致相同的随机数攻击。
以明文形式发送安全头:辅助帧提供语义安全性和重放保护。当攻击者在不知道生成MIC的密钥的情况下构造无效的安全头时,尽管完整性攻击失败,但是接收的设备实际上消耗了一定量的电量接收和处理那些虚假消息。如果攻击者向受害设备发送大量此类精心构造的消息,则该设备将会分配大量电量,导致其电池耗尽。这种攻击能够将设备的电池寿命从数年缩短到数天[幽灵攻击或幽灵无线]。
可预测的传感器轮询速率:ZigBee终端设备在一段时间内保持睡眠模式以节省电量。他们被定期唤醒,向协调器轮询数据输入或协调器信标时被唤醒。但是,了解轮询速率将有助于攻击者定期将构造的消息中继到终端设备,终端设备并不需要这些消息,从而迫使终端设备分配多余的电量用于轮询(当设备从睡眠模式切换到活动模式时会分配电量)并处理接收的消息。(Vidgren等人演示了攻击者在知道采用的传感器轮询速率后可以将传感器的电池放电。)
协议漏洞
制造商使用默认链接密钥值来为所有ZigBee设备提供互操作性。例如,用户将新的ZigBee设备添加到他的网络但新设备没有与之关联的特定授权的情况下,ZigBee网络将允许默认链接密钥在启动时回退时间。因此,攻击者可以使用未知类型的设备加入网络,并收集缓和网络功能所需的数据。SEC Consult的研究还表明,可以通过互联网直接访问数以百万计的物联网设备,并将其归因于不安全的默认配置。
未经身份验证的确认数据包(ACK): 802.15.4 / ZigBee规范没有为确认数据包提供完整性和机密性保护。因此,未经身份验证的远程攻击者可以欺骗确认数据包来使远程节点相信目标节点收到了确认。这种攻击(联合洪水)是中间人攻击的直接后果。
中间人攻击实例:发送方设备向接收方发送数据包,并等待确认接收方已收到数据包的ACK然后继续其操作。如果没有收到ACK,发送方将再次发送数据包。但是,如果网络受到威胁并且ACK数据包未经过身份验证,则攻击者可以拦截数据包并向发送方发送假的ACK。从而,迫使发送方将所有后续数据包发送给攻击者。
CSMA / CA 权衡:在MAC层,攻击者可以使用帧来泛洪信道,从而迫使网络拒绝设备之间的任何通信。这是因为ZigBee使用CSMA / CA(如果它以非信标模式运行),并且如果信道繁忙,则使用CSMA / CA通信的设备一直重试,从而导致无意的DDoS。网络中的暴露和隐藏节点问题也可以被认为是CSMA / CA机制的不足。
未加密密钥:当没有经过预配置的设备加入网络时,信任中心会发送未加密的单个网络密钥(默认链接密钥)(至少在住宅模式下)。这种一次性传输未受保护的密钥将导致短时帧攻击。如果密钥被攻击者嗅探,则活动网络密钥会受到损害,因此整个ZigBee网络通信都会受到损害。
Vidgren等人在ZigBee网络上展示了嗅探攻击,该网络通过节点(Atmel RZRAVENUSB)与ZigBee设备交互并收集其无线传输和交互来发送未加密的网络密钥。随后使用开源工具(KillerBee)分析捕获的分组来获得网络密钥。
可预测的PAN ID和有限的信道:在ZigBee协议中,重新加入的设备时,如果已保存的参数与PAN ID和网络运行的信道相匹配,则会加入网络。PAN ID是一个64位值,可以被暴力猜解(需要一些处理时间才能找到正确的PAN ID,但最终攻击者可以暴力猜解出正确的值)。此外,ZigBee操作的频道号限制为16,因此,攻击者很容易找到正确的网络频道。
重放保护不足:你可能会认为ZigBee具有重放攻击保护机制作为其规范的一部分; 但是,802.15.4规范具有有限的重放保护机制,即使加密的消息也无法彻底防御这种攻击。因此,狡猾的攻击者可以重放任何先前观察到的流量(ZigBee具有阻止攻击者修改数据包的优势),直到密钥轮换(假设802.15.4没有启用身份验证机制)。重放攻击伴随着其他几种攻击:
DDoS:恶意用户可以在网络中的某一点接收数据包,然后在其他区域重放这些数据包来干扰整体网络功能(虫洞攻击)
IEEE 802.11网络中的临时密钥完整性协议(TKIP)MIC攻击是攻击者通过使用多次重放一次一个字节的解码有效载荷并观察MIC失败时的响应。
多年来,研究人员还成功的使用Joshua Wright制作的“Killer Bee”工具实施了重放攻击,并清楚的说明了它可能造成的严重问题。例如,Fitbit,起搏器和胰岛素泵等医疗设备重放旧信息可能导致错误的输出和危险事件(生命损失)。
信号干扰:虽然ZigBee已经建立了某些网络干扰保护技术,但它们并不全面且执行速度慢,允许攻击者控制网络运行的频率信道。这种现象在大型网络中很频繁,可以非常有效的检测信号。
未经授权的网络调试:ZigBee设备连接到第一个可用的网络,无需ZigBee设备用户的任何交互。因此,可以强制ZigBee设备加入虚假网络(即使不知道ZigBee设备在重新加入网络时所期望的活动密钥)。攻击者可以通过向设备发送“reset to factory default”命令并等待设备查找要连接的ZigBee网络来执行此操作。
缺少DDoS保护机制:拒绝服务(DoS)攻击导致节点拒绝所有收到的消息。在ZigBee网络中,DoS可以通过以下方式实现:
最大化帧计数器:攻击者编写包含随机内容(如果是合法内容则更好)的消息作为加密的有效载荷(不知道安全密钥),将帧计数器设置为最大值,并将其发送到节点。通过将帧计数器设置为最大值,发起攻击后到达节点的任何合法帧将被接收方设备自动拒绝,因为接收到的消息的帧计数器将小于节点时记录的帧计数器。在未验证MIC数据包的情况下,可以进行此攻击。
使用消息(合法的或欺骗性数据包)或帧对网络发起洪水攻击。Krivtsova等人提出了广播风暴攻击,是通过发送大量广播数据包来堵塞网络。
通过故意发送消息来构建人工路由路径或将循环引入合法传感器的路由过程,改变路由表将网络的所有流量重定向到伪造设备(sinkhole攻击)。这种攻击可以阻碍设备之间的分组传输,从而导致DDoS。
使用干扰技术(信号干扰,反射干扰,更改功率谱密度等)诱使用户启动恢复出厂设置或阻止设备通信。此技术还可以强制重新加入并重新建立攻击时间帧来嗅探网络密钥。
重用链接密钥:ZigBee允许重用链接密钥来重新加入网络。因此,它可以使攻击者使用单独的设备复制设备的寻址凭证,并欺骗网络层发起不安全的重新加入请求。这会导致信任中心将使用先前使用的链接密钥加密的网络密钥传递给克隆的设备。因此,攻击者可以完全获得网络密钥,从而入侵整个网络。
TouchLink出厂复位:合法的TouchLink发起者将factory-reset命令发送到已经在网络中的目标节点,这会导致目标节点从当前网络中被删除并移动到另一个网络。这个过程被称为偷窃。然而,它提供了一个机会,未经授权的人可以移动设备到他的另一个网络,来实现恶意意图。
隐私问题:ZigBee协议/网络与其他无线网络类似,容易受到统计攻击。收集网络流量可以在一定程度上准确的揭示所实现功能的性质,从而帮助攻击者执行他恶意行为。但是,对ZigBee网络的统计攻击也可能会损害隐私。例如,在家庭自动化系统中,攻击者可以收集信息以确定租户是否在家。此信息可以帮助攻击者执行更明智的抢劫计划。
渗透测试工具
本节介绍用于评估ZigBee协议/网络的安全稳健性的一些硬件和软件组件。
硬件
Bus Pirate和GoodFET:是物理攻击所必需的。它有助于通过物理攻击获取加密密钥。[使用 Bus Pirate和OpenOCD检查 JTAG调试 ]
RZUSBSTICK:用于嗅探和重放攻击的低成本ZigBee无线电工具。但是,它有时会停止记录数据包。
Chibi:带有集成ZigBee无线电的微控制器。
Memsic TelosB(TPR2420):可以从建筑物外部接收帧。如果是为了战争目的,TelosB似乎是更好的选择。但是,它偶尔会有丢包的现象。
软件
KillerBee:一套软件工具,允许复杂的拦截(KillerBee提供的嗅探器软件并不总是可以捕获所有802.15.4 / ZigBee帧),分析甚至传输802.15.4数据包。还提供了注入和重放流量,攻击密码系统等工具.KillerBee可以很好地与Scapy和Sulley这样的fuzzer一起使用。
Scapy:是一个用Python编写的通用数据包操作工具。它的两个主要功能是创建标准兼容数据包并将接收到的数据包解析到其字段中。如果没有像Scapy这样的工具,每个数据包都必须一点一点的手动组装。
Sulley:由多个可扩展组件组成的fuzz引擎和模糊测试框架。该框架的目标不仅是简化数据表示,还简化数据传输和分析。
SECBEE – ZigBee securityF测试工具。基于scapy-radio和killerbee。它使测试人员能够检查加密网络并自动执行ZigBee特定测试,例如离开或加入网络,重置为出厂默认值或搜索不安全的密钥传输。
Z3sec:是一款可以帮助你测试使用ZigBee标准的物联网(IoT)设备的工具。你可以成为被动窃听者, 从最远130米的距离提取关键材料。你可以利用合法的触摸链接功能来触发识别操作,重置为出厂默认设置,更改无线信道以及将启用触摸链接的设备加入另一个或不存在的网络。
Api-do:来自达特茅斯信托实验室的ZigBee和802.15.4安全审计工具。
模糊测试工具:如果设备未实现安全的错误处理机制,模糊测试可能会导致设备无法使用。在另一面来看,这将成为一次成功的DoS攻击。
结论
本文中列出的漏洞是错误实现或缺乏“设计安全性”实现的结果。虽然列出的漏洞可以被远程利用,但也可以攻击微控制器和ZigBee无线电,因此,ZigBee设备通常容易受到侧信道攻击和其他物理攻击。因此,对任何ZigBee都需要实施网络安全的原则至关重要,人们也必须认真对待物理安全性。
评估和验证对于开发的每个步骤都是至关重要的,列出的工具可以帮助实现这一点。尽管列出的工具看起来很理想,但它们并不像你预期的那样全面——接收、解析、执行和发送响应帧的时间可能与ZigBee设备所需的时间不匹配。在了解了ZigBee协议、安全措施以及可以在ZigBee设备上执行的各种攻击之后,在接下来的文章中,我们将研究使用RZUSBSTICK设置KillerBee,并使用我们新发现的ZigBee攻击方法和ZigBee渗透测试工具进行ZigBee渗透测试评估。
本文翻译自:https://research.kudelskisecurity.com/2017/11/21/zigbee-security-basics-part-3
Zigbee安全基础篇Part.3的更多相关文章
- Zigbee安全基础篇Part.1
原文地址: https://www.4hou.com/wireless/14211.html 导语:ZigBee是一种开源无线技术,用于低功耗嵌入式设备(无线电系统).本文探讨了ZigBee协议的可用 ...
- Zigbee安全基础篇Part.2
原文地址: https://www.4hou.com/wireless/14252.html 导语:本文将会探讨ZigBee标准提供的安全模型,用于安全通信的各种密钥.ZigBee建议的密钥管理方法以 ...
- C#多线程之基础篇3
在上一篇C#多线程之基础篇2中,我们主要讲述了确定线程的状态.线程优先级.前台线程和后台线程以及向线程传递参数的知识,在这一篇中我们将讲述如何使用C#的lock关键字锁定线程.使用Monitor锁定线 ...
- 一步步学习javascript基础篇(0):开篇索引
索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...
- 2000条你应知的WPF小姿势 基础篇<15-21>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师,对C#和WPF有着极深的热情.最为出色的是他维护了两个博客:2,000Things You Should Know ...
- ABP框架实践基础篇之开发UI层
返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 说明 其实最开始写的,就是这个ABP框架实践基础篇.在写这篇博客之前,又回头复习了一下ABP框架的理论,如果你还没学习,请查看AB ...
- C#多线程之基础篇2
在上一篇C#多线程之基础篇1中,我们主要讲述了如何创建线程.中止线程.线程等待以及终止线程的相关知识,在本篇中我们继续讲述有关线程的一些知识. 五.确定线程的状态 在这一节中,我们将讲述如何查看一个线 ...
- C#多线程之基础篇1
在多线程这一系列文章中,我们将讲述C#语言中多线程的相关知识,在多线程(基础篇)中我们将学习以下知识点: 创建线程 中止线程 线程等待 终止线程 确定线程的状态 线程优先级 前台线程和后台线程 向线程 ...
- iOS系列 基础篇 03 探究应用生命周期
iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...
随机推荐
- PHP获取当月天数,获取当月的每天的开始和结束的时间戳,获取当月每号
由于经常要写导单和数据分析功能,所以要获取什么时间的数据,想什么当天,周,年,月之类的时间格式都很好获取.我今天在这里为大家提供的是当月每天的开始和结束的时间格式. 希望能帮到大家!!! # 获取当月 ...
- Oracle之多表查询
-多表查询 1.交叉连接 select * from t_class for update; select * from t_student for update; select for update ...
- c语言指针的指针
c语言在函数传递时常常使用如下的形式. void get(int **p) 对于这个形式,我想过为什么不能够使用 *p 作为形参呢.下面我们看一下代码和执行结果 void get(int **p) { ...
- DATA 转 16 进制
// 转 16进制 编码 NSData *data = [NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMo ...
- JavaScript---复选框反选全选
Script <script type="text/javascript"> /*直接使用document.getElementsByName("c1&quo ...
- dvs-panotracking编译运行
编译运行dvs-panotracking > 编译dvs-panotracking之前首先需要安装imageutilities . 源码下载 https://github.com/VLOGrou ...
- 使数据可供ArcGIS Server访问
内容来自ESRI官方文档(点击访问),简单总结如下: 1 ArcGIS Server用于发布服务的数据必须存储在服务器可以访问的位置: 2 这样的位置有三种类型: 本地路径:将数据本地存储在每台 Ar ...
- 01-JVM内存模型:程序计数器
一.JVM模型概述 java虚拟机(JVM)在java程序运行的过程中,会将它所管理的内存划分为若干个不同的数据区域,这些区域有的随着JVM的启动而创建,有的随着用户线程的启动和结束而建立和销毁.一个 ...
- ElasticSearch搜索引擎安装配置拼音插件pinyin
近几篇ElasticSearch系列: 1.阿里云服务器Linux系统安装配置ElasticSearch搜索引擎 2.Linux系统中ElasticSearch搜索引擎安装配置Head插件 3.Ela ...
- Kotlin Android Extensions: 与 findViewById 说再见 (KAD 04) -- 更新版
作者:Antonio Leiva 时间:Aug 16, 2017 原文链接:https://antonioleiva.com/kotlin-android-extensions/ 在 Kotlin1. ...