
أنفيل هي أداة تقييم سطح الهجوم تعتمد على وقت التشغيل في المقام الأول لتطبيقات العميل السميك على ويندوز، صُممت لمختبرَي الاختراق وباحثي الأمن الذين يقومون بتقييمات أمنية مستهدفة للتطبيقات. تغطي الأداة فئات هجوم متعددة في تشغيل مستهدف واحد.
تقييم تصعيد الامتيازات وسطح الهجوم المعتمد على وقت التشغيل لتطبيقات ويندوز السميكة.
Anvil هي أداة لتقييم تصعيد الامتيازات وسطح الهجوم المعتمدة على وقت التشغيل لتطبيقات ويندوز السميكة. بدلاً من مسح نظام الملفات بشكل أعمى، فإنها تقترن بين التقاط Procmon وWindows AccessCheck للإبلاغ فقط عن المسارات التي يتم ملاحظتها في وقت التشغيل و يتم التأكد من قابليتها للكتابة من قبل المستخدمين القياسيين، مما يزيل الضوضاء الناتجة عن النتائج الإيجابية الخاطئة التي تعاني منها أدوات التعداد العامة.
تغطي معظم أدوات تقييم التطبيقات السميكة فئة أو اثنتين من فئات الهجوم. تم بناء Anvil حول فكرة أن المراقبة في وقت التشغيل، وقابلية الاستغلال المؤكدة عبر قوائم التحكم بالوصول (ACL)، وسطح الهجوم الواسع يجب أن تتعايش في نفس التشغيل المستهدف — مع خط أنابيب مُبوَّب يُبقي المخرجات قابلة للتنفيذ.
يمر كل مرشح بأربع بوابات متتالية قبل الإبلاغ عنه.
بوابات صلبة
AccessCheckبوابات منطق الوحدة
Supersede، OverwriteIf، إلخ) + حماية قابلية الكتابة عبر المستخدمين.sys الخاصة بالنواةتحديد الهدف
تقوم الأداة بتحديد مسار التنفيذ للهدف (من --exe أو --service أو --pid). إذا كانت خدمة، يتم استرداد ServiceInfo مع PID والحالة الحالية.
التقاط Procmon
تتم قراءة مستوى سلامة العملية مباشرة بعد الإطلاق (أثناء بقاء العملية على قيد الحياة) ويتم تخزينه في السياق.
التحليل المفلتر حسب الوحدة
تطلب كل وحدة تصدير CSV مفلتر من Procmon باستخدام مرشح .pmc الخاص بها (المخزن في filters/). يتم تحليل CSV، ويتم تطبيق سلسلة من البوابات:
الارتباط الثابت
تقوم وحدة com بتمريرة ثابتة إضافية — مسح الثنائي الهدف بحثًا عن CLSIDs مضمنة وفحص كل منها مقابل HKLM و HKCU — لكشف فرص الاختطاف التي لم يتم ممارستها أثناء نافذة الالتقاط. يتم وضع علامة عليها بـ [Static Correlation].
flowchart TB
%% Phase 1
subgraph Phase1["المرحلة 1: الهدف واكتشاف وقت التشغيل"]
TR["محلل الهدف<br/>--exe / --service / --pid"] -->
IL["بوابة السلامة<br/>إطلاق Medium-IL / إعادة تشغيل الخدمة"] -->
PM["محرك Procmon<br/>أحداث وقت التشغيل FS / Reg / Pipe"]
end
%% Phase 2
subgraph Phase2["المرحلة 2: تقليل الإشارات"]
direction LR
PF["مرشحات PMC لكل وحدة<br/>آثار عالية الإشارة فقط"] -->
CSV["تصدير CSV مفلتر"]
end
%% Phase 3
subgraph Phase3["المرحلة 3: بوابات قابلية الاستغلال"]
HG["بوابات صلبة<br/>هدف عالي السلامة<br/>ليس مسارًا محميًا"] -->
ACL["التحقق عبر AccessChk<br/>قابل للكتابة من قبل مستخدم قياسي"] -->
LG["بوابات منطق<br/>قواعد خاصة بالوحدة"]
end
%% Phase 4
subgraph Phase4["المرحلة 4: الارتباط"]
RT["نتائج وقت التشغيل"]
ST["الارتباط الثابت<br/>COM: مسح CLSID الثنائي / السجل"]
end
%% Phase 5
subgraph Phase5["المرحلة 5: التقارير"]
SV["محرك الشدة<br/>P1–P5"] --> OUT["مخرجات الطرفية"]
SV --> JSON["تقرير JSON"]
SV --> HTML["تقرير HTML"]
end
%% Cross-phase flow
PM --> PF
CSV --> HG
LG --> RT
ST -.-> RT
RT --> SV
%% Styling
classDef p1 fill:#0f2a44,stroke:#4cc9f0,color:#e6f1ff
classDef p2 fill:#2b193d,stroke:#f72585,color:#fde8f3
classDef p3 fill:#1f2d1c,stroke:#7ae582,color:#eaf7ea
classDef p4 fill:#3a1f1f,stroke:#ffb703,color:#fff3d6
classDef p5 fill:#0b2e2a,stroke:#00f5d4,color:#e6fffb
class Phase1 p1
class Phase2 p2
class Phase3 p3
class Phase4 p4
class Phase5 p5
linkStyle default stroke:#9aa4b2,stroke-width:2pxتتطلب جميع الوحدات المعتمدة على Procmon وجود ملف مرشح .pmc مطابق في دليل filters/ (انظر المرشحات).
يقوم Anvil بتثبيت تبعياته الثلاثة ذاتيًا في أول تشغيل. يمكنك أيضًا تثبيتها يدويًا:
pip install rich pefile
pip install rich>=13.0 pefile>=2023.2.7
يستخدم Anvil ثلاث ثنائيات من Sysinternals.
في كل تشغيل، يقوم Anvil بحل كل أداة باستخدام الأولوية التالية:
--procmon أو --handle أو --accesschk (انظر أدناه)HKCU\Software\Anvil (يُكتب عند أول حل ناجح)wherelive.sysinternals.com ويُخزن في %LOCALAPPDATA%\Anvil\sysinternals\بمجرد حل الأداة بأي طريقة، يُكتب مسارها إلى ذاكرة التخزين المؤقت للسجل. تتخطى العمليات اللاحقة الخطوات 1–3 بالكامل وتنتقل مباشرة إلى المسار المخزن مؤقتًا.
إذا تعذر تنزيل أداة (لا اتصال بالإنترنت، جدار حماية، أو بروكسي)، يقوم Anvil بطباعة خطأ منظم والخروج فورًا. يتم عرض رسالة خطأ تسرد الأداة (الأدوات) المفقودة والعلم الذي يجب استخدامه.
قم بتوفير المسار إلى أي ثنائي عبر العلم الخاص به. سيقوم Anvil بنَسخه إلى %LOCALAPPDATA%\Anvil\sysinternals\ وكتابة المسار إلى ذاكرة التخزين المؤقت للسجل — لا حاجة لاستخدام العلم مرة أخرى بعد التشغيل الأول.
python anvil.py --exe "C:\App\target.exe" --procmon "D:\Tools\Procmon64.exe" --handle "D:\Tools\handle.exe" --accesschk "D:\Tools\accesschk.exe"
# استنساخ المستودع
git clone https://github.com/shellkraft/Anvil.git
cd Anvil
# التشغيل — يتم تثبيت التبعيات تلقائيًا في أول مسح
python.exe anvil.py
نصيحة: افتح دائمًا الطرفية الخاصة بك مع تشغيل كمسؤول قبل تشغيل Anvil.
يتطلب PyInstaller (pip install pyinstaller):
python -m PyInstaller --onefile --console --add-data "filters;filters" --add-data "modules/logo.png;." --icon .\modules\logo.ico --name Anvil anvil.py
سيكون الثنائي الناتج في dist\Anvil.exe. لا يتطلب تثبيت Python على الجهاز الهدف.
ملاحظة: قد يحظر Windows SmartScreen الملف التنفيذي المترجم في أول تشغيل لأنه غير موقع.
يتوفر Anvil.exe مُعد مسبقًا على صفحة الإصدارات — إذا كانت الثقة في الثنائيات العشوائية من الإنترنت ضمن نموذج التهديد الخاص بك.
| الإصدار | SHA-256 | VirusTotal |
|---|---|---|
| V1.0.0 | 0ecf5a62... | 4/72 |
يمكن التحقق من SHA-256 باستخدام
certutil -hashfile Anvil.exe SHA256(Windows) أوsha256sum Anvil.exe(Linux).
python anvil.py [--exe PATH | --service NAME | --pid PID] [options]
| العلم | الوصف |
|---|---|
--exe PATH | الملف التنفيذي الهدف. يتم إطلاقه عند Medium IL لالتقاط Procmon. |
--service NAME | اسم خدمة ويندوز. يتم حل EXE من السجل؛ يتم إعادة تشغيل الخدمة لالتقاط بدء التشغيل. |
--pid PID | الارتباط بعملية قيد التشغيل بالفعل. يلتقط Procmon النشاط الجاري. |
| العلم | الافتراضي | الوصف |
|---|---|---|
--modules LIST | all | قائمة مفصولة بفواصل من الوحدات المراد تشغيلها. |
أسماء الوحدات: dll، com، registry، binary، configs، installdir، memory، symlink، unquoted، pesec، pipes
| العلم | الافتراضي | الوصف |
|---|---|---|
--procmon-runtime SEC | 30 | نافذة التقاط Procmon بالثواني. قم بزيادتها للتطبيقات بطيئة البدء. |
فحص أساسي لتطبيق سطح مكتب:
python anvil.py --exe "C:\Program Files\MyApp\myapp.exe" --report report.html
نافذة التقاط أطول لتطبيق بطيء البدء:
python anvil.py --exe "C:\Program Files\MyApp\myapp.exe" --procmon-runtime 60 --scan-install-dir
استهداف خدمة ويندوز:
python anvil.py --service MyAppSvc --modules dll,binary,unquoted,registry
الارتباط بعملية قيد التشغيل بالفعل:
python anvil.py --pid 4872 --report report.html --verbose
تشغيل وحدات محددة فقط:
python anvil.py --exe "C:\App\app.exe" --modules dll,symlink,unquoted
فحص ذاكرة العملية بحثًا عن سلاسل مخصصة إضافية:
python anvil.py --exe "C:\App\app.exe" --modules memory --memory-strings "InternalSecret,DevPassword"
جهاز معزول — تقديم Sysinternals يدويًا (يتم نسخه مرة واحدة):
python anvil.py --exe "C:\App\app.exe" --procmon "E:\Sysint\Procmon64.exe" --handle "E:\Sysint\handle.exe" --accesschk "E:\Sysint\accesschk.exe"
مرمزة بالألوان حسب الشدة مع كتل تفاصيل اختيارية --verbose. يتطلب حزمة rich (يتم تثبيتها تلقائيًا).
--report findings.json)مصفوفة قابلة للقراءة آليًا من كائنات النتيجة:
[
{
"severity": "P1",
"module": "اختفاء DLL",
"message": "[System→User] DLL وهمي: version.dll",
"detail": "اسم DLL: version.dll\nتمت المحاولة: C:\\ProgramData\\MyApp\\version.dll\n..."
}
]
--report report.html) [موصى به]تقرير مستقل بذاته في ملف واحد مع:
يتم تضمين جميع ملفات المرشح .pmc في دليل filters/ من المستودع — لا حاجة للإعداد. ستلتقطها الوحدات المعتمدة على Procmon تلقائيًا.
إذا فقد ملف المرشح أو تلف، أعد إنشائه في Procmon باستخدام القواعد أعلاه: Filter → Filter… لتكوين الشروط، ثم File → Export Configuration… واحفظ في filters/<name>.pmc.
سيلتقط Anvil ملف .pmc تلقائيًا في التشغيل التالي لتلك الوحدة.
تم تصميم Anvil لأغراض أبحاث الأمان، وصيد الثغرات، ومهام اختبار الاختراق المصرح بها. استخدمه فقط على الأنظمة التي تمتلكها أو لديك إذن كتابي صريح لتقييمها.
ملاحظات تشغيلية
إعداد التقارير
تتم طباعة النتائج على الطرفية (مع ترميز الألوان) واختياريًا كتابتها إلى JSON أو تقرير HTML مستقل.
| الميزة | AnviL | Spartacus | Robber | winPEAS | Procmon |
|---|
| الاكتشاف الآلي | ✅ | ✅ | ✅ | ✅ | ❌ |
| اكتشاف تم التحقق منه بواسطة وقت التشغيل | ✅ | ❌ | ❌ | ❌ | ✅ |
| اكتشاف DLL الوهمية | ✅ | ✅ | ❌ | ❌ | ◐ |
| تحليل مدرك لترتيب البحث | ✅ | ❌ | ❌ | ❌ | ❌ |
| التحقق من قابلية الكتابة عبر ACL | ✅ (AccessChk) | ◐ | ◐ | أساسي | ❌ |
| ترشيح الإشارات لكل وحدة | ✅ (مرشحات .pmc) | ❌ | ❌ | ❌ | ❌ |
| إزالة النتائج الإيجابية الخاطئة (خط أنابيب مُبوَّب) | ✅ | ❌ | ❌ | ❌ | ❌ |
| إعادة تشغيل الخدمة وإعادة التقاط PID | ✅ | ❌ | ❌ | ❌ | ❌ |
| محاكاة مستخدم Medium-IL | ✅ | ❌ | ❌ | ❌ | ❌ |
| اختطاف DLL (مدرك للتطبيقات السميكة) | ✅ | ❌ | ❌ | ◐ | ❌ |
| ارتباط اختطاف COM | ✅ | ❌ | ❌ | ❌ | ❌ |
| تحليل ACL / انتحال الأنابيب المسماة | ✅ | ❌ | ❌ | ❌ | ❌ |
| اكتشاف إساءة استخدام الروابط الرمزية / النقاط | ✅ | ❌ | ◐ | ◐ | ❌ |
| أسرار الذاكرة (مسح العملية الحية) | ✅ | ❌ | ❌ | ◐ | ❌ |
| تحليل الأمان / التخفيفات PE | ✅ | ❌ | ❌ | ◐ | ❌ |
| تقييم تصعيد الامتيازات (غير استغلالي) | ✅ | ✅ | ✅ | ❌ | ❌ |
| الاستغلال الآلي | ❌ | ✅ | ✅ | ❌ | ❌ |
| تسجيل الثقة / الشدة | ✅ (P1–P5) | ❌ | ❌ | ❌ | ❌ |
| تحليل خاص بالهدف (exe / svc / pid) | ✅ | ❌ | ❌ | ❌ | ✅ |
| تقارير مهيكلة (JSON / HTML) | ✅ | ❌ | ❌ | TXT | ❌ |
| توزيع ثنائي مستقل بذاته | ✅ | ✅ | ✅ | ✅ | ✅ |
| الوحدة | العلم | ما تقوم بفحصه |
|---|
| اختطاف DLL | dll | أحداث CreateFile لـ .dll — DLLs وهمية و DLLs محملة في أدلة قابلة للكتابة |
| اختطاف COM | com | مفاتيح سجل خادم COM قابلة للكتابة من قبل مستخدمين قياسيين؛ مسح ثنائي لـ ProgIDs |
| اختطاف الثنائيات | binary | أحداث CreateFile لـ .exe — زرع EXE وهمي وأدلة EXE قابلة للكتابة |
| الإعدادات غير الآمنة | configs | الوصول إلى ملفات الإعدادات (.ini، .xml، .json، .yaml، إلخ) من أدلة قابلة للكتابة |
| دليل التثبيت | installdir | ACL الجذر، ملفات EXE ذات بيان التصعيد، والأدلة الفرعية القابلة للكتابة |
| سلاسل الذاكرة | memory | فحص ذاكرة العملية الحية بحثًا عن بيانات الاعتماد، الرموز، مفاتيح API، JWTs، سلاسل الاتصال |
| هجمات الروابط الرمزية | symlink | متجهات النقاط والروابط الرمزية في مسارات temp / appdata القابلة للكتابة من قبل المستخدم |
| مسار خدمة غير مقتبس | unquoted | الخدمات ذات مسارات ImagePath غير مقتبسة حيث تكون الأدلة الوسيطة الوهمية قابلة للكتابة |
| تصعيد الامتيازات عبر السجل | registry | مفاتيح السجل القابلة للكتابة من قبل مستخدمين قياسيين والتي تتحكم في سلوك الخدمة/التطبيق |
| أعلام أمان PE | pesec | غياب ASLR، DEP، CFG، SafeSEH، و Authenticode على الثنائيات الهدف |
| ACL الأنابيب المسماة | pipes | الأنابيب المسماة ذات DACLs المتساهلة أو ACEs القادرة على الانتحال |
| الثنائي | المستخدم بواسطة | التحميل |
|---|
Procmon64.exe | جميع الوحدات المعتمدة على Procmon | ProcessMonitor.zip |
handle.exe | وحدة ACL الأنابيب المسماة | Handle.zip |
accesschk.exe | وحدة ACL الأنابيب المسماة — تعداد DACL للأنبوب | AccessChk.zip |
| العلم | الوصف |
|---|
--procmon PATH | مسار إلى Procmon64.exe. يتم نسخه إلى %LOCALAPPDATA%\Anvil\sysinternals\ |
--handle PATH | مسار إلى handle.exe. يتم نسخه إلى %LOCALAPPDATA%\Anvil\sysinternals\ |
--accesschk PATH | مسار إلى accesschk.exe. يتم نسخه إلى %LOCALAPPDATA%\Anvil\sysinternals\ |
| العلم | الافتراضي | الوصف |
|---|
--report FILE | — | إنشاء تقرير — يحدد الامتداد التنسيق: .json لـ JSON، .html (أو أي امتداد آخر) لتقرير HTML مستقل بذاته. |
--verbose | off | طباعة كتل التفاصيل الكاملة للنتيجة في الطرفية. |
--no-color | off | تعطيل إخراج الألوان ANSI. |
--skip-authenticode | off | تخطي فحوصات توقيع Authenticode (أسرع للأدلة الكبيرة للتثبيت). |
--scan-install-dir | off | تضمين جميع DLLs في دليل التثبيت في فحوصات أمان PE. |
--memory-strings STR,... | — | سلاسل إضافية مفصولة بفواصل للبحث عنها في ذاكرة العملية. |
| المستوى | التسمية | CVSS النموذجي | المعنى |
|---|
| P1 | حرج | 8.0 – 8.8 | تصعيد امتيازات يتم تشغيله تلقائيًا (بدون تفاعل المستخدم) |
| P2 | عالٍ | 7.0 – 7.9 | قابل للاستغلال مع تفاعل المستخدم أو مشغل أضعف |
| P3 | إعداد خاطئ | 4.0 – 6.9 | مسارات غير مقتبسة، تخفيفات مفقودة — غير قابلة للاستغلال مباشرة |
| P4 | تأثير منخفض | 0.1 – 3.9 | متجهات إعلامية ذات تأثير محدود في العالم الحقيقي |
| P5 | إعلامي | N/A | سياق وملاحظات، وليست ثغرات |
| الملف | الوحدة | قواعد المرشح الرئيسية |
|---|
filters/dll.pmc | اختطاف DLL | Operation is CreateFile، Path ends with .dll |
filters/binary.pmc | اختطاف الثنائيات | Operation is CreateFile، Path ends with .exe |
filters/config.pmc | الإعدادات غير الآمنة | Operation is CreateFile (مرشح الامتداد في الكود) |
filters/com.pmc | اختطاف COM | Operation is RegQueryKey، Path contains HKLM |
filters/symlink.pmc | هجمات الروابط الرمزية | Operation is CreateFile |