العودة إلى التحديثات
New releaseAug 28, 2026

maltrail v3.2

نظام كشف حركة المرور الخبيثة في الوقت الفعلي باستخدام القوائم السوداء العامة، وآثار البرمجيات الخبيثة الثابتة، والتحليل الاستدلالي لتحديد التهديدات عبر حركة مرور DNS وHTTP وIP.

مشاركة

Maltrail

License Sensor Server Trails X

Maltrail

Maltrail هو نظام لكشف حركة مرور الشبكة يحدد الاتصال ببنية تحتية خبيثة معروفة ويبلّغ عن حالات شاذة محددة في حركة المرور. وهو يطابق النطاقات وعناوين URL وعناوين IP وأزواج IP:port وقيم User-Agent المرصودة على الشبكة مقابل مجموعة من المؤشرات تُسمى trails.

يُسجَّل الكشف كحدث واحد يحتوي على المصدر والوجهة والبروتوكول وtrail المطابق والتصنيف ومصدر trail:```text "2026-08-07 09:14:22.117034" gw 10.13.13.2 57809 1.1.1.1 53 UDP DNS malware.bakewithdavid.com "asyncrat (malware)" (static)

تم تصميم Maltrail لمراقبة الشبكة القائمة على المؤشرات. تكشف اكتشافاته الاستدلالية عن مسار المطابقة، لكنه ليس بديلاً عن القياس عن بُعد لنقاط النهاية أو نظام منع التسلل العام.

## الميزات

- بناء مسار كامل يجمع أكثر من 3,000 ملف ثابت مضمّن، و42 تكاملًا مع خلاصات عامة، ومسارات اختيارية يوفّرها المشغّل.
- مستشعر Rust متعدد الخيوط يستخدم libpcap، مع عمال التقاط Linux `PACKET_FANOUT` الاختياريين.
- خادم Python يوفّر واجهة التقارير، واستقبال الأحداث، وواجهة HTTP API.
- مسارات وقوائم بيضاء مخصّصة بنص عادي يمكن مراجعتها والتحكم في إصداراتها.
- استدلالات للفحص، واستنزاف DNS، وعمليات البحث الشبيهة بـ DGA، والتنزيلات المشبوهة، وفحوص الوكيل، وقيم User-Agent المشبوهة، والنشاط الشبكي ذي الصلة.
- تسجيل الأحداث محليًا، وتسجيل Maltrail عن بُعد، وCEF عبر syslog، وإخراج Logstash JSON.
- التحقق من صحة النشر باستخدام `maltrail-sensor -T` ومقاييس Prometheus الاختيارية.

## المحتويات

- [البنية](#architecture)
- [واجهة التقارير](#reporting-interface)
- [الأداء](#performance)
- [التثبيت](#installation)
  - [المثبّت](#installer)
  - [البناء من المصدر](#building-from-source)
  - [Systemd](#systemd)
  - [Docker](#docker)
- [الإعداد](#configuration)
- [المسارات](#trails)
- [الأحداث وواجهة API](#events-and-api)
- [العمليات](#operations)
  - [المراقبة](#monitoring)
  - [الاحتفاظ بالأحداث](#event-retention)
- [التوثيق](#documentation)
- [المساهمة](#contributing)
- [المشروع](#project)
  - [الترخيص](#license)
  - [المشرفون](#maintainers)
  - [الرعاة](#sponsors)
  - [العروض والمنشورات](#presentations-and-publications)
  - [القائمة السوداء المشتقة](#derived-blacklist)
  - [تكاملات الطرف الثالث](#third-party-integrations)
  - [شكر وتقدير](#acknowledgements)

## البنية

يتكوّن Maltrail من عمليتين مستقلتين قد تعملان على نفس المضيف أو على مضيفين منفصلين:```text
   ┌──────────┐   events (UDP or file)   ┌──────────┐
   │  sensor  │ ───────────────────────► │  server  │ ◄── browser
   └──────────┘                          └──────────┘
    Rust                                  Python
    libpcap + PACKET_FANOUT               reporting UI + API
    trail matching + heuristics

يقوم المستشعر بالتقاط حركة المرور، وإجراء مطابقة المسار والتحليل الاستكشافي، وإنتاج الأحداث. يمكنه كتابة الأحداث محليًا (LOG_DIR)، أو إرسالها إلى خادم Maltrail بعيد (LOG_SERVER)، أو القيام بكليهما. يمكنه أيضًا إصدار CEF عبر syslog (SYSLOG_SERVER) وJSON إلى Logstash (LOGSTASH_SERVER).

يستقبل الخادم الأحداث البعيدة ويخزّنها، ويقدّم سجلات الأحداث المتاحة محليًا، ويوفّر واجهة الويب وواجهة API.

واجهة الإبلاغ

يتضمّن Maltrail واجهة إبلاغ تعمل في المتصفح لاستكشاف حركة المرور المكتشفة، مع تحديثات مباشرة، وبحث واعٍ بالحقول، وبحث استرجاعي، وعروض جغرافية، وفرز، وعروض محفوظة، وتصدير.

واجهة الإبلاغ في Maltrail

تُقدَّم الواجهة بواسطة server.py على HTTP_ADDRESS:HTTP_PORT. وهي JavaScript خالصة مع اعتماد واحد فقط على وقت التشغيل من طرف ثالث (PapaParse، لتحليل CSV) وبدون خطوة بناء. يُعرض يوم واحد في كل مرة، يُختار عبر منتقي تاريخ يعمل أيضًا كشبكة كثافة الأحداث على السجلات اليومية المتاحة. تُبَثّ الأحداث من /events وتُجمَّع في المتصفح إلى تهديدات — صف واحد لكل (source, trail) مميّز — تُعرض في شبكة قابلة للفرز مع لوحة تفاصيل.

