
نظام كشف سلوكي في نقاط النهاية قائم على التعلم الآلي لأجهزة لينكس
كشف الشذوذ السلوكي القائم على التعلم الآلي لأنظمة لينكس باستخدام eBPF + Isolation Forest
يقوم Guardd بجمع أحداث النظام منخفضة المستوى (تنفيذ العمليات، نشاط الشبكة)، وتجميعها في متجهات ميزات زمنية بنوافذ زمنية، واكتشاف السلوك الشاذ باستخدام نموذج تعلم آلي.
يركز Guardd على اكتشاف التهديدات غير المعروفة
[!WARNING] هذا المشروع لا يزال قيد التطوير
يتم تحسين الميزات ودقة الكشف بنشاط
الترحيب بالملاحظات والاقتراحات والمساهمات
يعمل guardd كخدمة systemd واحدة تدير دورة الحياة الكاملة لجمع البيانات والتدريب والكشف.
عند بدء التشغيل:
إذا لم يكن هناك نموذج موجود، يبدأ guardd في جمع بيانات السلوك الأساسية
يجمع بيانات لمدة يوم واحد (افتراضي) للتدريب الأولي
بمجرد نجاح التدريب، يتحول تلقائيًا إلى وضع الكشف
أثناء التشغيل:
يتم تجميع نشاط النظام باستمرار في نوافذ زمنية وتحويلها إلى متجهات ميزات
يتم تسجيل كل نافذة بواسطة نموذج Isolation Forest المُدرّب
يتم إصدار الحالات الشاذة بتنسيق NDJSON
بشكل مستمر:
يتم إعادة تدريب النموذج تلقائيًا مرة واحدة في الأسبوع
يستأنف الكشف فورًا بعد إعادة التدريب بالنموذج المُحدّث
git clone https://github.com/benny-e/guardd.git
cd guardd
sudo bash install.sh
سيقوم هذا بما يلي:
تثبيت تبعيات النظام
نسخ المشروع إلى /opt/guardd
إنشاء بيئة Python افتراضية
تثبيت الحزمة
بناء مكونات eBPF
تثبيت خدمة systemd
sudo systemctl start guardd.service
systemctl status guardd.service
journalctl -u guardd.service -f
يتضمن guardd واجهة مستخدم طرفية لتصفح التنبيهات الحديثة والبحث عن الحالات الشاذة
للتشغيل: (بعد بدء guardd.service)
guardd tui
يمكنك تشغيل guardd مباشرة من سطر الأوامر دون تثبيت خدمة systemd. يمكن تهيئته للعمل مع أنظمة init الأخرى
sudo guardd daemon
جمع البيانات:
sudo guardd collect
تدريب النموذج:
sudo guardd train
تشغيل الكشف:
sudo guardd detect
يدعم guardd الإعدادات عبر ملف config.toml.
بشكل افتراضي، يبحث الخادم عن:
/opt/guardd/config.toml
[daemon]
mode = "auto"
bootstrap_retry_seconds = 60
retrain_interval_seconds = 604800
[training]
min_training_rows = 1
contamination = 0.01
n_estimators = 200
threshold_percentile = 10.0
[paths]
db_path = "/opt/guardd/data/features.db"
model_path = "/opt/guardd/data/model.bundle"
guardd_path = "/opt/guardd/ebpf/guardd"
يتحكم في دورة حياة guardd.
mode
-- "auto" → خط الأنابيب الكامل (جمع → تدريب → كشف)
-- "collect" → جمع البيانات فقط
-- "detect" → تشغيل الكشف فقط (يتطلب نموذجًا)
bootstrap_retry_seconds
-- عدد المرات التي يحاول فيها guardd التدريب الأولي عند عدم وجود نموذج
-- خلال هذه المرحلة، يقوم guardd بجمع البيانات ويتوقف دوريًا لمحاولة التدريب
retrain_interval_seconds
-- عدد المرات التي يتم فيها إعادة تدريب النموذج بعد التمهيد الأولي
-- القيمة الافتراضية: 7 أيام
يتحكم في سلوك النموذج ومتطلباته.
min_training_rows
-- الحد الأدنى لعدد نوافذ الميزات المطلوبة للتدريب
-- إذا لم يتم استيفاء ذلك، يفشل التدريب ويحاول لاحقًا
contamination
-- النسبة المتوقعة من الحالات الشاذة في البيانات
-- تُمرر مباشرة إلى Isolation Forest
-- القيم النموذجية: 0.01–0.05
n_estimators
-- عدد الأشجار في Isolation Forest
-- كلما زاد = دقة أعلى، تدريب أبطأ
threshold_percentile
-- يحدد درجة قطع الحالات الشاذة
-- انخفاض القيمة = كشف أكثر عدوانية
يتحكم في الأماكن التي يقرأ ويكتب فيها guardd البيانات.
db_path
-- قاعدة بيانات SQLite التي تخزن متجهات الميزات والحالات الشاذة
model_path
-- حزمة النموذج المسلسلة المستخدمة للكشف
guardd_path
-- مسار ثنائي جمع eBPF
قيم الإعدادات تلغي الإعدادات الافتراضية لـ CLI
يمكن لوسائط CLI أن تتجاوز الإعدادات إذا تم توفيرها صراحةً
تعتمد دقة النموذج بشكل كبير على بيانات التدريب الجيدة. تؤدي أوقات التدريب الأطول إلى كاشف أكثر دقة
python3
python3-venv
python3-pip
clang
llvm
libbpf-dev
libelf-dev
bpftool
build-essential
pkg-config
sqlite3