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

02 - Atomic Red Team (Testes de TTPs)

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

Atomic Red Team (Testes de TTPs)

Nota da subpasta 03 - Ferramentas de Emulação e Purple Team, no Capítulo 24 (Ferramentas e Plataformas Atualizadas).
Trata do Atomic Red Team em profundidade: estrutura de atomics, execução com Invoke-AtomicRedTeam, cobertura por plataforma e integração em CI para validação de detecções.
Dialoga com a nota de Atomic Red Team do Capítulo 19, com Caldera, C2 frameworks e Temperance da mesma pasta e com o controle SIM.3 de exercícios purple team do Capítulo 15.

1. Contexto e Posicionamento na Biblioteca

O Atomic Red Team é a ferramenta de menor custo de entrada para validar detecções por técnica ATT&CK, e por isso é o ponto de partida natural de qualquer programa de purple teaming. Cada atomic é um teste pequeno, declarativo e independente: um YAML que descreve uma técnica com comandos por plataforma, argumentos, pré-requisitos e comando de limpeza. O operador executa o teste no host de teste, a telemetria chega ao SIEM, e a pergunta da rodada tem resposta em minutos: a detecção correspondente disparou ou não.

A nota aprofunda o conteúdo do Capítulo 19 em três direções. Primeiro, a anatomia completa de um atomic, porque ler e escrever YAML de atomic é habilidade que o time precisa dominar para adaptar testes ao laboratório. Segundo, a operação com o módulo PowerShell Invoke-AtomicRedTeam, com os parâmetros que controlam pré-requisitos, execução e log. Terceiro, a integração em CI, que transforma o teste manual em validação contínua, e o exemplo completo com verificação de telemetria que fecha o ciclo com o capítulo de detecção desta biblioteca.

2. Anatomia de um Atomic

O repositório do projeto organiza os atomics por técnica, um YAML por identifier ATT&CK, e cada arquivo carrega uma lista de testes independentes. Os campos que importam na prática são o nome do teste, as plataformas suportadas, os argumentos de entrada com valores padrão, os comandos de dependência, execução e limpeza, e o executor, que define o shell responsável. A leitura do YAML abaixo, derivado do repositório e ajustado para o laboratório, mostra a estrutura que o time deve saber editar com confiança.

attack_technique: T1053.005
display_name: Scheduled Task/Job - Scheduled Task
atomic_tests:
  - name: Criar tarefa agendada pelo schtasks
    auto_generated_guid: 4aa609d9-cb0d-4fd7-b1b1-3c1f9a2b9e10
    description: Cria tarefa agendada de teste env-diagnostics em host Windows
    supported_platforms:
      - windows
    input_arguments:
      task_name:
        description: Nome da tarefa de teste
        type: string
        default: env-diagnostics
    executor:
      name: command_prompt
      command: |
        schtasks /create /tn #{task_name} /tr "cmd.exe /c echo teste" /sc hourly
      cleanup_command: |
        schtasks /delete /tn #{task_name} /f

Três detalhes de engenharia fazem diferença na operação. O cleanup_command é obrigatório em qualquer atomic adaptado, porque resíduo de teste em host compartilhado é fonte de alerta fantasma e de desconfiança no resultado. Os input_arguments permitem que o mesmo teste sirva a vários laboratórios sem editar o YAML, mudando apenas os argumentos na chamada. E o campo de plataforma é o que o CI usa para decidir em qual runner o teste roda, motivo para mantê-lo exato.

3. Execução com Invoke-AtomicRedTeam

O módulo Invoke-AtomicRedTeam é o executor padrão em Windows e funciona igual em Linux e macOS com PowerShell instalado. O fluxo típico instala o módulo, inspeciona o teste, valida pré-requisitos, executa com log e limpa depois, e a sequência abaixo cobre o ciclo completo para o teste da seção anterior.

Install-Module -Name invoke-atomicredteam -Scope CurrentUser
Import-Module invoke-atomicredteam

# Inspecionar o teste antes de executar
Invoke-AtomicTest T1053.005 -ShowDetails

# Validar e instalar pre-requisitos
Invoke-AtomicTest T1053.005 -TestNumbers 1 -CheckPrereqs
Invoke-AtomicTest T1053.005 -TestNumbers 1 -GetPrereqs

# Executar com argumento customizado e log de execucao
Invoke-AtomicTest T1053.005 -TestNumbers 1 `
  -InputArgs @{"task_name" = "env-diagnostics"} `
  -ExecutionLogPath C:\lab\art-exec-log.json

# Limpar os artefatos do teste
Invoke-AtomicTest T1053.005 -TestNumbers 1 -Cleanup

O parâmetro de log de execução é o elo entre a metade ofensiva e a defensiva da avaliação: o registro contém técnica, teste, timestamp, host e comando executado, e é esse arquivo que permite cruzar com precisão cada evento do SIEM na janela da execução. A disciplina de rodar com log, mesmo na execução manual, evita a improvisação de evidência que contamina a ficha de resultado.

4. Cobertura por Plataforma

O repositório cobre as plataformas principais com profundidade desigual, e a tabela resume o quadro que orienta o planejamento de cobertura do programa.

Plataforma Cobertura do repositório Observação operacional
Windows Maior acervo, com Sysmon como base de telemetria Núcleo do programa na maioria dos ambientes
Linux Boa cobertura de execução, persistência e descoberta Auditing e eBPF como fontes de detecção
macOS Cobertura menor, focada em execução e persistência Útil quando o parque Mac é relevante
Cloud (Azure AD e IaaS) Testes de APIs e serviços de cloud Requer credenciais de teste e escopo rígido
Containers Testes pontuais de escape e execução Complemento para ambientes Kubernetes

