PrincipianteAnalisis EstaticoIOCsHerramientasYARAguia practica

Como Extraer IOCs de Malware con Analisis Estatico: Guia Practica

Guia paso a paso para extraer Indicadores de Compromiso (IOCs) de muestras de malware usando analisis estatico. Hashes, strings, IPs, dominios, registry keys y mutex con herramientas gratuitas.

MalwareIntel Research··6 min lectura
Serie: Guías de Herramientas — Parte 10

Por Que Extraer IOCs de Malware

Cuando un equipo de respuesta a incidentes recibe una muestra de malware, una de las primeras tareas es extraer sus Indicadores de Compromiso (IOCs): los hashes, IPs, dominios, registry keys y otros artifacts que permiten detectar esa misma amenaza en otros sistemas.

El analisis estatico (sin ejecutar el malware) es el primer paso porque es rapido, seguro y reproducible. No necesitas un sandbox, no hay riesgo de infeccion, y los resultados son deterministas.

En esta guia cubrimos el flujo completo: desde generar el hash hasta construir una regla YARA.

Antes de Empezar: El Entorno

Nunca analices malware en tu maquina de trabajo. Usa:

  • REMnux: distribucion Linux especializada en analisis de malware (basada en Ubuntu)
  • FlareVM: entorno Windows con herramientas de analisis preinstaladas
  • VM aislada: cualquier VM sin acceso a red de produccion

Haz un snapshot antes de empezar. Si algo sale mal, restauras en segundos.

Paso 1: Generar Hashes del Archivo

Lo primero es obtener los hashes criptograficos. Son la huella digital unica del sample.

# Linux / macOS
md5sum sample.exe
sha1sum sample.exe
sha256sum sample.exe

# O todos a la vez
file sample.exe && md5sum sample.exe && sha256sum sample.exe

En Windows, HashMyFiles (Nirsoft) permite arrastrar y soltar archivos para obtener MD5, SHA1 y SHA256 simultaneamente.

Que hacer con el hash:

  1. Buscar en VirusTotal antes de analizar mas. Si ya esta reportado, tendras contexto inmediato
  2. Buscar en MalwareIntel via IOC Lookup para ver si pertenece a una familia conocida
  3. Documentar el hash como primer IOC del analisis

Los hashes estan en la base de la Piramide del Dolor: son triviales de cambiar para el atacante (basta recompilar), pero son esenciales para el tracking inicial.

Paso 2: Extraer Strings

Los strings son cadenas de texto legibles embebidas en el binario. Aqui es donde encuentras IPs de C2, URLs de descarga, rutas de archivos, y mutex names.

Herramientas

Sysinternals Strings (Windows):

strings.exe -n 6 sample.exe > strings_output.txt

GNU strings (Linux):

strings -n 6 sample.exe > strings_output.txt

FLOSS (FireEye Labs Obfuscated String Solver): extrae strings ofuscados que strings no detecta:

floss sample.exe > floss_output.txt

Filtrar IOCs de los Strings

Los strings en bruto contienen mucho ruido. Filtra por patrones:

IPs (IPv4):

grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' strings_output.txt | sort -u

Dominios/FQDNs:

grep -oE '[a-zA-Z0-9][-a-zA-Z0-9]*\.(com|net|org|io|ru|cn|top|xyz|tk|info|cc)' strings_output.txt | sort -u

URLs:

grep -oE 'https?://[^ "]+' strings_output.txt | sort -u

Registry keys:

grep -iE 'HKEY_|HKLM|HKCU|CurrentVersion\\Run' strings_output.txt

File paths de Windows:

grep -iE 'C:\\|%APPDATA%|%TEMP%|\\Users\\' strings_output.txt

Mutex names:

# Los mutex suelen tener nombres unicos y aparecen junto a CreateMutex
grep -i 'mutex\|Global\\' strings_output.txt

Usando pev para Red

La suite pev tiene un modulo especifico para extraer indicadores de red:

pestr --net sample.exe

Esto extrae IPs, dominios y URLs directamente, sin necesidad de regex manual.

Paso 3: Analizar la Cabecera PE

La cabecera PE (Portable Executable) contiene metadata valiosa:

# Con pev
readpe sample.exe

# Con Python pefile
python3 -c "
import pefile
pe = pefile.PE('sample.exe')
print(f'Compile time: {pe.FILE_HEADER.TimeDateStamp}')
print(f'Sections: {[s.Name.decode().strip(chr(0)) for s in pe.sections]}')
print(f'Imports: {[e.dll.decode() for e in pe.DIRECTORY_ENTRY_IMPORT]}')
"

