
Detector de ataques de inyección HID en espacio de kernel de Linux usando eBPF. Monitoriza dispositivos HID USB y Bluetooth en busca de tiempos de pulsación de teclas anómalos y desvincula automáticamente los dispositivos maliciosos antes de que se complete el ataque.
Véase Por Qué Esto Fue Archivado más abajo.
Un monitor de seguridad en espacio de kernel de Linux para detectar y bloquear ataques de inyección HID (Rubber Ducky, O.MG Cable, emuladores de teclado basados en ESP32) usando eBPF HID-BPF struct_ops.
Los dispositivos HID maliciosos emulan teclados e inyectan pulsaciones de teclas mucho más rápido que cualquier mecanógrafo humano. Esta herramienta detecta esa anomalía temporal y desvincula el dispositivo infractor del controlador HID del kernel antes de que el ataque se complete.
Al iniciarse, la herramienta captura una instantánea de todos los dispositivos HID actualmente conectados y los ignora; solo se monitorizan los dispositivos recién conectados. Soporta tanto dispositivos HID USB como Bluetooth.
main — Prueba de Concepto FuncionalPipeline funcional de principio a fin, probado contra un emulador de teclado basado en ESP32:
struct_ops al dispositivo descubiertoLimitaciones conocidas que desencadenaron la reescritura:
hid_id derivado del número menor de sysfs, que no es estable entre reiniciosv0.1 — Reescritura Limpia (Detenida)Fundación portátil construida antes de reconectar la capa BPF:
/sys/bus/hid/devices/hid_desc_parse.c) — identificación de tipo de dispositivo no completadaAmbas ramas chocaron con el mismo muro: HID-BPF opera sobre arreglos de bytes brutos, por lo que todo el análisis de descriptores y la verificación del tipo de dispositivo deben residir en el espacio de usuario, independientemente de cómo se divida la lógica de detección. En lugar de seguir construyendo ese andamiaje desde cero, me mudé a [udev-hid-bpf].
Los dispositivos HID maliciosos emulan teclados e inyectan pulsaciones de teclas mucho más rápido que cualquier mecanógrafo humano. Esta herramienta detecta esa anomalía temporal y desvincula el dispositivo infractor del controlador HID del kernel antes de que el ataque se complete.
Al iniciarse, la herramienta captura una instantánea de todos los dispositivos HID actualmente conectados y los ignora; solo se monitorizan los dispositivos recién conectados. Soporta tanto dispositivos HID USB como Bluetooth.
main — Prueba de Concepto FuncionalPipeline funcional de principio a fin, probado contra un emulador de teclado basado en ESP32:
struct_ops al dispositivo descubiertoLimitaciones conocidas que desencadenaron la reescritura:
hid_id derivado del número menor de sysfs, que no es estable entre reiniciosv0.1 — Reescritura Limpia (Desarrollo Activo)Fundación portátil que se está construyendo antes de reconectar la capa BPF:
/sys/bus/hid/devices/hid_desc_parse.c) — identificará el tipo de dispositivo antes de adjuntar┌─────────────────────────────────────────────────────┐
│ Espacio de usuario │
│ │
│ monitor udev → analizar descriptor → ¿teclado? │
│ ↓ │
│ poblar mapas de configuración BPF (umbrales, info) │
│ ↓ │
│ adjuntar struct_ops HID-BPF a hid_id │
│ ↓ │
│ consumidor de ring buffer → desvincular por sysfs │
└──────────────────────────┬──────────────────────────┘
│
┌──────────────────────────▼──────────────────────────┐
│ BPF (lado del kernel) │
│ │
│ hid_device_event → cálculo temporal (varianza │
│ online de Welford, punto fijo) → mapas de timestamp │
│ por tecla → envío a ring buffer ante anomalía │
└─────────────────────────────────────────────────────┘
La lógica de detección se mueve a BPF. El espacio de usuario maneja el análisis de descriptores, el poblamiento de mapas de configuración y la respuesta de desvinculación. La ventana de enumeración entre la conexión del dispositivo y la adjunción de BPF es una limitación documentada y acotada: las herramientas reales de inyección HID incluyen retardos deliberados posteriores a la enumeración dentro de los cuales cae esta ventana.
libbpflibelf y zlibmake
# Detección automática: conecta o empareja el dispositivo cuando se solicite
sudo ./hid_guard
# Anulación manual con hid_id conocido
sudo ./hid_guard <hid_id>
# Listar dispositivos HID disponibles
ls /sys/bus/hid/devices/
main.c)| Parámetro | Valor por defecto | Significado |
|---|---|---|
ATTACK_MAX_MS |
Se usó ESP32-S2 para transmisión de pulsaciones BLE. Próximamente, probar con hardware como rubber ducky o ESP32-S3, apuntando a puertos USB.
GPL v2
| 5 ms |
| Intervalo entre pulsaciones que indica inyección |
HUMAN_MIN_MS | 30 ms | Intervalo mínimo para escritura humana |
ALERT_THRESHOLD | 3 | Eventos sospechosos consecutivos antes de bloquear |
| Componente | Estado |
|---|
| Enumeración de dispositivos | Hecho |
| Lectura de descriptor de informe | Hecho |
| Analizador de descriptores (identificación de teclado) | En progreso |
| Poblamiento de mapas de configuración BPF | Planeado |
| Adjuntar struct_ops HID-BPF | Hecho (rama main) |
| Detección temporal (varianza de Welford, lado BPF) | Planeado |
| Bloqueo por desvinculación sysfs | Hecho (rama main) |