Posto de Observação

capítulo 01

Arquitetura & Threat Model

Antes de instalar qualquer coisa, vale entender por que as peças estão separadas do jeito que estão — e o que pode dar errado no próprio laboratório, não só no honeypot.

As quatro peças

O honeypot (Cowrie) e o sensor de rede (Suricata) observam o mesmo tráfego de dois jeitos diferentes e independentes. O Cowrie finge ser um servidor SSH/Telnet vulnerável e registra tudo que um visitante tenta fazer dentro dele. O Suricata não sabe nada sobre esse teatro — ele só olha os pacotes de rede chegando na interface, e reconhece padrões (uma tentativa de SSH, um scan de porta, uma assinatura de exploit conhecida) independente do que está por trás.

Essa independência é o ponto: se o Cowrie falhar silenciosamente, ou se alguém encontrar um jeito de escapar do sandbox dele, o Suricata continua vendo o tráfego de qualquer forma — ele opera numa camada abaixo, direto na interface de rede.

por que isso funciona mesmo com o container no meio

O Suricata captura em modo af-packet, que opera abaixo da camada onde o Docker reescreve endereços via NAT/iptables. Isso significa que ele enxerga a porta externa real (a que está exposta na internet), não a porta interna do container — a correlação entre os dois sistemas fica consistente mesmo com Docker no meio do caminho.

Onde cada peça roda

distribuição de componentes
Cowrie
Docker, rede isolada
Suricata
nativo (fora de container)
Alloy
nativo (fora de container)
Loki + Grafana
Docker, rede própria

O Suricata roda nativo, fora de qualquer container, porque precisa de acesso direto e de baixo nível à interface de rede — meter uma camada de virtualização de rede do Docker no meio só adiciona complexidade sem ganho. O Cowrie, ao contrário, é exatamente o componente que mais se beneficia de isolamento, já que é o que fica exposto de propósito ao mundo — por isso ele vive dentro de um container, numa rede Docker dedicada, sem rota pra mais nada na máquina.

Isolamento de rede

A regra geral: só as portas do honeypot são alcançáveis de fora. Tudo o resto — gestão SSH da máquina, o dashboard do Grafana, a API do Loki — fica restrito à rede local ou a 127.0.0.1, nunca exposto.

  • Porta de gestão SSH: só aceita conexões da rede local.
  • Grafana e Loki: bind em 127.0.0.1, acessados via túnel SSH quando necessário — nunca publicados na rede.
  • Só duas portas são de fato encaminhadas no roteador: as do Cowrie (SSH e Telnet falsos).
atenção · ipv6

Se sua rede tiver IPv6 público, regras de firewall criadas sem cuidado podem liberar uma porta pra internet inteira sem que nenhum port-forward tenha sido configurado — IPv6 não passa por NAT do jeito que IPv4 passa. Sempre confira as duas pilhas (v4 e v6) ao revisar regras de firewall. Mais sobre isso no capítulo de troubleshooting.

Threat model do próprio laboratório

Framework aplicado: STRIDE, focado na superfície que este projeto introduz na rede — o honeypot receber ataques é esperado; o risco real é o que acontece se o isolamento falhar.

AmeaçaCenárioMitigaçãoPrioridade
Elevação de privilégio Falha de escape do sandbox do Cowrie, execução no host por trás do container Container sem --privileged, usuário não-root, rede Docker isolada, imagem sempre atualizada alta
Adulteração de evidência Tentativa de apagar logs locais pra cobrir rastro, após um comprometimento Logs replicados quase em tempo real pra fora do host (Loki), não dependem só da cópia local alta
Exposição de informação Dashboard ou API do Loki acessível publicamente por engano Bind exclusivo em 127.0.0.1, nunca encaminhado no roteador alta
Negação de serviço Volume de conexões satura CPU/RAM da máquina, derrubando o próprio IDS Limites de recurso no container, ruleset do Suricata dimensionado pro hardware disponível média
Falsificação Confusão entre o serviço de gestão real e o honeypot, se estiverem na mesma porta/rede Gestão SSH em porta não-padrão, só acessível pela rede local média
nota

Um honeypot recebendo tráfego não solicitado da internet é uma prática estabelecida — é exatamente pra isso que ele existe. O que precisa permanecer verdadeiro é que ele fica passivo: registra e simula, nunca ataca de volta quem tenta invadir.

Rodando numa VM, na sua máquina principal?

Se o laboratório vai rodar numa máquina virtual dentro do computador que você usa no dia a dia (em vez de hardware dedicado), vale um ajuste de expectativa: o pior cenário de uma falha de isolamento deixa de ser "reflashar um dispositivo barato" e passa a ser "algo escapou até a máquina que você usa pra trabalhar". Isso não inviabiliza o projeto, mas justifica endurecer a própria VM — desabilitar clipboard e pastas compartilhadas entre host e VM, manter o hypervisor atualizado, e usar snapshots.

vantagem real da vm

Snapshots permitem voltar a um estado limpo em segundos — tire um logo depois do sistema operacional instalado e hardenizado, antes de subir qualquer serviço. É uma rede de segurança que hardware físico não oferece sem reflash completo.