你好,我是Sayli Ambure,刚进入信息安全领域的新人。网络应用和物联网/硬件的通信安全一直是我想探索的东西,而本文也是关于我对某款智能设备的研究。
我并不会过多描述低功耗蓝牙(BLE)的工作原理是啥(已经有很多人科普过了),就让我们直接开始吧。
此次目标是一个非常便宜且容易获得的智能手表(手环?),我将简单地分析它,并与其交互。
市面上不少智能手表的外表都极其相似,而我最常见到的是M4手表,只需5美元,来自中国。
得到通讯数据
第一步,尝试获得移动应用和设备之间的通信。
即使你没有任何专业、昂贵的嗅探器,也没关系,android可帮你嗅探蓝牙通信。
你可以在开发者选项——>BT Snoop
中找到它。具体获得相关PCAP的方法可能取决于设备的不同。
一旦得到你的PCAP数据,在Wireshark中打开它,你会看到所有的蓝牙通信。我们只关注其中和BLE有关部分,即GATT或ATT协议。
通过btatt
过滤器,就可以筛选出ATT协议,我们现在不需要任何其他种类的蓝牙通信。
现在寻找发送写请求
的数据包,因为应用已发送一个写请求
来设置时间和发送一些通知到设备。
从上图可以清晰看到“发送写请求”,现在选择写请求
的操作码,将其作为过滤器,很快你就可以看到所有正在发送的数据。
这里请重点注意一下Handle
和Value
,我们将在下一节讨论它们的重要性。
上述操作完成之后,你可以使用scape-radio移动数据,或者手动复制粘贴所有数据,并尝试发送测试。
我编写了一个python脚本来提取关键数据,你可以使用它来执行重放攻击或深度分析。
https://github.com/the-girl-who-lived/ble_pcap_dissector
连接设备
首先需要设置工作机的蓝牙,使用hciconfig
命令查看它是否正常工作。
如果有任何异常,你也可以使用它来重置接口。
hciconfig hci0 reset 或 hciconfig hci0 up
为了连接到设备,我使用一个很棒的框架,名为ExplIoT,你可以从这里下载。
运行命令expliot
启动工具,并通过run ble.generic.scan
扫描BLE设备。
现在,你可以看到该设备的MAC地址,以进行连接。
简单介绍一下BLE以及它的交流方式。
重点有三样:Service、Characteristics和data。
-
Service就像一块有“整合”意义的内存(由多个Characteristics**而成)。
-
Characteristics是每个数据点的内存地址。
-
Data是控制设备的值。
现在让我们看看如何使用expliot来查看这些信息
Service列表:run ble.generic.scan -a <mac address> -s
Characteristics列表:run ble.generic.scan -a <mac address> -c
从上节可以看到,和写请求
有关的数据包中的handle都为0x0e
。
因此,设备的写入命令是:
run ble.generic.charwrite -a <mac addr> -n <handle> -w <value>
分析通信数据
既然我们已经了解如何使用Expliot框架向设备写入数据以及捕获数据包,那现在是时候分析通信内容了。虽然以上流程可以对任何BLE设备进行分析,但不同厂商不同产品的数据格式是不同的,需要专门针对某一种进行分析。
分析通信数据的方法之一就是一个一个地发送所有的数据,看看是否引起了设备的任何变化。对于这个智能手环,我能够更改时间、日期或显示通知以及某些特定内容。
我试着重放所有的数据包,发现有一个数据包会改变日期和时间。
Handle: 0x0e Value: ab0b0401130c030d313beb
当我试图改成其他时间时,它并不生效,我意识到存在CRC-8校验,要想生效需要和CRC-8配合生成新数据包。
为了分析数据,我将其分隔为字节,并转换为十进制,观察它是否与智能手表中更改的时间/日期有相似之处。
第一个字节表示包头,因为所有的数据包都一样。
第二个字节表示数据包的长度。
第三个字节仍然是个谜(如果你有任何想法,请告诉我)。
第四个字节表示消息、时间或通知之类的类型。
第五个字节是年。
第六个字节是月。
第七个字节是日。
第八个字节是24小时格式的小时。
第九个字节是分。
第十个字节是秒。
第十一个字节是CRC Maxim。
然后,我成功把时间、日期、小时、分和秒都改为11!
https://youtu.be/hXjGk9KFjaM
这让我很是兴奋,接着编写开始编写脚本,随机显示时间和日期。
https://youtu.be/yOEsQ9n9fqY
除了以上,我还发现了一些有趣的东西(发送通知)!
Value: ab1417100201047361796c6969206f74686572c3 ab111710020204753a5368646e646e642d
要成功发送通知,我们需要发送两个或更多的数据包,同样也需要CRC校验(可自定义通知)。
ab 11 17 10 02 02 04 753a5368646e646e64 2d
第一个字节是头部。
第二个字节是通知payload的大小。
第三个字节是数据块的大小。
第四个字节是包的类型。
第五个字节是所需的通知payload的数量。
第六个字节是按第五个字节所计算的payload数。
第七个字节表示通知的类型:消息或whatsapp或电话。
第八个字节是ascii消息本身。
最后一个字节是CRC MAXIM。
https://youtu.be/3DSCfUKZ4Po
这个设备还有更多的可更改的设置,如闹钟和启用丢失模式,当然控制原理都一样的。
谢谢你的阅读!如果你有疑问,请在LinkedIn或Twitter上联系我!
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场:https://nosec.org/home/detail/3715.html 来源:https://medium.com/@sayliambure/hacking-a-5-smartband-824763ab6e8f
来源:freebuf.com 2019-12-31 17:15:00 by: 白帽汇
请登录后发表评论
注册