
APT-Hunter V4.0
APT-Hunter هي أداة بحث عن التهديدات لسجلات أحداث Windows صُممت بعقلية الفريق الأرجواني لتوفير كشف تحركات APT المخفية في بحر سجلات أحداث Windows لتقليل الوقت اللازم لكشف النشاط المشبوه.
APT-Hunter
اصطياد التهديدات في سجلات أحداث Windows، مبني بعقلية الفريق البنفسجي.
APT-Hunter هي أداة لاصطياد التهديدات في سجلات أحداث Windows. تستخدم قواعد كشف محددة مسبقًا وإحصاءات السجلات لإظهار نشاط APT المخفي في كميات كبيرة من الأحداث، مما يقلل الوقت اللازم لكشف السلوك المشبوه. وهي فعّالة بشكل خاص في تقييمات الاختراق.
تُكتب النتائج كخط زمني يمكن تحليله مباشرة في Excel وTimeline Explorer وTimesketch والأدوات المشابهة، أو استكشافه في لوحة التحكم على الويب المدمجة مع فرز اختياري بواسطة LLM محلي.
جدول المحتويات
- الميزات
- التثبيت
- البدء السريع
- خيارات سطر الأوامر
- أمثلة
- لوحة التحكم على الويب
- تحليل LLM المحلي
- الفرز الوكيلي
- نماذج المخرجات
- المؤلف
- شكر وتقدير
الميزات
- الكشف القائم على القواعد عبر Security وSystem وSysmon وPowerShell وDefender وWinRM وScheduled Tasks وTerminal Services وغيرها؛ يُكتشف نوع السجل تلقائيًا.
- محرك المعالجة المتعددة لتحليل سريع لمجموعات السجلات الكبيرة.
- الاصطياد بواسطة سلسلة نصية أو تعبير نمطي أو ملف تعبيرات نمطية، بالإضافة إلى دعم قواعد Sigma.
- اصطياد سجلات تدقيق Office 365.
- مخرجات الخط الزمني بصيغة Excel وCSV (جاهزة لـ Timesketch) وتقارير مخصصة لتسجيل الدخول وتنفيذ العمليات والوصول إلى الكائنات.
- لوحة تحكم على الويب مع التصفية والرسوم البيانية وخط زمني للحوادث وتصدير تقرير الاستجابة للحوادث (Markdown / .docx).
- تحليل LLM المحلي عبر أي خادم متوافق مع OpenAI (Ollama، LM Studio، llama.cpp). لا شيء يغادر جهازك.
- الفرز الوكيلي الذي يجمع آلاف التنبيهات في قائمة قصيرة قابلة للمراجعة من النتائج.
التثبيت
نزّل الملفات التنفيذية المُجمّعة من صفحة الإصدارات، أو شغّلها من المصدر (Python 3.8+):
git clone https://github.com/ahmedkhlief/APT-Hunter.git
cd APT-Hunter
python3 -m pip install -r requirements.txt
البدء السريع
python3 APT-Hunter.py -p /opt/wineventlogs/ -o Project1 -allreport
يقبل -p مجلدًا أو ملفًا واحدًا. أضف -web لفتح لوحة التحكم عند انتهاء التحليل.





