Nesta etapa, você aprenderá como criar e testar sua própria regra Suricata para detectar padrões específicos no tráfego de rede. Vamos nos concentrar na detecção de solicitações HTTP para um domínio de teste (example.com) como um exemplo prático. Regras personalizadas permitem que você estenda os recursos de detecção do Suricata além de seu conjunto de regras padrão.
-
Primeiro, navegue até o diretório de regras onde o Suricata armazena suas regras de detecção:
cd /var/lib/suricata/rules
É aqui que todos os arquivos de regras do Suricata são normalmente armazenados. Adicionaremos nossas regras personalizadas aqui para mantê-las organizadas com as regras existentes.
-
Crie um novo arquivo de regra especificamente para suas regras personalizadas:
sudo nano custom.rules
Usar sudo é necessário porque o diretório de regras requer privilégios administrativos para modificar. Estamos nomeando o arquivo custom.rules para distingui-lo claramente dos arquivos de regras padrão do Suricata.
-
Adicione a seguinte regra para detectar solicitações HTTP para example.com:
alert http any any -> any any (msg:"HTTP Request to example.com"; flow:to_server; http.host; content:"example.com"; nocase; sid:1000002; rev:1;)
Vamos detalhar o que essa regra faz:
alert http: Aciona um alerta para tráfego HTTP
any any -> any any: Aplica-se ao tráfego de qualquer porta de origem para qualquer porta de destino
msg: Fornece uma mensagem de alerta legível por humanos
flow:to_server: Corresponde apenas ao tráfego que vai para servidores
http.host: Examina o cabeçalho HTTP Host
content:"example.com": Procura por este domínio específico
nocase: Torna a correspondência insensível a maiúsculas e minúsculas
sid:1000002: Dá à regra um ID exclusivo (acima de 1.000.000 para regras personalizadas)
rev:1: Indica que esta é a primeira versão da regra
-
Salve o arquivo no editor nano pressionando Ctrl+O (escrever), depois Enter para confirmar e Ctrl+X para sair.
-
Agora precisamos dizer ao Suricata para carregar nosso novo arquivo de regras. Edite a configuração principal:
sudo nano /etc/suricata/suricata.yaml
Encontre a seção rule-files: (geralmente por volta da linha 50-60) e adicione:
- custom.rules
Esta adição garante que o Suricata carregará nossas regras personalizadas quando iniciar.
-
Antes de aplicar as alterações, verifique se a sintaxe da regra está correta:
sudo suricata -T -c /etc/suricata/suricata.yaml -v
A flag -T informa ao Suricata para testar a configuração sem realmente executá-la. Isso ajuda a detectar quaisquer erros de sintaxe em suas regras antes que elas sejam usadas.
-
Reinicie o Suricata para carregar a nova regra:
sudo pkill suricata
sudo suricata -c /etc/suricata/suricata.yaml -i eth0
O primeiro comando interrompe qualquer instância do Suricata em execução, enquanto o segundo a inicia novamente com nossa configuração atualizada.
-
Para testar se nossa regra funciona, gere algum tráfego HTTP para example.com:
curl http://example.com
Este comando faz uma solicitação HTTP simples que deve acionar nossa nova regra.
-
Finalmente, verifique se o Suricata detectou o tráfego visualizando os alertas mais recentes:
sudo tail -n 5 /var/log/suricata/fast.log
Você deve ver um alerta correspondente à mensagem de nossa regra personalizada sobre solicitações HTTP para example.com. Caso contrário, verifique novamente cada etapa e verifique a sintaxe da regra.