Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

05 - PRT.5 - Detecção de Ameaças com YARA e Regras Personalizadas

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

PRT.5 - Detecção de Ameaças com YARA e Regras Personalizadas

Nota do grupo PRT (Defesa em Profundidade) do Framework CTH, derivada do capítulo 7, seção 7.5 (PRT.5.1 a PRT.5.5), do PDF de referência.
Regras personalizadas convertem inteligência de ameaças em detecção acionável antes que os fornecedores atualizem assinaturas.
A nota cobre o YARA e seus pontos de execução, a anatomia de uma regra, boas práticas de escrita, o ciclo de vida de regras derivadas de CTI, integração com sandboxes e varredura programada e o vínculo com PRT.4 e SIM.4.

1. Contexto e Posicionamento no Framework CTH

Ferramentas comerciais de segurança se apoiam em assinaturas e detecções genéricas, essenciais para o volume, mas estruturalmente lentas para ameaças direcionadas. Quando a CTI identifica um malware novo usado por um grupo relevante para o setor, a organização precisa de um caminho rápido para transformar aquele relatório em detecção própria, em horas e não em semanas. PRT.5 estabelece esse caminho, com repositório versionado de regras YARA e Sigma, processo de desenvolvimento com SLA definido e, no nível avançado, automação de implantação com métricas de eficácia.

O controle é a ponte mais direta entre os dois lados do Framework CTH. De um lado chegam IOCs, TTPs e relatórios de campanha do CTI.x; do outro saem regras que executam nos endpoints de PRT.1, nos uploads do PRT.3, nas imagens do PRT.4 e nas consultas do SIEM do DAT.4. Um programa que coleciona relatórios de inteligência sem converter nada em detecção tem intel de leitura, não de operação, e PRT.5 existe para eliminar exatamente essa lacuna.

2. O que é YARA e Onde Ele Roda

YARA é a linguagem padrão da indústria para descrever e detectar padrões em arquivos e memória, combinando strings, sequências de bytes, expressões regulares e condições lógicas. Uma regra YARA é texto simples, legível por humano e executável por máquina, o que a torna o formato de escolha para compartilhar capacidades de detecção entre equipes e com a comunidade. O Sigma complementa o YARA no domínio dos logs, oferecendo formato genérico de regra convertível em consultas para diferentes plataformas de SIEM, e os dois juntos cobrem o espectro de detecção personalizada descrito no PDF de referência.

O valor do YARA vem da variedade de pontos onde as mesmas regras executam, listados abaixo.

  • Varredura de arquivos em disco, de forma pontual ou programada, em estações, servidores e compartilhamentos de rede.
  • Memória de processos, para encontrar ferramentas carregadas sem arquivo em disco, como implants e loaders desempacotados.
  • Pipeline de gateways de e-mail, verificando anexos e conteúdo decodificado antes da entrega.
  • Saída de sandboxes e de análise automática, onde amostras dinâmicas são varridas por regras da organização.
  • Produtos de EDR e de segurança que aceitam regras YARA personalizadas, estendendo a detecção do fornecedor.
  • Extração de arquivos da telemetria de rede do PRT.2 e uploads capturados na borda web do PRT.3.

Essa ubiquidade explica por que o repositório de regras é um ativo central e não um diretório qualquer. As mesmas regras devem rodar no pipeline de e-mail, nos scans programados de servidores e no motor de runtime do PRT.4, com versionamento único e estado declarado por regra.

3. Anatomia de uma Regra YARA

Uma regra YARA tem três blocos principais. O bloco meta carrega metadados de governança, como autor, data, origem e estado. O bloco strings declara os padrões a buscar, em texto, bytes curingados ou expressões regulares. O bloco condition define a lógica que decide se o objeto casa, combinando os padrões com atributos como tamanho e tipo de arquivo. O exemplo abaixo é uma regra realista e comentada para uma família genérica de loader, escrita a partir de artefatos analisados em sandbox.