خيارات سطر الأوامر
شغّل python3 APT-Hunter.py -h للحصول على القائمة الكاملة. الخيارات الرئيسية:
| الخيار | الوصف |
|---|---|
-p, --path | ملف السجل أو المجلد المراد تحليله |
-o, --out | اسم / مجلد المخرجات |
-start, -end | تقييد الخط الزمني (بصيغة ISO) |
-tz | المنطقة الزمنية (local أو مثل Asia/Dubai) |
-cores | أنوية المعالج المراد استخدامها (الافتراضي: نصف المتاح) |
-hunt, -huntfile, -eid | الاصطياد بواسطة سلسلة نصية/تعبير نمطي، أو ملف تعبيرات نمطية، أو معرّف الحدث |
-sigma, -rules | الاصطياد بقواعد Sigma المحوّلة إلى JSON |
-o365hunt, -o365rules, -o365raw | اصطياد سجلات تدقيق Office 365 |
-procexec, -logon, -objaccess, -allreport | تقارير إضافية |
-web, -webview, -webhost, -webport | تشغيل لوحة التحكم على الويب |
-llm, -llm-provider, -llm-url, -llm-model, -llm-key, -llm-severity, -llm-batch, -llm-context | تحليل LLM المحلي |
أمثلة
تحليل مجلد من ملفات EVTX (تُكتشف أنواع السجلات تلقائيًا):
python3 APT-Hunter.py -p /opt/wineventlogs/ -o Project1 -allreport
التركيز على إطار زمني:
python3 APT-Hunter.py -p /opt/wineventlogs/ -o Project1 -allreport -start 2022-04-03 -end 2022-04-05T20:56
الاصطياد بسلسلة نصية، أو تعبير نمطي، أو ملف من التعبيرات النمطية:
python3 APT-Hunter.py -hunt "psexec" -p /opt/wineventlogs/ -o Project2
python3 APT-Hunter.py -huntfile "(psexec|psexesvc)" -p /opt/wineventlogs/ -o Project2
python3 APT-Hunter.py -huntfile huntfile.txt -p /opt/wineventlogs/ -o Project2
الاصطياد بقواعد Sigma:
python3 APT-Hunter.py -sigma -rules rules.json -p /opt/wineventlogs/ -o Project2
جلب أحدث قواعد Sigma المحوّلة لـ APT-Hunter (يكتب rules.json):
./Get_Latest_Sigma_Rules.sh
لوحة التحكم على الويب
تصفّح تقريرًا مُنشأً في المتصفح: التصفية والرسوم البيانية وخط زمني للحوادث وتصدير تقرير الاستجابة للحوادث.
python3 run_webapp.py <Output>/<Output>_Report.xlsx # or pass the output directory
python3 APT-Hunter.py -p <logs> -o <Output> -web # analyse, then open the dashboard
python3 APT-Hunter.py -webview <Output> # open an existing report
قبول نتيجة فرز يثبّتها على الخط الزمني للحوادث مع أدلتها، مرفقة كـ أحداث فرعية قابلة للطي: تظهر أسفل النتيجة في الجدول بدلًا من تشابكها مع كل شيء آخر، وتُستبعد من رسوم الخط الزمني البيانية لتبقى الرسوم قابلة للقراءة. إزالة نتيجة تُزيل أحداثها الفرعية معها.
يرتبط الخادم بـ 0.0.0.0:5000 افتراضيًا. استخدم --host / --port (أو -webhost / -webport) لتغيير ذلك، على سبيل المثال --host 127.0.0.1 لإبقائه محليًا. تُحفظ النتائج المراجَعة والخط الزمني عند إعادة بناء ذاكرة التخزين المؤقت للتقرير.

لوحة التحكم الرئيسية: إجمالي الأحداث وعدد مرات الخطورة، وتوزيع الخطورة، وأكثر قواعد الكشف تفعيلًا، وحجم الأحداث اليومي. تُدرج الشريط الجانبي كل سجل أحداث وجدول ملخص في التقرير.

الخط الزمني للحوادث: النتائج المثبّتة مرسومة حسب الوقت ومُرمّزة بالألوان حسب الخطورة. قرّب وحُرّك داخل الفترات المزدحمة، وأنشئ ملخصًا تنفيذيًا بالذكاء الاصطناعي، وصدّر تقرير الاستجابة للحوادث أو CSV.

