Análisis de Malware
ACCIÓN REQUERIDA (leer y ejecutar inmediatamente)
AHORA: Lee ../field-journal/precedent-reverse.md — confirma que la operación de este skill está autorizada como rutinaria
AHORA: Confirma si la tarea actual está dentro del alcance de este skill
SIGUIENTE: Lee ../tool-index.md, verifica la disponibilidad de herramientas y las rutas reales
SIGUIENTE: Si faltan herramientas, llama a bootstrap, no adivines rutas
ACTÚA: Entra al primer paso del "flujo de trabajo" y ejecuta, no te quedes en estado de confirmación
YARA / Sigma / Sandbox / Extracción de IOC / Anti-análisis
Estático + Dinámico + Comportamiento, todo en uno
Escenarios de Aplicación
- Análisis de muestras de malware (PE/ELF/Mach-O/APK/scripts)
- Escritura y validación de reglas YARA
- Generación de reglas de detección de comportamiento Sigma
- Orquestación automatizada de sandbox
- Extracción de IOC e inteligencia de amenazas
- Detección y evasión de técnicas anti-análisis
Flujo de Análisis de Seis Fases
Fase 1: Triaje Inicial
file sample.exe
strings sample.exe | grep -i "http\|cmd\|powershell\|base64"
rabin2 -zz sample.exe
floss sample.exe
pecheck sample.exe
pescan sample.exe
diec sample.exe
sha256sum sample.exe
Lista de verificación MUST de Triage (Issue #65):
□ Tipo de archivo: EXE / DLL / SYS / .NET / script(bat|ps1|vba) / otro
□ Arquitectura x86/x64/ARM; detectar packer (DIE etc.) y pistas de lenguaje de compilación
□ DLL/SYS: verificar tabla de importaciones y exportaciones en paralelo (ver Fase 2 regla estricta)
□ .NET: sin IAT tradicional → usar dnSpy/IL/metadatos como anclaje equivalente (ver Fase 2)
□ Script/Macro/DLL prioridad P0: ver cookbook nonpe-format-cookbook U–AV (E-batch-deobf / E-ps-decode / E-vba-pcode / E-dll-*)
Fase 1b: Desempaquetado y Reparación de IAT (si hay packer · Issue #65)
□ Sin packer / .NET → saltar a Fase 2
□ Con packer: intentar desempaquetar (entorno aislado autorizado) → intentar reparar IAT
- x86: ImportREC (o equivalente); x64: Scylla (o equivalente). Prohibido usar ImportREC en 64 bits
□ 【Regla de reparación de IAT】Priorizar reparación automática/semiautomática; si la herramienta da error o el archivo reparado no se ejecuta:
- Detener inmediatamente la reparación estática de IAT
- MUST registrar E-iat-repair-fail (comando, herramienta, fenómeno)
- Pasar a Fase 3 dinámica: puntos de interrupción en API (ej. bp CreateFile) / puntos de interrupción de hardware / búsqueda en memoria para capturar imports
- Esto no es saltarse la tabla de imports: la ruta se ha intentado y se ha registrado Evidence
□ 【Parche 6】Tras desempaquetar+reparar IAT, el programa crashea o pantalla azul (sospecha de CRC/autoverificación de tamaño):
- Abandonar la reparación estática del archivo; registrar E-self-check-crash o fusionar en E-iat-repair-fail
- Pasar a Fase 3: poner puntos de interrupción en CreateFile / GetFileSize / API relacionadas con hash
□ Viabilidad de instrucción del usuario (§0.5): Si el usuario insiste en "no desempaquetes, primero mira la tabla de imports" cuando hay packer → explicar bloqueo + solicitar confirmación; si fuerza, registrar quality=unreadable/packed, prohibido fingir que se ha completado un IAT significativo
□ Usuario solicita rehacer "reparación de IAT / revisión de tabla de imports": MUST rehacer los pasos señalados (o resultado de negociación previa confirmada), prohibido sustituir con pasos no relacionados
Fase 2: Análisis Estático
Descompilación/Desensamblado:
□ IDA Pro / Ghidra: descompilación profunda
□ radare2: análisis rápido por CLI
□ x64dbg: depurador GUI para Windows
Áreas de análisis clave:
□ Punto de entrada (Entry Point) → lógica de inicialización
□ Tabla de importaciones → inferencia de propósito de API (CreateRemoteThread=inyección, CryptEncrypt=ransomware)
**MUST (regla estricta)** : Ejecutar rabin2 -i / IDA imports / pecheck (comando equivalente), clasificar y resumir la tabla de importaciones en Evidence (E-imports) antes de pasar a Fase 3 (a menos que se haya registrado E-iat-repair-fail y se haya tomado la ruta dinámica alternativa, ver Fase 1b)
Clasificación cubre al menos: Red / Archivo / Cifrado / Inyección de procesos / Registro / Otras API sospechosas
Si el análisis falla o la tabla está vacía: MUST registrar la salida del fallo, prohibido saltar en silencio
**DLL/SYS**: MUST registrar en paralelo Evidence de tabla de exportaciones (E-exports, `rabin2 -E` o equivalente)
**.NET**: Sin IAT tradicional, MUST usar dnSpy/IL/metadatos/referencias de ensamblado y resumen de API sensibles como anclaje equivalente, escribir en ranuras semánticas E-imports / E-triage-imports
**Tabla de imports limpia**: Solo DLLs básicas, casi sin API de negocio → MUST anotar sospecha de carga dinámica (LoadLibrary/GetProcAddress), SHOULD pasar a Fase 3 para capturar API en memoria; si se ven características de resolución de hash → E-api-hash (Parche N)
**Cadenas anchas (T)** : Si ASCII strings no tiene IOCs, MUST probar UTF-16 (strings -el / IDA unicode)
**Firma (F)** : Con firma, MUST hacer SigCheck; firma falsa/revocada no reduce nivel de amenaza
Usuario solicita "rehacer revisión de tabla de imports": MUST rehacer este paso (si hay bloqueo, primero ir por la compuerta de viabilidad para negociar), prohibido cambiar a otros pasos para fingir finalización
**Combinaciones de API de alto riesgo (Parche 8)** : Si la tabla es muy larga, priorizar salida de combinaciones maliciosas (ej. FindWindow+WriteProcessMemory+CreateRemoteThread), filtrar ruido de llamadas base del sistema
□ Sección de recursos → Payload incrustado (sección .rsrc)
□ Tabla de cadenas → URL/C2/rutas de archivo/blob Base64
□ Callbacks TLS → se ejecutan antes de que arranque el depurador
Fase 3: Análisis Dinámico con Sandbox
Sandbox automatizados:
□ Joe Sandbox / ANY.RUN / Triage: sandbox comerciales
□ CAPE Sandbox: código abierto + integración YARA (recomendado)
□ ASD Azul: plataforma de análisis de malware de código abierto (nuevo en 2026)
□ Cuckoo Sandbox: código abierto clásico (reemplazado gradualmente por CAPE)
Rutina de inicio de depuración (Parches 7+10 · MUST en orden, depurador en modo usuario):
□ ① Punto de interrupción en callback TLS → ② Punto de interrupción en punto de entrada EP → ③ Puntos de interrupción en API sensibles → ④ Punto de interrupción de respaldo en ExitProcess/ruta de salida
□ Cuando se activa ExitProcess: no te apresures a reiniciar; haz dump de memoria inmediatamente, escribe la ruta en Evidence (Parche 10)
Puntos de monitoreo clave:
□ Creación de procesos: CreateProcess / ShellExecute
□ Operaciones de archivo: WriteFile → ¿Ransomware? DeleteFile → ¿Wiper?
□ Registro: Run/RunOnce persistencia
□ Red: HTTP/DNS → comunicación C2
□ Memoria: VirtualAllocEx → inyección de procesos
□ Servicios: CreateService → persistencia
□ Muestras con fallo de reparación de IAT / autoverificación que crashea: puntos de interrupción en API sensibles + CreateFile/GetFileSize / puntos de interrupción de ejecución por hardware / búsqueda en memoria
Rama de emergencia sin comportamiento (MUST):
□ El sandbox no muestra comportamiento, sale inmediatamente o tiene sleep infinito → comprobar anti-depuración/anti-VM (CPUID, temporizadores, características del entorno)
□ Intentar evasión con puntos de interrupción de hardware, parchear puntos de detección, o cambiar a máquina física/entorno de mayor fidelidad
□ Escribir "sin comportamiento + condiciones" en Evidence; prohibido escribir incondicionalmente como "muestra inofensiva"
Caja de tiempo (Parche 9 · SHOULD por defecto, se puede sobrescribir):
□ Tras ~15 minutos de análisis estático profundo sin ruta crítica → forzar entrada a esta Fase dinámica
□ Tras ~200 instrucciones de paso a paso dinámico sin pista maliciosa → forzar retorno a cadenas estáticas/referencias cruzadas para re-anclar
Derivación anti-depuración/ofuscación (Issue #65 A–T · ver recetario en reverse-engineering/anti-analysis.md):
□ P0: CPUID / RDTSC / PEB / NtQueryInformationProcess → registrar punto de detección, luego evadir en laboratorio o cambiar entorno (E-anti-debug-*)
□ P0: IAT limpio → resolución dinámica de hash de API (bp GetProcAddress, E-api-hash)
□ P0: strings vacío → rutina de descifrado de cadenas + cadenas anchas UTF-16 (E-string-decrypt / E-wide-strings)
□ P0: Firma sospechosa → SigCheck; inválida/revocada no reduce amenaza (E-sig-forge)
□ P1: Escaneo de nombre de proceso / VEH / int3·DR / secciones superpuestas / Overlay / .rsrc / Delay-Load
□ H/S: Aplanamiento de flujo y predicados opacos → ollvm-deobfuscation.md (no se replica el texto largo aquí)
□ Si la evasión falla, escribir Evidence; prohibido que salida por anti-depuración = muestra inofensiva
Parche para no-PE / scripts / DLL (Issue #65 U–AV · ver recetario en reverse-engineering/references/nonpe-format-cookbook.md):
□ bat/cmd: Reconstrucción por concatenación SET (U) → E-batch-deobf; BOM UTF-16 (V); inundación REM/GOTO (W)
□ PowerShell: Base64/Gzip multicapa (X) Evidence capa por capa; concatenación/inversión IEX (Z)
□ VBA: Stomping/P-Code (AA); Chr/Base64 (AB); macros auto-modificantes (AC)
□ DLL: TLS+DllMain (AJ); exportaciones anómalas/sin exportaciones (AK/AL); Delay-Load ver A–T R (AM); side-loading/reflexión (AO/AP)
□ JS/APK/driver: enrutar a js-reverse / apk-reverse / kernel-driver-reverse + cookbook, no se replica texto largo aquí
Fase 4: Escritura de Reglas YARA
// Estructura de regla
rule MalwareFamily_Example {
meta:
description = "Detecta la familia de malware Example"
author = "Analista"
date = "2026-05"
severity = "high"
hash = "d41d8cd98f00b204e9800998ecf8427e"
mitre_id = "T1055" // Process Injection
strings:
// Coincidencia de cadenas
$str1 = "C2_SERVER_URL" ascii wide
$str2 = "payload.dat" ascii
// Coincidencia hexadecimal
$hex1 = { 8B 45 ?? 50 FF 15 [4] 85 C0 }
// Secuencia de opcodes: mov eax, [ebp-?]; push eax; call [import]; test eax, eax
// Coincidencia regex
$re1 = /https?:\/\/[a-z0-9.-]+\/[a-z]{3,8}\.php/ ascii
condition:
// Condición combinada
uint16(0) == 0x5A4D and // Cabecera MZ
filesize < 500KB and
(2 of ($str*) or $hex1)
}
Fase 5: Generación de Reglas Sigma
title: Inyección de proceso sospechosa mediante CreateRemoteThread
id: 5a3d2c1b-1234-5678-9abc-def012345678
status: experimental
description: Detecta comportamiento de inyección de procesos usando CreateRemoteThread
author: Analista
date: 2026/05/25
tags:
- attack.t1055
- attack.t1055.001
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\powershell.exe'
CommandLine|contains:
- 'CreateRemoteThread'
- 'VirtualAllocEx'
- 'WriteProcessMemory'
condition: selection
falsepositives:
- Herramientas de depuración legítimas
level: high
Fase 6: Extracción de IOC e Inteligencia
Clasificación de tipos de IOC:
□ IOC de red:
- IP: Dirección C2 (tener en cuenta caducidad)
- Domain: Dominio generado por algoritmo DGA (rsnkfda.com, xpqmje.net)
- URL: Dirección de alojamiento de Payload
- User-Agent: Cadena UA personalizada
□ IOC de host:
- Ruta de archivo: %APPDATA%\Microsoft\Crypto\RSA\*.dat
- Registro: HKCU\Software\Microsoft\Windows\CurrentVersion\Run\
- Mutex: Global\{GUID} nombre de mutex
- Nombre de servicio: nombre que se hace pasar por servicio del sistema
□ IOC de comportamiento:
- ID de técnica MITRE ATT&CK (T1055, T1003, T1571...)
- Regla Sigma → Integración SIEM
- Regla YARA → Detección en endpoint
□ IOC estáticos:
- Marca de tiempo de compilación (puede ser falsa)
- Ruta PDB (contiene información del desarrollador)
- Anomalías en nombre de sección (no estándar .text/.data)
- Combinaciones anómalas en tabla de importaciones (ej. ransomware CryptEncrypt + DeleteShadowCopies)
Referencia Rápida de Técnicas Anti-Análisis
| Técnica | Método de Detección | Característica YARA |
|---|
| Detección de VM | WMI Win32_BIOS/VideoController/Processor | Cadena Win32_ + nombre de fabricante específico |
| Detección de sandbox | Disco < 60GB, RAM < 2GB, CPU mononúcleo | Patrón de llamada GlobalMemoryStatusEx |
| Detección de depurador | IsDebuggerPresent, CheckRemoteDebuggerPresent | Acceso al offset PEB.BeingDebugged |
| Evasión por temporizador | Sleep(300000) y luego ejecuta comportamiento malicioso | Parámetro largo en NtDelayExecution |
| Detección de geolocalización | Verifica distribución de teclado/zona horaria → excluye países CIS | Llamada a GetKeyboardLayoutList |
| Detección de proceso padre | explorer.exe vs cmd.exe | Comparación de cadena de nombre de proceso |
| Syscall directo de API | Evita hook de EDR | Instrucción syscall + resolución SSN |
Análisis Automatizado Multi-Agente (Arquitectura SentinelHive)
┌─────────────────────────────────────────────────┐
│ Hive Director │
│ (Claude Opus orquestación + arbitraje) │
└──────┬──────┬──────┬──────┬──────┬───────┘
│ │ │ │ │
┌───┘ ┌───┘ ┌───┘ ┌───┘ ┌───┘
▼ ▼ ▼ ▼ ▼ ▼
Triage RE Behav Intel Detect Remed
Triaje Ing. Compor. Intel. Detecc. Remedi.
rápido rev. dinám. t. reglas solución
estáti. amenaz YARA
co Sigma
Cadena de Herramientas
| Herramienta | Propósito | Obtención |
|---|
| Ghidra / IDA Pro | Descompilación profunda | ghidra-sre.org |
| CAPE Sandbox | Sandbox de malware de código abierto | GitHub: kevoreilly/CAPEv2 |
| ASD Azul | Análisis automatizado a gran escala | GitHub: ASD |
| YARA | Motor de reglas de coincidencia de patrones | pip install yara-python |
| Sigma | Reglas de detección de comportamiento SIEM | GitHub: SigmaHQ/sigma |
| FLOSS | Extracción de cadenas deofuscadas | pip install flare-floss |
| Detect It Easy | Detección de packer/compilador | GitHub: horsicq/Detect-It-Easy |
| pe-sieve | Escaneo de memoria de procesos | GitHub: hasherezade/pe-sieve |
| VirusTotal API | Escaneo multi-motor | virustotal.com |
| MalwareBazaar | Repositorio de muestras de malware | bazaar.abuse.ch |
Referencias
references/yara-sigma-rules.md — Metodología de escritura YARA + Sigma
references/sandbox-orchestration.md — Orquestación y automatización de sandbox
references/anti-analysis-techniques.md — Detección de 94 técnicas anti-análisis
../reverse-engineering/references/re-agent-workflow.md — Regla estricta de IAT y compuertas de seis fases (Issue #65)
../reverse-engineering/anti-analysis.md — Recetario de respuesta de agente A–T (derivación anti-depuración/ofuscación)
../reverse-engineering/references/nonpe-format-cookbook.md — Recetario para no-PE/múltiples formatos U–AV (scripts/macros/JS/driver/DLL/Android)
../reverse-engineering/references/ollvm-deobfuscation.md — Aplanamiento de flujo/predicados opacos (H/S)
Autocomprobación de Finalización de Tarea (MUST pasar antes de declarar finalizada)