Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
jailer — Jailer هو نظام عزل عمليات قائم على eBPF يوفر التحكم الإجباري في الوصول (MAC) لنظام Linux. يتتبع العمليات باستخدام خرائط تخزين المهام BPF ويفرض سياسات قائمة على الأدوار على الوصول إلى الملفات، وعمليات الشبكة، وتنفيذ العمليات. | Kitploit
أدوات/GitHubGitHub/gen0sec/jailer
أدوات دفاعيةأمن الحاوياتأمن الشبكاتأمن السحابة
GitHubgen0sec/jailer

jailer

Jailer هو نظام عزل عمليات قائم على eBPF يوفر التحكم الإجباري في الوصول (MAC) لنظام Linux. يتتبع العمليات باستخدام خرائط تخزين المهام BPF ويفرض سياسات قائمة على الأدوار على الوصول إلى الملفات، وعمليات الشبكة، وتنفيذ العمليات.

عرض المستودع
582منذ 18 أيامتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
الموقع الإلكتروني

Jailer - التحكم الإلزامي في الوصول باستخدام eBPF

تحذير: هذا المشروع قيد التطوير المكثف وليس جاهزًا للاستخدام في الإنتاج. قد تتغير واجهات برمجة التطبيقات وتنسيقات السياسات والسلوك دون إشعار مسبق. استخدمه للاختبار والتجربة فقط.

شكر وتقدير

ملاحظة: هذا تطبيق مستقل وليس نفس مشروع حل Meta. بينما BpfJailer مشابه وظيفيًا ومستوحى من الفكرة والتصميم الأصلي من قبل Liam Wisehart وJustin Nga وCarl El Khoury وMansee Chadha في Meta، إلا أن هذه قاعدة كود منفصلة تم تطويرها بشكل مستقل. نعرب عن امتناننا للرؤية والمفاهيم الأساسية التي ألهمت هذا العمل.

المجتمع

انضم إلينا على Discord Substack

Jailer هو نظام عزل العمليات قائم على eBPF يوفر التحكم الإلزامي في الوصول (MAC) لنظام Linux. يتتبع العمليات باستخدام خرائط BPF task_storage ويفرض سياسات قائمة على الأدوار للوصول إلى الملفات وعمليات الشبكة وتنفيذ العمليات.

الميزات (الإصدار الحالي)

عرض Nginx

عرض Nginx

عرض معقد

asciicast

متطلبات النواة

الحد الأدنى لإصدار النواة

  • Linux 5.11+ (لدعم BPF_MAP_TYPE_TASK_STORAGE)
  • موصى به: Linux 6.1+ (دعم BTF أفضل)

تكوين النواة المطلوب

root@kitploit:~
# التحقق من تكوين النواة الحالي
zcat /proc/config.gz 2>/dev/null || cat /boot/config-$(uname -r)

الخيارات المطلوبة:

root@kitploit:~
CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_LSM=y
CONFIG_DEBUG_INFO_BTF=y

تفعيل BPF LSM

يجب تفعيل BPF LSM في معلمات تشغيل النواة:

root@kitploit:~
# التحقق مما إذا كان BPF LSM نشطًا
cat /sys/kernel/security/lsm
# يجب أن يتضمن "bpf" في القائمة

# إذا لم يكن، أضفه إلى معلمات تشغيل النواة:
# قم بتحرير /etc/default/grub وأضف إلى GRUB_CMDLINE_LINUX:
#   lsm=lockdown,capability,landlock,yama,apparmor,bpf

# ثم قم بتحديث grub وأعد التشغيل:
sudo update-grub
sudo reboot

بالنسبة لأنظمة Ubuntu/Debian، يمكنك أيضًا استخدام:

