Planejamento de cenários, rastreabilidade MITRE ATT&CK e cadeia de custódia de evidências para laboratórios reproduzíveis.
Um bom exercício ofensivo precisa mostrar mais que comandos: escopo, hipótese, técnica, evidência, resultado e limpeza. O Red Team Lab transforma esses elementos em um fluxo verificável e versionável.
O MVP oferece:
- cenários declarativos em YAML;
- validação de alvos restritos a loopback, redes privadas e domínios reservados de laboratório;
- técnicas no formato MITRE ATT&CK (
T1234ouT1234.001); - plano Markdown com SHA-256 do cenário de origem;
- diário append-only em NDJSON;
- SHA-256 de cada evidência registrada;
- acompanhamento do último estado de cada etapa.
- exportação de achados confirmados para um projeto RedReport completo.
- layer JSON compatível com ATT&CK Navigator 5.3.2 / formato 4.5;
- dashboard HTML offline com cobertura e status por tática.
- pacotes de evidência assinados com Ed25519 e verificáveis offline.
flowchart LR
A[Scenario YAML] --> B[Scope and schema validation]
B --> C[Execution plan]
C --> D[Lab activity]
D --> E[Evidence file]
E --> F[SHA-256 journal]
F --> G[RedReport]
git clone https://github.com/guuszz/redteam-lab.git
cd redteam-lab
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
python -m pip install -e ".[dev]"rtl validate scenarios/web-foothold.ymlVALID: web-foothold-lab (4 steps)
rtl plan scenarios/web-foothold.yml --output reports/generated/web-foothold-plan.mdO plano inclui sequência, objetivo, ATT&CK ID, evidência esperada, cleanup, condições de parada e hash do YAML.
rtl record scenarios/web-foothold.yml \
--step service-discovery \
--status passed \
--evidence evidence/discovery-output.txt \
--note "Serviços do fixture catalogados"Estados aceitos: passed, failed, blocked e skipped.
rtl status scenarios/web-foothold.ymlservice-discovery passed
web-enumeration pending
controlled-access pending
evidence-package pending
Depois de registrar como passed uma etapa que contém o bloco finding:
rtl export redreport scenarios/web-foothold.yml \
--journal evidence/runs/journal.ndjson \
--output reports/generated/redreport-project \
--client "Portfolio Lab" \
--start-date 2026-08-10 \
--end-date 2026-08-10
redreport validate reports/generated/redreport-project
redreport build reports/generated/redreport-projectO exportador copia as evidências, preserva o SHA-256 no finding e gera report.yaml e findings/RTL-NNN.yaml no schema nativo do RedReport.
rtl export navigator scenarios/web-foothold.yml \
--journal evidence/runs/journal.ndjson \
--output reports/generated/web-foothold-layer.jsonAbra o arquivo JSON em ATT&CK Navigator. Cada técnica recebe cor, score, status, objetivo e link oficial. O gerador utiliza o formato de layer 4.5 com Navigator 5.3.2 e Enterprise ATT&CK 19.2.
| Estado | Score | Cor |
|---|---|---|
passed |
100 | verde |
failed |
65 | vermelho |
blocked |
40 | âmbar |
skipped |
20 | cinza |
pending |
0 | azul escuro |
rtl dashboard scenarios/web-foothold.yml \
--journal evidence/runs/journal.ndjson \
--output reports/generated/dashboard.htmlO dashboard é um único arquivo HTML, sem JavaScript ou dependências externas. Ele mostra cobertura concluída, contagem por status, escopo e cartões agrupados por tática.
rtl keygen \
--private-key .rtl/private.pem \
--public-key .rtl/public.pemA CLI retorna o fingerprint SHA-256 da chave pública. A chave privada utiliza PKCS#8 PEM e deve permanecer fora do repositório.
rtl seal scenarios/web-foothold.yml \
--journal evidence/runs/journal.ndjson \
--output reports/generated/sealed-package \
--private-key .rtl/private.pem
rtl verify reports/generated/sealed-package/manifest.json \
--public-key .rtl/public.pemO pacote contém:
sealed-package/
├── manifest.json # manifesto canônico + assinatura Ed25519
├── journal.ndjson # cópia portátil com caminhos relativos
└── artifacts/ # evidências verificadas e copiadas
Durante a verificação, a CLI confirma assinatura, fingerprint da chave, SHA-256 e tamanho de cada arquivo, hash do journal e confinamento dos caminhos dentro do pacote. Qualquer alteração faz o comando terminar com status inválido.
Um pacote demonstrativo pode ser verificado com:
rtl verify docs/demo-evidence-package/manifest.json \
--public-key docs/demo-public.pemid: fixture-lab
name: Fixture exercise
description: Objetivo mensurável do cenário.
scope:
targets: [192.168.56.10, api.target.test]
exclusions: [192.168.56.1]
safety:
stop_conditions:
- Stop on service instability.
steps:
- id: service-discovery
name: Identify fixture services
technique: T1046
tactic: Discovery
objective: Inventory the expected attack surface.
expected_evidence: [discovery-output.txt]
cleanup: Remove temporary output after hashing.flowchart LR
SG[ScopeGuard] --> RTL[Red Team Lab]
RTL --> RR[RedReport]
SPR[Security PR Reviewer] --> RR
- ScopeGuard: normaliza e aprova o conjunto de alvos.
- Red Team Lab: organiza cenário, ATT&CK, execução e evidências.
- RedReport: transforma findings validados no relatório final.
- Security PR Reviewer: adiciona achados AppSec ao mesmo pipeline de reporting.
python -m ruff check .
python -m pytest
python -m buildA CI executa os três gates em cada Pull Request.
- exportador de findings compatível com RedReport;
- matriz ATT&CK Navigator por cenário;
- dashboard HTML local de cobertura e progresso;
- manifest assinado de evidências com Ed25519;
- adaptadores para logs Windows, Linux e aplicação web;
