Principianteanálisis estáticotriagemetodologíaherramientaspestudioYARA

Análisis Estático de Malware: Herramientas y Metodología Paso a Paso

Guía completa de análisis estático de malware. Triage con strings/FLOSS/pestudio, análisis de PE/ELF headers, detección de packers, extracción de IOCs, YARA rules, y el workflow paso a paso que todo analista debe dominar antes del análisis dinámico.

MalwareIntel Research··9 min lectura
Serie: Entornos de Análisis — Parte 2

Antes de ejecutar: mira primero

El análisis estático es siempre el primer paso. Ejecutar una muestra sin examinarla es como abrir un paquete sospechoso sin inspeccionarlo. El análisis estático te dice qué tipo de malware es, qué capacidades tiene, si está empaquetado, y qué IOCs puedes extraer, todo sin riesgo de infección.

Este artículo es un workflow completo: desde que recibes una muestra hasta que tienes un informe de triage listo para decidir si necesitas análisis dinámico.

Workflow de análisis estático

Fase 1: identificación (2 minutos)

# 1. Calcular hashes
md5sum sample
sha256sum sample

# 2. Identificar tipo de archivo
file sample
# PE32 executable? ELF? PDF? Office document?

# 3. Buscar en VirusTotal
# Subir hash (no el archivo) primero
# Si tiene resultados: nombre de familia, detecciones, comportamiento
# Si no tiene: muestra posiblemente nueva/targeted

VirusTotal como primer paso: si 40 engines detectan la muestra como "Trojan.GenericKD", ya tienes una clasificación. Si 0 engines la detectan, puede ser una muestra nueva, custom, o un falso positivo. Ambos casos son interesantes.

Fase 2: strings (5 minutos)

Las strings son la fuente de información más rápida. Un solo comando puede revelar URLs de C2, mensajes de rescate, claves de registro, y rutas de archivos.

# Strings ASCII y Unicode
strings -a sample > strings_ascii.txt
strings -a -el sample > strings_unicode.txt

# FLOSS: strings ofuscadas (stack strings, decoded strings)
floss sample > strings_floss.txt

# Buscar patrones interesantes
grep -iE 'http[s]?://' strings_ascii.txt           # URLs
grep -iE '([0-9]{1,3}\.){3}[0-9]{1,3}' strings_ascii.txt  # IPs
grep -iE '\.exe|\.dll|\.bat|\.ps1' strings_ascii.txt       # Archivos
grep -iE 'password|passwd|login|token|key' strings_ascii.txt  # Credenciales
grep -iE 'HKLM|HKCU|CurrentVersion\\Run' strings_ascii.txt  # Registry
grep -iE 'cmd\.exe|powershell|wscript' strings_ascii.txt   # Ejecucion

Qué buscar en strings:

TipoEjemploSignificado
URLshttp://c2.example.com/gate.phpC2 server
IPs192.168.1.100:4444C2 IP y puerto
PathsC:\Users\Public\payload.exeUbicacion del payload
Registry keysSoftware\Microsoft\Windows\CurrentVersion\RunPersistencia
Comandoscmd.exe /c vssadmin delete shadowsRansomware pre-cifrado
MensajesYour files have been encryptedNota de rescate
MutexGlobal\MutexName123Mutex para evitar doble ejecucion
User-agentMozilla/5.0 (compatible; MSIE 10.0)Tráfico HTTP del malware
PDB pathC:\Users\dev\project\Release\rat.pdbPath de desarrollo
Base64Strings largas de caracteres alfanuméricosDatos codificados

Fase 3: headers y estructura (5 minutos)

PE (Windows)

# pestudio: herramienta visual, carga el PE y muestra todo
pestudio sample.exe

# O via linea de comando con pefile (Python)
python3 -c "
import pefile
pe = pefile.PE('sample.exe')
print(f'Compile time: {pe.FILE_HEADER.TimeDateStamp}')
print(f'Entry point: {hex(pe.OPTIONAL_HEADER.AddressOfEntryPoint)}')
print(f'Sections: {len(pe.sections)}')
for section in pe.sections:
    name = section.Name.decode().rstrip('\\x00')
    print(f'  {name}: entropy={section.get_entropy():.2f}, size={section.SizeOfRawData}')