root@kitploit:~
# إنشاء سكربت لتفعيل BPF LSM
cat > /tmp/enable_bpf_lsm.sh << 'EOF'
#!/bin/bash
GRUB_FILE="/etc/default/grub"
if grep -q "lsm=" "$GRUB_FILE"; then
    sudo sed -i 's/lsm=[^""]*/lsm=lockdown,capability,landlock,yama,apparmor,bpf/' "$GRUB_FILE"
else
    sudo sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 lsm=lockdown,capability,landlock,yama,apparmor,bpf"/' "$GRUB_FILE"
fi
sudo update-grub
echo "BPF LSM مفعل. يرجى إعادة التشغيل."
EOF
chmod +x /tmp/enable_bpf_lsm.sh
sudo /tmp/enable_bpf_lsm.sh

البناء

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

root@kitploit:~
# تثبيت Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# تثبيت تبعيات البناء (Ubuntu/Debian)
sudo apt-get install -y clang llvm libelf-dev linux-headers-$(uname -r)

# تثبيت هدف BPF لـ Rust
rustup target add bpfel-unknown-none

بناء جميع المكونات

root@kitploit:~
cd bpfjail

# بناء برامج BPF
cd bpfjailer-bpf && cargo build --release && cd ..

# بناء الخادم والعميل
cargo build --release

بدء سريع

1. تشغيل الخادم

root@kitploit:~
# تشغيل كجذر (يقوم بتحميل config/policy.json إذا كان موجودًا)
sudo RUST_LOG=info ./target/release/bpfjailer-daemon

المخرجات المتوقعة:

root@kitploit:~
[INFO] BpfJailer daemon starting...
[INFO] Loading BpfJailer eBPF programs with libbpf-rs...
[INFO] ✓ pending_enrollments map available for enrollment
[INFO] ✓ network_rules map available for port/protocol filtering
[INFO] ✓ task_storage map created successfully
[INFO] ✓ Program task_alloc attached
[INFO] ✓ Program file_open attached
[INFO] ✓ Program socket_bind attached
[INFO] ✓ Program socket_connect attached
[INFO] ✓ Program bprm_check_security attached
[INFO] Initialized with default roles: restricted (1), permissive (2)
[INFO] Loaded policy from config/policy.json
[INFO] Loaded 5 roles
[INFO] Enrollment server listening on /run/bpfjailer/enrollment.sock

2. تشغيل اختبارات الأمان

root@kitploit:~
# تشغيل اختبارات الثغرات بدون عزل (يظهر نجاح الهجمات)
sudo python3 tests/vulnerable_apps/run_tests.py

# تشغيل اختبارات الثغرات مع دور مقيد (يظهر حظر الهجمات)
sudo python3 tests/vulnerable_apps/run_tests.py --role 1

# تشغيل اختبار محدد
sudo python3 tests/vulnerable_apps/run_tests.py --role 1 --test path

# عرض الاختبارات والأدوار المتاحة
sudo python3 tests/vulnerable_apps/run_tests.py --list

مثال على المخرجات مع دور مقيد:

root@kitploit:~
============================================================
اختبار: تجاوز المسار / قراءة ملف عشوائي
============================================================
محاولة قراءة /etc/passwd عبر تجاوز المسار...
مُحظَر - تم رفض الإذن (BpfJailer منع الوصول إلى الملف)

============================================================
اختبار: حقن الأوامر
============================================================
محاولة حقن الأوامر...
مُحظَر - تم رفض الإذن (BpfJailer منع التنفيذ)

============================================================
اختبار: شل عكسي / تسريب بيانات
============================================================
الاختبار 1: اتصال شل عكسي إلى 127.0.0.1:4444
مُحظَر - تم رفض الإذن (BpfJailer منع الاتصال)

اختبارات الأمان المتاحة

3. اختبار التسجيل اليدوي

root@kitploit:~
#!/usr/bin/env python3
import socket
import json
import os

# الاتصال بالخادم
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect("/run/bpfjailer/enrollment.sock")