/*
  Regra ilustrativa: loader generico com instalacao de servico e
  persistencia em Run. A combinacao de pelo menos tres marcadores
  independentes reduz falso positivo, e o limite de tamanho evita
  casar com instaladores legítimos grandes e empacotados.
*/
rule Generic_Loader_Service_Run_Persistence
{
    meta:
        author = "Equipe de CTI"
        date = "2025-06-10"
        description = "Loader generico com criacao de servico e persistencia em Run"
        reference = "Relatorio interno de campanha CTI 2025-06"
        confidence = "media"
        status = "teste"

    strings:
        $dos_header = { 4D 5A 90 00 }               // assinatura MZ de PE
        $cria_servico = "CreateServiceA" ascii      // instalacao como servico
        $run_key = "Software\\Microsoft\\Windows\\CurrentVersion\\Run" ascii nocase
        $alloc_exec = "VirtualAlloc" ascii          // alocacao de memoria executavel
        $beacon_uri = "POST /gate.php" ascii        // rota de C2 observada

    condition:
        $dos_header at 0 and filesize < 2MB and
        3 of ($cria_servico, $run_key, $alloc_exec, $beacon_uri)
}

Três decisões nessa regra ilustram o que separa uma regra profissional de um experimento. A âncora no header MZ restringe o casamento a executáveis, o limiar de três marcadores independentes exige convergência de evidências em vez de um único padrão fraco, e os metadados registram origem e estado para que o repositório tenha história. Cada campo de meta é preenchido com disciplina, pois é dele que o pipeline de automação e as revisões periódicas vão se alimentar.

4. Boas Práticas de Escrita

Performance é o primeiro critério profissional, porque regras rodam em produção contra volumes grandes de arquivos e memória. Condições de tamanho e de header devem vir primeiro, para descartar rapidamente objetos irrelevantes; expressões regulares amplas e laços custosos devem ser evitados; e o uso de módulos externos deve ser consciente. Uma regra que demora segundos por arquivo inviabiliza a varredura programada de um servidor de arquivos, e o time passa a desligar o scan por falta de planejamento, e não por falta de valor.

O segundo critério é especificidade. Strings genéricas, como mensagens padrão de compilador, nomes comuns de API ou frases de interface, casam com milhares de binários legítimos e inundam a fila de falsos positivos. A prática recomendada é combinar vários sinais fracos, cada um escolhido por estar presente na amostra maliciosa e raro no corpus limpo, e testar o resultado contra os dois lados. O versionamento completo o ciclo: toda regra nasce em estado de teste, promove a produção após validação e se aposenta com registro, nunca é editada silenciosamente.

Prática Justificativa Erro correspondente
Ancorar em header e tamanho cedo Descarta arquivos irrelevantes em microssegundos Condição genérica varrendo todo arquivo inteiro
Combinar múltiplos sinais fracos Convergência de evidências reduz falso positivo Uma string única e comum casando com tudo
Testar contra corpus limpo e malicioso Mede taxa real de verdadeiro e falso positivo Validar só contra a amostra que originou a regra
Versionar em Git com estados Rastreia origem, mudança e aposentadoria Edição manual em produção sem histórico
Documentar origem e confiança no meta Sustenta revisão e auditoria da regra Regra sem contexto, impossível de julgar depois
Limitar expressões regulares Protege performance de produção Regex ampla e recursiva travando o scan

5. Ciclo de Vida de Regras Derivadas de CTI

O fluxo padrão começa em um relatório de campanha ou em um artefato interno. A equipe de CTI extrai strings, hashes, rotas e comportamentos das amostras, muitas vezes apoiada em sandbox e em desempacotamento manual, e seleciona os padrões estáveis, aqueles que sobrevivem a pequenas recompilações do autor do malware. A regra é escrita, validada contra corpus limpo e contra amostras conhecidas, e só então entra em deploy, com estado de teste inicial e observação da taxa de falso positivo antes da promoção. Cada etapa é registrada no repositório, transformando o histórico de Git em evidência do processo.

O PRT.5.4 define o tempo máximo desse fluxo para ameaças ativas: quatro horas para regras YARA de alta prioridade, quando há ameaça ativa contra a organização, e vinte e quatro horas para as regras Sigma correspondentes no SIEM. O SLA é exequível apenas se o pipeline estiver ensaiado, com templates de regra, corpus de teste preparado e caminho de deploy conhecido. A métrica de tempo entre publicação do relatório e regra em produção é um dos indicadores mais honestos de maturidade de um programa de CTI aplicada.

O fechamento do ciclo é o feedback. Toda regra em produção acumula estatísticas de casamentos, falsos positivos e aposentadorias, que voltam para o CTI.9 e orientam tanto a escrita de novas regras quanto a decisão de manter ou reformular padrões. Regras derivadas de campanhas encerradas precisam de revisão agendada, pois infraestrutura e binários envelhecem rápido.

6. Integração com VT, Sandboxes e Varredura Programada

Serviços de análise de malware multiplicam o alcance do repositório de regras. No VirusTotal, a função de retrohunt executa o conjunto de regras contra o histórico de amostras da plataforma, recuperando famílias relacionadas e variantes anteriores à campanha, e a função de monitoramento contínuo alerta quando novos arquivos casam com as regras da organização. Esses retornos alimentam o CTI.4 com novos artefatos, que podem gerar novas regras, fechando um ciclo produtivo entre inteligência e detecção.

Sandboxes internas e contratadas devem executar o repositório da organização sobre cada amostra analisada, anexando os casamentos ao relatório dinâmico. A varredura programada completa a cobertura, conforme ilustrado nos comandos abaixo, com atenção explícita a performance e registro de resultado.

# Varredura recursiva programada de servidor de arquivos com limite de tempo por regra
yara -r -w -p 60 /opt/yara/rules/index.yar /mnt/fileserver/compartilhamentos 2>>/var/log/yara-scan.log

# index.yar organiza o repositorio com includes por campanha e estado
# include "producao/familias_do_setor.yar"
# include "producao/ferramentas_adversario.yar"
# include "teste/campanha_2025_06.yar"

As opções do comando merecem comentário: o modo recursivo cobre a árvore de diretórios, o limite de tempo por regra protege a janela de execução contra regras custosas, e o log de saída deve ser ingerido pelo SIEM, e não revisado manualmente, para que casamentos gerem casos com contexto de host e horário. O repositório de índices separa explicitamente produção e teste, evitando que regras em estado de teste rodem em varreduras críticas sem supervisão.

7. Limitações Técnicas

Ofuscação e empacotamento são a primeira limitação estrutural do YARA. Malware empacotado com binários únicos por amostra, strings criptografadas em tempo de execução e payloads gerados dinamicamente não deixam padrões estáveis para casar, e uma regra escrita contra a amostra empacotada tende a casar apenas com ela mesma. A mitigação profissional é escrever contra o payload desempacotado, obtido em sandbox ou em dump de memória, e focar em lógica e configuração, que o autor raramente regenera em cada build.

Malware exclusivamente em memória é a segunda limitação, pois não há arquivo para varrer, e a detecção depende de varredura de memória de processos, disponível apenas em alguns pontos de execução. Falsos positivos em binários legítimos, por sua vez, são inevitáveis em escala: instaladores empacotados, binários de sistema com strings suspeitas e aplicações comerciais com padrões parecidos com os do adversário exigem corpus limpo amplo e revisão contínua. A tabela do PDF de referência resume o ajuste de expectativa: YARA é forte para amostras e ferramentas de adversário e fraco para TTPs e comunicação de C2, domínios onde o Sigma e a detecção de rede de PRT.2 são os veículos corretos.

A divisão de trabalho entre as duas linguagens deve ser explícita no plano de detecção da organização, conforme o resumo abaixo.

Alvo da detecção YARA em arquivos e bytes Sigma em logs e eventos
Amostras de malware Alta, por strings, bytes e headers Não aplicável
Técnicas de ataque (ATT&CK) Baixa, dependente de artefatos de arquivo Alta, por eventos de log
Ferramentas de adversário Alta, por padrões de binário e configuração Média, por nome de processo e hash
Comunicação de C2 Baixa, restrita às amostras capturadas Alta, por logs de rede e DNS
Abuso de credenciais Não aplicável Alta, por eventos de login e tokens

O resumo evita dois erros opostos de engenharia de detecção: tentar expressar comportamento de ataque em regras de arquivo, quebrando a cada mudança do adversário, e tentar identificar uma família de malware por nome de processo, sinal trivialmente falsificável. Escolher o veículo certo é metade do trabalho de detecção personalizada.

8. Relação com PRT.4 e com Simulação (SIM.4)

Em ambientes cloud-native, o repositório de YARA ganha novos pontos de execução. Imagens de container podem ser varridas em busca de ferramentas de adversário e webshells antes do deploy, o pipeline de CI pode validar artefatos gerados, e o runtime do PRT.4 pode executar regras sobre arquivos extraídos de containers suspeitos. A mesma disciplina de versão, teste e estado aplica-se, e a integração com o scanning de imagem do PRT.4.4 é direta: vulnerabilidades são uma lista, ferramentas de adversário embutidas são outra, e ambas devem bloquear no admission.

