
eBPFを使用したLinuxカーネル空間のHIDインジェクション攻撃検出器。USBおよびBluetooth HIDデバイスの異常なキーストロークタイミングを監視し、攻撃完了前に悪意のあるデバイスを自動的にアンバインドします。
以下を参照してください:なぜアーカイブされたか
eBPF HID-BPF struct_ops を使用して、HIDインジェクション攻撃(Rubber Ducky、O.MG Cable、ESP32ベースのキーボードエミュレータ)を検出およびブロックするLinuxカーネル空間のセキュリティモニタ。
悪意のあるHIDデバイスはキーボードをエミュレートし、人間のタイピストよりもはるかに速い速度でキーストロークを注入します。このツールはそのタイミング異常を検出し、攻撃が完了する前に問題のデバイスをカーネルHIDドライバからアンバインドします。
起動時に、ツールは現在接続されているすべてのHIDデバイスのスナップショットを取得し、それらを無視します — 新しく接続されたデバイスのみが監視されます。USBおよびBluetooth 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およびBluetooth HIDデバイスの両方をサポートします。
main — 実証用プロトタイプ機能するエンドツーエンドパイプライン。ESP32ベースのキーボードエミュレータでテスト済み:
struct_ops プログラムをアタッチしますリライトのきっかけとなった既知の制限事項:
hid_id はsysfsのマイナーナンバーから派生しており、再起動間で安定しないv0.1 — クリーンリライト(開発中)BPFレイヤーを再配線する前に構築中の移植可能な基盤:
/sys/bus/hid/devices/ 経由ですべてのHIDデバイスを列挙hid_desc_parse.c) — アタッチ前にデバイスタイプを識別予定┌─────────────────────────────────────────────────────┐
│ Userspace │
│ │
│ udev monitor → descriptor parse → keyboard? │
│ ↓ │
│ populate BPF config maps (thresholds, device info) │
│ ↓ │
│ attach HID-BPF struct_ops to hid_id │
│ ↓ │
│ ring buffer consumer → sysfs unbind on attack │
└──────────────────────────┬──────────────────────────┘
│
┌──────────────────────────▼──────────────────────────┐
│ BPF (kernel side) │
│ │
│ hid_device_event → timing math (Welford's online │
│ variance, fixed-point) → per-key timestamp maps │
│ → ring buffer submit on anomaly │
└─────────────────────────────────────────────────────┘
検出ロジックは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 | インジェクションを示すキーストローク間隔 |
HUMAN_MIN_MS |
ESP32-S2がBLEキーストローク送信に使用されました。次に、rubber duckyやESP32-S3などのハードウェアを使用して、USBポートをターゲットにテストします。
GPL v2
| 30 ms |
| 人間のタイピングの最小間隔 |
ALERT_THRESHOLD | 3 | ブロック前の連続した疑わしいイベント数 |
| コンポーネント | 状態 |
|---|
| デバイス列挙 | 完了 |
| レポートディスクリプタ読み取り | 完了 |
| ディスクリプタパーサー(キーボード識別) | 進行中 |
| BPF設定マップの設定 | 計画中 |
| HID-BPF struct_ops アタッチ | 完了(mainブランチ) |
| タイミング検出(Welford分散、BPF側) | 計画中 |
| Sysfsアンバインドブロッキング | 完了(mainブランチ) |