# التسجيل بدور مقيد (المعرف 1)
request = {"Enroll": {"pod_id": 1, "role_id": 1}}
sock.send((json.dumps(request) + "\n").encode())
response = sock.recv(4096).decode()
print(f"التسجيل: {response}")
sock.close()

# محاولة قراءة ملف (يجب حظره)
try:
    open("/etc/passwd").read()
    print("الوصول إلى الملف: مسموح")
except PermissionError:
    print("الوصول إلى الملف: محظور")

ملف السياسة

يقوم BpfJailer بتحميل الأدوار من ملف سياسة JSON. يبحث الخادم عن ملف السياسة بهذا الترتيب:

  1. متغير البيئة $BPFJAILER_POLICY
  2. /etc/bpfjailer/policy.json
  3. config/policy.json (بالنسبة إلى دليل العمل)

مثال على ملف السياسة

root@kitploit:~
{
  "roles": {
    "restricted": {
      "id": 1,
      "name": "restricted",
      "flags": {
        "allow_file_access": false,
        "allow_network": false,
        "allow_exec": false
      },
      "network_rules": []
    },
    "webserver": {
      "id": 3,
      "name": "webserver",
      "flags": {
        "allow_file_access": true,
        "allow_network": true,
        "allow_exec": false
      },
      "network_rules": [
        {"protocol": "tcp", "port": 80, "allow": true},
        {"protocol": "tcp", "port": 443, "allow": true}
      ]
    }
  },
  "pods": []
}

علامات السياسة

الأدوار الافتراضية

تصفية منافذ/بروتوكولات الشبكة

يدعم BpfJailer تحكمًا دقيقًا في الشبكة مع قواعد لكل منفذ TCP/UDP.

هيكل القاعدة

root@kitploit:~
خريطة network_rules:
  المفتاح: { role_id, port, protocol, direction }
  القيمة: مسموح (1) أو ممنوع (0)
  • protocol: 6 = TCP، 17 = UDP
  • direction: 0 = bind، 1 = connect
  • port: 0 = حرف بدل (جميع المنافذ)

ترتيب تقييم القاعدة

  1. التحقق من قاعدة المنفذ المحددة للدور
  2. التحقق من قاعدة المنفذ بحرف البدل (port=0) للدور
  3. الرجوع إلى role_flags (البت 1 = الشبكة مسموح بها)

مثال: السماح فقط بـ HTTP/HTTPS للدور المقيد

root@kitploit:~
// في كود الخادم:
use bpfjailer_daemon::process_tracker::{PROTO_TCP, DIR_CONNECT};

// السماح باتصال TCP إلى المنفذين 80 و 443 فقط
process_tracker.add_network_rule(RoleId(1), 80, PROTO_TCP, DIR_CONNECT, true)?;
process_tracker.add_network_rule(RoleId(1), 443, PROTO_TCP, DIR_CONNECT, true)?;

ثوابت البروتوكول

نطاقات المنافذ

يمكن تحديد نطاقات المنافذ في policy.json باستخدام port_start و port_end:

root@kitploit:~
{
  "network_rules": [
    {"protocol": "tcp", "port": 443, "allow": true},
    {"protocol": "tcp", "port_start": 8000, "port_end": 8100, "allow": true}
  ]
}
الحقلالوصف
portمنفذ واحد (مثل 80)
port_start + port_endنطاق منافذ (مثل 8000-8100)

ملاحظة: النطاقات الكبيرة (>1000 منفذ) تستهلك العديد من إدخالات خريطة BPF. يتم تسجيل تحذير للنطاقات التي تتجاوز 1000 منفذ.

