Cobalt Strike 4.5 نسخة مكسورة/مصدّعة، إزالة بصمة checksum8، تجاوز BeaconEye، إصلاح تسريب المرحلة (stage) من مسار الأخطاء، إضافة تحقق ثنائي العوامل TOTP، إصلاح CVE-2022-39197 وغيرها
كسر إصدار cobaltstrike4.5، إزالة ميزة checksum8، تجاوز BeaconEye، إصلاح تسريب stage عبر المسار الخاطئ، إضافة التحقق ثنائي العوامل totp، إضافة تشفير اسم المستخدم للعرض، إصلاح خطأ الاشتقاق foreign في إصدار 4.5، تعديل اسم ملف إعدادات العميل، إلخ
كسر cobalt strike4.5
كسر cobaltstrike4.5
[TOC]
هذه الأداة ومحتوى المقال مخصصان للبحث الأمني فقط، ويتحمل المستخدم كافة المسؤوليات القانونية ذات الصلة الناتجة عن استخدام هذه الأداة ومحتوى المقال! المؤلف لا يتحمل أي مسؤولية قانونية! إذا قمت بأي سلوك غير قانوني أثناء استخدام هذه الأداة ومحتوى المقال، فستتحمل العواقب بنفسك، ولن نتحمل أي مسؤولية قانونية أو مسؤولية تضامنية. خلاف ذلك، يرجى عدم تثبيت هذه الأداة أو استخدامها. إن سلوكك في الاستخدام أو إشارتك بأي طريقة أخرى صريحة أو ضمنية إلى قبولك لهذا الاتفاق، يُعتبر بمثابة قراءتك وموافقتك على الالتزام بهذا الاتفاق. عند استخدام هذه الأداة للبحث الأمني، يجب عليك التأكد من أن هذا السلوك يتوافق مع القوانين واللوائح، وأنك حصلت على تفويض كافٍ. يرجى عدم استخدامها ضد أهداف غير مصرح بها.
نعم، لقد عدت مرة أخرى، متابعًا مشروع cobaltstrike4.4_cdf الأصلي: https://github.com/lovechoudoufu/about_cobaltstrike4.4_cdf هذه المرة هو إصدار 4.5. تم حذف الإصدار 4.4 السابق من GitHub، وأتوقع أنه لن يمر وقت طويل قبل حذف هذا المشروع أيضًا ~.
يُنصح بالانضمام إلى مجموعة تيليجرام، حيث يمكن تنزيل التحديثات الأخرى لاحقًا أو المشروع بعد حذفه من داخل المجموعة:

قبل الاستخدام، يرجى التحقق بدقة من تجزئة (hash) ملف jar للإصدار المقابل.
عملية التحقق من الشهادة (مثال 4.3): في إصدار 4.5 كانت هناك تغييرات طفيفة في النهاية.
مفاتيح فك التشفير الرسمية لكل إصدار:
4.0 1be5be52c6255c33558e8a1cb667cb06
4.1 80e32a742060b884419ba0c171c9aa76
4.2 b20d487addd4713418f2d5a3ae02a7a0
4.3 3a4425490f389aeec312bdd758ad2b99
4.4 5e98194a01c6b48fa582a6a9fcbb92d6
cobaltstrike.auth ملف مفتاح المصادقة، مشفر بـ RSA، محتوى فك التشفير:
4.3
-54, -2, -64, -45, //文件头
0, 77, //后续长度
1, -55, -61, 127, //证书时间限制29999999(永久)
0, 0, 0, 1, //watermark(水印)
43, //版本
16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
16, 58, 68, 37, 73, 15, 56, -102, -18, -61, 18, -67, -41, 88, -83, 43, -103
مع كل تحديث للإصدار، يزداد الطول المقابل بمقدار 17، ويزداد المفتاح بمقدار 17 بايت.
في aggressor/Agressor.class، يبدأ التحقق من الترخيص من License.checkLicenseGUI(new Authorization());:

تقوم isValid وisPerpetual وisExpired وisAlmostExpired في License.checkLicenseGUI بالحكم على ما إذا كان الترخيص صالحًا وما إذا كان منتهيًا:

في فئة Authorization تتم معالجة ملف cobaltstrike.auth، حيث يتم قراءة محتوى الملف واستدعاء AuthCrypto().decrypt لمعالجة المحتوى:

في مُنشئ AuthCrypto() يتم استدعاء load()، وتقوم دالة load() بإجراء فحص MD5 على resources/authkey.pub، ثم تحصل على المفتاح العام RSA:

في decrypt() يتم استدعاء _decrypt لفك تشفير محتوى ملف cobaltstrike.auth باستخدام المفتاح العام RSA وتعيين النتيجة للمصفوفة var2، ثم يتم استخدام DataParser للتحويل وتعيينها لـ var3. يتم استخدام طريقة readInt() للحصول على أول أربعة بايتات من var3 للحكم على رأس الملف (-889274181 لإصدارات 3.x؛ -889274157 لإصدارات 4.x). ثم من var3 يتم استخدام readShort() للحصول على بايتين كطول وتعيينهما لـ var5، ثم var6 = var3.readBytes(var5) للحصول على محتوى بهذا الطول وتعيينه لـ var6 وإرجاعه:

المصفوفة arrayOfByte2 التي تم الحصول عليها في فئة Authorization هي المحتوى بعد إزالة أول ستة بايتات. يستمر معالجة مصفوفة arrayOfByte2، حيث يتم أولاً الحصول على أربعة أرقام وتعيينها لـ i، ثم الحصول على 4 أرقام وتعيينها لـ watermark، ثم الحصول على رقم واحد وتعيينه لـ b1، والتحقق من أن b1 أقل من 43، والتحقق من أن i يساوي 29999999. في common/ListenerConfig، عندما يتم الحكم على أن watermark يساوي 0، يتم إضافة علامة كشف مكافحة الفيروسات:


بعد إزالة أول 6 بايتات، ثم إزالة الـ 9 بايتات المكونة من i وwatermark وb1، فإن ما تبقى هو المفاتيح منذ 4.0 حتى 4.3، ببنية: 16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20:
byte b2 = dataParser.readByte(); //获取1位,即16
byte[] arrayOfByte3 = dataParser.readBytes(b2); //获取16位,为4.0的key
byte b3 = dataParser.readByte(); //获取1位,即16
byte[] arrayOfByte4 = dataParser.readBytes(b3); //获取16位,为4.1的key
byte b4 = dataParser.readByte(); //获取1位,即16
byte[] arrayOfByte5 = dataParser.readBytes(b4); //获取16位,为4.2的key
byte b5 = dataParser.readByte(); //获取1位,即16
byte[] arrayOfByte6 = dataParser.readBytes(b5); //获取16位,为4.3的key赋值给arrayOfByte6
في فئة Authorization يتم استدعاء طريقة SleevedResource.Setup لمعالجة arrayOfByte6. في SleevedResource يتم تعيين المفتاح كمفتاح فك تشفير AES وHmacSHA256، ويتم استدعاء فك التشفير في _readResource عبر this.data.decrypt(arrayOfByte1);، والمحتوى الذي يتم فك تشفيره هو ملفات dll الموجودة في /sleeve/:

في SleeveSecurity يتم تعيين مفاتيح فك تشفير AES وHmacSHA256، ويتم استخدام القيمة المُمررة لحساب ملخص (Digest) بطول 256، ثم يتم أخذ البايتات 0-16 كمفتاح AES، والبايتات 16-32 كمفتاح HmacSHA256:

إذا لم يتم الحصول على المفتاح المقابل، فلن يكون من الممكن فك تشفير ملفات dll في مجلد sleeve، وعند الاتصال بالخادم ستظهر رسالة الخطأ [Sleeve] Bad HMAC:

يمكن الرجوع إلى جزء فك تشفير hmac: Cobaltstrike 4 كسر: أصدر لنفسي ترخيصًا (license)
لذا فإن مفتاح إكمال الكسر هو مفتاح إصدار cs المقابل.
وفقًا للوصف الرسمي، أضاف إصدار 4.5 أمانًا جديدًا للترخيص، وهذا صحيح بالفعل،

لذا نحتاج إلى فك تشفير ملف auth المسرّب لنرى ما الذي أُضيف:

بعد موضع key الخاص بإصدار 4.5 توجد سلسلة إضافية، وهذه الإضافات هي watermarkHash الجديد في هذا الإصدار:
