02 - IntelForge (Multi-Agent LLM para Enriquecimento de CTI)
video: https://youtu.be/... no frontmatter da nota.IntelForge (Multi-Agent LLM para Enriquecimento de CTI)
Nota da pasta de LLMs do capítulo 17, dedicada à automação do ciclo de CTI.
Apresenta o IntelForge, arquitetura multi-agente que leva um indicador cru de um feed ou relato até um objeto enriquecido e pronto para o TIP.
Dialoga com a nota de CTI-LLM desta pasta, com o pipeline de coleta e enriquecimento da seção 02 do capítulo 2 e com a contextualização de indicadores da seção 03.
1. Contexto e Posicionamento na Biblioteca
O enriquecimento é a etapa em que um indicador bruto, um domínio solto em um feed, vira contexto acionável: de que infraestrutura faz parte, qual campanha o usou, qual a reputação, quais TTPs o cercam. A nota sobre enriquecimento automatizado da seção 09 do capítulo 9 mostra o caminho clássico com chamadas de API determinísticas, que funciona bem mas produz pouco contexto narrativo e não lê relatos não estruturados. O IntelForge propõe completar essa lacuna com uma arquitetura multi-agente, na qual modelos de linguagem especializados por papel colaboram para transformar matéria-prima difusa em inteligência estruturada e verificada.
A posição desta nota na pasta é intencional: o CTI-LLM concentrava várias tarefas em um modelo único, e o IntelForge divide o mesmo problema entre agentes com responsabilidades separadas, o que permite validar cada estágio de forma independente. O ganho central não é só automação, é a possibilidade de auditar o pipeline estágio por estágio, atribuindo a cada agente métricas próprias de qualidade e pontos de falha conhecidos.
2. A Arquitetura Multi-Agente e os Papéis dos Agentes
O desenho de referência organiza o trabalho em quatro papéis principais, cada um com instrução de sistema, ferramentas permitidas e formato de saída próprio. A separação de papéis segue o princípio de que um agente que extrai e o agente que verifica não podem ser o mesmo contexto de instrução, pois a verificação perde independência quando quem julga é quem produziu.
| Agente | Responsabilidade | Ferramentas típicas | Saída esperada |
|---|---|---|---|
| Coletor | Capturar matéria-prima de feeds, relatos, pastes e fóruns | Agregadores RSS, APIs de feeds, crawlers com regras TLP | Documento bruto catalogado com proveniência |
| Extrator | Recortar indicadores, TTPs, malware e contexto do texto | LLM de extração com schema JSON | Objetos candidatos com evidência textual |
| Verificador | Confirmar cada item contra a fonte e validar formato e reputação | Validação por schema, resolução DNS passiva, consultas VT e WHOIS | Item aceito, rejeitado ou pendente com justificativa |
| Escritor | Converter o item verificado em registro final enriquecido | Templates STIX 2.1, integração MISP e OpenCTI | Objeto de inteligência pronto para disseminação |
Além dos quatro papéis, implementações do tipo costumam incluir um coordenador leve, responsável por enfileirar documentos, controlar retrys e aplicar limites de custo, e por aplicar as regras de manuseio TLP do material que circula entre agentes. O coordenador não decide conteúdo, decide fluxo, e essa separação evita que a lógica de orquestração contamine o julgamento técnico dos papéis.
A escolha do modelo por papel também é decisão de arquitetura e não detalhe. O extrator exige compreensão densa de texto longo e se beneficia do modelo mais capaz disponível, enquanto o normalizador e o verificador sintático executam trabalho quase determinístico que um modelo pequeno local resolve com custo menor. Distribuir capacidade dessa forma, reservando o modelo grande para o papel que realmente precisa dele, costuma reduzir o custo total do pipeline em metade sem perda mensurável de qualidade, e permite que o papel crítico rode em modelo dedicado e versionado enquanto o resto usa instâncias compartilhadas.
3. Pipeline de Indicador Cru a Indicador Enriquecido
O pipeline completo transforma entrada difusa em saída estruturada em sete passos, cada um com dono claro e artefato verificável. A descrição abaixo serve de esqueleto para implementação, e os pontos de decisão humana ficam explícitos porque são o que sustenta a confiança no produto final.
Pipeline de enriquecimento IntelForge (visão de fluxo)
1. Coletor ingere o documento e grava {fonte, url, timestamp, tlp, hash}.
2. Extrator lê o texto e devolve candidatos em JSON, cada item com evidence.
3. Normalizador deduplica contra o TIP, aplica defang padrão e tipa os valores.
4. Verificador cruza cada candidato com a fonte original e valida sintaxe.
5. Verificador consulta enriquecimento externo: DNS passivo, WHOIS, reputação.
6. Escritor monta o objeto STIX com relações (indicator, relationship, observable).
7. Escritor grava no MISP ou OpenCTI e notifica o revisor humano da fila.
Dois detalhes do fluxo evitam os erros mais comuns de implementações apressadas. A deduplicação na etapa 3, antes da verificação, evita gastar tokens de inferência com itens já conhecidos no TIP, o que em feeds ruidosos representa a maioria. E a notificação do revisor humano na etapa 7 transforma o pipeline em fila assistida e não em gravadora automática, com o revisor podendo aprovar em lote os itens de baixo risco e inspecionar individualmente os marcados como pendentes pelo verificador.
O desenho do pipeline também define o contrato de dados entre estágios, e essa definição vale tanto quanto os prompts. Cada artefato que circula carrega um envelope com identificadores do documento de origem, versão do modelo e do prompt usados, carimbo de tempo e etiqueta TLP herdada, e qualquer estágio que produza saída precisa escrever esse envelope antes de enfileirar. Sem o envelope, a depuração de um item rejeitado exige reexecução manual de todo o caminho, e com ele a triagem de incidente de pipeline vira consulta a três campos. Times que implementam o envelope desde o primeiro dia instrumentam o painel de métricas da seção 5 sem esforço adicional, porque cada métrica é um agregado sobre campos do envelope.
4. Exemplo de Fluxo Completo com Resultado
O exemplo abaixo acompanha um indicador do ingest ao registro final, mostrando o que cada agente produz. O material é sintético e serve de gabarito para teste de regressão do pipeline, exercício que todo time deve rodar a cada mudança de prompt ou de modelo.
Entrada (post de blog de pesquisa, trecho):
"... a infraestrutura da campanha reutiliza o domínio cdn-stats[.]top,
que resolve para 203.0.113.77 e serve o loader assinado com o hash
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08.
A persistência é feita via tarefa agendada criada no primeiro boot."
Extrator (JSON):
{"iocs":[{"type":"domain","value":"cdn-stats[.]top",
"evidence":"a infraestrutura da campanha reutiliza o domínio"},
{"type":"ip","value":"203.0.113.77",
"evidence":"que resolve para 203.0.113.77"},
{"type":"sha256","value":"9f86d081...0f00a08",
"evidence":"loader assinado com o hash"}],
"techniques":[{"attck_id":"T1053.005","name":"Scheduled Task",
"evidence":"persistência via tarefa agendada"}]}
Verificador (resumo):
- domínio cdn-stats[.]top: sintaxe válida, evidence ok, TLD .top marcado
de risco, DNS passivo mostra 4 subdomínios históricos -> ACEITO
- ip 203.0.113.77: pertence à faixa de documentação RFC 5737 -> REJEITADO
(falso IOC de exemplo, típico de material didático)
- sha256: formato válido e hash não visto no TIP -> ACEITO
Escritor (registro final, resumido):
{"type":"indicator","pattern":"[domain-name:value = 'cdn-stats[.]top']",
"labels":["loader","campanha-cdn"],"tlp":"amber",
"confidence":70,"valid_until":"<data +90d>",
"relationship":"indicates T1053.005 Scheduled Task"}
O resultado ilustra o valor do verificador em ação: o IP de faixa de documentação, presente no texto de origem, seria um falso IOC permanente se o pipeline gravasse tudo que o extrator recorta. A rejeição com justificativa registrada também serve de rótulo de treino para melhorar o extrator no próximo ciclo, fechando o laço de melhoria contínua descrito na seção seguinte.
5. Avaliação de Qualidade do Produto
Avaliar um pipeline multi-agente exige medir cada estágio e o produto final, e não apenas a impressão de que está funcionando. As métricas abaixo formam o painel mínimo de qualidade, com responsável indicado e cadência sugerida de revisão semanal e mensal conforme o indicador.
| Métrica | O que mede | Referência saudável |
|---|---|---|
| Precisão do extrator | Proporção de candidatos confirmados pelo verificador | Acima de 0,90 com evidence obrigatória |
| Taxa de rejeição | Itens recusados pelo verificador por falta de suporte | Entre 2% e 8%, fora da faixa indica drift |
| Duplicidade evitada | Itens já presentes no TIP descartados antes da inferência | Alta em feeds maduros, esperado |
| Tempo de processamento | Minutos entre ingest e registro final | Alvo acordado com o SLA interno |
| Taxa de revisão humana | Itens aprovados sem inspeção individual | Deve cair com a maturidade, nunca chegar a 100% |
| Escalação correta | Pendências marcadas pelo verificador confirmadas pelo revisor | Acima de 0,70 para confiar na marcação |
| Cobertura de fontes | Proporção dos itens do feed que passou pelo pipeline | Acima de 0,95, lacuna indica falha de ingestão |
| Erro de tipo sintático | Itens com tipo declarado incompatível com o valor | Abaixo de 1% após a etapa de normalização |
A taxa de rejeição é a métrica mais diagnóstica das sete. Rejeição próxima de zero normalmente significa que o verificador está aprovando tudo, e não que o extrator ficou perfeito, sintoma clássico de prompt de verificação fraco. Rejeição acima de 15% sugere que o extrator alucina ou que a fonte está degradada, e a investigação começa pela amostra de rejeitados, que deve ser lida por humano toda semana com anotação da causa.
O painel só tem valor quando comparado a um baseline manual medido antes da automação, e esse é o ponto que os projetos costumam pular. Antes de ligar o pipeline, o time deve medir por uma semana quantos indicadores o processo manual extrai por hora de analista, com qual taxa de erro revisada e com qual custo de enriquecimento externo por item. As mesmas amostras passam pelo pipeline e os dois conjuntos de números entram no mesmo slide para a liderança, o que transforma a discussão de adoção em decisão sobre dados e não sobre entusiasmo com a tecnologia.
6. Risco de Alucinação e Mitigações
A alucinação em enriquecimento tem formatos específicos e é diferente do erro comum de digitação. O modelo pode inventar um subdomínio plausível que não existe no texto, atribuir a campanha errada por similaridade de nomes, gerar um hash que parece válido ou descrever uma infraestrutura agregando fatos de relatos diferentes sem marcar a fusão. Cada formato exige mitigação própria, e a tabela abaixo consolida as defesas que provaram funcionar em operação.
| Formato de alucinação | Mitigação primária | Defesa de apoio |
|---|---|---|
| Indicador não presente na fonte | Evidence obrigatória citável e conferida | Busca textual automática da evidence no original |
| Relação inventada entre itens | Schema com campo de relação e revisão de arestas | Grafo no TIP para inspeção visual |
| Contexto emprestado de outra campanha | Contexto por documento, sem cross-doc no mesmo prompt | Verificador sinaliza fusão não declarada |
| Hash ou IP malformado plausível | Validação sintática por tipo antes do enriquecimento | Lista de prefixos e faixas reservadas |
| Confiança sem base | Campo confidence com rubrica escrita no prompt | Revisor humana audita amostra de alta confiança |
A mitigação estrutural mais eficaz é o desenho da verificação como papel independente com contexto limitado: o verificador recebe o item candidato, a evidence e o trecho original, e o prompt exige julgamento de suporte textual antes de qualquer consulta externa. Quando o mesmo modelo e o mesmo prompt fazem extração e verificação em sequência dentro de um único contexto, a taxa de autoconfirmação sobe e a verificação vira formalidade, o que é pior do que não verificar porque cria falsa sensação de controle.
O gabarito de prompt do verificador abaixo mostra as três perguntas que toda verificação responde em ordem fixa, com decisão terminológica padronizada para que as métricas da seção 5 sejam comparáveis ao longo do tempo.
Sistema (verificador): para cada candidato, responda em ordem:
1. SINTAXE: o valor é sintaticamente válido para o tipo declarado?
2. SUPORTE: a evidence citada existe no trecho original e sustenta o item?
3. VEREDITO: ACEITO (suporte pleno), PENDENTE (suporte parcial ou
ambiguidade) ou REJEITADO (sem suporte ou malformado).
Devolva JSON {"value","type","syntax","support","verdict","reason"}.
Regras: não consulte conhecimento externo antes do item 2; nunca
reescreva o valor; REJEITADO exige reason com a frase exata do original
que deveria sustentar o item e não sustenta.
7. Erros Comuns e Pontos de Atenção
- Automatizar a gravação sem fila humana: o produto enriquecido precisa de revisão proporcional ao risco do uso, e feed automático direto no bloco de firewall replica erro de extração em escala.
- Orquestrar com prompts entrelaçados: agente que herda o contexto completo do anterior deixa de ser independente; cada papel deve receber apenas o necessário ao seu julgamento.
- Ignorar TLP no fluxo: material de fórum pode ser verde e o enriquecimento com fontes comerciais pode restringir redistribuição; a etiqueta acompanha o item de ponta a ponta.
- Medir custo só em tokens: o custo real inclui chamadas de API de reputação, retenção de logs e horas de revisão; orçamento por documento evita surpresa no fim do mês.
- Deixar o verificador se autoaprovar: prompts de verificação precisam de teste adversarial periódico, com candidatos envenenados de propósito no ambiente de teste.
- Esquecer a expiração: todo indicador entra com valid_until, porque enriquecimento sem ciclo de vida vira acúmulo de falsos positivos antigos, problema já tratado na nota de ciclo de vida da seção 03.
- Rodar verificação e extração no mesmo serviço sem isolamento: falha de fila ou reinício derruba os dois papéis ao mesmo tempo, e a fila de revisão fica cega exatamente quando há volume anômalo, o cenário em que o pipeline mais importa.
- Revisar em lote sem amostragem: aprovar tudo de baixo risco de uma vez só é aceitável quando há auditoria amostral posterior; sem a amostra semanal auditada, o lote vira ponto cego permanente do controle de qualidade.
- Atualizar modelo sem rodar o gabarito do exemplo da seção 4: qualquer troca de versão precisa do teste de regressão completo, pois a nova versão pode passar no agregado e falhar exatamente nos casos de rejeição que sustentam o controle.
- Consultar enriquecimento externo sem cache: reputação de hash e WHOIS não mudam em minutos, e repetir a chamada por cada tentativa multiplica custo e latência sem ganho de qualidade.
- Usar o mesmo limite de contexto para todos os papéis: o extrator precisa de janela grande para o relato inteiro, e o verificador trabalha melhor com trecho curto, item e evidence, janela grande demais dilui a atenção da verificação.
- Tratar o revisor humano como gargalo a eliminar: a fila assistida é o controle de qualidade do produto, e a meta de projeto é reduzir o custo por revisão com boa marcação de pendências, nunca reduzir a revisão a zero.
8. Integração com o Restante da Biblioteca
O registro final do IntelForge entra no TIP pelo mesmo caminho do pipeline clássico da seção 08 do capítulo 2, com a diferença de chegar já classificado, relacionado e com evidência auditável, o que melhora a pontuação de qualidade discutida na nota de scoring de IOCs. As TTPs extraídas alimentam o controle CTI.6 do grupo ANA do framework CTH e as hipóteses de hunt do grupo HNT, e as relações montadas no grafo dão matéria-prima direta para o agrupamento de campanhas da seção 01 do capítulo 5.
Nas notas seguintes da pasta, o foco estreita da inteligência estruturada para a detecção: LLMCloudHunter converte relatos cloud em consultas de hunting nos logs de AWS, Azure e GCP, e a nota de Sigma generaliza a geração de regras com validação automatizada. A sequência deliberada é do dado ao julgamento, do indicador à detecção, e o IntelForge é o estágio que garante que as etapas seguintes partam de inteligência verificada e não de texto cru.