البنية المعمارية

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                     مساحة المستخدم                           │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────┐    ┌──────────────────┐                    │
│  │   العميل    │───▶│  bpfjailer-daemon │                    │
│  │  (تسجيل)    │    │                  │                    │
│  └─────────────┘    │  - PolicyManager │                    │
│                     │  - ProcessTracker│                    │
│                     │  - EnrollmentSvr │                    │
│                     └────────┬─────────┘                    │
│                              │ يكتب إلى                     │
│                              ▼                              │
├─────────────────────────────────────────────────────────────┤
│                     خرائط BPF                                │
│  ┌──────────────────┐  ┌─────────────┐  ┌──────────────┐   │
│  │pending_enrollments│  │ role_flags  │  │ task_storage │   │
│  │   (PID → info)   │  │ (role→flags)│  │(task→info)   │   │
│  └──────────────────┘  └─────────────┘  └──────────────┘   │
├─────────────────────────────────────────────────────────────┤
                     خطافات BPF LSM                            │
│  ┌────────────┐ ┌───────────┐ ┌─────────────┐ ┌──────────┐ │
│  │ task_alloc │ │ file_open │ │socket_bind/ │ │bprm_check│ │
│  │(وراثة+تهيئة│ │(ترحيل+فحص)│ │  connect    │ │_security │ │
│  │           )│ │          │ │  (فحص)     │ │ (فحص)    │ │
│  └────────────┘ └───────────┘ └─────────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘

تدفق التسجيل

  1. يتصل العملية بـ /run/bpfjailer/enrollment.sock
  2. يرسل JSON: {"Enroll": {"pod_id": N, "role_id": M}}
  3. يكتب الخادم إلى pending_enrollments[PID] و role_flags[role_id]
  4. في استدعاء النظام التالي (file_open, exec)، يقوم BPF بترحيل التسجيل إلى task_storage
  5. جميع استدعاءات النظام المستقبلية تتحقق من task_storage + role_flags للتنفيذ
  6. ترث العمليات الفرعية عبر خطاف task_alloc

أوضاع التثبيت

يدعم BpfJailer وضعين للتثبيت:

1. وضع الخادم (قياسي)

يستخدم خادمًا قيد التشغيل للتسجيل وإدارة السياسة:

root@kitploit:~
# تثبيت خدمة systemd
sudo cp config/bpfjailer-daemon.service /etc/systemd/system/
sudo cp target/release/bpfjailer-daemon /usr/sbin/
sudo mkdir -p /etc/bpfjailer
sudo cp config/policy.json /etc/bpfjailer/

# تمكين وتشغيل
sudo systemctl daemon-reload
sudo systemctl enable bpfjailer-daemon
sudo systemctl start bpfjailer-daemon

الميزات:

  • واجهة برمجة تطبيقات تسجيل قائمة على المقبس
  • إعادة تحميل ساخنة للسياسة (إيقاف/بدء الخادم)
  • تسجيل كامل في عملية الخادم

2. وضع بدون خادم (تشغيل)

يقوم بتحميل برامج BPF في وقت التشغيل المبكر ويخرج. تبقى البرامج نشطة حتى إعادة التشغيل:

root@kitploit:~
# تثبيت خدمة التشغيل
sudo cp config/bpfjailer-bootstrap.service /etc/systemd/system/
sudo cp target/release/bpfjailer-bootstrap /usr/sbin/
sudo mkdir -p /etc/bpfjailer
sudo cp config/policy.json /etc/bpfjailer/

# تمكين (سيتم التشغيل عند الإقلاع التالي)
sudo systemctl daemon-reload
sudo systemctl enable bpfjailer-bootstrap

# أو التشغيل يدويًا الآن
sudo bpfjailer-bootstrap

الميزات:

  • لا يوجد خادم قيد التشغيل (تقليل سطح الهجوم)
  • برامج BPF مثبتة في /sys/fs/bpf/bpfjailer/
  • لا يمكن إيقافها بدون إعادة تشغيل
  • يتم إرسال أحداث التدقيق إلى systemd-journald عبر مخزن perf
  • تعمل طرق التسجيل البديلة فقط (exec/cgroup/xattr)

التحقق من البرامج المثبتة:

