Concentrar os alertas de upload

CibersegurançaBeginner
Pratique Agora

Introdução

O detector da equipe marca todo POST a collector.example.test/collect. Alguns são demonstrações públicas permitidas. Sua tarefa é concentrar os alertas em documentos internos e preservar esses intercâmbios permitidos.

Este ambiente independente inclui broad.rules, o detector anterior, e capturas sintéticas TCP/HTTP completas. Use a aba Analyst para comandos e selecione a aba Traffic Reference para ver as requisições gravadas; a página abre diretamente. Os mesmos exemplos estão em traffic/requests.txt. Arquivos da VM anterior não são necessários. A inspeção do corpo se aplica a este HTTP sem criptografia, não a HTTPS criptografado.

Encontrar o contexto do documento sensível

Nesta etapa, veja por que uma pista do corpo é útil, mas insuficiente sozinha. classification=internal é um campo empresarial sintético que descreve a categoria de tratamento do documento, não um marcador de conclusão.

Selecione a aba Analyst na interface do laboratório para começar esta etapa.

Mude para a aba Traffic Reference para comparar os corpos das requisições e depois volte à aba Analyst. Leia a referência e reproduza o detector fornecido. As opções são as anteriores: regras exclusivas com -S, PCAP de entrada com -r e diretório de saída com -l.

Traffic Reference distinguindo documentos internos de demonstrações públicas

Mude para a aba Analyst antes de executar o comando a seguir.

cat traffic/requests.txt
mkdir -p broad-output
suricata --runmode single -c suricata.yaml -S broad.rules -r traffic/core.pcap -l broad-output --init-errors-fatal
python3 /opt/c09/read-alerts.py broad-output/eve.json

Espere quatro alertas, incluindo dois documentos públicos. classification=public significa conteúdo adequado para demonstração pública nessa rota. A política combina método, destino, rota e classificação interna.

Experimente um detector apenas do corpo para aprender o novo buffer. http.request_body faz o próximo content inspecionar o corpo reconstruído mesmo quando os bytes cruzam pacotes TCP. O mecanismo faz a remontagem; busca de texto pacote a pacote não é equivalente. Não acrescentamos limites de buffer inteiro porque a classificação é um campo dentro de um corpo maior.

Use entrada literal multilinha como antes: > substitui o arquivo e o RULE final fica sozinho em sua linha.

cat > body.rules <<'RULE'
alert http any any -> any any (msg:"Review document upload"; flow:established,to_server; http.request_body; content:"classification=internal"; sid:1000001; rev:1;)
RULE
mkdir -p body-output
suricata --runmode single -c suricata.yaml -S body.rules -r traffic/core.pcap -l body-output --init-errors-fatal
python3 /opt/c09/read-alerts.py body-output/eve.json

Espere Alerts: 9. Documentos internos em destinos aprovados também alertam, assim como PUT e outras rotas do coletor. Buscar uma palavra sensível em qualquer lugar é amplo demais. Preserve o resultado como experimento, não como detector final da política.

python3 /opt/c09/check.py body.rules body

Os dois conjuntos devem corresponder a nove intercâmbios com esse corpo. É possível corrigir erros de sintaxe reescrevendo o bloco e tentando em outro diretório, para que eventos acrescentados não confundam a contagem.

Combinar condições e testar o equilíbrio

Nesta etapa, combine os quatro campos HTTP aprendidos. Preserve POST, o host exato e a rota exata do coletor; acrescente a classificação interna.

Selecione a aba Analyst na interface do laboratório para começar esta etapa.

Crie local.rules, sua entrega final. Condições em buffers diferentes se combinam com AND: a transação precisa satisfazer todas. sid:1000001 continua um identificador local único; basta uma regra ativa.

Mude para a aba Analyst antes de executar o comando a seguir.

cat > local.rules <<'RULE'
alert http any any -> any any (msg:"Review document upload"; flow:established,to_server; http.method; content:"POST"; startswith; endswith; http.host; content:"collector.example.test"; startswith; endswith; http.uri; content:"/collect"; startswith; endswith; http.request_body; content:"classification=internal"; sid:1000001; rev:1;)
RULE

Antes de reproduzir, teste a sintaxe com -T. O diretório e -l também fornecem saída gravável ao teste. Configuração e regras são carregadas sem ler pacotes. Sintaxe válida não prova qualidade da detecção.

mkdir -p syntax-output
suricata -T -c suricata.yaml -S local.rules -l syntax-output --init-errors-fatal
mkdir -p final-output
suricata --runmode single -c suricata.yaml -S local.rules -r traffic/core.pcap -l final-output --init-errors-fatal
python3 /opt/c09/read-alerts.py final-output/eve.json

Espere Alerts: 2 para 41002 e 41007. Em ambos, um documento interno vai por POST à rota não aprovada. Demonstrações públicas, uploads aprovados, verificações de saúde, outros métodos e rotas ficam silenciosos. Os alertas ainda mostram action: allowed: alertas offline observam tráfego, não impedem uploads.

Execute o verificador de regressão equilibrado. Após uma mudança, ele repete correspondências obrigatórias e proibidas já conhecidas. Reproduz em saída limpa o conjunto visível e exemplos com outros nomes e portas. Verifica a regra, não a quantidade antiga de eventos.

python3 /opt/c09/check.py local.rules final

As duas linhas devem indicar dois intercâmbios esperados e comparações silenciosas. Repita: resultados e captura devem permanecer iguais. Ausências sugerem condições específicas demais ou buffer incorreto; alertas inesperados sugerem condições ausentes ou amplas. Reescreva local.rules e tente novamente. Não desative o mecanismo nem remova tráfego legítimo de comparação.

Isso demonstra uma política delimitada, não detecção universal de perda de dados. Corpos maiores, criptografia, codificações e outros protocolos exigem projeto e testes próprios. O desafio muda os fatos da política e utiliza os mesmos quatro buffers.

Resumo

Você comparou um detector apenas de rota com um experimento apenas de corpo e combinou os quatro campos HTTP. Testou a regra com conjuntos equilibrados em saídas limpas e deixou explícitos os limites de visibilidade.