Btlejack:操作低功耗蓝牙设备的百宝工具箱

文章目录

  • 环境要求
  • 安装
  • 使用
    • 指定要使用的设备
    • 嗅探现有连接
    • 对新连接的嗅探
    • 干扰连接
    • 劫持 BLE 连接
    • discover 命令
    • read 命令
    • write 命令
    • ll 命令
    • PCAP 文件导出
    • 连接缓存
    • 使用 Wireshark 转储实时数据包
    • Raspberry Pi 上使用 btlejack 提示
  • Bluetooth LE 5 & 5.1 支持
    • 嗅探新的 BLE 5 连接
    • 嗅探现有的 BLE 5 连接
    • 干扰现有的 BLE 5 连接
    • 劫持现有的 BLE 5 连接

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̀

劫持 BLE 连接

你也可以使用-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 命令

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 命令

read命令接受单个参数,即与要从中读取的特征对应的值句柄:

btlejack> read 0x16
read>> 4c 47 20 77 65 62 4f 53 20 54 56

write 命令

write命令接受三个参数:

btlejack> write <value handle> <data format> <data>

支持的数据格式:

hex:十六进制数据(即“414261”)

str:文本字符串,可以用双引号括起来

ll 命令

最后一个命令允许你以十六进制形式发送蓝牙低功耗链路层PDU,如第6卷第B部分第2.4章中所述。

PCAP 文件导出

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

使用 Wireshark 转储实时数据包

Btlejack 2.0引入了一个新的-w选项,允许你指定FIFO路径(存在或不存在)以执行数据包的实时分析:

$ btlejack -c any -w /tmp/blepipe

你甚至可以同时使用FIFO和输出文件:

$ btlejack -c any -w /tmp/blepipe -o blepackets.pcap

Raspberry Pi 上使用 btlejack 提示

如果你之前已通过USB启用虚拟以太网(RNDIS),例如要通过USB设置Raspberry Pi Zero W,则需要再次禁用它(即从boot/config.txt中删除dtoverlay=dwc2,以及从boot/cmdline.txt中删除modules-load=dwc2,g_ether,然后重启sudo),否则会干扰嗅探器的USB连接。

Bluetooth LE 5 & 5.1 支持

此版本支持蓝牙低功耗版本5和5.1,尤其是版本5(CSA #2)中引入的新信道选择算法。但是,由于使用的硬件不支持从版本5添加的两个新PHY,因此它只能使用1Mbps未编码PHY模式来嗅探,干扰和劫持连接。

另外请注意,Btlejack中包含的CSA #2的当前实现暂不支持channel map更新。

嗅探新的 BLE 5 连接

Btlejack会自动检测所使用的信道选择算法,因此你不必担心,只需像往常一样捕获数据包。

嗅探现有的 BLE 5 连接

嗅探现有的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将与此连接同步并处理数据包。

干扰现有的 BLE 5 连接

这里没有什么新的东西,除了你必须使用-5选项指定攻击的BLE 5连接。

注意,你可以通过分别使用-m和-p标志来指定要使用的channel map和跃点间隔值来优化此攻击。两者必须同时提供,除非它们不起作用。

劫持现有的 BLE 5 连接

此时我没有设法劫持BLE 5连接,因为此攻击具有时效性。我的BLE 5设备使用0延迟,因此不会延迟并导致此攻击失败。

当我获取到一些合法的BLE 5设备时,我会改进这一点。

*参考来源:GitHub,FB小编secist编译,转载请注明来自一一网络博客

免责声明:务必仔细阅读

  • 本站为个人博客,博客所转载的一切破解、path、补丁、注册机和注册信息及软件等资源文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。

  • 本站为非盈利性站点,打赏作为用户喜欢本站捐赠打赏功能,本站不贩卖软件等资源,所有内容不作为商业行为。

  • 本博客的文章中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断.

  • 本博客的任何内容,未经许可禁止任何公众号、自媒体进行任何形式的转载、发布。

  • 博客对任何脚本资源教程问题概不负责,包括但不限于由任何脚本资源教程错误导致的任何损失或损害.

  • 间接使用相关资源或者参照文章的任何用户,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, 博客对于由此引起的任何隐私泄漏或其他后果概不负责.

  • 请勿将博客的任何内容用于商业或非法目的,否则后果自负.

  • 如果任何单位或个人认为该博客的任何内容可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明至admin@proyy.com.我们将在收到认证文件后删除相关内容.

  • 任何以任何方式查看此博客的任何内容的人或直接或间接使用该博客的任何内容的使用者都应仔细阅读此声明。博客保留随时更改或补充此免责声明的权利。一旦使用并复制了博客的任何内容,则视为您已接受此免责声明.

您必须在下载后的24小时内从计算机或手机中完全删除以上内容.

您使用或者复制了本博客的任何内容,则视为已接受此声明,请仔细阅读


更多福利请关注一一网络微信公众号或者小程序

一一网络微信公众号
打个小广告,宝塔服务器面板,我用的也是,很方便,重点是免费的也能用,没钱太难了,穷鬼一个,一键全能部署及管理,送你3188元礼包,点我领取https://www.bt.cn/?invite_code=MV9kY3ZwbXo=


一一网络 » Btlejack:操作低功耗蓝牙设备的百宝工具箱

发表评论

发表评论

一一网络-提供最优质的文章集合

立即查看 了解详情