A desigualdade de cobertura não é defeito, é instrução: o atomic cobre o que é seguro e replicável em teste, e as lacunas do acervo são preenchidas com atomics próprios, escritos no mesmo YAML e mantidos no repositório do time. A prática recomendada é manter uma pasta local de atomics customizados versionada junto com os planos de emulação do Temperance da pasta 04, de forma que o CI trate conteúdo próprio e público pelo mesmo fluxo.

5. Integração em CI

A integração em CI transforma a validação manual em contínua: o pipeline agenda a execução dos atomics em runners dedicados, com telemetria enviada ao SIEM de laboratório, e publica a ficha de resultado por técnica. O desenho abaixo mostra o job em sua forma mínima, com runner Windows e log de execução como artefato.

name: emulacao-atomics
on:
  schedule:
    - cron: "0 3 * * 1"
jobs:
  atomic-windows:
    runs-on: [self-hosted, windows, lab]
    steps:
      - uses: actions/checkout@v4
      - name: Executar atomics da rodada
        shell: pwsh
        run: |
          Import-Module invoke-atomicredteam
          Invoke-AtomicTest T1053.005 -TestNumbers 1 `
            -ExecutionLogPath C:\lab\art-T1053-005.json
          Invoke-AtomicTest T1053.005 -TestNumbers 1 -Cleanup
      - name: Publicar log de execucao
        uses: actions/upload-artifact@v4
        with:
          name: art-exec-log
          path: C:\lab\art-*.json

Três salvaguardas separam CI saudável de desastre. O runner é self-hosted dedicado ao laboratório, sem acesso a produção e com snapshot de restauração. O agendamento respeita a janela acordada com o time de detecção, porque execução fora da janela contamina correlações. E o backlog de gaps gerado pela rodada é triado antes da próxima execução, mantendo o ciclo do Capítulo 19 com donos e prazos.

6. Exemplo Completo com Verificação de Telemetria

O ciclo completo liga o atomic da seção 2 à detecção do capítulo de plataformas: a execução cria a tarefa agendada, o SIEM de laboratório recebe o evento de criação, e a consulta abaixo recupera o evento na janela da rodada, com o resultado classificado conforme o quadro de status do capítulo.

// Verificacao do atomic T1053.005 no SIEM de laboratorio
SecurityEvent
| where TimeGenerated between (datetime(2025-11-24 03:00) .. datetime(2025-11-24 04:00))
| where EventID == 4698
| where TaskName == "env-diagnostics"
| project TimeGenerated, Computer, SubjectUserName, TaskName, Command

A ficha de resultado do teste segue o padrão da biblioteca: técnica T1053.005, atomic executado com log anexado, evento 4698 presente no SIEM, alerta da regra correspondente ausente na primeira rodada, status só telemetria, gap registrado no backlog de regras e reexecução agendada após a implantação da regra. Na segunda rodada, com a regra ativa, o status muda para detectado, e a mudança de status entre rodadas é a métrica que prova o valor do programa.

O mesmo ciclo se repete por técnica na rodada, e o painel de cobertura por tática do Capítulo 18 é alimentado com os resultados agregados. Quando a técnica exige cadeia com contexto de C2, o teste passa do atomic para o Temperance ou para o Caldera, e a nota da pasta 01 desta subpasta descreve esse escalonamento de complexidade.

7. Erros Comuns e Pontos de Atenção

  • Executar atomics em host de produção por praticidade, o erro que encerra programas: o teste roda em host dedicado, com snapshot e cleanup.
  • Esquecer o cleanup e acumular tarefas agendadas, chaves e serviços de teste, gerando alertas fantasmas que ninguém consegue distinguir de ataque real.
  • Rodar sem log de execução e tentar reconstruir a evidência depois da consulta no SIEM; o log é a chave do cruzamento preciso.
  • Interpretar falta de alerta como falta de detecção sem verificar a telemetria; se o evento bruto não chegou, o gap é de coleta, e não de regra.
  • Adaptar atomics com credenciais reais ou dados de produção, violando o escopo do exercício; os argumentos de teste usam nomes e valores de laboratório.
  • Medir o programa por número de atomics executados em vez de por status resolvido; volume sem veredito é teatro de métrica.
  • Ignorar as plataformas secundárias do parque, deixando macOS e cloud sem qualquer validação; a cobertura segue o inventário de risco, e não o acervo do repositório.

8. Integração com o Restante da Biblioteca

Os atomics são o insumo mais barato para as fichas de emulação do Temperance da pasta 04, que referencia cada teste no step correspondente, e para as operações do Caldera da pasta 01, que podem invocar atomics por plugin. A detecção validada pelo atomic é escrita seguindo o capítulo de plataformas desta pasta, e a regra resultante entra no ciclo de DaC do Capítulo 18 com o link para o teste que a originou. O quadro de status da rodada alimenta as métricas do Capítulo 16 e a agenda de exercícios SIM.3 do Capítulo 15.

Para o hunting, o atomic tem papel inverso ao da detecção: ele planta o comportamento no laboratório para que o hunter valide consultas antes de rodá-las contra produção, prática descrita na nota de simulação de alertas com inputs controlados do Capítulo 18. O fechamento desta nota repete o princípio operacional do capítulo: o atomic é a unidade mínima de emulação, e o programa amadurece na ordem atomic, plano Temperance, operação Caldera, canal realista com C2, sempre com ficha de resultado versionada e gap com dono.