Que buscar:

CampoQue indica
Timestamp compilacionCuando se compilo (puede estar falsificado)
Secciones con nombres rarosPackers o protectores (UPX, Themida)
Imports sospechososVirtualAlloc, CreateRemoteThread, WriteProcessMemory = injection
Ratio entropia altaContenido cifrado o empaquetado
Resources con PE embebidoDropper con payload dentro

Paso 4: Clasificar los IOCs Extraidos

No todos los IOCs tienen el mismo valor. Clasifica segun la Piramide del Dolor:

IOC extraidoTipoPain levelAccion
SHA256 del sampleHashTrivialBlocklist + buscar en VT
IP 185.x.x.x contactadaIPTrivialBloquear en firewall (24-72h)
evil-domain.topDominioManejableBloquear + PDNS historico
/update.php?id=Network artifactDisruptivoRegla IDS/IPS
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\svchostRegistryDisruptivoRegla EDR
Global\MutexRAT2026MutexDisruptivoDeteccion en memoria

Paso 5: Construir una Regla YARA

Con los strings significativos, construye una regla YARA para detectar variantes de la misma familia:

rule MalwareFamily_Example {
    meta:
        author = "TuEquipo"
        description = "Detecta variantes de ExampleRAT"
        date = "2026-06-02"
        hash = "a1b2c3d4..."

    strings:
        $mutex = "Global\\MutexRAT2026"
        $c2_pattern = "/update.php?id="
        $registry = "CurrentVersion\\Run\\svchost"
        $user_agent = "Mozilla/4.0 (compatible; MSIE 6.0)"

    condition:
        uint16(0) == 0x5A4D and   // Es un PE
        2 of ($mutex, $c2_pattern, $registry, $user_agent)
}

Una regla YARA esta en la cima de la utilidad: detecta toda la familia, no solo un sample. Es un IOC computado que persiste incluso cuando el atacante recompila.

Paso 6: Documentar y Compartir

Estructura tu reporte de IOCs para que sea accionable:

# IOC Report: ExampleRAT
## Hashes
- SHA256: a1b2c3d4...
- MD5: e5f6g7h8...

## Network
- C2: 185.x.x.x:443
- C2 domain: evil-domain.top
- URI pattern: /update.php?id={`<base64>`}
- User-Agent: Mozilla/4.0 (compatible; MSIE 6.0)

## Host
- Mutex: Global\MutexRAT2026
- Persistence: HKCU\...\Run\svchost
- Drop path: %APPDATA%\Microsoft\svchost.exe

## YARA Rule
[adjuntar regla]

## MITRE ATT&CK
- T1566.001 Spearphishing Attachment (vector)
- T1055 Process Injection (ejecucion)
- T1547.001 Registry Run Keys (persistencia)
- T1071.001 Web Protocols (C2)

Herramientas Recomendadas (Todas Gratuitas)

HerramientaUsoPlataforma
HashMyFilesGenerar hashesWindows
Sysinternals StringsExtraer stringsWindows
FLOSSStrings ofuscadosCross-platform
pev (pestr, readpe)Analisis PE + redLinux
YARACrear reglas deteccionCross-platform
MalwareIntel ToolsHash generator, IOC lookupWeb (navegador)
VirusTotalVerificar hashes y URLsWeb
REMnuxEntorno analisis completoLinux VM

Limitaciones del Analisis Estatico

El analisis estatico no lo ve todo:

  • Malware empaquetado/ofuscado: strings estan cifrados, necesitas desempaquetar primero
  • Carga dinamica: DLLs descargadas en runtime no aparecen en imports estaticos
  • Configuracion remota: C2 IPs pueden descargarse del servidor, no estar hardcoded
  • Anti-analisis: algunos samples detectan VMs y cambian comportamiento

Para estos casos, necesitas analisis dinamico (sandbox): ejecutar el sample en entorno controlado y observar su comportamiento real. Pero el estatico sigue siendo el punto de partida esencial.


Nota de seguridad: Nunca subas muestras que contengan informacion corporativa confidencial a plataformas publicas como VirusTotal. Los samples subidos quedan disponibles para otros investigadores. Si necesitas analisis privado, usa un sandbox local o un servicio con retencion de datos controlada.

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.