
كاشف هجمات حقن HID في مساحة نواة لينكس باستخدام eBPF. يراقب أجهزة USB وBluetooth HID بحثًا عن توقيت ضغط مفاتيح شاذ ويفصل الأجهزة الضارة تلقائيًا قبل اكتمال الهجوم.
انظر لماذا تمت أرشفة هذا أدناه.
أداة مراقبة أمنية تعمل في مساحة نواة لينكس لكشف ومنع هجمات حقن HID (Rubber Ducky، كابل O.MG، محاكيات لوحة المفاتيح المستندة إلى ESP32) باستخدام eBPF HID-BPF struct_ops.
أجهزة HID الضارة تحاكي لوحات المفاتيح وتحقن ضغطات لوحة مفاتيح أسرع بكثير من أي كاتب بشري. تكتشف هذه الأداة ذلك الشذوذ الزمني وتفصل الجهاز المخالف عن مشغل HID للنواة قبل اكتمال الهجوم.
عند بدء التشغيل، تلتقط الأداة لقطة لجميع أجهزة HID المتصلة حالياً وتتجاهلها — يتم مراقبة الأجهزة المتصلة حديثاً فقط. تدعم كل من أجهزة USB و Bluetooth HID.
main — إثبات مفهوم عاملخط أنابيب شامل عامل، تم اختباره مقابل محاكي لوحة مفاتيح قائم على ESP32:
struct_ops HID-BPF بالجهاز المكتشفقيود معروفة أدت إلى إعادة الكتابة:
hid_id مشتق من رقم sysfs الثانوي، وهو غير ثابت عبر عمليات إعادة التشغيلv0.1 — إعادة كتابة نظيفة (متوقفة)أساس محمول تم بناؤه قبل إعادة توصيل طبقة BPF:
/sys/bus/hid/devices/hid_desc_parse.c) — تعريف نوع الجهاز لم يكتملكلا الفرعين اصطدما بنفس الجدار: HID-BPF يعمل على مصفوفات بايت خام، لذا يجب أن يعيش كل تحليل الواصفات والتحقق من نوع الجهاز في مساحة المستخدم بغض النظر عن كيفية تقسيم منطق الكشف. بدلاً من الاستمرار في بناء تلك السقالات من الصفر، انتقلت إلى [udev-hid-bpf].
أجهزة HID الضارة تحاكي لوحات المفاتيح وتحقن ضغطات لوحة مفاتيح أسرع بكثير من أي كاتب بشري. تكتشف هذه الأداة ذلك الشذوذ الزمني وتفصل الجهاز المخالف عن مشغل HID للنواة قبل اكتمال الهجوم.
عند بدء التشغيل، تلتقط الأداة لقطة لجميع أجهزة HID المتصلة حالياً وتتجاهلها — يتم مراقبة الأجهزة المتصلة حديثاً فقط. تدعم كل من أجهزة USB و Bluetooth HID.
main — إثبات مفهوم عاملخط أنابيب شامل عامل، تم اختباره مقابل محاكي لوحة مفاتيح قائم على ESP32:
struct_ops HID-BPF بالجهاز المكتشفقيود معروفة أدت إلى إعادة الكتابة:
hid_id مشتق من رقم sysfs الثانوي، وهو غير ثابت عبر عمليات إعادة التشغيلv0.1 — إعادة كتابة نظيفة (تطوير نشط)أساس محمول يُبنى حالياً قبل إعادة توصيل طبقة BPF:
/sys/bus/hid/devices/hid_desc_parse.c) — سيعرف نوع الجهاز قبل الرفع┌─────────────────────────────────────────────────────┐
│ مساحة المستخدم │
│ │
│ شاشة udev → تحليل الواصف → لوحة مفاتيح؟ │
│ ↓ │
│ ملء خرائط تكوين BPF (العتبات، معلومات الجهاز) │
│ ↓ │
│ رفع HID-BPF struct_ops إلى hid_id │
│ ↓ │
│ مستهلك المخزن الحلقي → فصل sysfs عند الهجوم │
└──────────────────────────┬──────────────────────────┘
│
┌──────────────────────────▼──────────────────────────┐
│ BPF (جانب النواة) │
│ │
│ hid_device_event → حساب زمني (تباين ويلفورد عبر │
│ الإنترنت، نقطة ثابتة) → خرائط زمنية لكل مفتاح │
│ → إرسال المخزن الحلقي عند الشذوذ │
└─────────────────────────────────────────────────────┘
منطق الكشف ينتقل إلى BPF. مساحة المستخدم تتعامل مع تحليل الواصف، ملء خرائط التكوين، واستجابة الفصل. نافذة التعداد بين اتصال الجهاز ورفع BPF هي قيد موثق ومحدود — أدوات حقن HID في العالم الحقيقي تتضمن تأخيرات متعمدة بعد التعداد تقع هذه النافذة ضمنها.
libbpflibelf و zlibmake
# كشف تلقائي: قم بتوصيل أو إقران الجهاز عند المطالبة
sudo ./hid_guard
# تجاوز يدوي باستخدام hid_id معروف
sudo ./hid_guard <hid_id>
# قائمة أجهزة HID المتاحة
ls /sys/bus/hid/devices/
main.c)| Parameter (المعامل) | Default (الافتراضي) | Meaning (المعنى) |
|---|---|---|
تم استخدام ESP32-S2 للإرسال عبر BLE. التالي، اختبار مع أجهزة مثل rubber ducky أو ESP32-S3، مع استهداف منافذ USB.
GPL v2
ATTACK_MAX_MS| 5 ms |
| الفاصل الزمني بين ضغطات المفاتيح الذي يشير إلى الحقن |
HUMAN_MIN_MS | 30 ms | الحد الأدنى للفاصل الزمني للكتابة البشرية |
ALERT_THRESHOLD | 3 | الأحداث المشبوهة المتتالية قبل الحظر |
| Component (المكون) | State (الحالة) |
|---|
| تعداد الجهاز | مكتمل |
| قراءة واصف التقرير | مكتمل |
| محلل الواصف (تعريف لوحة المفاتيح) | قيد التطوير |
| ملء خرائط تكوين BPF | مخطط له |
| رفع HID-BPF struct_ops | مكتمل (فرع main) |
| كشف التوقيت (تباين ويلفورد، جانب BPF) | مخطط له |
| حظر الفصل عبر sysfs | مكتمل (فرع main) |