Problema
Los investigadores que no forman parte de un SOC o de un equipo de threat intel a menudo se preguntan cómo conseguir muestras de malware “vivas” sin acceso a telemetría corporativa, correos de phishing internos o a la infraestructura de un gran proveedor. La falta de fuentes fiables lleva a depender de repositorios públicos, foros clandestinos o a intentar “cazar” servidores de comando y control (C2). Sin una metodología estructurada, el proceso se vuelve costoso en tiempo y riesgoso en términos de OPSEC.
Causa
- Dependencia de fuentes cerradas – Grandes empresas tienen sensores que capturan muestras automáticamente; los independientes no.
- Escasez de indicadores actualizados – Los IOCs publicados en informes pueden estar desactualizados o ser falsos positivos.
- Riesgo legal y de reputación – Acceder a foros de MaaS o a paneles de C2 sin autorización puede violar leyes y exponer al investigador.
- Falta de automatización – Sin scripts que consuman APIs de fuentes abiertas, la recolección manual es lenta y propensa a errores.
Solución
Una estrategia basada en OSINT estructurado + fuentes abiertas + automatización ligera permite obtener muestras de forma regular y segura.
1. Suscripción a feeds de indicadores públicos
- MalwareBazaar (bazaar.abuse.ch) ofrece una API REST que devuelve hashes, URLs y archivos cuando se marca como “malicious”.
- URLhaus (urlhaus.abuse.ch) publica URLs de distribución de malware y, a veces, binarios.
- VirusTotal (vt API) permite buscar por hash y descargar archivos cuando la cuenta lo permite.
- AbuseIPDB y OTX entregan IPs de C2 que pueden ser cruzados con otros feeds.
Mantener una lista de URLs de estos feeds y programar una descarga diaria con curl o wget garantiza que siempre se tenga la última tanda de indicadores.
2. Correlación de indicadores
Una vez obtenidos los hashes/URLs/IPs, el siguiente paso es filtrarlos:
- Descartar falsos positivos: comparar con listas de “goodware” (por ejemplo, hash de paquetes oficiales).
- Priorizar por frescura: usar el campo
first_seendel feed para enfocarse en muestras de menos de 48 h. - Enfocar por vector: si buscas ejecutables Windows, filtra por extensión
.exeo por PE header; si buscas scripts, busca.js,.vbs, etc.
Una pequeña base de datos SQLite o un archivo CSV es suficiente para almacenar los indicadores y sus metadatos.
3. Descarga controlada de muestras
No todos los indicadores son descargables directamente. Para los que sí:
- MalwareBazaar permite descargar el archivo mediante
GET /sample/<hash>. - URLhaus a veces provee el binario en la propia URL.
- VirusTotal permite descargar la muestra si la cuenta tiene privilegios de “download”.
Ejemplo de script Bash que itera sobre hashes y guarda los binarios en un directorio aislado:
#!/usr/bin/env bash
API_KEY="TU_API_KEY_MALWAREBAZAAR"
DEST="/opt/malware_samples"
mkdir -p "$DEST"
while read -r HASH; do
echo "Downloading $HASH ..."
curl -s -H "API-Key: $API_KEY" \
"https://mb-api.abuse.ch/api/v1/" \
-d "query=get_file&hash=$HASH" \
-o "$DEST/$HASH.bin"
sleep 1 # respetar rate limit
done < hashes_to_download.txt
4. Entorno de análisis aislado
Los archivos descargados deben ejecutarse en un sandbox que no comprometa la red de producción:
- Cuckoo Sandbox (Linux) o FireEye AX (si está disponible).
- Docker con
--network noneyseccomprestrictivo para binarios simples. - VMs sin conexión a internet, con snapshots listos para revertir.
5. Enriquecimiento de indicadores
Una vez la muestra está en el sandbox, extrae:
- Direcciones IP y dominios contactados.
- Persistencia (registros, servicios).
- Payloads (otros binarios, scripts).
Estos nuevos IOCs se retroalimentan al paso 1, cerrando el ciclo de inteligencia.
6. Compartir de forma responsable
Publicar los IOCs (pero no la muestra completa) en plataformas como MISP o GitHub Gist ayuda a la comunidad y reduce la probabilidad de “quemar” la infraestructura del atacante. Si el C2 pertenece a un APT, la divulgación de IPs suele ser aceptada siempre que se acompañe de evidencia y se notifique a los operadores del rango (por ejemplo, a través de CERT).
Cuándo aplicar esta solución
- Síntomas: Necesitas muestras frescas para pruebas de detección, pero no cuentas con telemetría interna.
- Entorno: Tienes acceso a una máquina Linux con capacidad de ejecutar contenedores o VMs.
- Limitaciones: No dispones de suscripciones pagas a feeds premium; solo cuentas con APIs gratuitas o de bajo coste.
No es adecuada cuando:
- Se requiere captura de malware que solo circula en redes internas específicas (ej. APT con C2 exclusivo a rangos internos).
- La legislación local prohíbe la descarga de ciertos tipos de binarios, incluso con fines de investigación.
Código
#!/usr/bin/env bash
# Script básico para actualizar indicadores y descargar muestras desde MalwareBazaar
API_KEY="TU_API_KEY"
DB_PATH="/opt/malware_intel/indicators.db"
SAMPLE_DIR="/opt/malware_samples"
mkdir -p "$SAMPLE_DIR"
# 1. Obtener últimos hashes (últimas 24h)
curl -s -H "API-Key: $API_KEY" \
-d "query=get_recent" \
"https://mb-api.abuse.ch/api/v1/" |
jq -r '.data[].sha256' > new_hashes.txt
# 2. Filtrar hashes ya descargados (SQLite)
sqlite3 "$DB_PATH" "CREATE TABLE IF NOT EXISTS samples(hash TEXT PRIMARY KEY);"
grep -vxFf <(sqlite3 "$DB_PATH" "SELECT hash FROM samples;") new_hashes.txt > to_download.txt
# 3. Descargar y registrar
while read -r H; do
curl -s -H "API-Key: $API_KEY" \
-d "query=get_file&hash=$H" \
"https://mb-api.abuse.ch/api/v1/" \
-o "$SAMPLE_DIR/$H.bin"
sqlite3 "$DB_PATH" "INSERT INTO samples(hash) VALUES('$H');"
sleep 1
done < to_download.txt
Verificación
- Integridad: Verifica que el hash del archivo descargado coincida con el hash del feed (
sha256sum $FILE). - Aislamiento: Ejecuta el binario en el sandbox y comprueba que la red está bloqueada (
tcpdump -i lo). - Enriquecimiento: Usa
stringsopeframepara confirmar que aparecen los IOCs esperados. - Persistencia: Revisa los logs del sandbox para asegurarte de que la muestra no escapó del entorno.
Notas adicionales
- Rate limits: La mayoría de los feeds imponen límites de peticiones (p.ej., 1 req/s). Usa
sleepo herramientas comoratelimitpara evitar bloqueos. - OPSEC: Nunca ejecutes muestras en tu máquina de trabajo; siempre usa entornos desechables y revierte snapshots después de cada análisis.
- Legalidad: En algunos países la descarga de malware está regulada. Mantén un registro de los hashes y la fuente para demostrar buena fe si fuera necesario.
- Automatización: Cronjobs diarios que ejecuten el script anterior son suficientes para mantener una base de muestras actualizada sin intervención manual.
- Colaboración: Unirse a grupos de MISP o a listas de correo de la comunidad (por ejemplo,
[email protected]) permite intercambiar IOCs sin exponerse a foros oscuros.