الميزةملاحظات
الوضع المباشرتُدفع الأحداث المُضافة عبر Server-Sent Events (/live) وتُدمج في العرض الحالي. يتراجع إلى استقصاء نطاقات البايتات من السجل اليومي عند عدم توفر SSE، أو للجلسات التي لا تستطيع البث خدمتها. يمكن للتهديدات الجديدة عالية الخطورة إطلاق إشعار سطح مكتب وتنبيه صوتي؛ ويمكن كتم كليهما
البحثرموز محدّدة النطاق بالحقول (src: dst: port: proto: type: trail: info: family: tag: uid: sev: dir: status:؛ family:interlock يجلب interlock-1/-2، وهي الأجزاء التي يصل إليها تفريغ تغذية واحدة مقسّمًا) مع دمج المسافة كـ AND، و- للاستبعاد، وبدائل *، وCIDR (src:10.0.0.0/8)، ونطاقات رقمية ومقارنات (port:>1024، count:>=100). تظهر المرشّحات النشطة كشرائح قابلة للإزالة
البحث الاسترجاعييبحث في جميع السجلات اليومية المحتفظ بها عن مؤشر واحد (/hunt)، وليس فقط في اليوم المعروض. محدود بحدّ أقصى لعدد الأيام، وميزانية زمنية فعلية، وسقف للعيّنات؛ ويُبلَّغ عن اليوم الذي قطعته الميزانية بشكل منفصل عن الأيام المكتملة بدلًا من احتسابه كإجمالي منتهٍ. يتيح فهرس جانبي لكل يوم (LOG_DIR/index/، USE_EVENT_INDEX) للمسح تخطّي كل سطر غير مطابق ويجعل /counts دقيقًا
خريطة العالمكثافة الأحداث لكل بلد لليوم المحدد (/geo)، مع تحديد موقع النقطة الطرفية الخارجية لكل حدث. تُبلَّغ الأحداث التي لا يمكن نسبتها إلى عنوان خارجي كغير معيّنة على الخريطة بدلًا من تخمينها. اضبط HOME_LAT / HOME_LON لرسم أقواس المنشأ
الفرزحالة لكل تهديد (جديد / قيد التحقيق / محلول / إيجابية كاذبة)، وملاحظات نصية حرة، ووسوم، وإخفاء. تتوفر قواعد القائمة البيضاء ونقاط OSINT الارتكازية من قائمة سياق الصف
العروض المحفوظةإعدادات مرشّحات مسبقة مُسمّاة
التصديرالعرض المفلتر الحالي بصيغة CSV أو JSON أو مؤشرات مُبطَّلة
المظهرسمات داكنة وفاتحة، وخطوات منفصلة لحجم النص

تُخزَّن حالة الفرز والعروض المحفوظة والوسوم وإعدادات المظهر في المتصفح (localStorage)، وليس على الخادم: فهي خاصة بكل متصفح وبكل أصل، ولا تُشارَك بين المحللين.

الجلسات المقيّدة بمرشّح شبكة ترى فقط الأحداث من شبكاتها الخاصة، وينطبق هذا التقييد على نقاط counts وmap وblacklist وكذلك على قائمة الأحداث.

يُبحث عن إثراء البلد وASN للعناوين الفردية على stat.ripe.net بواسطة الخادم، الذي يخزّن النتائج مؤقتًا ويقدّمها للواجهة من نقطة /ripe الخاصة به؛ ولا يتحدث المتصفح إلى أي شيء سوى Maltrail. اضبط DISABLE_RIPE_LOOKUPS لإيقاف عمليات البحث الصادرة بالكامل. بدونها — أو على مضيف بلا اتصال بالإنترنت — تأتي الأعلام من جدول RIR المحلي بدلًا من ذلك ويعمل كل شيء آخر في الواجهة دون اتصال.

الأداء

يعتمد الأداء على المعالج، وتركيبة حركة المرور، وحجم مجموعة المسارات، ومشغّل الالتقاط، وواجهة الشبكة. تقيس الأرقام أدناه مسار معالجة الحزم في المستشعر بمعزل عن غيره؛ وهي ليست قياسات التقاط مباشر من طرف إلى طرف.

قياسات تمثيلية على AMD Ryzen 7 PRO 4750U مع تمكين الاستكشافات ومجموعة مسارات من 1.5 مليون صف:

حركة المرورالوقت لكل حزمة
ICMP echo، 58 بايت101 ns
TCP SYN، 70 بايت302 ns
Bulk TLS، 1,473 بايت402 ns
استعلام DNS مع ذاكرة مؤقتة دافئة، 93 بايت452 ns
حركة مرور مختلطة، بمتوسط 866 بايت552 ns
طلب HTTP، 169 بايت602 ns
استعلام DNS باسم فريد، 93 بايت1,102 ns

أظهرت تشغيلات المقارنة دون اتصال باستخدام نفس الالتقاط المُولَّد والإعداد ومجموعة المسارات تكلفة أقل لكل حزمة في الحالة المستقرة بمقدار 14–37× مقارنة بمستشعر Python المتقاعد عبر الأنظمة المختبرة. تفصل تلك الأرقام زمن العملية الكامل عن الحالة المستقرة، لأن تحميل المسارات يهيمن على إعادة تشغيل قصيرة. أما الكشف نفسه فيُؤكَّد بشكل منفصل، عبر مجموعة من 42 حالة في sensor/tests/replay.rs.