root@kitploit:~
ls -la /sys/fs/bpf/bpfjailer/
ls -la /sys/fs/bpf/bpfjailer/maps/
ls -la /sys/fs/bpf/bpfjailer/progs/

عرض أحداث التدقيق:

root@kitploit:~
# يتم إرسال الأحداث إلى مخزن perf، ويتم التقاطها بواسطة journald
journalctl -f | grep bpfjailer

مقارنة الأوضاع

استكشاف الأخطاء وإصلاحها

"فشل إنشاء خريطة task_storage"

root@kitploit:~
# التحقق من إصدار النواة (يحتاج 5.11+)
uname -r

# التحقق من تنشيط BPF LSM
cat /sys/kernel/security/lsm | grep bpf

# التحقق من توفر BTF
ls -la /sys/kernel/btf/vmlinux

"فشل إرفاق البرنامج"

root@kitploit:~
# التحقق مما إذا كان يمكن تحميل برامج BPF
sudo bpftool prog list

# التحقق من القدرات
sudo capsh --print | grep cap_bpf

تم رفض الإذن عند التسجيل

root@kitploit:~
# التأكد من تشغيل الخادم كجذر
ps aux | grep bpfjailer

# التحقق من أذونات المقبس
ls -la /run/bpfjailer/enrollment.sock

طرق التسجيل البديلة

بالإضافة إلى التسجيل عبر مقبس Unix، يدعم BpfJailer التسجيل التلقائي بناءً على:

التسجيل القائم على الملف القابل للتنفيذ

تسجيل تلقائي لجميع العمليات التي تنفذ ملفًا ثنائيًا معينًا:

root@kitploit:~
{
  "exec_enrollments": [
    {
      "executable_path": "/usr/bin/nginx",
      "pod_id": 1000,
      "role": "webserver"
    }
  ]
}

عندما تنفذ أي عملية /usr/bin/nginx، يتم تسجيلها تلقائيًا بدور webserver. يتم مطابقة ذلك بواسطة inode الملف القابل للتنفيذ، لذلك يتم التعامل مع الروابط الرمزية والصلبة بشكل صحيح.

التسجيل القائم على cgroup

تسجيل تلقائي لجميع العمليات في cgroup معين:

root@kitploit:~
{
  "cgroup_enrollments": [
    {
      "cgroup_path": "/sys/fs/cgroup/bpfjailer/sandbox",
      "pod_id": 2000,
      "role": "sandbox"
    }
  ]
}

أنشئ cgroup وانقل العمليات إليه:

root@kitploit:~
# إنشاء cgroup
sudo mkdir -p /sys/fs/cgroup/bpfjailer/sandbox

# نقل العملية إلى cgroup
echo $$ | sudo tee /sys/fs/cgroup/bpfjailer/sandbox/cgroup.procs

# يتم الآن تسجيل العملية تلقائيًا بدور sandbox

التسجيل القائم على xattr

تعيين سمات ممتدة على الملفات القابلة للتنفيذ لمعلومات التسجيل:

root@kitploit:~
# تعيين xattrs للتسجيل
sudo setfattr -n user.bpfjailer.pod_id -v $(printf '\x01\x00\x00\x00\x00\x00\x00\x00') /path/to/binary
sudo setfattr -n user.bpfjailer.role_id -v $(printf '\x03\x00\x00\x00') /path/to/binary

# التحقق من xattrs
getfattr -d /path/to/binary

كيف يعمل التسجيل التلقائي

  1. عند وقت التنفيذ (خطاف LSM bprm_check_security):

    • التحقق مما إذا كان inode الملف القابل للتنفيذ موجودًا في خريطة exec_enrollment
    • التحقق مما إذا كان معرف cgroup الخاص بالعملية موجودًا في خريطة cgroup_enrollment
    • إذا تم العثور، قم تلقائيًا بتعيين task_storage مع pod_id و role_id
  2. يستمر التسجيل من خلال fork/exec عبر خطاف task_alloc

  3. يتم تطبيق قواعد السياسة (الشبكة، المسار، التنفيذ) بناءً على role_id

