Análisis de Indicadores de Compromiso
Cuándo Usarlo
Utiliza este skill cuando:
- Un correo de phishing o alerta genere IOCs (URLs, direcciones IP, hashes de archivos) que requieran triaje rápido
- Los feeds automatizados entreguen IOCs en lote que necesiten puntuación de confianza antes de su ingesta en controles de bloqueo
- Una investigación de incidentes requiera enriquecimiento contextual de artefactos de red observados
No uses este skill de forma aislada para decisiones de bloqueo de alto riesgo; combina siempre el enriquecimiento automatizado con el juicio del analista, especialmente en infraestructura compartida (CDNs, proveedores de nube).
Requisitos Previos
- Clave API de VirusTotal (gratuita o Enterprise) para consultas multi-AV y sandbox
- Clave API de AbuseIPDB para comprobaciones de reputación de IP
- Instancia de MISP o TIP para referencias cruzadas contra campañas conocidas
- Python con las bibliotecas
requestsyvt-py, o plataforma SOAR con conectores predefinidos
Flujo de Trabajo
Paso 1: Normalizar y Clasificar Tipos de IOC
Antes de enriquecer, clasifica cada IOC:
- Dirección IPv4/IPv6: Verificar si es privada RFC 1918 (omitir enriquecimiento externo), validar formato
- Dominio/FQDN: Desarmar para manejo seguro (
evil[.]com), extraer dominio registrado mediante tldextract - URL: Extraer dominio + ruta por separado; verificar redireccionadores
- Hash de archivo: Identificar tipo de hash (MD5/SHA-1/SHA-256); preferir SHA-256 por unicidad
- Dirección de correo: Dividir en dominio (verificar MX/DMARC) y parte local para análisis de patrones
Desarma los IOCs en la documentación (reemplaza . con [.] y :// con [://]) para evitar clics accidentales.
Paso 2: Enriquecimiento Multi-Fuente
VirusTotal (hash de archivo, URL, IP, dominio):
import vt
client = vt.Client("TU_CLAVE_API_VT")
# Consulta de hash de archivo
file_obj = client.get_object(f"/files/{sha256_hash}")
detections = file_obj.last_analysis_stats
print(f"Malicioso: {detections['malicious']}/{sum(detections.values())}")
# Análisis de dominio
domain_obj = client.get_object(f"/domains/{dominio}")
print(domain_obj.last_analysis_stats)
print(domain_obj.reputation)
client.close()
AbuseIPDB (direcciones IP):
import requests
response = requests.get(
"https://api.abuseipdb.com/api/v2/check",
headers={"Key": "TU_CLAVE", "Accept": "application/json"},
params={"ipAddress": "1.2.3.4", "maxAgeInDays": 90}
)
data = response.json()["data"]
print(f"Confianza: {data['abuseConfidenceScore']}%, Reportes: {data['totalReports']}")
MalwareBazaar (hashes de archivos):
response = requests.post(
"https://mb-api.abuse.ch/api/v1/",
data={"query": "get_info", "hash": sha256_hash}
)
result = response.json()
if result["query_status"] == "ok":
print(result["data"][0]["tags"], result["data"][0]["signature"])
Paso 3: Contextualizar con Atribución de Campaña
Consulta MISP para eventos existentes que coincidan con el IOC:
from pymisp import PyMISP
misp = PyMISP("https://misp.example.com", "CLAVE_API")
results = misp.search(value="dominio-malicioso.com", type_attribute="domain")
for event in results:
print(event["Event"]["info"], event["Event"]["threat_level_id"])
Consulta Shodan para contexto de IP (proveedor de alojamiento, puertos abiertos, banners) para identificar si la IP pertenece a un hosting a prueba de balas o un proveedor de nube legítimo (riesgo de falso positivo).
Paso 4: Asignar Puntuación de Confianza y Disposición
Aplica un marco de decisión por niveles:
- Bloquear (Alta Confianza ≥ 70%): ≥15 detecciones AV en VT, puntuación AbuseIPDB ≥70, coincide con familia de malware o campaña conocida
- Monitorear/Alertar (Media 40–69%): 5–14 detecciones AV, puntuación moderate AbuseIPDB, sin atribución de campaña
- Lista blanca/Investigar (Baja <40%): ≤4 detecciones AV, sin reportes de abuso, servicio legítimo (IPs de CDN de Google, Cloudflare)
- Falso Positivo: Servicio empresarial legítimo incorrectamente marcado; documentar y excluir de futuras alertas
Paso 5: Documentar y Distribuir
Registra los hallazgos en TIP/MISP con:
- Todos los datos de enriquecimiento recopilados (marcas de tiempo, fuente, puntuación)
- Decisión de disposición y justificación
- Acciones de bloqueo tomadas (firewall, proxy, sumidero DNS)
- Número de ticket de incidente relacionado
Exportar como objeto indicador STIX con el campo de confianza configurado adecuadamente.
Conceptos Clave
| Término | Definición |
|---|---|
| IOC | Indicador de Compromiso: artefacto observable de red o host que indica posible compromiso |
| Enriquecimiento | Proceso de añadir datos contextuales a un IOC en bruto desde múltiples fuentes de inteligencia |
| Desarmado (Defanging) | Modificación de IOCs (reemplazo de . por [.]) para evitar activación accidental en documentación |
| Tasa de Falsos Positivos | Porcentaje de artefactos benignos incorrectamente marcados como maliciosos; crítico para ajustar umbrales de bloqueo |
| Sumidero (Sinkhole) | Servidor DNS que redirige consultas de dominios maliciosos a una IP benigna para detección sin bloquear el tráfico por completo |
| TTL | Tiempo de vida para un IOC en controles de bloqueo; los indicadores IP deben caducar tras 30 días, los dominios tras 90 días |
Herramientas y Sistemas
- VirusTotal: Escáner de malware multi-motor y plataforma de inteligencia de amenazas con más de 70 motores AV, informes de sandbox y comentarios de la comunidad
- AbuseIPDB: Base de datos de reputación de IP mantenida por la comunidad con historial de reportes de abuso de 90 días
- MalwareBazaar (abuse.ch): Repositorio gratuito de hashes de malware con asociaciones de reglas YARA y etiquetado de familias de malware
- URLScan.io: Servicio gratuito de análisis de URLs que captura capturas de pantalla, DOM y solicitudes de red para triaje de URLs de phishing
- Shodan: Datos de escaneo a nivel global que proporcionan información del proveedor de alojamiento, puertos abiertos y banners para enriquecimiento de IP
Errores Comunes
- Bloquear infraestructura compartida: Las IPs de CDN (Cloudflare 104.21.x.x, AWS CloudFront) pueden alojar legítimamente contenido malicioso, pero bloquear la IP interrumpe miles de sitios legítimos.
- Obsesión por la puntuación de VT: Un recuento bajo de detecciones en VT no significa benigno: el malware de día cero y las herramientas APT personalizadas a menudo obtienen 0 inicialmente. Verifica el comportamiento en sandbox, MISP y DNS pasivo.
- Falta de desarmado: Pegar IOCs vivos en correos electrónicos o documentos de Confluence puede activar escáneres automáticos de URLs o herramientas de phishing.
- Sin política de caducidad: Los IOCs sin TTL se acumulan indefinidamente en listas de bloqueo, generando falsos positivos a medida que la infraestructura es reutilizada por usuarios legítimos.
- Dependencia excesiva de una sola fuente: VirusTotal agrega opiniones de AV; todas pueden estar equivocadas o retrasadas respecto al malware emergente. Usa 3+ fuentes independientes para decisiones de alto riesgo.