BLE-GATT浅析

BLE的应用范围越来越广,特别是在移动智能设备上。
现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上。GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。
GATT负责两个BLE设备间通信的数据交互,是对功能数据最为重要的部分,GATT包括三层:
PROFILE、CHARACTERISTIC、SERVICE
CHARACTERISTIC是每个功能的对象,每个Servie都包含一个或多个CHARACTERISTIC,而PROFILE是他们的大类集合。(如图)

BLE-GATT浅析

 

example:小米手环

在Ubuntu下执行 ‘hcitool lescan’可扫描附近的BLE设备。

BLE-GATT浅析

我们来抓包分析下小米手环在交互时产生的数据,然后方便进行分析。

BLE-GATT浅析

我用的设备是USBdongle,嗅探数据为SmartRF格式:

BLE-GATT浅析

但是这种格式,使用起来很不方便,可以使用‘tibtle2pcap’转换成libpcap的格式。

BLE-GATT浅析

当你安装完Bluez协议栈后会给你自带两个工具,一个是hcitool,一个是Gattool。这两个工具本作为调试工具。特别是Gattool,它可连接蓝牙设备对其进行操作。所以我们可以对其数据进行分析,找出这些控制指令,然后重放这个指令。

BLE-GATT浅析

经过抓包分析,找到了一处‘ATT Write Command’控制指令,通过数据得知该 ‘Handle’Vul为:0x0051 还有一处‘Alert level:Hight Alert(0X02)
根据蓝牙官方GATT CHARACTERISTIC文档描述.

BLE-GATT浅析

这是一种警报级别,也就是说小米手环的震动就是根据这个数值分为震动级别。
有个APP是‘LightBlue’。也可以做到这一点,但不是全部…例如下面的蓝牙灯泡就不可以。

BLE-GATT浅析

演示Demo
https://v.qq.com/x/page/c0501jtxfkm.html

example:蓝牙灯泡
灯泡分析与小米雷同,其实只要读懂了GATT,一半的设备都可以轻易的被‘黑’。
通过扫描确定其MAC地址。

BLE-GATT浅析

后对其目标进行设备进行数据分析,寻找write字段信息分析

BLE-GATT浅析

跟踪字段信息并寻找其VULE字段值

BLE-GATT浅析

抓包分析灯泡数据:
还是去分析它的Write Command,其‘Handle’(操作句柄)为0x0019,数据值为‘08004701470147010000’
Wirte Command与Write Request是有区别的,一个是写命令,一个是写请求,就以wirete command为例。
test vulue:
08004701470147010000
08000d07470147010000
08004701b223c64c0000
(PS:一些其他品牌的灯泡变色可能是根据RGB颜色对照表)
这个灯泡做了一些校验吧,若不通过APP直接用手机自带BLE连接会导致密钥不匹配。

BLE-GATT浅析

使用Gattool可以直接操控灯泡开关,以及变色,若自己写个脚本,则可以让灯泡连续开关变色。。。
放个简单的Demo:
https://v.qq.com/x/page/g0501zyymd9.html
自己在家可以没事试着玩玩,没什么技术含量。

本文来自先知安全技术社区,经授权后发布,本文观点不代表MottoIN立场,转载请联系原作者。

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code