print('Imports:')
for entry in pe.DIRECTORY_ENTRY_IMPORT:
    print(f'  {entry.dll.decode()}:')
    for imp in entry.imports[:5]:
        print(f'    {imp.name.decode() if imp.name else hex(imp.ordinal)}')
"

pestudio es la herramienta más eficiente para triage de PE. En una sola pantalla muestra: hashes, timestamp, imports sospechosas, strings marcadas, secciones con entropía, indicadores de malware, y score de riesgo.

ELF (Linux)

readelf -h sample           # ELF header
readelf -S sample           # Secciones
readelf --dyn-syms sample   # Imports dinamicos
checksec --file=sample      # Mitigaciones de seguridad

Fase 4: detección de packers (2 minutos)

# Detect It Easy (GUI o CLI)
diec sample

# Output ejemplo:
# PE32
# Compiler: Microsoft Visual C/C++(2019-2022)
# Packer: UPX(3.96)[NRV2E]
# Linker: Microsoft Linker(14.29)
ResultadoAcción
No packer detectadoProceder con análisis estático normal
UPX detectadoDesempaquetar con upx -d y re-analizar
Themida/VMProtectAnálisis dinámico obligatorio (unpacking manual complejo)
Packer desconocidoVerificar entropía. Si mayor a 7.0, probablemente packed
.NET con ConfuserExDeobfuscar con de4dot primero

Fase 5: CAPA (3 minutos)

CAPA de Mandiant detecta automáticamente capacidades del malware analizando las APIs importadas, strings y patrones de código:

capa sample

# Output ejemplo:
# +-----------------------------+-------------------------------------------+
# | ATT&CK Tactic               | ATT&CK Technique                         |
# |-----------------------------+-------------------------------------------|
# | DEFENSE EVASION              | Obfuscated Files or Information [T1027]   |
# | DISCOVERY                    | System Information Discovery [T1082]      |
# | COLLECTION                   | Input Capture: Keylogging [T1056.001]     |
# | COMMAND AND CONTROL          | Application Layer Protocol [T1071]        |
# | EXFILTRATION                 | Exfiltration Over C2 Channel [T1041]      |
# +-----------------------------+-------------------------------------------+
# 
# | Capability                   | Namespace                                 |
# |-----------------------------+-------------------------------------------|
# | receive data                 | communication                             |
# | send data                    | communication                             |
# | create process               | host-interaction/process                  |
# | write file                   | host-interaction/file-system              |
# | capture keyboard input       | collection/keylog                         |
# | encrypt data using AES       | data-manipulation/encryption              |
# +-----------------------------+-------------------------------------------+

CAPA mapea automáticamente a MITRE ATT&CK y proporciona una vista rápida de las capacidades sin necesidad de leer todo el disassembly.

Fase 6: extracción de IOCs (5 minutos)

Compilar todos los IOCs encontrados:

TipoValorFuente
SHA256abc123...Hash del sample
MD5def456...Hash del sample
C2 URLhttp://evil.com/gate.phpStrings
C2 IP192.168.1.100Strings
C2 Port4444Strings
MutexGlobal\MutexXYZStrings
Registry keyHKCU...\Run\UpdateServiceStrings
File droppedC:\Users\Public\svc.exeStrings
User-agentMozilla/5.0 ... MSIE 10Strings
PDB pathC:\dev\rat\Release\client.pdbDebug directory
Compile time2026-05-15 14:30:00PE header
PackerUPX 3.96DIE

Fase 7: clasificación y decisión

Con toda la información, clasificar:

ClasificaciónIndicadoresSiguiente paso
Malware conocidoVT tiene detecciones, familia identificadaDocumentar IOCs, buscar TTP en ATT&CK
Malware empaquetadoEntropía alta, pocas imports, packer detectadoDesempaquetar, re-analizar
Malware desconocido/nuevoVT sin resultados, imports sospechosasAnálisis dinámico en sandbox
Posible falso positivoVT con pocas detecciones, imports normalesAnálisis dinámico para confirmar
Documento maliciosoOffice/PDF con macros/scriptsolevba/oletools para extraer macro

Herramientas de análisis estático

Triage rápido

