Communitygithub.com

análisis-del-historial-de-conexión-de-dispositivos-usb

Correlacionar claves del registro de Windows (USBSTOR, MountedDevices), registros de eventos y otros artefactos para reconstruir la actividad de dispositivos USB.

¿Qué es análisis-del-historial-de-conexión-de-dispositivos-usb?

Esta habilidad permite a un analista forense o investigador de seguridad reconstruir el historial completo de conexión de dispositivos USB en sistemas Windows. Escrito en español, el resumen detalla cómo extraer, analizar y correlacionar artefactos clave como las claves de registro USBSTOR, MountedDevices y MountPoints2, los logs de SetupAPI y los registros de eventos del sistema. La destreza es crucial para investigaciones de filtración de datos, amenazas internas, cumplimiento normativo y seguimiento de dispositivos específicos entre múltiples equipos. La habilidad proporciona un flujo de trabajo paso a paso que incluye comandos de extracción de imágenes forenses, scripts en Python para analizar archivos de registro y eventos del sistema (con Event IDs como 2003, 2010, 2100, 2102, 6416), y la construcción de una línea de tiempo unificada. Es compatible con herramientas como USBDeview, USB Forensic Tracker, RegRipper, KAPE, Plaso y Velociraptor. Todo el proceso está documentado con ejemplos concretos, escenarios comunes (exfiltración, dispositivo no autorizado, malware por USB) y un formato de informe de salida estándar que incluye el inventario de dispositivos, asignaciones de letras de unidad, acceso de usuarios y hallazgos sospechosos.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mukul975/Anthropic-Cybersecurity-Skills/tree/main/skills/analyzing-usb-device-connection-history

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Análisis del Historial de Conexión de Dispositivos USB

Cuándo Usarlo

  • Al investigar una posible filtración de datos a través de dispositivos de almacenamiento extraíbles
  • Durante investigaciones de amenazas internas para rastrear el uso de dispositivos USB
  • Para auditorías de cumplimiento que verifican la aplicación de políticas sobre medios extraíbles
  • Al correlacionar conexiones USB con eventos de acceso y copia de archivos
  • Para establecer una línea de tiempo de las conexiones de dispositivos durante un incidente

Prerrequisitos

  • Imagen forense o archivos de registro extraídos y registros de eventos
  • Acceso a las colmenas de registro SYSTEM, SOFTWARE y NTUSER.DAT
  • Registros de SetupAPI (setupapi.dev.log)
  • Registros de eventos de Windows (Sistema, Seguridad, DriverFrameworks-UserMode)
  • USBDeview, USB Forensic Tracker o RegRipper
  • Comprensión de la identificación de dispositivos USB (VID, PID, número de serie)

Flujo de Trabajo

Paso 1: Extraer Artefactos Relacionados con USB

# Montar la imagen forense y copiar los artefactos relevantes
mount -o ro,loop,offset=$((2048*512)) /cases/case-2024-001/images/evidence.dd /mnt/evidence

mkdir -p /cases/case-2024-001/usb/