الخط الزمني الزمني: تتوسّع سلسلة الهجوم إلى أحداثها الفرعية، وتُظهر لوحة التفاصيل السرد وتقنيات MITRE والنتيجة.
مخطط الخط الزمني للحوادث قابل للتكبير، لذا تبقى دفعات الأحداث المتباعدة بدقائق أو ثوانٍ قابلة للقراءة: اسحب عبر المخطط للتكبير في فترة، وShift+اسحب للتحريك، وCtrl/Cmd+عجلة للتكبير حول المؤشر، أو استخدم شريط النظرة العامة أسفله. لا تتداخل التسميات أبدًا؛ تُخفى التسميات التي لا تتسع، وتمرير المؤشر فوق نقطة يسرد كل حدث متراكم عليها.
تحليل LLM المحلي
قيّم الأحداث المكتشفة من حيث الخبث باستخدام نموذج محلي، من سطر الأوامر:
python3 APT-Hunter.py -p <logs> -o <Output> -llm -llm-provider ollama -llm-model llama3 -llm-severity High
أو لكل حدث من لوحة التحكم (تحقق، اشرح، اربط). اضبط المزوّد (Ollama / LM Studio / llama.cpp) والنموذج وعنوان URL والمهلة في صفحة الإعدادات بلوحة التحكم. أي خادم محلي متوافق مع OpenAI يعمل؛ لا تُرسل أي بيانات إلى خدمة سحابية.
الفرز الوكيلي
يحوّل الفرز الوكيلي في الشريط الجانبي للوحة التحكم آلاف التنبيهات إلى قائمة قصيرة من النتائج:
- التجميع. تُجمّع التنبيهات في النطاق الذي تختاره (الحد الأدنى للخطورة، وأجهزة الحاسوب، والإطار الزمني) حسب القاعدة والمضيف ومعرّف الحدث وشكل الرسالة. عادةً ما يتقلص تقرير يحتوي على نحو 13.5 ألف تنبيه إلى بضع عشرات من المجموعات.
- حكم المرور الأول. يحكم LLM على كل مجموعة مرة واحدة بالضبط. هذا المرور رخيص وشامل، مما يضمن عدم تخطي أي شيء.
- التحقيق. يعمل وكيل على الخيوط الناجية باستخدام أدوات: يبحث في التنبيهات، ويقرأ سجل الأحداث الخام وراء تنبيه، ويتنقل في الخط الزمني حول لحظة معينة، ويربط ما يجده في سلاسل هجوم. يمكنه فقط اقتراح النتائج؛ ولا يكتب أبدًا في الخط الزمني بنفسه.
- المراجعة. تظهر النتائج في قائمة انتظار مع النتيجة والحكم وتقنية MITRE والأدلة وأثر تحقيق الوكيل. القبول يضيف نتيجة إلى الخط الزمني للحوادث (وتقرير الاستجابة للحوادث / تصدير .docx)؛ الرفض يتجاهلها. اضبط عتبة الإضافة التلقائية في الإعدادات (أو لكل تشغيل) لقبول النتائج عالية التقييم تلقائيًا.
تحتاج مرحلة التحقيق إلى LLM يدعم استدعاء الأدوات. إذا لم يدعمه نموذجك، يتراجع APT-Hunter إلى خط أنابيب ثابت للتحويل/الربط. التغطية متطابقة في كلتا الحالتين، لأن الوكيل يضيف عمقًا فقط فوق المرور الأول. تُحدَّد جولات الأدوات وحد زمني فعلي في الإعدادات.

الفرز الوكيلي: يُظهر سجل التشغيل النطاق وأعداد التنبيهات والمجموعات والنتائج واستدعاءات LLM لكل تشغيل. هنا تقلّصت 91 تنبيهًا حرجًا على مضيف واحد إلى 32 مجموعة وسلسلة هجوم واحدة عالية التقييم.

تفاصيل النتيجة: السرد وتقنيات MITRE والأدلة وأثر التحقيق الكامل (كل حدث مقروء ونافذة زمنية وبحث تنبيهات أجراه الوكيل)، بحيث يمكن تدقيق كل استنتاج.
ملاحظة: مخرجات LLM أداة مساعدة للفرز، وليست حكمًا نهائيًا. راجع النتائج قبل الاعتماد عليها. قد تحتاج نماذج الاستدلال إلى رفع مهلة الطلب أعلى بكثير من الافتراضي البالغ 200 ثانية.
نماذج المخرجات
| النموذج | الوصف |
|---|---|
| Sample_TimeSketch.csv | خط زمني يمكنك رفعه إلى Timesketch لرؤية الصورة الكاملة لهجوم |
| Sample_Report.xlsx | كل حدث مكتشف عبر جميع سجلات Windows المقدَّمة |
| Sample_Logon_Events.csv | جميع أحداث تسجيل الدخول مع الحقول المحللة (التاريخ، المستخدم، عنوان IP المصدر، عملية تسجيل الدخول، محطة العمل، نوع تسجيل الدخول، الجهاز، السجل الأصلي) |
| Sample_Process_Execution_Events.csv | جميع عمليات تنفيذ العمليات الملتقطة من سجلات الأحداث |
| Sample_Object_Access_Events.csv | الوصول إلى الكائنات الملتقط من الحدث 4663 |
| Sample_Collected-SIDS.csv | المستخدمون ومعرّفات SID الخاصة بهم، للمساعدة في التحقيقات |
| EventID_Frequency_Analysis.xls | تحليل تكرار معرّف الحدث |
المؤلف
Twitter: @ahmed_khlief · LinkedIn: Ahmed Khlief
الترخيص
موزّع تحت GNU GPL v3. راجع LICENSE.
شكر وتقدير
شكرًا لـ Joe Maccry على مساهمته الرائعة في حالات استخدام Sysmon (أضاف Joe أكثر من 100 حالة استخدام)