BLE监听与重放

IoT 3年前 (2021) admin
1,424 0 0



0x01.BLE协议


BLE监听与重放

在蓝牙 4.0 标准中,引入了一种称为 Low energy 的技术,专门针对在内存和功率受限的设备上运行的物联网和智能设备,可与传统蓝牙保持同等通信范围的同时,显著降低功耗和成本,蓝牙4.0被引入,也被称为Bluetooth Smart。

BLE监听与重放

BLE监听与重放

BLE协议栈如下:

BLE监听与重放



各层的功能描述为:


  • PHY层(Physical layer物理层):PHY层用来指定BLE所用的无线频段,调制解调方式和方法等

  • LL层(Link Layer链路层):LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点

  • GAP层(Generic access profile):GAP是对LL层payload(有效数据包)如何进行解析的两种方式中的一种,而且是最简单的那一种

  • L2CAP层(Logic link control and adaptation protocol):L2CAP对LL进行了一次简单封装

  • SM(Secure manager protocol):定义了BLE通信两端设备的配对方法和密钥分发的工作模式,提供了一系列加密算法,为BLE通信提供了加密、认证等安全保障

  • ATT(Attribute protocol):简单来说,ATT层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据

  • GATT(Generic attribute profile ):GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理

    在BLE协议栈中,开发者接触最多的就是ATT。
    GATT(通用属性)的具体格式如下:

    BLE监听与重放


  • Profile(配置文件):由一个或多个Service 组成,每个Service 可以看作是完成特定功能或特性的数据和相关行为的集合,由一个或多个Characteristic 构成。每个Characteristic 一般都包含一个数据或者一个公开行为,以及该数据的单位或者公开行为的单位

  • Serivice(服务):完成特定功能或特性的数据和相关行为的集合,由一个或多个Characteristic 构成。可分为Primary Service 和Secondary Service 两种类型:Primary Service 是公开此设备主要可用功能的服务;Secondary Service 是为设备提供额外辅助信息

  • Characteristic(特征):包含服务中使用的数据信息,包括如何访问该数据的属性方法、如何表示或显示该数据的格式信息等

    BLE监听与重放










这里使用一个BLE的实例,可以看到这里对应了两个Service,都是Unkown Service,并且第二个Unkown Service有两个Unkown Characteristic,可以看到第一个Unkown Characteristic的UUID和NOTIFY,READ,WRITE No RESPONSE的特征功能值。在BluetoothGatt类的函数中,可以找到对应相关的service和characteristic,所有的通信都是基于service和characteristic实现。




0x02.BLE协议监听



设备名称:智能灯泡

硬件设备:NRF52832

软件:Wireshark & LightBlue

基于NRF52823的使用说明安装,BLE相关的驱动及nRF Sniffer COM6通信接口

BLE监听与重放


安装完成即可使用Wireshark通过nRF Sniffer COM6接口监听到附近所有的BLE通信

BLE监听与重放

这里可以监听到有四个BLE设备,并且有一个是public的设备地址,另外三个是random的设备地址。对于如何确定这四个地址哪个是灯泡的设备地址,这里使用LightBlue的信号强度来进行判定

BLE监听与重放
BLE监听与重放


通过移动手机,可以看到随着距离的增加,BULE-F045DAF413E4的强度也在逐渐变低,通过这种方式简单的进行了判定,接下来通过wireshark进行监听,查看具体的BLE通信数据来进一步确认监听的目标是否正确。


BLE监听与重放

这里可以通过wireshark的btatt过滤规则,查看ATT层传输的数据。

BLE监听与重放

这里抓取到APP和灯泡建立连接的相关请求。接下来是我们关注的重点,也就是对应的APP具有的功能,例如开关等操作。接下来我们抓取灯泡开启的通信请求

BLE监听与重放

当点击开启功能时,抓到上述通信数据,

可以看到写入的Handle是0x0012,

写入的值是0e000000000000000000000403020181


接下来抓取灯泡关闭的通信请求

BLE监听与重放

点击关闭功能时,抓到上述通信数据,可以看到写入的Handle还是0x0012,写入的值是0e000000000000000000000404020180

这时可以猜测0x0012的Handle是控制灯泡开关的句柄,0e000000000000000000000404020180是关闭时传的值,0e000000000000000000000403020181是开启时传的值




0x03.BLE协议重放



设备名称:智能灯泡

硬件设备:SENA UD100

软件:gattool


将UD100连接到Ubuntu虚拟机中,可以查看连接的设备及设备对应的BD Address等信息

BLE监听与重放


使用如下命令与灯泡建立连接

$ gatttool -b f0:45:da:f4:13:e4 -I$ [f0:45:da:f4:13:e4][LE]> connect

BLE监听与重放


连接建立成功,则设备地址的颜色则变为蓝色,这时可以查看对应service和characteristics等相关的内容

BLE监听与重放


这里可以看到对应的service,这里使用NRF Connect APP也可看到一样的内容,服务内容一致

BLE监听与重放


通过之前的wireshark抓包分析可以猜测0x0012的句柄与灯泡开关有关,这里使用characteristics查看相关的所有描述符

[f0:45:da:f4:13:e4][LE]> characteristics

BLE监听与重放


这里就是我们重点进行关注的,也是尝试进行重放的句柄。


通过 char-write-req 重放对应句柄的值

[f0:45:da:f4:13:e4][LE]> char-write-req 0x0012 0e000000000000000000000404020181


BLE监听与重放

BLE监听与重放

可以看到灯泡成功被点亮




0x04.BLE Fuzzing



设备名称:智能灯泡

硬件设备:SENA UD100

软件:expliot-framwork(https://expliot.io/pages/expliot-framework)

通过gatttool,可以拿到所有的service和characteristics,对于不同的功能,发送对应句柄的对应值,即可重放对应的功能。通过BLE协议栈的分析,可以知道不同characteristics接受的值可以是任意数据,只要符合对应的值,即可启动对应的功能,例如灯泡的开关,那么如果传递的值不在其预期的处理范围是否能触发一些异常呢?


BLE监听与重放

针对这种情况,可以使用expliot-framwork框架,对不同的句柄,随机生成大量的数据进行fuzzing测试,看看是否能触发异常。

通过expliot启动框架

BLE监听与重放

可以看到其支持的功能包括扫描,写入,读取,通知,fuzzchar等功能,这里我们重点使用的是fuzzchar,其他的功能使用也十分简单

针对对应的句柄生成大量随机的char进行测试,这里使用如下命令:

ef> run ble.generic.fuzzchar -a f0:45:da:f4:13:e4 -n 0x0012 -w 0e00000000000000000000040402xxxx

BLE监听与重放

在fuzzing过程中,当发送值 0e000000000000000000000404020181 时,触发灯泡发生点亮

BLE监听与重放

BLE监听与重放


可以看到随机生成字符串。针对不同的目标,可能触发不同的异常,这里对于灯泡,通过fuzzing,测试到了关闭和开启的值,对于一些复杂的设备,甚至能触发crash,功能失效等效果。


BLE监听与重放
扫码关注我们

官网 

www.xinruisec.com

社区 

www.iotsec-zone.com

原文始发于微信公众号(IOTsec Zone):BLE监听与重放

版权声明:admin 发表于 2021年12月21日 上午8:02。
转载请注明:BLE监听与重放 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...