قِسه على النظام الهدف باستخدام:```bash cargo bench --manifest-path sensor/Cargo.toml --bench hotpath

يُستخدم عامل التقاط واحد افتراضيًا. يمكن لعوامل إضافية زيادة سعة الالتقاط، لكن تجزئة تدفق Linux تقسم الحالة لكل مصدر بين العمال وبالتالي تقلل حساسية بعض استدلالات الفحص. في الاختبار الموثق، بقيت 91% من تنبيهات الاستدلال بعامل واحد مع عاملين، و86% مع أربعة، و65% مع ثمانية. لم يتغير المطابقة الدقيقة للأثر. لا تزد `CAPTURE_FANOUT` إلا عندما تُظهر مقاييس فقدان الالتقاط أن ذلك ضروري.

منهجية القياس المرجعي، ونتائج العتاد، ومخرجات المحلل، وقياسات الذاكرة، وفحوصات التوزيع الحية موثقة في [`sensor/docs/REPORT.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/REPORT.md).

## التثبيت

### المثبّت

تم التحقق من المثبّت على اثنتي عشرة توزيعة Linux — Debian وUbuntu وFedora وRocky وAlmaLinux وArch وopenSUSE Leap وTumbleweed وAlpine — بالإضافة إلى FreeBSD وmacOS، في كل إصدار، مع تسجيل النتيجة الكاملة في [`docs/compat`](https://github.com/stamparm/maltrail/blob/master/docs/compat). تستخدم Raspberry Pi OS وأنظمة ARM الأخرى ذات 64 بت بناء `aarch64`؛ بينما لا يتوفر لـ ARM 32 بت مستشعر جاهز ويجب بناؤه من المصدر.```bash
curl -fsSL https://raw.githubusercontent.com/stamparm/maltrail/master/install.sh | sudo sh

يقوم بتثبيت التبعيات، وينشئ نسخة مُدارة تحت /opt/maltrail، ويتحقق من checksum المستشعر المُجمَّع مسبقًا، وينشئ حساب maltrail غير مُتميز بالصلاحيات، ويثبّت وحدات systemd، ويجهّز أدلة السجلات والحالة، ويشغّل المستشعر والخادم. إعادة تشغيل المُثبِّت تُرقّي النسخة المُدارة.

راجع السكربت قبل تشغيله بصلاحيات مرتفعة. من نسخة موجودة، تُظهر التشغيل التجريبي الأوامر دون تغيير النظام:```bash sh install.sh --dry-run

خيارات المثبّت الشائعة:```bash
sh install.sh --role sensor      # Install only the sensor
sh install.sh --ref 3.1.2        # Install a release tag instead of master
sh install.sh --no-service       # Install without changing systemd
sh install.sh --dry-run          # Print commands without applying them
sh install.sh --uninstall        # Remove the managed installation; keep logs and state

لوحة التحكم متاحة على http://127.0.0.1:8338 بعد التثبيت. لاحظ أن HTTP_ADDRESS المُضمَّن هو 0.0.0.0، لذا فهو قابل للوصول على كل واجهة، وليس فقط loopback — وبيانات الاعتماد الافتراضية هي admin / changeme!. غيّر USERS، واضبط HTTP_ADDRESS على 127.0.0.1 (أو ضع الخادم خلف وكيل عكسي مع TLS)، قبل أن يكون المضيف على شبكة غير موثوقة.

قد يستغرق البناء الأولي للـ trail عدة دقائق. لا يكتشف المستشعر مطابقات الـ trail حتى تتوفر مجموعة trail صالحة. تشغّل وحدة systemd التحقق -T الخاص بالمستشعر قبل بدء التشغيل بحيث تؤدي الصلاحيات المفقودة، أو دليل سجلات غير قابل للكتابة، أو مجموعة trail غير صالحة إلى فشل بدء التشغيل بشكل مرئي.

تغطي أداة اختبار المثبّت اثنتي عشرة توزيعة، و"لقد تم التثبيت" ليس هو التأكيد: في كل واحدة يتم تشغيل الخادم وطلب /ping، ويُطلب من المستشعر التحقق من نفسه باستخدام -T، ويتم فحص الوحدات بحثًا عن مسارات قابلة للحل، ويُعاد تشغيل المثبّت لإثبات أن الترقية تحافظ على إعدادات المشغّل، ويتم تشغيل --uninstall. تُسجَّل كل نتيجة لكل منصة في docs/compat، والصفحة هناك مُولَّدة من تلك الصفوف بدلًا من كتابتها يدويًا.

تحصل Alpine وأنظمة musl الأخرى على بناء مستشعر -musl. كان يُقال لهم سابقًا إن الملف التنفيذي المُجمَّع مسبقًا مرتبط بـ glibc وعليهم التجميع بأنفسهم؛ يُبنى المستشعر ويعمل على musl أصليًا، لذا كان ذلك قطعة أثرية مفقودة بدلًا من كونها قيدًا على المنصة.

البناء من المصدر

يتطلب المستشعر Rust 1.74 أو أحدث، وترويسات تطوير libpcap، وأدوات القدرات الخاصة بالنظام. يتطلب الخادم ومحدّث الـ trail Python 3.6 أو أحدث.

ثبّت حزم التوزيعة:```bash

Debian / Ubuntu / Raspberry Pi OS

sudo apt-get install cargo libpcap-dev libcap2-bin python3

RHEL / Fedora

sudo dnf install cargo libpcap-devel libcap python3

openSUSE / SLES

sudo zypper install cargo rust libpcap-devel libcap-progs python311

ثم قم ببناء المستشعر والتحقق من صحته:```bash
git clone --depth 1 https://github.com/stamparm/maltrail.git
cd maltrail

cargo build --release --manifest-path sensor/Cargo.toml

sudo setcap cap_net_raw,cap_net_admin=eip \
  sensor/target/release/maltrail-sensor

sudo install -d -o "$USER" -g "$(id -gn)" -m 750 /var/log/maltrail

sensor/target/release/maltrail-sensor -T
sensor/target/release/maltrail-sensor

ابدأ الخادم في طرفية أخرى أو على مضيف آخر:```bash python3 server.py

تُرفَق ملفات sensor الثنائية الجاهزة بالإصدارات الحالية مع مجاميع تحقق SHA-256: Linux `x86_64`
و `aarch64` مقابل كل من glibc و musl، و macOS على شرائح Apple و Intel، و FreeBSD `amd64`، و
Windows `x86_64`.

تربط إصدارات glibc مكتبة libpcap بشكل ثابت وتستهدف glibc 2.28، لذا فإن مكتبة C هي الشيء الوحيد
الذي تحتاجه — لا شيء لتثبيته، على RHEL 8+ و Debian 10+ و Ubuntu 18.04+ و Leap 15.x على حد سواء. إصدارات musl
ثابتة بالكامل، لذا لا تحتاج Alpine إلى أي شيء على الإطلاق. إصدار Windows هو 64-bit ويحتاج إلى Windows 10 أو أحدث بالإضافة إلى
[Npcap](https://npcap.com) مثبّتاً قبل أن يبدأ — `wpcap.dll` هو تبعية وقت التحميل،
لذا بدونه يرفض المُحمِّل الملف التنفيذي بدلاً من الفشل عند الالتقاط. الأرشيف يقول ذلك
أيضاً.

الملفات الثنائية من **3.1.1 وما قبلها** لم تفعل ذلك: كانت تربط libpcap ديناميكياً، وتطلبها بالاسم
الذي يستخدمه مضيف بناء AlmaLinux الخاص بها. تشحن Debian و Ubuntu المكتبة نفسها تحت
الاسم الأقدم `libpcap.so.0.8`، لذا تتوقف تلك الملفات الثنائية قبل أن تبدأ —```
./maltrail-sensor: error while loading shared libraries: libpcap.so.1: cannot open shared object file

— على جهاز يحتوي على libpcap مثبتًا. يقوم install.sh بربط الاسم المفقود نيابةً عنك. يدويًا:```bash

adjust the directory for your architecture: aarch64-linux-gnu, or /usr/lib64 on RPM distributions

sudo ln -sf /usr/lib/x86_64-linux-gnu/libpcap.so.0.8 /usr/lib/x86_64-linux-gnu/libpcap.so.1 sudo ldconfig

### Systemd

تقوم وحدات `packaging/systemd/` المرفقة بتشغيل كلتا العمليتين تحت المستخدم غير المتميز `maltrail`. ينشئ Systemd الدليلين `/var/log/maltrail` و `/var/lib/maltrail`، ويقيد
الوصول إلى نظام الملفات، ويمنح المستشعر `CAP_NET_RAW` و `CAP_NET_ADMIN`.

يقوم المثبّت بتهيئة هذه الوحدات تلقائيًا. بالنسبة لتثبيت مصدري موجود، اتبع
إجراء الخدمة اليدوي في [`sensor/docs/INSTALL.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/INSTALL.md).

