
मिनीडंप से RSA निजी कुंजियाँ निकालकर, AES सत्र कुंजियाँ पुनर्प्राप्त करके, और नेटवर्क कैप्चर को प्लेनटेक्स्ट में परिवर्तित करके Covenant C2 संचार को डिक्रिप्ट करता है।
CovenantDecryptor को Covenant ट्रैफ़िक के संचार डेटा को डिक्रिप्ट करने के लिए डिज़ाइन किया गया है।
मेमोरी से निजी कुंजी निकालने की प्रक्रिया अन्य C2, जैसे Empire, पर भी लागू होती है, क्योंकि यह कुंजी बनाने के लिए
RSACryptoServiceProviderका उपयोग करता है।
Covenant संचार आरंभीकरण में 3 चरण होते हैं :
SetupAESKey का उपयोग करके एन्क्रिप्ट किया जाता है और जो एक दुर्भावनापूर्ण एक्ज़िक्यूटेबल में एम्बेडेड होती है। भेजने से पहले, यह GruntHTTPStager में वर्णित अनुसार टेक्स्ट को type 0 पर सेट करके फ़ॉर्मेट करता है।SessionKey स्थानांतरित करता है।SetupAESKey का उपयोग करता है, और फिर SessionKey को डिक्रिप्ट करने के लिए RSA निजी कुंजी का उपयोग करता है। इसके बाद, यह SessionKey के साथ 4 यादृच्छिक रूप से उत्पन्न बाइट्स को एन्क्रिप्ट करता है और उन्हें प्रसारित करता है। भेजने से पहले, यह GruntHTTPStager में वर्णित अनुसार टेक्स्ट को type 1 पर सेट करके फ़ॉर्मेट करता है।SessionKey का उपयोग करके 4 बाइट्स को डिक्रिप्ट करता है, 4 अतिरिक्त यादृच्छिक रूप से उत्पन्न बाइट्स जोड़ता है और परिणामी 8 बाइट्स डेटा को संक्रमित एजेंट को स्थानांतरित करता है।SessionKey से 8 बाइट्स को डिक्रिप्ट करता है। इसके बाद, यह जाँचता है कि पहले 4 बाइट्स उस डेटा से मेल खाते हैं जिसे उसने पहले प्रसारित किया था, और अंतिम 4 बाइट्स को C2 को वापस स्थानांतरित करने के लिए आगे बढ़ता है। भेजने से पहले, यह GruntHTTPStager में वर्णित अनुसार टेक्स्ट को type 2 पर सेट करके फ़ॉर्मेट करता है।सत्यापन पूर्ण होने के बाद, डेटा का आदान-प्रदान किया जा सकता है।
CovenantDecryptor दो उपयोगिताओं से बना है। extract_privatekey स्क्रिप्ट सार्वजनिक modulus का उपयोग करके RSA निजी कुंजी बनाने के लिए minidump फ़ाइल से p और q अभाज्य संख्याएँ प्राप्त करती है। decrypt_covenant_traffic स्क्रिप्ट में 3 कमांड हैं: modulus, key और decrypt। पहला कमांड Covenant संचार से modulus निकालता है, जबकि दूसरा डेटा ट्रैफ़िक को एन्क्रिप्ट करने के लिए उपयोग की जाने वाली AES कुंजी प्राप्त करता है। अंत में, तीसरा कमांड ट्रैफ़िक को डिक्रिप्ट करता है।
संक्रमित होस्ट के stage 0 अनुरोध से modulus निकालें :
$ python3 decrypt_covenant_traffic.py modulus -i traffic.txt -k "EQCZiHdmVUQzIhEAmYh3ZlVEMyIRAJmId2ZVRDMiEQA=" -t base64
[+] Modulus:
19574201286059123715221634877085223155972629451020572575626246458715199192950082143183900970133840359007922584516900405154928253156404028820410452946729670930374022025730036806358075325420793866358986719444785030579682635785758091517397518826225327945861556948820837789390500920096562699893770094581497500786817915616026940285194220703907757879335069896978124429681515117633335502362832425521219599726902327020044791308869970455616185847823063474157292399830070541968662959133724209945293515201291844650765335146840662879479678554559446535460674863857818111377905454946004143554616401168150446865964806314366426743287
[+] Exponent: 65537
संक्रमित Covenant प्रक्रिया की minidump फ़ाइल से RSA निजी कुंजी प्राप्त करें :
$ python3 extract_privatekey.py -i memory.dmp -m 19574201286059123715221634877085223155972629451020572575626246458715199192950082143183900970133840359007922584516900405154928253156404028820410452946729670930374022025730036806358075325420793866358986719444785030579682635785758091517397518826225327945861556948820837789390500920096562699893770094581497500786817915616026940285194220703907757879335069896978124429681515117633335502362832425521219599726902327020044791308869970455616185847823063474157292399830070541968662959133724209945293515201291844650765335146840662879479678554559446535460674863857818111377905454946004143554616401168150446865964806314366426743287 -o ./keys/
[+] Saved private key /home/user/privkey1.pem
स्क्रिप्ट p और q को little और big endian के रूप में प्राप्त करने का प्रयास करेगी।
Covenant C2 के stage 0 प्रतिक्रिया से SessionKey प्राप्त करें, जिसका उपयोग नेटवर्क ट्रैफ़िक को एन्क्रिप्ट करने के लिए किया जाता है :
$ 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 - हेडर के आधार पर निजी कुंजियाँ खोजें (modulus के बिना)।जैसा कि StackOverflow पर उल्लेख किया गया है, डेटा का डिक्रिप्शन raw Microsoft RSA निजी कुंजी का उपयोग करके भी प्राप्त किया जा सकता है।