
eBPF का उपयोग करके Linux कर्नेल-स्पेस HID इंजेक्शन हमला डिटेक्टर। USB और ब्लूटूथ HID उपकरणों को संदिग्ध कीस्ट्रोक टाइमिंग के लिए मॉनिटर करता है और हमला पूरा होने से पहले स्वचालित रूप से दुर्भावनापूर्ण उपकरणों को अनबाइंड करता है।
नीचे यह क्यों संग्रहित किया गया देखें।
eBPF HID-BPF struct_ops का उपयोग करके HID इंजेक्शन हमलों (रबर डकी, O.MG केबल, ESP32-आधारित कीबोर्ड एमुलेटर) का पता लगाने और उन्हें अवरुद्ध करने के लिए एक Linux कर्नेल-स्पेस सुरक्षा मॉनिटर।
दुर्भावनापूर्ण HID उपकरण कीबोर्ड का अनुकरण करते हैं और किसी भी मानव टाइपिस्ट की तुलना में कहीं अधिक तेज़ी से कीस्ट्रोक्स इंजेक्ट करते हैं। यह उपकरण उस समय विसंगति का पता लगाता है और हमला पूरा होने से पहले दोषपूर्ण उपकरण को कर्नेल HID ड्राइवर से अनबाइंड कर देता है।
स्टार्टअप पर, उपकरण वर्तमान में जुड़े सभी HID उपकरणों का स्नैपशॉट लेता है और उन्हें अनदेखा करता है — केवल नए जुड़े उपकरणों की निगरानी की जाती है। यह USB और ब्लूटूथ दोनों HID उपकरणों का समर्थन करता है।
main — कार्यशील प्रूफ ऑफ कॉन्सेप्टकार्यात्मक एंड-टू-एंड पाइपलाइन, ESP32-आधारित कीबोर्ड एमुलेटर के विरुद्ध परीक्षण किया गया:
struct_ops प्रोग्राम संलग्न करता हैज्ञात सीमाएँ जिन्होंने पुनर्लेखन को प्रेरित किया:
hid_id sysfs माइनर नंबर से लिया गया है, जो रीबूट के दौरान स्थिर नहीं हैv0.1 — स्वच्छ पुनर्लेखन (रोका गया)BPF परत को फिर से तार करने से पहले बनाया गया पोर्टेबल फाउंडेशन:
/sys/bus/hid/devices/ के माध्यम से सभी HID उपकरणों की गणना करता हैhid_desc_parse.c) — उपकरण प्रकार पहचान पूर्ण नहीं हुईदोनों शाखाएं एक ही दीवार से टकराईं: HID-BPF कच्चे बाइट सरणियों पर काम करता है, इसलिए सभी डिस्क्रिप्टर पार्सिंग और डिवाइस-प्रकार सत्यापन को इस बात की परवाह किए बिना यूज़रस्पेस में रहना होगा कि डिटेक्शन लॉजिक कैसे विभाजित है। उस मचान को खरोंच से बनाते रहने के बजाय, मैं [udev-hid-bpf] पर चला गया।
दुर्भावनापूर्ण HID उपकरण कीबोर्ड का अनुकरण करते हैं और किसी भी मानव टाइपिस्ट की तुलना में कहीं अधिक तेज़ी से कीस्ट्रोक्स इंजेक्ट करते हैं। यह उपकरण उस समय विसंगति का पता लगाता है और हमला पूरा होने से पहले दोषपूर्ण उपकरण को कर्नेल HID ड्राइवर से अनबाइंड कर देता है।
स्टार्टअप पर, उपकरण वर्तमान में जुड़े सभी HID उपकरणों का स्नैपशॉट लेता है और उन्हें अनदेखा करता है — केवल नए जुड़े उपकरणों की निगरानी की जाती है। यह USB और ब्लूटूथ दोनों HID उपकरणों का समर्थन करता है।
main — कार्यशील प्रूफ ऑफ कॉन्सेप्टकार्यात्मक एंड-टू-एंड पाइपलाइन, ESP32-आधारित कीबोर्ड एमुलेटर के विरुद्ध परीक्षण किया गया:
struct_ops प्रोग्राम संलग्न करता हैज्ञात सीमाएँ जिन्होंने पुनर्लेखन को प्रेरित किया:
hid_id sysfs माइनर नंबर से लिया गया है, जो रीबूट के दौरान स्थिर नहीं हैv0.1 — स्वच्छ पुनर्लेखन (सक्रिय विकास)BPF परत को फिर से तार करने से पहले बनाया जा रहा पोर्टेबल फाउंडेशन:
/sys/bus/hid/devices/ के माध्यम से सभी HID उपकरणों की गणना करता हैhid_desc_parse.c) — संलग्न करने से पहले उपकरण प्रकार की पहचान करेगा┌─────────────────────────────────────────────────────┐
│ यूज़रस्पेस │
│ │
│ udev मॉनिटर → डिस्क्रिप्टर पार्स → कीबोर्ड? │
│ ↓ │
│ BPF कॉन्फिग मैप पॉप्युलेट करें (थ्रेसहोल्ड, डिवाइस जानकारी) │
│ ↓ │
│ HID-BPF struct_ops को hid_id से संलग्न करें │
│ ↓ │
│ रिंग बफर उपभोक्ता → हमले पर sysfs अनबाइंड │
└──────────────────────────┬──────────────────────────┘
│
┌──────────────────────────▼──────────────────────────┐
│ BPF (कर्नेल पक्ष) │
│ │
│ hid_device_event → समय गणित (वेलफोर्ड का ऑनलाइन │
│ वेरियंस, फिक्स्ड-पॉइंट) → प्रति-की टाइमस्टैम्प मैप │
│ → विसंगति पर रिंग बफर सबमिट │
└─────────────────────────────────────────────────────┘
डिटेक्शन लॉजिक BPF में चला जाता है। यूज़रस्पेस डिस्क्रिप्टर पार्सिंग, कॉन्फिग मैप पॉप्युलेशन, और अनबाइंड रिस्पॉन्स को संभालता है। डिवाइस कनेक्शन और BPF अटैचमेंट के बीच एनुमरेशन विंडो एक दस्तावेजीकृत, सीमित सीमा है — वास्तविक दुनिया के HID इंजेक्शन उपकरणों में जानबूझकर पोस्ट-एनुमरेशन विलंब शामिल होते हैं जो इस विंडो के अंतर्गत आते हैं।
libbpf डेवलपमेंट हेडरlibelf और zlib डेवलपमेंट हेडरmake
# स्वचालित पहचान: संकेत मिलने पर डिवाइस प्लग इन या पेयर करें
sudo ./hid_guard
# ज्ञात hid_id के साथ मैन्युअल ओवरराइड
sudo ./hid_guard <hid_id>
# उपलब्ध HID डिवाइसों की सूची
ls /sys/bus/hid/devices/
main.c)| पैरामीटर | डिफ़ॉल्ट | अर्थ |
|---|---|---|
ATTACK_MAX_MS | 5 ms |
BLE कीस्ट्रोक ट्रांसमिशन के लिए ESP32-S2 का उपयोग किया गया। अगला, रबर डकी या ESP32-S3 जैसे हार्डवेयर के साथ परीक्षण करें, USB पोर्ट को लक्ष्य करते हुए
GPL v2
| इंजेक्शन का संकेत देने वाला इंटर-कीस्ट्रोक अंतराल |
HUMAN_MIN_MS | 30 ms | मानव टाइपिंग के लिए न्यूनतम अंतराल |
ALERT_THRESHOLD | 3 | ब्लॉक करने से पहले लगातार संदिग्ध घटनाएं |
| घटक | स्थिति |
|---|
| डिवाइस एनुमरेशन | पूर्ण |
| रिपोर्ट डिस्क्रिप्टर पढ़ना | पूर्ण |
| डिस्क्रिप्टर पार्सर (कीबोर्ड पहचान) | प्रगति पर |
| BPF कॉन्फिग मैप पॉप्युलेशन | योजनाबद्ध |
| HID-BPF struct_ops अटैचमेंट | पूर्ण (main शाखा) |
| टाइमिंग डिटेक्शन (वेलफोर्ड वेरियंस, BPF-पक्ष) | योजनाबद्ध |
| Sysfs अनबाइंड ब्लॉकिंग | पूर्ण (main शाखा) |