O vínculo com o SIM.4 fecha o ciclo de validação. O teste de detecção de IOCs e IOAs executa amostras e comportamentos controlados em ambientes de teste, verificando se a regra dispara na ferramenta correta, no tempo esperado e com o alerta que o SOC sabe triar. Uma regra aprovada no laboratório mas silenciosa na produção é um risco invisível que só o SIM.4 revela, e cada simulação deve atualizar o estado das regras testadas no repositório.

9. Salvaguardas por Nível de Maturidade

As salvaguardas de PRT.5 seguem os três níveis cumulativos do Framework, conforme a tabela consolidada abaixo.

Nível Salvaguarda Critério de verificação
Básico PRT.5.1: repositório centralizado de YARA e Sigma em Git, com estrutura e documentação padrão Estados de produção, teste e aposentada separados; cada regra com origem e data
Básico PRT.5.2: conjunto de regras de referência para ameaças relevantes e ferramentas conhecidas Regras para famílias do setor e ferramentas como Cobalt Strike, Mimikatz e PsExec testadas
Intermediário PRT.5.3: regras Sigma por TTP do ATT&CK convertidas para o SIEM e validadas contra histórico Conversão via sigmac; taxa de detecção e falso positivo medidas antes de ativar
Intermediário PRT.5.4: SLA de desenvolvimento para ameaças ativas YARA em 4 horas e Sigma em 24 horas para ameaças ativas, com medição
Avançado PRT.5.5: pipeline de conversão, validação e implantação automatizada com métricas por regra CI/CD valida sintaxe e teste, implanta no SIEM e nos scanners, e mede eficácia

A verificação deve incluir auditoria amostral do repositório, conferindo se metadados, estados e resultados de teste correspondem à realidade. Métricas úteis são o número de regras em produção, a taxa de falso positivo por regra, o número de verdadeiros positivos gerados por mês e o tempo médio entre relatório de CTI e regra em produção.

10. Erros Comuns e Pontos de Atenção

O erro mais frequente é acumular regras sem ciclo de vida. Regras escritas para uma campanha de dois anos atrás seguem em produção casando com falsos positivos, e ninguém se lembra da origem porque o meta nunca foi preenchido. O repositório precisa de revisão periódica com aposentadoria formal, e a automação de PRT.5.5 existe também para impor essa higiene de forma mecânica.

Completam a lista de falhas recorrentes os itens abaixo.

  • Regras genéricas demais, com strings comuns que casam com binários legítimos e desacreditam o canal de alertas.
  • Validação apenas contra a amostra de origem, sem corpus limpo, descobrindo falsos positivos em produção.
  • Expressões regulares custosas em varreduras de produção, tornando os scans inviáveis e desligados por pressão operacional.
  • Regras editadas direto no scanner, sem Git, destruindo o histórico e a possibilidade de revisão.
  • Dependência de um único ponto de execução, como só o EDR, deixando e-mail, compartilhamentos e imagens sem cobertura.
  • Publicação de regras com contexto sensível da organização em canais públicos, sem passar pela contra-inteligência do CTI.10.
  • Confusão entre ferramentas, tentando detectar TTP e C2 com YARA onde o veículo correto é Sigma no SIEM ou telemetria de rede.

11. Integração com Outros Controles do Framework CTH

PRT.5 é o estágio final do ciclo entre inteligência e detecção que atravessa o Framework. As fontes do CTI.3 e do CTI.4 alimentam a escrita, o CTI.5 normaliza os indicadores, e o repositório de regras entrega a capacidade para o PRT.1 executar scans, o PRT.2 filtrar arquivos extraídos, o PRT.3 inspecionar uploads e o PRT.4 varrer imagens. As regras Sigma do mesmo repositório sustentam a detecção no SIEM do DAT.4 e alimentam as hipóteses de busca baseada em IOC e IOA do TH.10.

Na verificação, o SIM.4 executa os testes que comprovam a eficácia das regras em produção, e o SIM.5 mede a cobertura resultante por técnica. As métricas de eficácia por regra alimentam o MET.x, e a governança do repositório, com revisões e aposentadorias, integra a rotina do GOV. O resultado esperado é um programa em que cada relatório de inteligência relevante se converte, dentro de horas, em detecção testada, implantada e medida.