O que Automação de Enriquecimento de IoCs faz?
Quando Usar
Use esta skill quando:
- Estiver construindo um playbook SOAR que enriquece automaticamente alertas SIEM com contexto de inteligência contra ameaças antes de encaminhá-los para analistas
- Criando um pipeline Python para enriquecimento em lote de IoCs a partir de submissões de phishing por e-mail
- Reduzindo o tempo médio de triagem (MTTT) do analista, pré-populando o contexto do alerta com dados de VT, Shodan e MISP
Não use esta skill para decisões de bloqueio totalmente automatizadas sem revisão humana — a automação de enriquecimento deve informar decisões, não executar bloqueios de forma autônoma para ações de alto impacto.
Pré-requisitos
- Plataforma SOAR (Cortex XSOAR, Splunk SOAR, Tines ou n8n) ou ambiente Python 3.9+
- Chaves de API: VirusTotal, AbuseIPDB, Shodan e no mínimo uma TIP (MISP ou OpenCTI)
- Endpoint de integração SIEM para consumo de alertas
- Orçamentos de limite de taxa documentados por API (VT: 4/min gratuita, 500/min empresarial)
Fluxo de Trabalho
Etapa 1: Projetar a Arquitetura do Pipeline de Enriquecimento
Defina o fluxo de enriquecimento para cada tipo de IoC:
Alerta SIEM → Extrair IoCs → Classificar Tipo → Rotear para funções de enriquecimento
Endereço IP → AbuseIPDB + Shodan + VirusTotal IP + MISP
Domínio → VirusTotal Domínio + PassiveTotal + Shodan + MISP
URL → URLScan.io + VirusTotal URL + Google Safe Browsing
Hash de Arquivo → VirusTotal Arquivos + MalwareBazaar + MISP
→ Agregar resultados → Calcular pontuação de confiança → Atualizar alerta → Notificar analista
Etapa 2: Implementar Funções de Enriquecimento em Python
import requests
import time
from dataclasses import dataclass, field
from typing import Optional
RATE_LIMIT_DELAY = 0.25 # 4 requisições/segundo para nível gratuito do VT
@dataclass
class EnrichmentResult:
ioc_value: str
ioc_type: str
vt_malicious: int = 0
vt_total: int = 0
abuse_confidence: int = 0
shodan_ports: list = field(default_factory=list)
misp_events: list = field(default_factory=list)
confidence_score: int = 0
def enrich_ip(ip: str, vt_key: str, abuse_key: str, shodan_key: str) -> EnrichmentResult:
result = EnrichmentResult(ip, "ip")
# Consulta IP no VirusTotal
vt_resp = requests.get(
f"https://www.virustotal.com/api/v3/ip_addresses/{ip}",
headers={"x-apikey": vt_key}
)
if vt_resp.status_code == 200:
stats = vt_resp.json()["data"]["attributes"]["last_analysis_stats"]
result.vt_malicious = stats.get("malicious", 0)
result.vt_total = sum(stats.values())
time.sleep(RATE_LIMIT_DELAY)
# AbuseIPDB
abuse_resp = requests.get(
"https://api.abuseipdb.com/api/v2/check",
headers={"Key": abuse_key, "Accept": "application/json"},
params={"ipAddress": ip, "maxAgeInDays": 90}
)
if abuse_resp.status_code == 200:
result.abuse_confidence = abuse_resp.json()["data"]["abuseConfidenceScore"]
# Calcular pontuação composta de confiança
result.confidence_score = min(
(result.vt_malicious / max(result.vt_total, 1)) * 60 +
(result.abuse_confidence / 100) * 40, 100
)
return result
def enrich_hash(sha256: str, vt_key: str) -> EnrichmentResult:
result = EnrichmentResult(sha256, "sha256")
vt_resp = requests.get(
f"https://www.virustotal.com/api/v3/files/{sha256}",
headers={"x-apikey": vt_key}
)
if vt_resp.status_code == 200:
stats = vt_resp.json()["data"]["attributes"]["last_analysis_stats"]
result.vt_malicious = stats.get("malicious", 0)
result.vt_total = sum(stats.values())
result.confidence_score = int((result.vt_malicious / max(result.vt_total, 1)) * 100)
return result
Etapa 3: Construir Playbook SOAR (Cortex XSOAR)
No Cortex XSOAR, crie um playbook de enriquecimento:
- Gatilho: Alerta criado no SIEM (via webhook ou polling)
- Extrair IoCs: Use a tarefa "Extrair Indicadores" com padrões regex para IP, domínio, URL, hash
- Enriquecimento paralelo: Distribua para múltiplas tarefas de enriquecimento simultaneamente
- Enriquecimento VT: Chame o comando
!vt-file-scanou!vt-ip-scan - Verificação AbuseIPDB: Chame o comando
!abuseipdb-check-ip - Consulta MISP: Chame o comando
!misp-searchpara referência cruzada - Agregação de pontuação: Tarefa de transformação Python calculando a pontuação composta
- Roteamento condicional: Se pontuação ≥70 → Fila de Alta Prioridade; se 40–69 → Média; <40 → Fechar automaticamente com nota
- Enriquecimento do alerta: Escreva os resultados do enriquecimento no contexto do alerta para visualização do analista
Etapa 4: Gerenciar Limitação de Taxa e Falhas
import time
from functools import wraps
def rate_limited(max_per_second):
min_interval = 1.0 / max_per_second
def decorator(func):
last_called = [0.0]
@wraps(func)
def wrapper(*args, **kwargs):
elapsed = time.time() - last_called[0]
wait = min_interval - elapsed
if wait > 0:
time.sleep(wait)
result = func(*args, **kwargs)
last_called[0] = time.time()
return result
return wrapper
return decorator
def retry_on_429(max_retries=3):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
for attempt in range(max_retries):
response = func(*args, **kwargs)
if response.status_code == 429:
retry_after = int(response.headers.get("Retry-After", 60))
time.sleep(retry_after)
else:
return response
return wrapper
return decorator
Etapa 5: Métricas e Ajuste
Acompanhe o desempenho do pipeline semanalmente:
- Latência do enriquecimento: Alvo <30 segundos do gatilho do alerta até a saída enriquecida
- Taxa de sucesso da API: Alvo >99% (identificar eventos de limite de taxa ou interrupção)
- Taxa de verdadeiro positivo: Acompanhe as substituições feitas pelos analistas das pontuações de confiança automatizadas
- Custo: Acompanhe o volume de chamadas de API contra o orçamento (VT Enterprise: $X por 1M consultas)
Conceitos Chave
| Termo | Definição |
|---|---|
| SOAR | Security Orchestration, Automation, and Response — plataforma para automatizar workflows de segurança e integrar ferramentas heterogêneas |
| Playbook de Enriquecimento | Sequência automatizada de workflow que adiciona inteligência contextual a eventos de segurança brutos |
| Limitação de Taxa | Restrições de frequência de requisições impostas pelo provedor da API (ex.: VT gratuito: 4 requisições/minuto); pipelines devem respeitar esses limites |
| Pontuação Composta de Confiança | Pontuação única que agrega sinais de múltiplas fontes de enriquecimento usando fórmula ponderada |
| Padrão de Fan-out | Execução paralela de múltiplas consultas de enriquecimento simultaneamente para minimizar a latência total do enriquecimento |
Ferramentas e Sistemas
- Cortex XSOAR (Palo Alto): SOAR empresarial com mais de 700 integrações no marketplace, incluindo VT, MISP, Shodan e AbuseIPDB
- Splunk SOAR (Phantom): Plataforma SOAR com playbooks baseados em Python; integração nativa com Splunk SIEM
- Tines: Plataforma SOAR no-code com automação orientada por webhook; custo-efetiva para equipes menores
- TheHive + Cortex: Plataforma de resposta a incidentes/enriquecimento open-source com enriquecimento de observáveis via analisadores Cortex
Armadilhas Comuns
- Bloqueio na latência do enriquecimento: Se o enriquecimento levar mais de 5 minutos, os analistas começarão a trabalhar em alertas não enriquecidos, derrotando o propósito. Defina limites de tempo limite e forneça resultados parciais.
- Sem cache: Consultar o mesmo IoC 50 vezes gera custos desnecessários de API. Armazene em cache os resultados do enriquecimento por 24 horas por padrão.
- Ignorar falhas de API silenciosamente: Chamadas de enriquecimento com falha devem ser registradas e acionar lógica de fallback, não produzir silenciosamente resultados vazios que parecem IoCs limpos.
- Automatizar bloqueios apenas com pontuação de enriquecimento: Pontuações compostas contêm falsos positivos; exija confirmação humana para decisões de bloqueio contra infraestrutura compartilhada.