الترخيص

GPL-2.0 (مطلوب لبرامج BPF)

تنزيل الأداة
الميزةالحالةالوصف
تتبع العمليات✅ يعمليتتبع العمليات باستخدام خريطة BPF task_storage
تسجيل المقابس✅ يعملتسجل العمليات عبر واجهة برمجة تطبيقات مقبس Unix
سياسات قائمة على الأدوار✅ يعملأدوار مقيدة ومتسامحة
التحكم في الوصول إلى الملفات✅ يعملحظر/السماح بعمليات فتح الملفات
وراثة العزل✅ يعملترث العمليات الفرعية عزل العملية الأم
التحكم في الشبكة✅ يعملحظر/السماح بربط المقابس/الاتصال بها
تصفية المنافذ/البروتوكولات✅ يعملقواعد السماح/المنع لكل منفذ TCP/UDP
التحكم في التنفيذ✅ يعملحظر/السماح بتنفيذ العمليات
مطابقة المسار✅ يعملالتجول عبر dentry مع إبطال التخزين المؤقت
الملفات الثنائية الموقعة🚧 إطار عملالتحقق من توقيع الملفات الثنائية (غير مطبق)
التسجيل البديل✅ يعملالتسجيل التلقائي بواسطة الملف القابل للتنفيذ أو cgroup أو xattr
وضع بدون خادم✅ يعمليقوم الملف الثنائي للتشغيل بتثبيت البرامج في وقت التشغيل المبكر
أحداث التدقيق✅ يعملمخزن perf للتكامل مع systemd-journald
الاختبارالثغرةيتم التخفيف بواسطة
path_traversalقراءة ملف عشوائي عبر ../مقيد، معزول
command_injectionتنفيذ أوامر شلمقيد، خادم ويب، معزول
reverse_shellاتصالات صادرة إلى المهاجممقيد، معزول
ssrfالوصول إلى الخدمات الداخلية/بيانات السحابة الوصفيةمقيد، معزول
arbitrary_writeالكتابة إلى مسارات حساسةمقيد
crypto_minerتنزيل + تنفيذ + اتصال بمجمع التعدينمقيد، خادم ويب
privilege_escalationقراءة shadow، كتابة sudoersمقيد
العلامةالوصف
allow_file_accessالسماح بعمليات فتح الملفات
allow_networkالسماح بربط/الاتصال بالمقابس
allow_execالسماح بتنفيذ العمليات
allow_setuidالسماح بعمليات setuid
allow_ptraceالسماح بعمليات ptrace
معرف الدورالاسمالوصول إلى الملفاتالشبكةالتنفيذ
1مقيدمحظورمحظورمحظور
2متسامحمسموحمسموحمسموح
3خادم ويبمسموحالمنافذ 80، 443، 8080محظور
4قاعدة بياناتمسموحالمنافذ 5432، 6379محظور
5معزولمسموحمحظورمحظور
6ويب مع قاعدة بياناتمسموحالمنافذ 80، 443، 5432، 3306، 6379محظور
7عاملمسموحالمنافذ 443، 5432، 6379، 5672مسموح
الثابتالقيمةالوصف
PROTO_TCP6بروتوكول TCP
PROTO_UDP17بروتوكول UDP
DIR_BIND0bind() المقبس
DIR_CONNECT1connect() المقبس
الجانبوضع الخادموضع بدون خادم
سطح الهجومخادم قيد التشغيللا توجد عملية قيد التشغيل
التسجيلمقبس Unix + البدائلالبدائل فقط
تحديثات السياسةإعادة تحميل ساخنةيتطلب إعادة تشغيل
تسجيل التدقيقيقرأ الخادم ringbufjournald عبر مخزن perf
إزالة البرامجإيقاف الخادمإعادة تشغيل فقط
ترتيب الإقلاعبعد network.targetقبل basic.target