Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
SigFlip — SigFlip هي أداة لتعديل ملفات PE الموقعة بتقنية Authenticode (exe, dll, sys ..إلخ) دون إبطال أو كسر التوقيع الحالي. | Kitploit
أدوات/GitHubGitHub/med0x2e/sigflip
أدوات دفاعيةآليات الاستمراريةتحليل الكودالاستغلالالحركة الجانبيةتحليل الملفات الثنائيةالفريق الأحمرتطوير الحمولات
GitHubmed0x2e/sigflip

SigFlip

SigFlip هي أداة لتعديل ملفات PE الموقعة بتقنية Authenticode (exe, dll, sys ..إلخ) دون إبطال أو كسر التوقيع الحالي.

عرض المستودع
1.3k2096منذ 3 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

ما هو؟

SigFlip هي أداة لتعديل ملفات PE الموقعة بتوقيع Authenticode (exe، dll، sys .. إلخ) بطريقة لا تؤثر أو تكسر التوقيع الرقمي الحالي. بمعنى آخر، يمكنك تغيير checksum/hash لملف PE عن طريق تضمين بيانات (مثل shellcode) دون كسر توقيع الملف أو فحوصات التكامل أو وظيفة ملف PE.

يقوم SigInject بتشفير وحقن shellcode في جدول الشهادات [WIN_CERTIFICATE] لملف PE، ويتم طباعة مفتاح التشفير لاستخدامه مع أداة تحميل أساسية BOF/C/C# (SigLoader). يحفظ SigInject التغييرات في ملف PE معدل مع الحفاظ على توقيعه وصحة شهادته.

SigLoader هو محمل أساسي يأخذ مسار ملف PE معدل تم إنشاؤه بواسطة SigInject ومفتاح فك التشفير كمعاملات، ثم يستخرج ويفك تشفير shellcode المضمن لاستخدامه مع حقن shellcode من اختيارك.

سيتحقق SigFlip مما إذا تم تغيير hash ملف PE بنجاح، وسيخرج بأمان في حالة كانت نقاط النهاية محصنة ضد هذا النوع من سوء التكوين الشائع. (راجع قسم "التفاصيل").

ملاحظة سريعة: تتوفر SigFlip و SigInject و SigLoader كبرامج نصية BOF وتجميعات .NET. الفرق الوحيد هو أن وظيفة SigInject منفذة كجزء من SigFlip (باستخدام العلم -i) في حال اخترت استخدام مخرجات .NET بدلاً من BOFs.

لماذا؟

يمكن استخدامها بشكل أساسي للثبات، الحركة الجانبية أو تنفيذ الأوامر/الكود ويمكنها المساعدة في:

  • تجاوز التصفية البيضاء للتطبيقات، تغيير hash ملف PE (مثل msbuild.exe) دون كسر التوقيع.
  • تجاوز أنظمة EDR التي تعتمد على hashes محدد لـ LOLBINs للكشف عن تنفيذ الأوامر/الكود الخبيث.
  • تحميل برامج تشغيل موقعة باستخدام hash مختلف، قد يساعد في تجاوز أي أنظمة EDR تراقب برامج تشغيل موقعة معرضة للخطر باستخدام قائمة محددة مسبقًا من الهاشات.
  • تضمين shellcode مشفر في ملف PE موقع واستخدام أداة تحميل (sigloader) من اختيارك لتحليل وفك تشفير وتحميل وتنفيذه.
  • تميل بائعي أمن نقاط النهاية إلى تصنيف ملفات PE الموقعة على أنها غير ضارة في معظم الأوقات، تضمين كودك غير الموقع (shellcode ..إلخ) في ملف PE موقع يجعله صعب الكشف/التمييز إلى حد ما.
  • تجاوز بائعي أمن نقاط النهاية الذين يعتمدون بشكل أساسي على WinVerifyTrust الافتراضي للتحقق من التوقيع.
  • تحسين OPSEC وتحدي المدافعين الذين يعتمدون فقط على أدوات التحقق من التوقيع النموذجية مثل signtool و sigcheck و Get-AuthenticodeSignature ..إلخ للتحقق من صحة توقيع Authenticode لملفات PE.

