
يفك تشفير اتصالات Covenant C2 عن طريق استخراج مفاتيح RSA الخاصة من ملفات minidumps، واستعادة مفاتيح جلسة AES، وتحويل التقاطات الشبكة إلى نص صريح.
تم تصميم CovenantDecryptor لفك تشفير بيانات الاتصالات الخاصة بحركة مرور Covenant.
إن استخراج المفتاح الخاص من الذاكرة ينطبق على أنظمة C2 الأخرى، مثل Empire، نظرًا لاستخدامها لـ
RSACryptoServiceProviderلإنشاء المفتاح.
يتكوّن تهيئة اتصال Covenant من 3 مراحل:
SetupAESKey، وهو مضمّن في ملف تنفيذي خبيث. وقبل الإرسال، يقوم بتنسيق النص كما هو موصوف في GruntHTTPStager مع ضبط النوع على 0.SessionKey، مشفّرًا بالمفتاح العام RSA، للاتصالات اللاحقة.SetupAESKey لفك تشفير الرسالة، ثم يستعين بالمفتاح الخاص RSA لفك تشفير SessionKey. بعد ذلك، يقوم بتشفير 4 بايتات مولّدة عشوائيًا باستخدام SessionKey وإرسالها. وقبل الإرسال، يقوم بتنسيق النص كما هو موصوف في GruntHTTPStager مع ضبط النوع على 1.SessionKey، ويضيف 4 بايتات إضافية مولّدة عشوائيًا وينقل البيانات الناتجة (8 بايتات) إلى الوكيل المصاب.SessionKey. بعد ذلك، يتحقق مما إذا كانت أول 4 بايتات تطابق البيانات التي أرسلها سابقًا، ويشرع في إرسال آخر 4 بايتات إلى خادم C2. وقبل الإرسال، يقوم بتنسيق النص كما هو موصوف في GruntHTTPStager مع ضبط النوع على 2.بمجرد اكتمال التحقق، يمكن تبادل البيانات.
يتكوّن CovenantDecryptor من أداتين. يسترجع سكربت extract_privatekey العددين الأوليين p و q من ملف minidump لبناء مفتاح RSA خاص بالاستعانة بالمعامل العام. ويتكوّن سكربت decrypt_covenant_traffic من 3 أوامر: modulus وkey وdecrypt. يستخرج الأمر الأول المعامل من اتصالات Covenant، بينما يستعيد الثاني مفتاح AES المستخدم لتشفير حركة مرور البيانات. وأخيرًا، يقوم الأمر الثالث بفك تشفير حركة المرور.
استخراج المعامل من طلب المرحلة 0 لأحد المضيفين المصابين:
$ python3 decrypt_covenant_traffic.py modulus -i traffic.txt -k "EQCZiHdmVUQzIhEAmYh3ZlVEMyIRAJmId2ZVRDMiEQA=" -t base64
[+] Modulus:
19574201286059123715221634877085223155972629451020572575626246458715199192950082143183900970133840359007922584516900405154928253156404028820410452946729670930374022025730036806358075325420793866358986719444785030579682635785758091517397518826225327945861556948820837789390500920096562699893770094581497500786817915616026940285194220703907757879335069896978124429681515117633335502362832425521219599726902327020044791308869970455616185847823063474157292399830070541968662959133724209945293515201291844650765335146840662879479678554559446535460674863857818111377905454946004143554616401168150446865964806314366426743287
[+] Exponent: 65537
استعادة المفتاح الخاص RSA من ملف minidump لعملية Covenant مصابة:
$ python3 extract_privatekey.py -i memory.dmp -m 19574201286059123715221634877085223155972629451020572575626246458715199192950082143183900970133840359007922584516900405154928253156404028820410452946729670930374022025730036806358075325420793866358986719444785030579682635785758091517397518826225327945861556948820837789390500920096562699893770094581497500786817915616026940285194220703907757879335069896978124429681515117633335502362832425521219599726902327020044791308869970455616185847823063474157292399830070541968662959133724209945293515201291844650765335146840662879479678554559446535460674863857818111377905454946004143554616401168150446865964806314366426743287 -o ./keys/
[+] Saved private key /home/user/privkey1.pem
سيحاول السكربت الحصول على p و q بصيغتي little endian و big endian.
استعادة SessionKey من استجابة المرحلة 0 لخادم Covenant C2، وهو المفتاح المستخدم لتشفير حركة مرور الشبكة:
$ python3 decrypt_covenant_traffic.py key -i traffic.txt --key "EQCZiHdmVUQzIhEAmYh3ZlVEMyIRAJmId2ZVRDMiEQA=" -t base64 -r mykey.pem -s 1
[+] New AES key : 0011223344556677889900112233445566778899001122334455667788990011
فك تشفير اتصالات Covenant:
$ python3 decrypt_covenant_traffic.py decrypt -i traffic.txt -k "0011223344556677889900112233445566778899001122334455667788990011" -t hex -s 2
[...]
[*] Response message 10 : {"status":"2","output":"Hello.\r\n"}
[...]
extract_privatekey - تحليل ملف خام.extract_privatekey - البحث عن المفاتيح الخاصة استنادًا إلى الترويسة (بدون المعامل).كما ذُكر في StackOverflow، يمكن أيضًا فك تشفير البيانات من خلال استخدام مفتاح RSA الخاص الخام من Microsoft.