تحقق من حالة الخدمة والسجلات باستخدام:```bash
systemctl status maltrail-sensor maltrail-server
journalctl -u maltrail-sensor -f

Docker

ابدأ نشر Compose المرفق باستخدام:```bash docker compose -f docker/docker-compose.yml up -d

تُوثَّق إعدادات الحاوية والتخزين والصلاحيات وفحوصات السلامة في
[`docker/README.md`](https://github.com/stamparm/maltrail/blob/master/docker/README.md).

## الإعدادات

يقرأ Maltrail ملف `maltrail.conf`، الذي يحتوي على إعدادات منفصلة لكل من `[Sensor]` و`[Server]`. يضع المُثبِّت الإعدادات المُدارة في `/etc/maltrail.conf`.

تشمل خيارات المستشعر الشائعة الاستخدام ما يلي:

| الخيار | الغرض |
| --- | --- |
| `MONITOR_INTERFACE` | واجهة أو واجهات الالتقاط؛ يحدد `any` جميع الواجهات المدعومة |
| `CAPTURE_FILTER` | مرشح الالتقاط BPF |
| `CAPTURE_FANOUT` | عدد مقابس الالتقاط في Linux؛ القيمة الافتراضية واحد |
| `CAPTURE_WORKERS` | عمال الالتقاط، مقبس واحد لكل منهم؛ القيمة الافتراضية هي `CAPTURE_FANOUT`، أي واحد ما لم يُضبط أي منهما |
| `LOG_DIR` | دليل سجل الأحداث المحلي |
| `TRAILS_FILE` | قاعدة بيانات الآثار المُولَّدة |
| `LOG_SERVER` | خادم أحداث Maltrail البعيد |
| `SYSLOG_SERVER` | وجهة أو وجهات CEF syslog |
| `LOGSTASH_SERVER` | وجهة أو وجهات Logstash JSON |
| `STATS_ADDRESS` | مستمع مقاييس Prometheus؛ معطَّل ما لم يُضبط |
| `UPDATE_PERIOD` | الفاصل الزمني لتحديث الآثار |
| `STATIC_TRAILS_URL` | المصدر الذي تُجلب منه مجموعة الآثار الثابتة المُجمَّعة؛ ثبّتها على إصدار مؤرَّخ للتحكم في وقت وصول المحتوى الجديد |
| `USER_WHITELIST` | المؤشرات التي يديرها المشغّل والتي لا ينبغي أن تُنبِّه |
| `CUSTOM_TRAILS_DIR` | دليل الآثار الذي يديره المشغّل |
| `STATIC_TRAILS_DIR` | نسخة اختيارية من مستودع الآثار؛ تُستخدم فقط لعرض الاستشهاد بمصدر الأثر في واجهة المستخدم |

ينطبق `PROCESS_COUNT` على مستشعر Python المتقاعد وعلى مُخنِّق سجل الأحداث القديم؛ وهو **لا** يحدد عدد عمال مستشعر Rust. اضبط عمال الالتقاط باستخدام `CAPTURE_FANOUT` أو `CAPTURE_WORKERS` بدلاً من ذلك.

شغّل فحص النشر بعد تغيير الإعدادات:```bash
sensor/target/release/maltrail-sensor -T

يتحقق الفحص من الإعدادات، والمسارات (trails)، وإدخالات القائمة البيضاء، ومرشح الالتقاط، والصلاحيات، وتخزين السجلات، ودعم التحديث، وإعدادات العامل (worker). يتضمن الفحص الناجح أعدادًا موجبة للمسارات والقائمة البيضاء بدلًا من مجرد التأكد من وجود الملفات.

المسارات (Trails)

المسار (trail) هو مؤشر واحد — نطاق، أو عنوان URL، أو عنوان IP، أو زوج IP:port، أو User-Agent، أو بصمة JA3/JA4، أو تجزئة شهادة — إلى جانب ما يعنيه ومن أين جاء. يدمج المُحدِّث أربعة مصادر في TRAILS_FILE، بهذا الترتيب:

المصدرمن أين يأتي
Feedsfeeds/*.py، يتم جلبها مباشرةً بواسطة النشر الخاص بك من كل ناشر
CustomCUSTOM_TRAILS_DIR و CUSTOM_TRAILS_URL، مؤشراتك الخاصة
Staticالمجموعة المُجمَّعة من stamparm/trails، يتم جلبها من STATIC_TRAILS_URL؛ مرخَّصة بشكل منفصل
Engine listsdata/mass_scanner*.txt، مُضمَّنة هنا لأنها تتغير نادرًا

تعيش المسارات الثابتة في مستودعها الخاص. يتغير محتوى الكشف عشرات المرات يوميًا؛ أما المحرك فلا يتغير، وإبقاؤهما معًا كان يعني أن تحديث الكشف يتطلب سحب الكود وجعل تاريخ هذا المستودع غير قابل للاستخدام. يشير STATIC_TRAILS_URL إلى أحدث مجموعة منشورة:```text STATIC_TRAILS_URL https://github.com/stamparm/trails/releases/latest/download/trails.csv.gz

وجّهه إلى إصدار `content-YYYYMMDD-HHMM` محدد بدلاً من ذلك لتثبيت نسخة، حتى لا يصبح نشر سيئ عالميًا على الفور. تُخزَّن المجموعة مؤقتًا بجوار `TRAILS_FILE`، وهو ما يجعل إعادة البناء دون اتصال أو في بيئة معزولة ممكنة؛ يتم التحقق من `sha256` المنشور قبل التنزيل، لذا فإن عملية نشر تُحدَّث أكثر مما يتغير المحتوى تنقل 65 بايت بدلاً من 11 ميغابايت، ويُرفض أي حمولة لا تطابق بصمتها لصالح النسخة المخزنة مؤقتًا.

ينشر `update_trails()` ملف `TRAILS_FILE` جديدًا بشكل ذرّي وفقط بعد بناء ناجح. يتم الإبلاغ عن التغذيات التي لا تُرجع شيئًا بالاسم، حتى لا تعتمد عملية نشر بصمت على مصدر تقاعد بهدوء.

أضف مؤشراتك الخاصة تحت `CUSTOM_TRAILS_DIR`، وأي شيء يجب ألا يُطلق حدثًا أبدًا إلى `USER_WHITELIST`. أبقِ كليهما خارج دليل التثبيت حتى لا تتمكن الترقية من الكتابة فوقهما.

تذهب مساهمات الآثار الثابتة إلى [stamparm/trails](https://github.com/stamparm/trails)؛ أما التغذيات الجديدة فتذهب هنا. في كلتا الحالتين يحتاج المؤشر إلى تصنيف ومصدر يمكن لأي شخص التحقق منه — راجع [المساهمة](#contributing).

## الأحداث وواجهة API

يسجّل Maltrail حدثًا واحدًا مفصولًا بمسافة بيضاء لكل اكتشاف، باستخدام اقتباس CSV حيث تحتوي القيمة على مسافات:```text
"<time>" <sensor> <src_ip> <src_port> <dst_ip> <dst_port> <proto> <type> <trail> "<info>" <reference>

حقل type يحدد ما تمت مطابقته، بما في ذلك DNS، وIP، وIPORT، وURL، وPATH، وHTTP، وUA، وPORT، وCERT، وJA3، وJA4. ويحتوي حقل info على تصنيف الأثر، بينما يحدد reference القائمة الثابتة أو التغذية أو المصدر المخصص أو الاستدلال الإرشادي الذي أنتجه. تُفعَّل أنواع JA3/JA4 على بصمات TLS الخاصة بـالعميل: إذ تنجو حزمة TLS الخاصة بالبرمجية الخبيثة من كل تدوير للعناوين والنطاقات، لذا يظل تجزئة hello الخاصة بها مطابقة بعد أن يحترق كل شيء آخر (منشورة بواسطة تغذية abuse.ch SSLBL JA3).

البحث عن المؤشرات

استخدم /check للاستعلام عن نطاق واحد أو عنوان IP أو URL واحد:```bash curl 'http://127.0.0.1:8338/check?q=www.sub.evil.example'

## التثبيت

### المتطلبات الأساسية

- Python 3.8 أو أحدث
- pip (مدير حزم Python)
- Git (اختياري، للاستنساخ)

### التثبيت السريع

```bash
# استنساخ المستودع
git clone https://github.com/yourusername/kitploit-tool.git
cd kitploit-tool

# إنشاء بيئة افتراضية
python3 -m venv venv
source venv/bin/activate  # على Windows: venv\Scripts\activate

# تثبيت التبعيات
pip install -r requirements.txt

# تثبيت الأداة
pip install -e .

التثبيت عبر pip

pip install kitploit-tool

التثبيت عبر Docker

# بناء صورة Docker
docker build -t kitploit-tool .

# تشغيل الحاوية
docker run -it --rm kitploit-tool --help

التحقق من التثبيت

# التحقق من الإصدار
kitploit-tool --version

# عرض المساعدة
kitploit-tool --help

الاستخدام

الاستخدام الأساسي

# تشغيل الفحص الأساسي
kitploit-tool scan --target example.com

# تشغيل الفحص مع الإخراج المفصل
kitploit-tool scan --target example.com --verbose

# حفظ النتائج في ملف
kitploit-tool scan --target example.com --output results.json

الخيارات المتقدمة

# تحديد المنافذ
kitploit-tool scan --target example.com --ports 80,443,8080

# استخدام ملف التكوين
kitploit-tool scan --config config.yaml

# تشغيل الفحص المتوازي
kitploit-tool scan --target example.com --threads 10

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

مثال 1: فحص أساسي

kitploit-tool scan --target 192.168.1.1

مثال 2: فحص مع تقرير مفصل

kitploit-tool scan --target example.com --report detailed --format html

مثال 3: فحص متعدد الأهداف

kitploit-tool scan --targets targets.txt --parallel

التكوين

ملف التكوين

يمكن تكوين الأداة باستخدام ملف config.yaml:

# إعدادات عامة
general:
  timeout: 30
  verbose: false
  log_level: INFO

# إعدادات الفحص
scan:
  ports: [80, 443, 8080, 8443]
  threads: 5
  retry: 3

# إعدادات الإخراج
output:
  format: json
  directory: ./results
  overwrite: false

متغيرات البيئة

# تعيين متغيرات البيئة
export KITPLOIT_TIMEOUT=60
export KITPLOIT_LOG_LEVEL=DEBUG
export KITPLOIT_OUTPUT_DIR=/path/to/output

أولويات التكوين

  1. معاملات سطر الأوامر (الأعلى أولوية)
  2. متغيرات البيئة
  3. ملف التكوين
  4. الإعدادات الافتراضية (الأدنى أولوية)```json { "query": "www.sub.evil.example", "found": true, "trail": "evil.example", "info": "asyncrat (malware)", "reference": "(static)", "confidence": 100 }
حقل `confidence` (من 0 إلى 100، أو `null` عند عدم توفره) يوضح مدى قوة دعم المصادر للقائمة: 40 لمصدر تغذية واحد، و+15 لكل مصدر تغذية إضافي يتفق بشكل مستقل حتى 100، وعلامات كاملة لإدخالات المشغّل المخصصة والثابتة. يُحسب في وقت تحديث المسار من اتفاق مصادر التغذية إلى ملف جانبي `trails.confidence` بجوار `trails.csv`؛ والخادم الذي يسحب المسارات من `UPDATE_SERVER` ليس لديه مصدر بيانات لتقييمه ويُبلّغ عن `null`. استخدمه لترتيب أولويات الفرز - قائمة من مصدر تغذية واحد بدرجة 40 تستحق نظرة ثانية قبل أن تستحق قاعدة جدار حماية.

يمكن لبحث النطاق الفرعي أن يطابق النطاق الأصلي المدرج. تتحقق عمليات بحث URL من `host/path` قبل التحقق من المضيف وحده. يقرأ الخادم قاعدة بيانات المسارات المعيّنة في الذاكرة ويلاحظ تحديثات المسارات دون إعادة تشغيل.

تتوفر مسارات المصادر العامة والثابتة دون مصادقة، بما يتوافق مع نقطة النهاية `/trails` المستخدمة من قبل المستشعرات البعيدة. تتطلب المسارات المخصصة جلسة مصرّح بها؛ ويُبلّغ عن بحث مخصص فقط غير مصرّح به كفشل في المطابقة. تظل بيانات الأحداث تتطلب المصادقة.

## العمليات

### المراقبة

استخدم `maltrail-sensor -T` كبوابة للنشر والتهيئة. تشغّله وحدة systemd المرفقة كـ `ExecStartPre`.

للتأكد من أن الكشف نفسه يعمل — وليس فقط أن العمليات تبدأ — شغّل:```bash
python3 server.py --detect-test

يعيد تشغيل ملف pcap مُصمَّم لحركة مرور خبيثة مُحاكاة (إصابات trail على استعلام DNS، وعنوان IP، و IP:port، ومسار URL، وترويسة Host، بالإضافة إلى استدلالات حقن SQL، والاجتياز، وRCE، وXSS، وفحص الوكيل، وsinkhole، وHost المفقود، وفحص المنافذ/الويب/العدوى) عبر المستشعر المثبَّت ويؤكد أن كل اكتشاف متوقع يحدث. لا يحتاج إلى root، ولا واجهة، ولا مجموعة trail خاصة به. التثبيت السليم يطبع 20/20 detection(s) fired.

عند تكوين STATS_ADDRESS، راقب على الأقل مقاييس Prometheus التالية:

المقياسالمعنى التشغيلي
maltrail_up == 0لا توجد عملية التقاط قيد التشغيل
تزايد maltrail_capture_dropped_totalحلقة الالتقاط تُسقط الحزم
تزايد maltrail_local_log_errors_totalتم إنتاج الأحداث لكن تعذّر كتابتها محليًا
تزايد maltrail_remote_log_errors_totalتعذّر تسليم الأحداث إلى sink بعيد؛ مع DISABLE_LOCAL_LOG_STORAGE تُفقد
maltrail_trail_generation لا يتقدممجموعة trail النشطة لا يتم تحديثها
maltrail_log_dir_free_bytesالسعة المتبقية لتخزين الأحداث محليًا
تزايد maltrail_state_saturations_totalتم الوصول إلى حد حالة الاستدلال
تزايد maltrail_throttle_evictions_totalجدول خنق الأحداث وصل إلى سعته القصوى، لذا تُجمَّع الأحداث أبكر من الإعداد

يؤثر تشبّع الحالة على الاستدلال المقابل؛ ويبقى مطابقة trail الدقيقة نشطة.

أرسل SIGHUP أو استخدم systemctl reload maltrail-sensor لطلب إعادة تحميل trail. تُكتشف ملفات trail المحدَّثة بواسطة عملية أخرى تلقائيًا وتُنشر إلى العمال دون إعادة تشغيل المستشعر.

يدعم مخزن الملاحظات المكثَّف (USE_CONDENSED_STORAGE، meta.sqlite) عروض الحداثة والصيد الرجعي في الخادم. فهرس sidecar لسجل الأحداث اليومي (USE_EVENT_INDEX، LOG_DIR/index/*.sqlite، بحجم يقارب ضعف حجم السجل على القرص) هو ما يجعل /counts دقيقًا و/hunt سريعًا؛ يُصان بشكل تزايدي من السجلات نفسها ويمكن إعادة بنائه باستخدام server.py --rebuild-index. التوافق مع المستشعر المتقاعد موثَّق في sensor/docs/COMPATIBILITY.md.

الاحتفاظ بالأحداث

لا يقوم Maltrail بتدوير أو حذف سجلات الأحداث. المشغلون مسؤولون عن تحديد الاحتفاظ والأرشفة والحذف وفقًا لمتطلبات التخزين وسياسة المؤسسة.

الممارسات الموصى بها:

  • أرسل النسخة الدائمة من الأحداث إلى خادم Maltrail بعيد أو SIEM باستخدام LOG_SERVER، أو SYSLOG_SERVER، أو LOGSTASH_SERVER.
  • نبّه على maltrail_log_dir_free_bytes مع هامش كافٍ لمعدل الأحداث المتوقع.
  • دوّر أو أرشف أو أزل السجلات اليومية المحلية باستخدام أدوات خارجية.
  • أبقِ الملفات التي تحتاجها واجهة التقارير غير مضغوطة في LOG_DIR؛ وأرشف الملفات المضغوطة في مكان آخر.

عندما يمتلئ نظام ملفات السجلات، لا يستطيع المستشعر إلحاق الأحداث. قد تحتوي سجلات الأحداث أيضًا على عناوين IP ونطاقات تُصنَّف كبيانات شخصية في بعض الولايات القضائية؛ وينبغي أن تراعي سياسة الاحتفاظ المتطلبات المعمول بها.

حركة المرور الاصطناعية

للتحقق من أن الاكتشاف ولوحة المعلومات ما زالا يعملان، دون انتظار حركة مرور حقيقية:```bash python3 server.py --detect-test # assert every detection fires, then exit python3 server.py --detect-test --keep DIR --serve # ...and keep the events, serving them on :8338

`--keep` يعيد أيضًا تشغيل `sensor/tests/corpus/` إلى نفس السجل ويطبع أي من الأشكال التي تعرضها لوحة المعلومات بشكل مختلف لديها حدث خلفها، بحيث يكون الرمز أو اللون أو الحرف الرسومي المفقود مرئيًا بدلًا من افتراضه. يتم إزاحة الطوابع الزمنية بحيث يكون أحدث يوم هو اليوم. مطلوب ملف ثنائي للحساس (`cargo build --release --manifest-path sensor/Cargo.toml`).

يتم إعادة توليد بيانات العرض التوضيحي العام من تشغيل كهذا:```bash
python3 sensor/tools/gen_demo_js.py --from DIR/logs   # tops up html/js/demo.js

التوثيق

المستندالمحتويات
sensor/docs/INSTALL.mdالتثبيت، والصلاحيات، والإعداد، واستكشاف الأخطاء وإصلاحها
sensor/docs/ARCHITECTURE.mdالبنية الداخلية للحساس وتدفق البيانات
sensor/docs/COMPATIBILITY.mdالاختلافات المتعمدة عن حساس Python المتقاعد
sensor/docs/REPORT.mdالقياسات، والملفات الشخصية، ونتائج الاختبارات
sensor/docs/ROADMAP.mdأعمال الحساس المفتوحة
SekuriPy Labsملاحظات هندسية، واختبارات أداء، وتقارير

المساهمة

نرحب بإضافات Trail، وصيانة التغذيات، وتقارير الأخطاء، والتوثيق، وتحسينات الحساس. يجب أن تتضمن طلبات إضافة Trail مصدرًا موثوقًا وأن تستخدم التصنيف الأنسب الأضيق نطاقًا.

شغّل الفحوصات ذات الصلة قبل إرسال الكود. بوابة الحساس الكاملة هي:```bash bash sensor/tools/check.sh

يقوم بتشغيل التنسيق، وClippy مع رفض التحذيرات، ومجموعات اختبارات وضعي التصحيح والإصدار. شغّل مجموعة خادم Python باستخدام:```bash
bash tests/run.sh python3

يمكن تشغيل بناء Windows من Linux، وهو المكان الذي تم فيه العثور على أخطائه:```bash sh sensor/tools/check_windows.sh

يتم تجميع المستشعر عبر المنصات باستخدام mingw-w64، واستخراج مكتبة Npcap الخاصة بمساحة المستخدم من مثبّتها
(أرشيف NSIS، لذا لا يتم تثبيت أي شيء)، وتشغيل النتيجة تحت Wine — مجموعة الاختبارات الكاملة،
`-T` مقابل الإعدادات المُرفقة، ومجموعة pcap تُقارن بايت ببايت مقابل الملف التنفيذي الأصلي،
والخادم يستجيب لـ `/ping` تحت Python الخاص بـ Windows. الالتقاط المباشر هو الشيء الوحيد الذي
لا يمكن تغطيته؛ فهو يحتاج إلى برنامج تشغيل النواة الخاص بـ Npcap وجهاز Windows حقيقي. المتطلبات الأساسية هي
`gcc-mingw-w64-x86-64` و`wine` و`p7zip-full`.

## المشروع

### الترخيص

**باختصار:** Maltrail مرخّص بموجب MIT، لكن مجموعة بيانات Maltrail Trails لها شروط منفصلة. البحث/المرجع المستقل عن مؤشرات الاختراق (IOC) مقبول؛ الاستخدام المنهجي لـ Trails كمصدر استخباراتي في منتج أو خدمة تجارية يتطلب إذنًا/ترخيصًا.

يُوزَّع Maltrail بموجب رخصة MIT. راجع [`LICENSE`](https://github.com/stamparm/maltrail/blob/master/LICENSE).

هذا هو المحرّك. مجموعة الـ trails الثابتة عمل منفصل بموجب شروط منفصلة: مجانية للاستخدام الدفاعي الداخلي،
والبحث والتدريس، لكن المنتج التجاري، أو الخدمة، أو عرض MSSP أو MDR، أو
موجز مُعاد توزيعه يحتاج إلى ترخيص. محرّك بترخيص MIT لا يجعل المحتوى مجانيًا للبيع — راجع
[`LICENSE.md`](https://github.com/stamparm/trails/blob/main/LICENSE.md) في
[stamparm/trails](https://github.com/stamparm/trails) قبل تضمينه في شيء تتقاضى مقابله
رسومًا.

### المشرفون

- Miroslav Stampar ([@stamparm](https://github.com/stamparm))
- Mikhail Kasimov ([@MikhailKasimov](https://github.com/MikhailKasimov))

### الرعاة

- [Sansec](https://sansec.io/) (2024–2025)
- [Sansec](https://sansec.io/) (2020–2021)

### العروض التقديمية والمنشورات

- الاجتماع السابع والأربعون لـ TF-CSIRT، براغ، 2016
  ([الشرائح](https://web.archive.org/web/20161109135211/https://www.terena.org/activities/tf-csirt/meeting47/M.Stampar-Maltrail.pdf))
- _Detect attacks on your network with Maltrail_، Linux Magazine، 2022
  ([المقال](https://www.linux-magazine.com/Issues/2022/258/Maltrail))
- _Best Cyber Threat Intelligence Feeds_، Silent Push، 2022
  ([المراجعة](https://www.silentpush.com/blog/best-cyber-threat-intelligence-feeds))
- _Research on Network Malicious Traffic Detection System Based on Maltrail_، Nanotechnology
  Perceptions، 2024
  ([الورقة البحثية](https://nano-ntp.com/index.php/nano/article/view/1915/1497))

### تكاملات الطرف الثالث

- [FreeBSD Port](https://www.freshports.org/security/maltrail)
- [OPNsense Gateway Plugin](https://github.com/opnsense/plugins/pull/1257)
- [D4 Project](https://www.d4-project.org/2019/09/25/maltrail-integration.html)
- [BlackArch Linux](https://github.com/BlackArch/blackarch/blob/master/packages/maltrail/PKGBUILD)
- [Validin](https://x.com/ValidinLLC/status/1719666086390517762)
- [Maltrail Add-on for Splunk](https://splunkbase.splunk.com/app/7211)
- [Maltrail decoder and rules for Wazuh](https://github.com/MikhailKasimov/maltrail-wazuh-decoder-and-rules)
- [GScan](https://github.com/grayddq/GScan) (trails فقط)
- [MalwareWorld](https://www.malwareworld.com/) (trails فقط)
- [oisd domain blocklist](https://oisd.nl/?p=inc) (trails فقط)
- [NextDNS](https://github.com/nextdns/metadata/blob/e0c9c7e908f5d10823b517ad230df214a7251b13/security/threat-intelligence-feeds.json) (trails فقط)
- [NoTracking](https://github.com/notracking/hosts-blocklists/blob/master/SOURCES.md) (trails فقط)
- [OWASP Mobile Audit](https://github.com/mpast/mobileAudit#environment-variables) (trails فقط)
- [Mobile Security Framework MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF/commit/12b07370674238fa4281fc7989b34decc2e08876) (trails فقط)
- [pfBlockerNG-devel](https://github.com/pfsense/FreeBSD-ports/blob/devel/net/pfSense-pkg-pfBlockerNG-devel/files/usr/local/www/pfblockerng/pfblockerng_feeds.json) (trails فقط)
- [Sansec eComscan](https://sansec.io/kb/about-ecomscan/ecomscan-license) (trails فقط)
- [Palo Alto Networks Cortex XSOAR](https://xsoar.pan.dev/docs/reference/integrations/github-maltrail-feed) (موصل trail)

### شكر وتقدير

- Thomas Kristner
- Eduardo Arcusa Les
- James Lay
- Ladislav Baco (@laciKE)
- John Kristoff (@jtkdpu)
- Michael M&uuml;nz (@mimugmail)
- David Brush
- @Godwottery
- Chris Wild (@briskets)
- Keith Irwin (@ki9us)
- Simon Szustkowski (@simonszu)

الفئات