الاستخدام والأمثلة:

التجميع/البناء:

لا يتم توفير BOFs مجمعة مسبقًا في هذا المشروع، يمكن تجميعها باستخدام Mingw-w64. لـ .NET استخدم VS أو csc.exe لتجميع مشاريع .NET (SigFlip, SigLoader). لـ BOF راجع الخطوات أدناه;

  • ➜ i686-w64-mingw32-gcc -c sigflip.c -o sigflip.x86.o
  • ➜ x86_64-w64-mingw32-gcc -c sigflip.c -o sigflip.x64.o
  • ➜ x86_64-w64-mingw32-gcc -c SigLoader/sigloader.c -o sigloader.x64.o
  • ➜ i686-w64-mingw32-gcc -c SigLoader/sigloader.c -o sigloader.x86.o

تأكد من وضع جميع ملفات الكائنات في نفس دليل sigflip.cna، ثم قم بتحميل script sigflip.cna إلى Cobalt Strike.

ملاحظة سريعة: تم اختبار BOFs المجمعة مسبقًا وهي متوافقة مع mingw-64 v8.0.0_3. استخدام mingw-64 >= v9 قد يعمل ولكن قد يؤدي إلى تعطل البيكونات النشطة، راجع https://github.com/med0x2e/SigFlip/issues/2 لمزيد من التفاصيل.

Cobalt Strike:

  1. Execute-Assembly

    • execute-assembly SigFlip.exe -h
    • execute-assembly SigLoader -h
  2. BOF

    • للاستخدام مع Cobalt Strike، بمجرد تحميل Script SigFlip.cna، سيتم تسجيل أمرين جديدين؛ SigFlip و SigInject، ثم استخدم كما يلي;
      • SigFlip: تغيير hash لملف PE (DLL, EXE, SYS, OCX ..إلخ) دون كسر التوقيع أو صحة الشهادة:

        • SigFlip "<PE\_FILE\_PATH>" "<OUTPUT\_PE\_FILE\_PATH (with extension)>"
      • SigInject: تشفير وحقن shellcode في جدول الشهادات [WIN_CERTIFICATE] لملف PE، يتم طباعة مفتاح التشفير لاستخدامه مع محمل أساسي C/C# مع الحفاظ على صحة التوقيع والشهادة:

        • SigInject "<PE\_FILE\_PATH> <OUTPUT\_PE\_FILE\_PATH (with extension)>" "<SHELLCODE\_FILE>"
      • SigLoader: تحميل shellcode المشفر من ملفات PE التي تم إنشاؤها بواسطة SigInject، ثم استخدام Early Bird queueuserapc لإنشاء/حقن shellcode في عملية تضحية. يمكن تخصيص منطق حقن shellcode أو استبداله بأي تقنية حقن كود أخرى من اختيارك:

        • SigLoader <PE_FILE_PATH_WITH_SH> <DECRYPTION_KEY> <SPAWNTO_PROCESS_PATH> <PARENT_PROCESS_ID>
  3. أمثلة

    • BOF:

      • حقن بيانات عشوائية في msbuild.exe (أي قلب بتات msbuild.exe):
        • SigFlip "C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" "C:\lolbins\modified-msbuild.exe"

التفاصيل:

هذه تقنية معروفة استخدمها APT#10 في عدة حملات أو مجموعات اختراق.

التوقيعات الرقمية Authenticode؟

Authenticode هي تقنية توقيع كود من Microsoft تحدد ناشر البرنامج الموقع بـ Authenticode. يتحقق Authenticode أيضًا من عدم العبث بالبرنامج منذ توقيعه ونشره.

كيف تعمل؟