HerramientaOSUso principalCoste
pestudioWindowsTriage de PE: imports, strings, indicadoresGratuito
Detect It Easy (DIE)MultiPacker/compilador detectionGratuito
CAPAMultiDetección automática de capacidadesGratuito
FLOSSMultiStrings ofuscadas (stack strings)Gratuito
stringsMultiStrings ASCII/Unicode básicoBuilt-in
fileMultiIdentificación de tipo de archivoBuilt-in
ssdeepMultiFuzzy hashing (similitud entre muestras)Gratuito

Análisis profundo

HerramientaOSUso principalCoste
GhidraMultiDecompilación, análisis de códigoGratuito (NSA)
IDA ProMultiDecompilación (estándar de la industria)Comercial
radare2/rizinMultiRE framework CLIGratuito
Binary NinjaMultiDecompilación modernaComercial
x64dbg (estático)WindowsInspección de PE, patchingGratuito
CFF ExplorerWindowsEditor de PE headersGratuito
PE-bearMultiVisualización de estructura PEGratuito

Documentos maliciosos

HerramientaTipoUso
olevbaPythonExtraer y analizar macros VBA de Office
oleidPythonIdentificar características sospechosas en OLE
rtfobjPythonExtraer objetos OLE de RTF
pdfidPythonIdentificar elementos sospechosos en PDF
pdf-parserPythonAnalizar estructura de PDF
XLMMacroDeobfuscatorPythonDeobfuscar macros Excel 4.0 (XLM)

Análisis de .NET

HerramientaUso
dnSpy/dnSpyExDecompilación + debugging de .NET
ILSpyDecompilación de .NET
de4dotDeobfuscación de .NET
dotPeekDecompilación (JetBrains)

YARA: escribir reglas para detección

Regla básica

rule MyMalware_Detector {
    meta:
        description = "Detects MyMalware based on strings and imports"
        author = "MalwareIntel"
        date = "2026-05-21"
        hash = "abc123..."
    
    strings:
        $url = "http://c2.example.com/gate.php" ascii
        $mutex = "Global\\MutexXYZ" ascii wide
        $cmd = "vssadmin delete shadows" ascii nocase
        $mz = { 4D 5A }  // MZ header (hex)
    
    condition:
        $mz at 0 and (2 of ($url, $mutex, $cmd))
}

YARA con imports

import "pe"

rule Suspicious_PE_Imports {
    meta:
        description = "PE with injection-related imports"
    
    condition:
        pe.imports("kernel32.dll", "CreateRemoteThread") and
        pe.imports("kernel32.dll", "VirtualAllocEx") and
        pe.imports("kernel32.dll", "WriteProcessMemory")
}

Template de informe de triage

# Informe de Triage: [nombre_muestra]

## Identificación
- **SHA256**: [hash]
- **MD5**: [hash]
- **Tipo**: PE32/ELF/Office/PDF
- **Tamaño**: [bytes]
- **VT detecciones**: [X/Y]
- **Familia**: [si identificada]
- **Primera vista en VT**: [fecha]

## Análisis estático
- **Compilador**: [GCC/MSVC/Go/Rust/.NET]
- **Timestamp**: [fecha compilación]
- **Packer**: [UPX/Themida/ninguno]
- **Entropía**: [valor]
- **Arquitectura**: [x86/x64/ARM/MIPS]

## Capacidades (CAPA)
- [Lista de capacidades detectadas]
- [Mapeo ATT&CK]

## IOCs extraídos
| Tipo | Valor | Confianza |
|------|-------|-----------|
| C2 URL | ... | Alta |
| C2 IP | ... | Alta |
| Mutex | ... | Media |
| Registry | ... | Media |
| File | ... | Media |

## Strings relevantes
- [Strings más significativos]

## Clasificación
- **Tipo**: [RAT/Infostealer/Ransomware/Loader/Backdoor]
- **Riesgo**: [Critico/Alto/Medio/Bajo]
- **Siguiente paso**: [Análisis dinámico / Documentar / Escalar]

Mapeo MITRE ATT&CK

Técnica del analistaQué revela del malware
Hash lookup (VT)Familia, prevalencia, detecciones
Strings extractionC2, comportamiento, mensajes
Import analysisCapacidades (inyección, red, cifrado, persistencia)
Packer detectionEvasión, necesidad de unpacking
CAPA analysisMapeo automático a ATT&CK
PDB path analysisEntorno de desarrollo, atribución
Timestamp analysisTimeline, posible falsificación

Fuentes y referencias

Preguntas frecuentes

Artículos relacionados

Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.