# Colmenas de registro
cp /mnt/evidence/Windows/System32/config/SYSTEM /cases/case-2024-001/usb/
cp /mnt/evidence/Windows/System32/config/SOFTWARE /cases/case-2024-001/usb/
cp /mnt/evidence/Users/*/NTUSER.DAT /cases/case-2024-001/usb/

# Registros de SetupAPI (marcas de tiempo de primera conexión)
cp /mnt/evidence/Windows/INF/setupapi.dev.log /cases/case-2024-001/usb/

# Registros de eventos
cp /mnt/evidence/Windows/System32/winevt/Logs/System.evtx /cases/case-2024-001/usb/
cp "/mnt/evidence/Windows/System32/winevt/Logs/Microsoft-Windows-DriverFrameworks-UserMode%4Operational.evtx" \
   /cases/case-2024-001/usb/ 2>/dev/null
cp "/mnt/evidence/Windows/System32/winevt/Logs/Microsoft-Windows-Partition%4Diagnostic.evtx" \
   /cases/case-2024-001/usb/ 2>/dev/null

Paso 2: Analizar la Clave de Registro USBSTOR

# Extraer entradas de USBSTOR de la colmena SYSTEM
python3 << 'PYEOF'
from Registry import Registry
import json

reg = Registry.Registry("/cases/case-2024-001/usb/SYSTEM")

# Encontrar el ControlSet actual
select = reg.open("Select")
current = select.value("Current").value()
controlset = f"ControlSet{current:03d}"

# Analizar USBSTOR
usbstor_path = f"{controlset}\\Enum\\USBSTOR"
usbstor = reg.open(usbstor_path)

devices = []
print("=== DISPOSITIVOS USBSTOR ===\n")

for device_class in usbstor.subkeys():
    # Formato: Disk&Ven_VENDOR&Prod_PRODUCT&Rev_REVISION
    class_name = device_class.name()
    parts = class_name.split('&')
    vendor = parts[1].replace('Ven_', '') if len(parts) > 1 else 'Desconocido'
    product = parts[2].replace('Prod_', '') if len(parts) > 2 else 'Desconocido'
    revision = parts[3].replace('Rev_', '') if len(parts) > 3 else 'Desconocido'

    for instance in device_class.subkeys():
        serial = instance.name()
        last_write = instance.timestamp()

        device_info = {
            'vendor': vendor,
            'product': product,
            'revision': revision,
            'serial': serial,
            'last_connected': str(last_write),
        }

        # Obtener el nombre descriptivo si está disponible
        try:
            friendly = instance.value("FriendlyName").value()
            device_info['friendly_name'] = friendly
        except:
            pass

        # Obtener parámetros del dispositivo
        try:
            params = instance.subkey("Device Parameters")
            try:
                device_info['class_guid'] = params.value("ClassGUID").value()
            except:
                pass
        except:
            pass

        devices.append(device_info)
        print(f"Dispositivo: {vendor} {product}")
        print(f"  Serial: {serial}")
        print(f"  Última conexión: {last_write}")
        print(f"  Nombre descriptivo: {device_info.get('friendly_name', 'N/A')}")
        print()

# Guardar resultados
with open('/cases/case-2024-001/analysis/usb_devices.json', 'w') as f:
    json.dump(devices, f, indent=2)

print(f"\nTotal de dispositivos de almacenamiento USB encontrados: {len(devices)}")
PYEOF

Paso 3: Extraer Asignaciones de Letras de Unidad y Asociaciones de Usuarios

# Analizar MountedDevices de la colmena SYSTEM
python3 << 'PYEOF'
from Registry import Registry
import struct

reg = Registry.Registry("/cases/case-2024-001/usb/SYSTEM")

mounted = reg.open("MountedDevices")

print("=== DISPOSITIVOS MONTADOS (Asignaciones de Letras de Unidad) ===\n")
for value in mounted.values():
    name = value.name()
    data = value.value()

    if name.startswith("\\DosDevices\\"):
        drive_letter = name.replace("\\DosDevices\\", "")
        if len(data) > 24:
            # Dispositivo USB - contiene la ruta del dispositivo en cadena
            try:
                device_path = data.decode('utf-16-le').strip('\x00')
                if 'USBSTOR' in device_path or 'USB#' in device_path:
                    print(f"  {drive_letter} -> {device_path}")
            except:
                pass
        else:
            # Disco fijo - contiene la firma del disco + desplazamiento
            disk_sig = struct.unpack('<I', data[0:4])[0]
            offset = struct.unpack('<Q', data[4:12])[0]
            print(f"  {drive_letter} -> Firma del disco: 0x{disk_sig:08X}, Desplazamiento: {offset}")
PYEOF

# Analizar MountPoints2 de usuario (qué usuario accedió a qué dispositivos)
python3 << 'PYEOF'
from Registry import Registry
import os, glob

print("\n=== PUNTOS DE MONTAJE DE USUARIO (MountPoints2) ===\n")

for ntuser in glob.glob("/cases/case-2024-001/usb/NTUSER*.DAT"):
    try:
        reg = Registry.Registry(ntuser)
        mp2 = reg.open("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MountPoints2")

        print(f"Colmena de usuario: {os.path.basename(ntuser)}")
        for key in mp2.subkeys():
            guid = key.name()
            last_write = key.timestamp()
            if '{' in guid:
                print(f"  Volumen: {guid} | Último acceso: {last_write}")
        print()
    except Exception as e:
        print(f"  Error al analizar {ntuser}: {e}")
PYEOF

Paso 4: Extraer Marcas de Tiempo de Primera Conexión desde SetupAPI

# Analizar setupapi.dev.log en busca de marcas de tiempo de primera instalación de dispositivos USB
python3 << 'PYEOF'
import re

print("=== INSTALACIONES DE DISPOSITIVOS USB SEGÚN SETUPAPI ===\n")

with open('/cases/case-2024-001/usb/setupapi.dev.log', 'r', errors='ignore') as f:
    content = f.read()

# Encontrar secciones de instalación de dispositivos USB
pattern = r'>>>\s+\[Device Install.*?\n.*?Section start (\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}).*?\n(.*?)<<<'
matches = re.findall(pattern, content, re.DOTALL)

usb_installs = []
for timestamp, section in matches:
    if 'USBSTOR' in section or 'USB\\VID' in section:
        # Extraer ID del dispositivo
        dev_match = re.search(r'(USBSTOR\\[^\s]+|USB\\VID_\w+&PID_\w+[^\s]*)', section)
        if dev_match:
            device_id = dev_match.group(1)
            usb_installs.append({
                'first_install': timestamp,
                'device_id': device_id
            })
            print(f"  {timestamp} | {device_id}")

print(f"\nTotal de instalaciones USB encontradas: {len(usb_installs)}")
PYEOF

# Analizar registros de eventos de Windows para eventos USB
# IDs de evento: 2003, 2010, 2100, 2102 (DriverFrameworks-UserMode)
# IDs de evento: 6416 (Seguridad - nuevo dispositivo externo reconocido)
python3 << 'PYEOF'
import json
from evtx import PyEvtxParser

try:
    parser = PyEvtxParser("/cases/case-2024-001/usb/System.evtx")

    print("\n=== EVENTOS USB DEL REGISTRO DE EVENTOS DEL SISTEMA ===\n")
    for record in parser.records_json():
        data = json.loads(record['data'])
        event_id = str(data['Event']['System']['EventID'])

        # Eventos de conexión de dispositivos USB
        if event_id in ('20001', '20003', '10000', '10100'):
            timestamp = data['Event']['System']['TimeCreated']['#attributes']['SystemTime']
            event_data = data['Event'].get('UserData', data['Event'].get('EventData', {}))
            print(f"  [{timestamp}] EventID {event_id}: {json.dumps(event_data, default=str)[:200]}")
except Exception as e:
    print(f"Error: {e}")
PYEOF

Paso 5: Construir Línea de Tiempo e Informe de Actividad USB

# Compilar toda la evidencia USB en una línea de tiempo unificada
python3 << 'PYEOF'
import json, csv

timeline = []

# Cargar datos de USBSTOR
with open('/cases/case-2024-001/analysis/usb_devices.json') as f:
    devices = json.load(f)

for device in devices:
    timeline.append({
        'timestamp': device['last_connected'],
        'source': 'Registro USBSTOR',
        'device': f"{device['vendor']} {device['product']}",
        'serial': device['serial'],
        'event': 'Última conexión',
        'detail': device.get('friendly_name', '')
    })

# Ordenar cronológicamente
timeline.sort(key=lambda x: x['timestamp'])

# Escribir CSV de línea de tiempo
with open('/cases/case-2024-001/analysis/usb_timeline.csv', 'w', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=['timestamp', 'source', 'device', 'serial', 'event', 'detail'])
    writer.writeheader()
    writer.writerows(timeline)

print(f"Línea de tiempo USB: {len(timeline)} eventos escritos en usb_timeline.csv")

# Imprimir resumen
print("\n=== RESUMEN DE DISPOSITIVOS USB ===")
for entry in timeline:
    print(f"  {entry['timestamp']} | {entry['device']} | {entry['serial'][:20]} | {entry['event']}")
PYEOF

Conceptos Clave

ConceptoDescripción
USBSTORClave de registro que almacena datos de identificación y conexión de dispositivos de almacenamiento masivo USB
VID/PIDID de vendedor e ID de producto que identifican de forma única el fabricante y modelo del dispositivo USB
Número de serie del dispositivoIdentificador único para dispositivos USB individuales (algunos dispositivos comparten seriales)
MountedDevicesClave de registro que asigna GUIDs de volumen y letras de unidad a dispositivos físicos
MountPoints2Clave de registro por usuario que muestra a qué volúmenes ha accedido un usuario
Registro SetupAPIRegistro de instalación de controladores de Windows que registra las conexiones de dispositivos por primera vez
DeviceContainersClave de registro en la colmena SOFTWARE con metadatos del dispositivo y marcas de tiempo
EMDMgmtClave de registro que rastrea dispositivos compatibles con ReadyBoost con números de serie y marcas de tiempo

Herramientas y Sistemas

HerramientaPropósito
USB Forensic TrackerHerramienta especializada para la extracción del historial de dispositivos USB
USBDeviewHerramienta de NirSoft que enumera todos los dispositivos USB conectados a un sistema
RegRipper (plugin usbstor)Extracción automatizada de artefactos USB a partir de colmenas de registro
Registry ExplorerAnálisis interactivo de registro para claves relacionadas con USB
KAPERecopilación automatizada de artefactos relacionados con USB
Plaso/log2timelineCreación de líneas de tiempo que incluyen eventos de conexión USB
FTK ImagerCreación de imágenes forenses incluidos medios extraíbles
VelociraptorAgente de punto final con artefactos de búsqueda del historial de dispositivos USB

Escenarios Comunes

Escenario 1: Filtración de Datos por un Empleado que se Va Extraer entradas de USBSTOR para identificar todos los dispositivos USB conectados alguna vez, correlacionar números de serie con MountPoints2 para confirmar el acceso del usuario, cotejar marcas de tiempo con registros de acceso a archivos y archivos recientes de Jump List, buscar patrones de copia de archivos grandes en el diario USN.

Escenario 2: Dispositivo no Autorizado en un Sistema Seguro Auditar todas las entradas de USBSTOR contra una lista de dispositivos aprobados, identificar dispositivos no autorizados por VID/PID que no coinciden con el hardware corporativo aprobado, determinar cuándo se conectó el dispositivo no autorizado por primera y última vez, verificar si se transfirió algún dato.

Escenario 3: Distribución de Malware a Través de USB Identificar el dispositivo USB conectado justo antes de la ejecución del malware (marcas de tiempo de Prefetch), extraer el serial del dispositivo e información del vendedor, verificar si el autoarranque estaba habilitado para el dispositivo, buscar lanzamiento de ejecutables desde la letra de unidad extraíble en Prefetch y ShimCache.

Escenario 4: Seguimiento de una Unidad USB Específica a Través de Múltiples Sistemas Buscar el mismo número de serie en USBSTOR en todas las imágenes forenses, construir un mapa de en qué sistemas se conectó la unidad y cuándo, identificar la ruta cronológica del dispositivo a través de la organización, correlacionar con registros de acceso a recursos compartidos de red.

Formato de Salida

Análisis del Historial de Dispositivos USB:
  Sistema: DESKTOP-ABC123 (Windows 10 Pro)
  Total de Dispositivos de Almacenamiento USB: 12
  Fuentes de Análisis: USBSTOR, MountedDevices, MountPoints2, SetupAPI, Registros de Eventos

  Inventario de Dispositivos:
    1. Kingston DataTraveler 3.0 (Serial: 0019E06B4521A2B0)
       Primera Conexión:  2024-01-10 09:15:32 (SetupAPI)
       Última Conexión:   2024-01-18 14:30:00 (USBSTOR)
       Letra de Unidad:   E:
       Acceso de Usuario: suspect_user (MountPoints2)

    2. WD My Passport (Serial: 575834314131363035)
       Primera Conexión:  2024-01-15 20:00:00
       Última Conexión:   2024-01-15 23:45:00
       Letra de Unidad:   F:
       Acceso de Usuario: suspect_user

  Hallazgos Sospechosos:
    - Unidad Kingston conectada 15 veces durante el período de investigación
    - WD Passport conectada solo una vez, al final de la tarde (horario inusual)
    - Dispositivo desconocido (VID_1234&PID_5678) conectado el 2024-01-17, ningún dispositivo aprobado coincide

  Línea de Tiempo: /cases/case-2024-001/analysis/usb_timeline.csv

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

abusing-dpapi-for-credential-access

Extract and decrypt Windows DPAPI-protected secrets (Credential Manager, browser logins/cookies, Wi-Fi credentials, KeePass keys) online or offline using SharpDPAPI, SharpChrome, Mimikatz, or Impacket

abusing-shadow-credentials-for-privesc

Take over Active Directory accounts by writing attacker-controlled public keys to msDS-KeyCredentialLink (Shadow Credentials) with pyWhisker, Whisker, or Certipy, then authenticate via PKINIT to recover the target

achieving-cmmc-level-2-compliance

>-

acquiring-disk-image-with-dd-and-dcfldd

Create forensically sound bit-for-bit disk images with dd or dcfldd on a Linux forensic workstation, preserving evidence integrity through hash verification (MD5/SHA) during acquisition. Use when imaging a suspect drive, USB device, or memory card for investigation, preserving volatile disk evidence during incident response, or producing a verified copy for legal or law-enforcement proceedings before any destructive analysis.

analyzing-active-directory-acl-abuse

Detect dangerous ACL misconfigurations in Active Directory using ldap3

analyzing-android-malware-with-apktool

Perform static analysis of Android APK malware using apktool for resource decompilation, jadx for Java source recovery, and androguard for manifest inspection, dangerous permission-combination detection, and identification of obfuscated code, dynamic code loading, and reflection-based API calls. Use to statically triage a suspicious APK without executing it or to build mobile malware detection rules.

analyzing-api-gateway-access-logs

Parses API Gateway access logs (AWS API Gateway, Kong, Nginx) to detect

analyzing-apt-group-with-mitre-navigator

Query ATT&CK data with attackcti, mitreattack-python, and stix2, then build MITRE ATT&CK Navigator layers and multi-layer heatmap overlays mapping one or more APT groups

analyzing-azure-activity-logs-for-threats

Queries Azure Monitor activity logs and sign-in logs via azure-monitor-query

analyzing-bootkit-and-rootkit-samples

Analyzes bootkit and advanced rootkit malware infecting the Master

analyzing-browser-forensics-with-hindsight

Parse Chromium-based browser databases with Hindsight to extract and correlate browsing history, downloads, cookies, cached content, autofill data, saved passwords, and extensions from Chrome, Edge, Brave, Opera, and Vivaldi into a unified timeline (XLSX, JSON, or SQLite output). Use during incident response, insider-threat investigations, or criminal cases when you need to reconstruct a user

analyzing-campaign-attribution-evidence

Systematically evaluate cyber-campaign evidence to attribute an operation to a threat actor, using the Diamond Model and Analysis of Competing Hypotheses (ACH) to weigh infrastructure overlaps, TTP consistency, malware code similarity, and timing/language artifacts into confidence-weighted attribution assessments. Use when an incident investigation needs a defensible attribution confidence level.

analyzing-certificate-transparency-for-phishing

Monitor Certificate Transparency logs using crt.sh and Certstream to

analyzing-cloud-storage-access-patterns

Detect abnormal access in AWS S3, GCS, and Azure Blob Storage by analyzing CloudTrail Data Events, GCS audit logs, and Azure Storage Analytics for after-hours bulk downloads, new-IP access, and API-call spikes (e.g. GetObject) via statistical baselines and time-series anomaly detection. Use when investigating suspected cloud data exfiltration or building related detection rules.

analyzing-cobalt-strike-beacon-configuration

Extract and analyze Cobalt Strike beacon configuration from PE files

analyzing-cobaltstrike-malleable-c2-profiles

Parse and analyze Cobalt Strike Malleable C2 profiles with dissect.cobaltstrike (profiles and beacon-payload configs) and pyMalleableC2 (AST parsing) to extract HTTP/DNS transforms, URIs, headers, sleep/jitter, and injection behavior, then generate network detection signatures. Use when reverse-engineering a captured malleable profile or building detections against Cobalt Strike Beacon traffic.

analyzing-command-and-control-communication

Analyzes malware C2 communication over HTTP, HTTPS, DNS, and custom

analyzing-cyber-kill-chain

Analyzes intrusion activity against the Lockheed Martin Cyber Kill Chain

analyzing-disk-image-with-autopsy

Perform comprehensive forensic analysis of raw (dd), E01, or AFF disk images with Autopsy and The Sleuth Kit, recovering deleted files, examining metadata and embedded artifacts, keyword searching, and building investigation timelines with visual reports. Use for structured analysis of a forensic disk image or when stakeholders need visual reports from evidence.

analyzing-dns-logs-for-exfiltration

Analyzes DNS query logs to detect data exfiltration via DNS tunneling,

Skills relacionados