
crackle 破解 BLE 加密(又称蓝牙智能)。
crackle 利用 BLE 配对过程中的一个缺陷,允许攻击者猜测或非常快速地暴力破解 TK(临时密钥)。利用 TK 以及从配对过程中收集的其他数据,可以获取 STK(短期密钥),进而获取 LTK(长期密钥)。
有了 STK 和 LTK,主设备和从设备之间的所有通信都可以被解密。
在尝试使用 crackle 之前,请查阅常见问题,以确定它是否适合您的情况。
crackle 由 Mike Ryan [email protected] 编写。 更多信息请访问网站: http://lacklustre.net/projects/crackle/
crackle 有两种主要操作模式:破解 TK 和使用 LTK 解密。
这是使用 -i 提供输入文件时的默认模式。
在破解 TK 模式下,crackle 暴力破解 BLE 配对过程中使用的 TK。crackle 利用了这样一个事实:在 Just Works™ 模式和 6 位 PIN 码中,TK 是一个范围在 [0, 999999] 内的值,并填充至 128 位。
crackle 采用多种方法执行此暴力破解:如果输入文件中包含所有配对数据包,则使用非常快速的方法;如果仅包含最少的一组数据包,则使用较慢的方法。
要使用此模式,请使用包含一个或多个具有 BLE 配对会话的连接的输入 PCAP 或 PcapNG 文件启动 crackle。crackle 将分析所有连接,确定是否可以破解给定连接,并自动选择最佳策略来破解每个连接。
如果 TK 成功破解,crackle 将推导出用于加密其余连接的剩余密钥,并解密之后任何加密的数据包。如果交换了 LTK(通常在建立加密后执行的第一项操作),crackle 会将该值输出到标准输出。LTK 可用于解密两个端点之间的任何未来通信。
使用 -o 为 crackle 提供输出文件,以创建一个包含解密数据(以及已经未加密的数据)的新 PCAP 文件。
示例用法:
$ crackle -i input.pcap -o decrypted.pcap
在使用 LTK 解密模式下,crackle 使用用户提供的 LTK 来解密主设备和从设备之间的通信。此模式与破解 TK 模式中的解密部分相同。
示例用法:
$ crackle -i encrypted.pcap -o decrypted.pcap -l 81b06facd90fe7a6e9bbd9cee59736a7
在破解 TK 模式下,crackle 需要一个包含 BLE 配对事件的 PCAP 文件。生成此类文件的最佳方法是使用 Ubertooth 捕获主设备和从设备之间的配对事件。
要检查您的 PCAP 文件是否包含所有必要的数据包,请使用 -i 选项运行 crackle:
crackle -i <file.pcap>
crackle 将分析输入文件中的每个连接,并将分析结果输出到标准输出。如果您拥有配对会话的所有组成部分,输出将如下所示:
分析连接 0:
xx:xx:xx:xx:xx:xx(公共地址)-> yy:yy:yy:yy:yy:yy(公共地址)
找到 13 个加密数据包
使用策略 0 破解,20 位熵
!!!
TK 发现:412741
!!!
解密了 12 个数据包
LTK 发现:81b06facd90fe7a6e9bbd9cee59736a7
请使用 -o 指定输出文件以解密数据包!
要解密所有数据包,请添加 -o 选项:
crackle -i <file.pcap> -o <output.pcap>
输出文件将包含原始 PCAP 中所有加密数据包的解密版本,以及所有未加密的数据包。请注意,CRC 不会重新计算,因此解密数据包的 CRC 将不正确。
在使用 LTK 解密模式下,crackle 需要一个至少包含 LL_ENC_REQ 和 LL_ENC_RSP 数据包以及用于加密通信的 LTK 的 PCAP 文件。
LTK 的格式是一个 128 位的十六进制数,没有空格或分隔符,从最高有效八位组到最低有效八位组。示例:
-l 81b06facd90fe7a6e9bbd9cee59736a7
要检查您的 PCAP 文件是否包含所有必要的数据包,请使用 -i 和 -l 运行 crackle:
crackle -i <file.pcap> -l <ltk>
如果您拥有这两个必需的数据包,程序应产生类似以下的输出:
分析连接 0:
xx:xx:xx:xx:xx:xx(公共地址)-> yy:yy:yy:yy:yy:yy(公共地址)
找到 9 个加密数据包
解密了 6 个数据包
请使用 -o 指定输出文件以解密数据包!
要解密所有数据包,请添加 -o 选项:
crackle -i <file.pcap> -o <out.pcap> -l <ltk>
输出文件的生成方式与上述输出文件类似。
tests 目录中包含的测试文件是使用 crackle 进行测试的有趣输入。请查看每个测试子目录中的 README 文件。
获取一些用于使用 crackle 进行破解的示例文件。有关更多信息,请参阅 tarball 中的 README:
https://lacklustre.net/bluetooth/crackle-sample.tgz
我们已经整理了一份常见问题列表。
衷心感谢 Ubertooth 项目的 Mike Ossmann 和 Dominic Spill。没有他们,这一切都不可能实现。
非常感谢 Kismet 的 Mike Kershaw/dragorn 在创建和处理 PCAP 文件方面的帮助。
感谢 irc.freenode.net 上 #ubertooth 频道的其他人。