
C-Ark क्रेडेंशियल डिकोडर #CVE-2021-31796 के लिए
CVE-2021-31796 के लिए शोषण उपकरण
C-Ark क्रेडेंशियल फ़ाइलों को डिकोड करने के लिए एक उपकरण
द्वारा: Aaron Mizrachi - https://twitter.com/unmanarc/
Enrique Vaamonde - https://twitter.com/_ejvm
पहला रिलीज़: 2/सितंबर/2019
प्रकटीकरण: 11/अक्टूबर/2021
यह भेद्यता सितंबर/2019 से रिलीज़ के लिए लंबित थी।
और... यहाँ समयरेखा है:
पेनटेस्ट के दौरान, यदि कोई व्यक्ति इतना स्मार्ट है कि PSM तक पहुँच सकता है और गलती से CredFile तक पहुँच प्राप्त कर लेता है, तो वह व्यक्ति संभावित रूप से इस फ़ाइल का उपयोग Vault से कनेक्शन स्थापित करने और पूरा साम्राज्य प्राप्त करने के लिए कर सकता है...
प्रतिउपाय के रूप में, अधिकांश क्रेडेंशियल फ़ाइलें पासवर्ड को किसी भिन्न वातावरण/कंप्यूटर (जैसे हैकर का अपना PSM) में उपयोग होने से रोकने के लिए कुछ "प्रतिबंध" रखती हैं।
हालाँकि, यदि आप रिवर्स करते हैं और कच्ची कुंजी भाग प्राप्त करते हैं तो उन प्रतिबंधों को संशोधित किया जा सकता है। इस डिक्रिप्ट की गई कुंजी भाग का उपयोग अन्य "सुरक्षा" पैरामीटर (जैसे कोई अन्य होस्ट, कोई अन्य एप्लिकेशन, कोई अन्य OS उपयोगकर्ता) के साथ एक और फ़ाइल बनाने के लिए किया जा सकता है।
AES-256 (32 बाइट्स) की कच्ची डिक्रिप्शन कुंजी उत्पन्न करने के लिए, हम "AdditionalInformation" क्रेडेंशियल फ़ील्ड से प्रत्येक हैश के लिए "0x00000000" और "0x00000001" जोड़कर SHA1SUM की एक जोड़ी लेते हैं; पहला हैश कुंजी के पहले 20 बाइट प्रदान करता है, और दूसरा केवल अंतिम 12 बाइट प्रदान करता है।
यदि कोई पर्यावरणीय प्रतिबंध (जैसे IP/Host/exepath/...) हैं, तो हम दोनों SHA1SUM लेने से पहले प्रत्येक प्लेनटेक्स्ट मान को AdditionalInformation में जोड़ते हैं।
यह उल्लेख करना महत्वपूर्ण है कि "ClientApp" फ़ील्ड को "AdditionalInformation" में जोड़ने और दोनों SHA1SUM उत्पन्न करने से पहले BASE64(SHA1SUM(strlower(ClientApp))) में रूपांतरित किया जाता है।
डिक्रिप्शन AES-256-CBC OpenSSL फ़ंक्शन का उपयोग करके किया जाता है जिसमें Password या NewPassword फ़ील्ड का उपयोग किया जाता है। (https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption)
हम यह पता लगाने के लिए (verificationflags-16) का उपयोग कर रहे हैं कि कौन सा सत्यापन/प्रतिबंध लागू है:
usingClientApp = ((uVerificationsFlag&0x1) != 0);
usingAppPath = ((uVerificationsFlag&0x2) != 0);
usingClientIP = ((uVerificationsFlag&0x4) != 0);
usingOSUser = ((uVerificationsFlag&0x8) != 0);
usingClientHostname = ((uVerificationsFlag&0x20) != 0);
और यदि आउटपुट क्रेडेंशियल फ़ाइल में कुछ प्रतिबंध प्रदर्शित नहीं होते हैं, तो आप उन्हें हमेशा हाथ से दर्ज कर सकते हैं। मुझे लगता है कि हम दोनों इस बात से सहमत हो सकते हैं कि न तो "app path" और न ही "client IP" वास्तव में यादृच्छिक मान हैं।
HSM का उपयोग करें \o/, डिक्रिप्शन कुंजी को क्रेड फ़ाइल में संग्रहीत न करें।
qmake .
make -j8