
مفكك شيفرات الاعتماد 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 الخاص بالمخترق).
ومع ذلك، يمكن تعديل هذه القيود إذا قمت بعكس الهندسة والحصول على جزء المفتاح الخام. يمكن استخدام جزء المفتاح الذي تم فك تشفيره لإعادة إنشاء ملف آخر بمعلمات "أمان" أخرى (مثل مضيف آخر، تطبيق آخر، مستخدم نظام تشغيل آخر).
لتوليد مفتاح فك التشفير الخام لـ AES-256 (32 بايت)، نأخذ زوجًا من SHA1SUM من حقل بيانات الاعتماد "AdditionalInformation" مع إلحاق "0x00000000" و "0x00000001" لكل تجزئة؛ أول تجزئة توفر أول 20 بايت من المفتاح، والثانية توفر آخر 12 بايت فقط.
إذا كانت هناك أي قيود بيئية (مثل IP/المضيف/مسار التطبيق/...)، فإننا نلحق كل قيمة نصية بـ AdditionalInformation قبل أخذ كل SHA1SUM.
من المهم ذكر أن حقل "ClientApp" يُحول باستخدام BASE64(SHA1SUM(strlower(ClientApp))) قبل إلحاقه بـ "AdditionalInformation" وتوليد كل SHA1SUM.
يتم فك التشفير باستخدام دالة OpenSSL AES-256-CBC باستخدام حقل 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);
وفي حالة عدم ظهور بعض القيود في ملف بيانات الاعتماد الناتج، يمكنك دائمًا إدخالها يدويًا. أعتقد أننا نتفق على أنه لا "مسار التطبيق" ولا "IP العميل" قيمة عشوائية حقًا.
استخدم HSM \o/، لا تخزن مفتاح فك التشفير في ملف CredFile.
qmake .
make -j8