
CVE-2023-38831 - WinRAR
يحتوي هذا المستودع على منطق كشف لثغرة CVE-2023-38831 (استغلال انتحال ملفات ZIP في WinRAR / الامتداد المزدوج) مع استعلامات خام / كتل برمجية وأسماء مزودي ETW المحددة + معرفات الأحداث. إصدار ضعيف من WinRAR (< 6.23) على النظام المستهدف
يُستغل CVE-2023-38831 عندما:
يفتح المستخدم ملف ZIP خبيث في WinRAR
يحتوي الأرشيف على:
● ملف تضليلي (مثلًا invoice.pdf )
● مجلد بنفس الاسم (مثلًا invoice.pdf )
● داخل المجلد "ملفان" بنفس الاسم لكن بأسماء مختلفة قليلًا (أحدهما يبدأ بمسافة وينتهي بأي امتداد؛ مثلًا إذا كان الملف الأول هو "invoice.pdf " فقد يكون الثاني أي سكربت أو ملف قابل للتنفيذ مثل "invoice.pdf .cmd")
ينفذ WinRAR السكربت أو الملف القابل للتنفيذ بدلاً من فتح المستند (ملف "PDF" في هذه الحالة)
يتم تشغيل هذا التنفيذ عبر استدعاء الدالة ShellExecuteExW لتنفيذ الملف، مع تمرير shExecInfo (ShellExecute عبر Explorer)
يُنشئ WinRAR عملية فرعية (cmd, powershell, mshta, wscript, exe وفقًا لما هو موجود داخل المجلد)
يحدث التنفيذ غالبًا من Temp / AppData / مسار الاستخراج
ملخص التدفق يفتح المستخدم الأرشيف
↓
يعرض WinRAR الملف التضليلي
↓
ينقر المستخدم نقرًا مزدوجًا على المستند
↓
يستخرج WinRAR المجلد الذي بنفس الاسم
↓
تتم كتابة الملف القابل للتنفيذ إلى *.pdf\*.pdf .exe
↓
ShellExecute عبر Explorer
↓
ImageLoad للملف القابل للتنفيذ
↓
تنفيذ الحمولة
لماذا هذا التدفق مهم للكشف
● لا استخدام لوحدات الماكرو
● لا اعتماد على إنشاء العمليات
● يعتمد الاستغلال على التمويه في نظام الملفات
● إشارة عالية الثقة ومنخفضة الضوضاء
تفاصيل تقنية مهمة
تُكتب الملفات ببنية خاصة
مثل وجود كائنين (ملف/مجلد) بنفس الاسم، وعندما يكون لديك ملف ومجلد بنفس الاسم في ملف أرشيف وتريد فتح الملف مؤقتًا، بالنقر المزدوج عليه (الملف المستهدف) داخل ملف الأرشيف المفتوح، يستخرج لك WinRAR هذا الملف، ويستخرج أيضًا جميع الملفات التي تحمل نفس اسم الملف المستهدف. تُكتب جميعها في مجلد مؤقت في مسار %tmp%.
| اسم الملف/المجلد | مسار الاستخراج |
| ------------------------------------------------------ | --------------------------------------------------------------------------------- |
| CLASSIFIED_DOCUMENTS.txt <– الملف المستهدف الذي تم النقر عليه | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
| CLASSIFIED_DOCUMENTS.txt .cmd <– الملف الموجود في المجلد | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
إذا وُجد ملفان في مجلد مؤقت (فك الضغط) بنفس الاسم لكن بحجمين مختلفين (مثلًا 20k و12k)، وفتحت الأرشيف وفتحت الملف الأول، 1.txt، الذي يبلغ حجمه 20 كيلوبايت، سيطلب منك WinRAR استبدال الملف بالملف الثاني، 1.txt، الذي يبلغ حجمه 10 كيلوبايت. إذا نقرت "Yes"، سيُفتح الملف الثاني فقط، 1.txt. يمكن إضافة هذا الشرط كاستثناء.
نقطة مهمة لمنطق الكشف
تنفيذ عملية يتم تشغيله من مسار استخراج ZIP أو مجلد مؤقت، مع امتداد مضلل أو مجلد يتنكر كملف
عندما يُفرج WinRAR عن ملف لفك الضغط في المجلد المؤقت، يجب أن يحتوي على ملفين بنفس الاسم لكن بأسماء مختلفة قليلًا (مسافة ثم ينتهي بأي امتداد)، مثل اسم الملف الرئيسي مع مسافة " " (CLASSIFIED_DOCUMENTS.pdf ) في نهاية الاسم ثم ".cmd" (CLASSIFIED_DOCUMENTS.pdf .cmd).
عندما يُحمّل WinRAR ملف DLL ويستدعي الدالة ShellExecuteExA، تحتوي المعلمة "pExecInfo" على مسار به مسافة وينتهي بأي امتداد، مثل "CLASSIFIED_DOCUMENTS.pdf .cmd."
مزودو ETW وفلسفة الكشف (ETW فقط) مزودو ETW
| الغرض | مزود ETW |
| -------------------------- | ------------------------------------- |
| إنشاء العمليات | `Microsoft-Windows-Kernel-Process` |
| رؤية سطر الأوامر | `Microsoft-Windows-Security-Auditing` |
| عمليات الملفات (اختياري) | `Microsoft-Windows-Kernel-File` |
سيعتمد الكشف على (إذا لم تتوفر أي من ProcessStart أو CreateProcess أو منطق EDR القائم على العلاقة بين العملية الأم/الفرعية):
● ETW لنظام الملفات
● ETW للغلاف / Explorer
● ETW لتحميل الصور (اختياري، غير مرتبط بالإنشاء)
● ETW لسطر الأوامر (اختياري)
مزودو ETW الأساسيون
| الغرض | مزود ETW |
| -------------------------- | ------------------------------------- |
| إنشاء المجلدات | `Microsoft-Windows-Kernel-File` |
| إنشاء ملفات EXE | `Microsoft-Windows-Kernel-File` |
| تنفيذ الغلاف | `Microsoft.Windows.ShellExecute` |
| تحميل الصور | `Microsoft-Windows-Kernel-Image` |
| Explorer | `Microsoft-Windows-Explorer` |
| الغلاف | `Microsoft-Windows-Shell-Core` |
منطق الكشف الخام
على مستوى عالٍ، يكتشف المنطق:
● قيام WinRAR.exe ببدء عمليات كتابة الملفات
● إنشاء مجلد وملف معًا بنفس الاسم الأساسي
● ظهور امتداد قابل للتنفيذ بعد إعادة التسمية أو الاستبدال
● حدوث التسلسل ضمن نافذة زمنية ضيقة (<2 ثانية)
هذا النمط نادر للغاية في مسارات العمل المشروعة لكنه أساسي في مسار تنفيذ الاستغلال.
● تتجنب القاعدة عمدًا:
● فحص سطر الأوامر
● تتبع العمليات الفرعية
● التجزئة الكاملة للملفات
يُذكر منطق الكشف الأساسي أدناه، مع مستوى الثقة ومبرر موجز.
1. تحميل الصورة (تأكيد التنفيذ)
السبب: يؤكد هذا التنفيذ الفعلي دون الاعتماد على تتبع إنشاء العمليات.
منطق الكشف:
مُحمّل Windows:
● يخطط Invoice.pdf .exe في الذاكرة
إشارة ETW:
● ImageLoad
● مسار الصورة:
● *.pdf\*.pdf .exe
2. قاعدة الكشف (API ShellExecuteExA) - منطق قاعدة عالية الدقة
قاعدة كشف عامة بناءً على التتبع التالي:
● أحداث إنشاء ملفات بواسطة WinRar.exe
● أحداث تحميل الصور لعملية WinRar.exe حيث تُحمّل ملف DLL باسم Shell32.dll وتبدأ في استخدام API (ShellExecuteExA|W) مع المعاملات.
● تستقبل هذه الدالة وسيطًا باسم SHELLEXECUTEINFO، وهو هيكل (Structure). كما ترى، يحتوي هذا الهيكل على حقول عديدة، لكن اثنين منهم مهمان لنا:
lpVerb وlpFile.
● lpVerb - يعني أنه إذا قمت بتعيين LpVerb إلى NULL، فإن ShellExecuteExA|W يستخدم الفعل (verb) الافتراضي إن كان متاحًا، وإذا لم يكن متاحًا ينفذ فعل "open". وفعل "open" يفتح الملف أو ينفذه.
● lpFile - يمثل lpFile مسار الملف المستخدم في ShellExecuteExA لتنفيذ الفعل، والآن يمكنك الانتباه إلى حرف المسافة (0x20) في نهاية مسار الملف.
ملاحظة:
1- Shell32.dll: هذا هو المكان الذي تُعرَّف فيه ShellExecuteExA. يحتوي على منطق تحليل هيكل SHELLEXECUTEINFO وتحديد كيفية التعامل مع الطلب (مثلًا، فتح مستند، تشغيل ملف EXE، أو إظهار نافذة الخصائص)
2- طريقة عمل الثغرة: الثغرة هنا. أزال WinRAR المسافة من اسم الملف وقت الكتابة لكنه نسي اعتماد هذا التغيير في قائمة الاستخراج. لذلك لم يتغير اسم الملف المستهدف والمسافة ما زالت موجودة في اسم الملف. يمكنني أيضًا القول إن ShellExecuteExA يفتح الملف "CLASSIFIED_DOCUMENTS.pdf .cmd". فامتداد ".cmd" لا يهم بالنسبة إلى ShellExecuteExA، بل يقوم فقط بتشغيل ملف باسم "CLASSIFIED_DOCUMENTS.pdf " في ذلك المسار.
منطق الكشف (منطق قاعدة عالية الدقة):
● قائم على SQL: \\Detection_Logic\\SQL-based-ShellExecute.txt
● KQL (ProcessCommandLine): \\Detection_Logic\\KQL-API-ProcessCommandLine.txt
● منطق الكشف بالكود الزائف: \\Detection_Logic\\SQL-API-ShellExecute.txt
ملاحظة: يمكنك إنشاء منطق كشف وفقًا للمعايير أعلاه. أضيف أيضًا برنامج Python بسيطًا لجلب الأحداث الذي سيساعدك في كتابة قواعد الكشف، وهو مفيد أيضًا عند إنشاء قواعد تعتمد على ETW.
| المزوّد | معرف الحدث | معرف الحدث / المهمة |
| ------------------------------------- | ----------------------------------------- | --------------------------- |
| `Microsoft-Windows-Shell-Core` | {30336983-0362-4540-9E69-14844E6A3B7A} | معرف الحدث 1 (تنفيذ) |
| `Microsoft-Windows-Kernel-Process` | {22FB2AD3-E163-4078-8C2A-801648437D2D} | تحميل صورة / بدء عملية |
3. منطق قاعدة عالية الدقة لاستغلال WinRAR CVE-2023-38831
- السبب: إطلاق تنبيه عند إنشاء أو تحميل ملف قابل للتنفيذ من مجلد ينتهي اسمه بامتداد مستند، وعند بدء التنفيذ عبر واجهات برمجة Explorer/Shell.
- منطق الكشف بالكود الزائف (منطق قاعدة عالية الدقة) - \\Detection_Logic\\WinRAR-CVE-2023-38831-Exploitation.txt
4. قاعدة كشف EDR (قائمة على ETW)
قاعدة كشف EDR عامة بناءً على التتبع التالي:
● أحداث إنشاء الملفات
● تنفيذ الغلاف / استدعاء Explorer
● أحداث تحميل الصور (اختيارية لكنها قوية)
منطق الكشف: \\Detection_Logic\\EDR-Detection-ETW-based.txt
5. استعلام KQL دون DeviceProcessEvents (إذا كانت الطرفية تدعم ذلك)
السبب: لأن هذا الإصدار يعمل دون الاعتماد على DeviceProcessEvents
منطق الكشف: \\Detection_Logic\\KQL-Detection-without-DeviceProcessEvents.txt
6. إشارة تنفيذ الغلاف (إذا كانت مفعّلة ومدعومة)
السبب: يعزز هذا الثقة عند ربطه مع إنشاء الملفات.
منطق الكشف: \\Detection_Logic\\Shell-Execution-Signal.txt
7. مناسب لمراكز SOC (تدفق الفرز)
السبب: أُنشئت هذه القاعدة لكل خطوة يتم اكتشافها أثناء الهجوم.
منطق الكشف: \\Detection_Logic\\SOC-Friendly.txt
(تنبيه / إذا كان يشمل ProcessStart أو CreateProcess أو منطق EDR القائم على العلاقة بين العملية الأم/الفرعية)
1. كشف عند قيام winrar.exe بإنشاء مجلد / ملف مشبوه، خاصة من مسارات Temp أو استخراج الأرشيف، وتشغيل ملف مشبوه تم إنشاؤه باستخدام إصدار ضعيف من WinRAR
السبب: أنشئ القواعد وفقًا للأحداث التي يعالجها منتجك، مثل الوصول أو الأحداث أو القائمة على السحابة
منطق الكشف: \\Detection_Logic\\Gen-Pseudocode-Detection-Logic.txt
2. كشف عند قيام winrar.exe بإنشاء عملية فرعية مشبوهة، خاصة من مسارات Temp أو استخراج الأرشيف
منطق الكشف:
نقطة النهاية: \\Detection_Logic\\winrar-spawns-suspicious-child-process.txt
قاعدة Sigma: \\Detection_Logic\\Sigma-Rule-WinRAR Exploit.txt
3. تنبيه بناءً على مزود ETW (إنشاء العمليات)
| المزوّد | معرف الحدث |
| ------------------------------------- | --------------------------- |
| `Microsoft-Windows-Security-Auditing` | 4688 (إنشاء العملية) |
منطق الكشف
● العملية الأم = winrar.exe
● العملية الجديدة = محرك السكربتات أو ملف قابل للتنفيذ
● يحتوي سطر الأوامر على Temp/AppData
4. استعلام KQL مع DeviceProcessEvents (إذا كانت الطرفية تدعم ذلك)
السبب: إذا أردنا التطوير باستخدام DeviceProcessEvents
منطق الكشف: \\Detection_Logic\\KQL-Detection-with-DeviceProcessEvents.txt
5. مؤشر هجوم (يمكنك إضافة تنبيه عالي الثقة)
بالالتزام بالشروط أدناه، يمكنك إضافة قاعدة IOA أو قائمة مراقبة للتنبيه.
| المؤشر | الثقة |
| ---------------------------------- | ---------- |
| winrar.exe ينشئ cmd/powershell | عالية |
| تنفيذ من Temp/AppData | عالية |
| تنفيذ `.cmd/.bat /.exe ` | عالية |
| فتح ZIP مزدوج الامتداد | متوسطة |
أنشئ قائمة مراقبة لملفين بنفس الاسم في مجلد أُنشئ بواسطة إصدار ضعيف من WinRAR (< 6.23):
كما لا يمكن أن يكون لديك ملفان بنفس الاسم في مجلد، ولا يمكن أن يكون لديك مجلد وملف بنفس الاسم.
لكن هذا ممكن في برامج الضغط مثل WinRar/7zip. في ملف مضغوط، بغض النظر عما إذا كانت لديك ملفات بنفس الاسم، تُكتب الملفات ببنية خاصة.
لذا يمكن أن يكون لديك كائنان (ملف/مجلد) بنفس الاسم في ملف ZIP/RAR.
محفزات مشروعة محتملة
● cmd.exe تم إنشاؤه بواسطة مثبتات ذاتية الاستخراج من 7-Zip/WinRAR
● powershell.exe تم تشغيله بواسطة محدِّثات برامج المؤسسات المعبأة في RAR
● rundll32.exe المستخدم بواسطة مثبتات برامج تشغيل الطابعات أو بطاقات الرسوميات
منطق الاستثناء (مثال)
AND NOT (
ChildImage IN (cmd.exe, powershell.exe, rundll32.exe)
AND
CommandLine CONTAINS (
"setup.exe",
"install.cmd",
"driverinstall",
"vendorupdate"
)
)
يحافظ هذا على كشف الاستغلال مع كتم سلوك المثبتات المعروف.
تتبع ملفات الأرشيف (أحداث نظام الملفات) — ربط هذه القاعدة مع نشاط استخراج RAR/ZIP (مثلًا، إنشاء ملفات .cmd/.bat/.exe مباشرة قبل التنفيذ، خاصة من مجلدات استخراج WinRAR مثل Rar$EX*) سيزيد الثقة بشكل كبير ويقلل النتائج الإيجابية الخاطئة من خلال إثبات أن التنفيذ جاء مباشرة بعد استخراج الأرشيف.
T1204.002 – تنفيذ المستخدم: ملف خبيث
T1059 – مترجم الأوامر والسكربتات
T1036 – التمويه (الامتداد المزدوج)
رمز الكشف هذا مخصص للأغراض التعليمية والاختبار المصرح به فقط.
لا تستخدمه على أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.