تعتمد Microsoft بشكل أساسي على تنسيق توقيع Authenticode للتحقق من سلامة وأصل ثنائيات PE. وفقًا لمواصفات تنسيق Authenticode Portable Executable، يمكن "تضمين" توقيعات Authenticode في ملف PE لنظام Windows، في موقع يحدده إدخال جدول الشهادات في Optional Header Data Directories. عند استخدام Authenticode لتوقيع ملف PE، يستثني الخوارزمية التي تحسب قيمة hash لتوقيع الملف بعض حقول PE. عند تضمين التوقيع في الملف، يمكن لعملية التوقيع تعديل هذه الحقول دون التأثير على قيمة hash للملف. هذه الحقول هي: الفحص checksum، RVA جدول الشهادات، حجم جدول الشهادات وجدول شهادات السمات (attribute certificate table). يحتوي جدول شهادات السمات على بنية PKCS #7 SignedData تحتوي على قيمة hash لملف PE، وتوقيع تم إنشاؤه بواسطة المفتاح الخاص لناشر البرنامج، وشهادات X.509 v3** التي تربط مفتاح توقيع ناشر البرنامج بكيان قانوني.

بمعنى بسيط، يمكننا تعديل أو تضمين بيانات في الحقول المستثناة من حساب hash التوقيع دون القلق بشأن كسر توقيع Authenticode وفحوصات سلامة الملف.

مزيد من التفاصيل حول هذه الحقول المستثناة:

  • RVA وحجم جدول الشهادات: يحتوي هيكل optional header لملف PE موقع على مصفوفة من دلائل البيانات بما في ذلك إدخال دليل الأمان IMAGE_DIRECTORY_ENTRY_SECURITY الذي يحتوي على حقلين، RVA و Size.

    • RVA: إزاحة ملف (وليس إزاحة ذاكرة) إلى جدول شهادات السمات.
    • Size: حجم جدول شهادات السمات.
  • جدول شهادات السمات: هيكل بيانات WIN_CERTIFICATE الذي يغلف التوقيع والشهادات ويحتوي على الحقول التالية:

    • dwLength: حجم جدول الشهادات.
    • wRevision: "مراجعة" WIN_CERTIFICATE.
    • wCertificateType: نوع بيانات الشهادة المغلفة.
    • bCertificate: بيانات الشهادة الفعلية. لـ WIN_CERT_TYPE_PKCS_SIGNED_DATA، هذه هي بنية PKCS#7 SignedData المذكورة أعلاه (والتي تحتوي على قيمة hash لـ PE، التوقيع وشهادة x.509)، هذا هو بالضبط المكان الذي يقوم فيه SigFlip بتضمين بيانات عشوائية أو shellcode.

مع وضع كل ذلك في الاعتبار، يقوم SifFlip الآن بما يلي:

  1. التحقق من تكوين النظام.
  2. تحميل ملف PE والتحقق من توقيع ملف PE وحساب Sha1 hash.
  3. الحصول على إزاحة "e_lfanew" (تشير إلى رأس ملف PE -> IMAGE_NT_HEADERS).
  4. الحصول على IMAGE_OPTIONAL_HEADER من IMAGE_NT_HEADERS.
  5. الحصول على IMAGE_DATA_DIRECTORY من IMAGE_OPTIONAL_HEADER.
  6. الحصول على حقل IMAGE_DIRECTORY_ENTRY_SECURITY واسترجاع RVA وحجم جدول شهادات السمات (WIN_CERTIFICATE).
  7. تعديل blob ملف PE عن طريق إضافة بايتات (عشوائية/shellcode) إضافية في جدول الشهادات.
  8. تحديث حجم دليل بيانات optional header -> IMAGE_DIRECTORY_ENTRY_SECURITY.
  9. تحديث dwLength لـ WIN_CERTIFICATE (جدول الشهادات).
  10. إنشاء checksum جديد لملف PE وتحديثه. (OPT Header Checksum).
  11. حفظ ملف PE النهائي بالحجم الجديد.
  12. التحقق من توقيع ملف PE المعدل.

