Regras de assinatura com Snort e Suricata
Escreva e interprete regras de rede.
Regras de assinatura com Snort e Suricata é uma aula grátis de Cyber Security Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cyber Security Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cyber Security Academy inclui 4 aulas no total.
Snort e Suricata
Snort e Suricata são os dois principais mecanismos de IDS/IPS de código aberto. Eles compartilham uma linguagem de regras amplamente compatível, portanto uma regra escrita para um geralmente funciona no outro.
O Suricata acrescenta processamento paralelo, analisadores nativos de protocolos, extração de arquivos e registros detalhados (EVE JSON); o Snort 3 também modernizou seu próprio mecanismo. Aprender a sintaxe das regras uma única vez permite trabalhar com os dois.
Anatomia de uma regra
Toda regra tem duas partes: um cabeçalho e um corpo de opções entre parênteses. O cabeçalho define a ação, o protocolo e a direção do tráfego; o corpo define o que deve ser correspondido e como relatar o resultado.
alert tcp $EXTERNAL_NET any -> $HOME_NET 80 ( \
msg:"WEB suspicious request"; \
content:"/admin.php"; http_uri; \
sid:1000001; rev:1; )Os campos do cabeçalho
O cabeçalho é lido da esquerda para a direita:
- ação — alertar, descartar, rejeitar, permitir
- protocolo — tcp, udp, icmp, ip (ou protocolos de aplicação no Suricata: http, dns, tls)
- IP/porta de origem e IP/porta de destino
- direção —
->unidirecional ou<>bidirecional
Variáveis como $HOME_NET e $EXTERNAL_NET vêm da sua configuração para que as regras permaneçam portáveis entre diferentes ambientes.
drop tcp any any -> $HOME_NET 22 ( msg:"SSH blocked"; sid:1000002; rev:1; )Ações: alertar versus descartar
A ação determina o comportamento de IDS ou IPS para essa regra:
alert— registrar e notificar, sem interromper o tráfego (IDS)drop— descartar o pacote silenciosamente (IPS, somente em linha)reject— descartar e enviar uma reinicialização TCP ou uma mensagem ICMP de destino inalcançávelpass— permitir explicitamente, ignorando as regras posteriores
O mesmo mecanismo se torna IDS ou IPS dependendo de ser implantado em linha e das ações utilizadas.
Correspondência de conteúdo
A palavra-chave content corresponde a um padrão de bytes na carga útil. O texto fica entre aspas; os dados binários ficam entre barras verticais, em hexadecimal.
As palavras-chave de ancoragem tornam as correspondências mais precisas: offset, depth, distance e within restringem onde o padrão pode aparecer, melhorando tanto a precisão quanto o desempenho.
alert tcp any any -> $HOME_NET any ( \
msg:"Malware magic bytes"; \
content:"|4D 5A|"; offset:0; depth:2; \
sid:1000003; rev:1; )Buffers persistentes
As regras modernas fazem correspondências em buffers específicos do protocolo, em vez de usarem o fluxo bruto. Depois de uma palavra-chave de buffer, as correspondências subsequentes de content se aplicam àquela parte do protocolo analisado.
http_uri— o URI da requisiçãohttp_header— cabeçalhos de requisição e respostahttp_user_agent— o agente do usuáriotls_sni/dns_query— nome do servidor TLS / consulta DNS
Isso é muito mais confiável do que pesquisar uma sequência parcial no pacote inteiro.
alert http any any -> any any ( \
msg:"Suspicious user agent"; \
http.user_agent; content:"sqlmap"; nocase; \
sid:1000004; rev:1; )PCRE e distinção entre maiúsculas e minúsculas
Quando strings fixas não são suficientes, pcre fornece expressões regulares compatíveis com Perl. Combine um pré-filtro barato de content com um pcre para que a expressão regular seja executada apenas em pacotes candidatos, preservando o desempenho.
O modificador nocase torna uma correspondência de conteúdo insensível a maiúsculas e minúsculas, algo importante para cabeçalhos e campos controlados pelo usuário que os invasores podem variar.
alert http any any -> $HOME_NET any ( \
msg:"SQLi attempt in URI"; \
http.uri; content:"select"; nocase; \
pcre:"/union\s+select/i"; \
sid:1000005; rev:1; )Palavras-chave de fluxo e estado
A opção flow restringe uma regra ao estado e à direção da conexão, reduzindo falsos positivos e o custo de processamento.
established— somente em sessões TCP concluídasto_server/to_client— direção da requisição versus da resposta
Fazer correspondências apenas com respostas do servidor quando a conexão está estabelecida e na direção do cliente evita disparos causados por pacotes avulsos ou falsificados.
alert tcp $HOME_NET any -> $EXTERNAL_NET any ( \
msg:"Beacon response"; \
flow:established,to_client; \
content:"|00 01 02 03|"; \
sid:1000006; rev:1; )Metadados: identificador, revisão, mensagem e referência
Opções de controle mantêm um conjunto de regras fácil de manter:
sid— ID exclusivo da assinatura (use 1000000+ para regras locais)rev— número de revisão; incremente-o a cada ediçãomsg— o texto do alerta visto pelos analistasclasstype— categoria que define a prioridadereference— link para CVE ou um comunicado
Identificadores de assinatura estáveis e números de revisão incrementados permitem acompanhar e atualizar as regras sem quebrar painéis nem supressões.
alert tcp any any -> $HOME_NET 445 ( \
msg:"EternalBlue exploit attempt"; \
flow:to_server,established; content:"|FF|SMB"; \
classtype:attempted-admin; \
reference:cve,2017-0144; sid:1000007; rev:2; )Diferenças entre Snort e Suricata
Embora sejam compatíveis no nível das regras, os mecanismos diferem em recursos:
- Suricata usa vários threads, analisa nativamente protocolos de aplicação, extrai arquivos, calcula JA3 e emite JSON EVE
- Snort 3 reescreveu seu mecanismo para melhorar o desempenho e oferecer um sistema modular de plug-ins
Algumas palavras-chave são específicas de cada mecanismo. O Suricata adiciona palavras-chave da camada de aplicação (tls.sni, dns.query, http.method) e recursos de conjuntos de dados e bits de fluxo. Ao compartilhar regras, direcione-as ao menor denominador comum ou mantenha conjuntos de regras específicos para cada mecanismo.
Filtragem por taxa e limiares
Para impedir que uma regra inunde o console, aplique limiares. detection_filter dispara somente após N eventos em uma janela; threshold com limit limita o volume de alertas.
Isso é essencial para detecções de força bruta e de varredura, nas quais um único evento não significa nada, mas uma rajada é o sinal relevante.
alert tcp any any -> $HOME_NET 22 ( \
msg:"SSH brute force"; flow:to_server; \
detection_filter:track by_src, count 5, seconds 60; \
sid:1000008; rev:1; )Verificação rápida
Leia uma regra e preveja seu comportamento.
Recapitulação
Agora você pode ler e escrever assinaturas do Snort/Suricata:
- Uma regra = cabeçalho (ação, protocolo, origem/destino, direção) + opções do corpo
- A ação define IDS ou IPS:
alert,drop,reject,pass contentcom deslocamento/profundidade e correspondência hexadecimal encontra bytes da carga útil- Buffers persistentes (http.uri, tls.sni, dns.query) fazem correspondências em campos analisados do protocolo
pcreenocaselidam com padrões variáveisflowrestringe a correspondência ao estado e à direçãosid/rev/msg/referencemantêm as regras fáceis de administrar- Os limiares controlam o ruído de força bruta e de varredura
A seguir: detecção de ameaças sem nenhuma assinatura.
Perguntas Frequentes
A aula “Regras de assinatura com Snort e Suricata” é grátis?
Sim — o texto completo de “Regras de assinatura com Snort e Suricata” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cyber Security Academy, atualize para CoddyKit PRO. O curso de Cyber Security Academy inclui 4 aulas no total.
O que vou aprender em “Regras de assinatura com Snort e Suricata”?
Escreva e interprete regras de rede. Você pratica Cyber Security Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Cyber Security Academy?
Nenhuma experiência prévia é necessária. Cyber Security Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Regras de assinatura com Snort e Suricata”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Cyber Security Academy?
Sim. Cada aula de Cyber Security Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Conceitos de IDS e IPS
- Regras de assinatura com Snort e Suricata
- Detecção de anomalias e comportamento
- Ajuste e implantação