الخطوة الأولى أساسية لتأكيد ما إذا كان النظام غير مهيأ بشكل صحيح بطريقة تسمح بإضافة وحقن shellcode في ملفات PE الموقعة بـ Authenticode. لذلك، يتم إجراء الفحوصات التالية:

  1. التحقق من عدم تثبيت إصلاح MS13-098 (KB2893294). ضع في اعتبارك قد يكون مثبتًا ولكن مفاتيح التسجيل لم يتم تعيينها بشكل صحيح، مما يجعل التصحيح غير فعال.
  2. التحقق من مفاتيح التسجيل.
    1. X86:

      • تحقق من عدم وجود مفتاح التسجيل "HKLM:\Software\Microsoft\Cryptography\Wintrust\Config"
        • -> إذا كان موجودًا، تحقق من عدم وجود قيمة التسجيل "EnableCertPaddingCheck".
    2. X64:

      • تحقق من عدم وجود مفتاح التسجيل "HKLM:\Software\Wow6432Node\Microsoft\Cryptography\Wintrust\Config"
        • -> إذا كان موجودًا، تحقق من عدم وجود قيمة التسجيل "EnableCertPaddingCheck".

لماذا لا يمكن قراءة البيانات المحقونة عند تحميل PE المعدل كوحدة في مساحة العنوان الخاصة به أو مساحة عنوان العمليات الأخرى؟

لا يقوم أداة تحميل Windows بتحميل بيانات الشهادة في مساحة عنوان العملية. هذا هو السبب في أنك بحاجة إلى محمل مخصص لاستخراج البيانات مثل shellcode واستخدامها (مثال: SigLoader). وهذا يشرح أيضًا سبب كون IMAGE_DIRECTORY_ENTRY_SECURITY إزاحة ملف بدلاً من إزاحة ذاكرة نموذجية.

الكشف / الوقاية:

  • https://docs.microsoft.com/en-us/security-updates/SecurityAdvisories/2014/2915720?redirectedfrom=MSDN
  • بمجرد تثبيت التصحيح وتعيين مفاتيح التسجيل المناسبة، لا حاجة لإعادة تشغيل النظام، تحتاج فقط إلى إعادة تشغيل Cryptographic Services. ستتم إعادة تشغيل خدمة Applocker أيضًا لأنها تعتمد على خدمات التشفير. (@p0w3rsh3ll)
  • قاعدة Yara من Adrien؛ https://twitter.com/Int2e_/status/1330975808941330432

المراجع

  • https://docs.microsoft.com/en-us/security-updates/SecurityBulletins/2013/ms13-098?redirectedfrom=MSDN
  • https://docs.microsoft.com/en-us/security-updates/SecurityAdvisories/2014/2915720?redirectedfrom=MSDN
  • http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/authenticode_pe.docx
  • https://msrc-blog.microsoft.com/2013/12/10/ms13-098-update-to-enhance-the-security-of-authenticode/
  • https://www.specterops.io/assets/resources/SpecterOps_Subverting_Trust_in_Windows.pdf
  • https://p0w3rsh3ll.wordpress.com/2014/05/24/testing-ms13-098-certificate-padding-check/
  • http://jsac.jpcert.or.jp/archive/2021/pdf/JSAC2021_202_niwa-yanagishita_en.pdf
تنزيل الأداة
  • حقن shellcode في kernel32.dll (ترتيب المعاملات مختلف وتأكد من ملاحظة مفتاح فك التشفير):
    • SigInject "C:\Windows\System32\kernel32.dll" "C:\random\modified-kernel32.dll" "C:\shellcode\cobaltstrike_or_msf_shellcode.bin"
    • Sigloader "C:\random\modified-kernel32.dll" "DECRYPTION_KEY" "C:\Windows\System32\werfault.exe" 6300
  • Execute-Assembly:

    • حقن بيانات عشوائية في msbuild.exe:
      • execute-assembly SigFlip.exe -b C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe -o C:\Temp\MSBuild.exe
    • حقن shellcode في kernel32.dll (ترتيب المعاملات مختلف وتأكد من ملاحظة مفتاح فك التشفير):
      • execute-assembly SigFlip.exe -i C:\Windows\System32\kernel32.dll -s C:\Temp\x86shellcode.bin -o C:\Temp\kernel32.dll -e TestSecretKey
      • execute-assembly SigLoader.exe -f C:\Temp\modified-kernel32.dll -e TestSecretKey -pid 2354