O Suricata é mais do que um IDS, basicamente se trata de um motor de rede de código aberto e multiplataforma de alto desempenho que combina as tecnologias IDS (Intrusion Detection System), IPS (Intrusion Prevention System) e NSM (Network Security Monitoring). O sistema foi lançado em 2009 e é desenvolvido pela comunidade OISF (Open Information Security Foundation).
O IDS é um sistema passivo que é responsável por monitorar o comportamento de uma rede para detectar e reportar possíveis intrusões não autorizadas, enquanto um IPS é um sistema ativo que funciona como uma extensão do IDS e que, além de enviar alertas sobre detecções, também pode bloquear atividades maliciosas na rede - como ataques de força bruta, DDoS ou ataques que buscam explorar vulnerabilidades - e criar um registro (log) com a intrusão. Tudo isso a partir do tráfego, das assinaturas de arquivos e da análise heurística do fluxo. Além disso, os IPSs permitem adicionar políticas e restringir o acesso a usuários e/ou até mesmo aplicativos.
O Suricata é normalmente usado para realizar varredura do tráfego de rede e à análise de registros de tráfego em um ambiente de teste ou sandbox (como a execução de malware). No entanto, o sistema também pode ser usado para criar regras com o intuito de classificar malwares.
Testando o Suricata
A seguir, veremos um exemplo simples de como usar o Suricata para realizar a classificação de malwares.
Vamos supor que temos uma máquina exclusivamente para realizar análises dinâmicas de amostras de malwares, poderíamos adicionar diferentes regras do Suricata para poder classificar o tipo de malware que está sendo executado de acordo com o tráfego.
Nesse caso, enquanto uma amostra do trojan bancário Trickbot está em execução na rede, é gerado um arquivo .pcap com informações sobre o comportamento do tráfego.
Através do fluxo de rede gerado pelo malware e conhecendo seu comportamento, podemos criar algumas regras no Suricata na pasta /etc/suricata/rules:
Na imagem 1 podemos ver a lista de algumas regras que vêm por padrão ao instalar o Suricata.
Antes de prosseguir com a geração da regra para detectar o Trickbot, veremos uma breve descrição dos campos básicos para gerar regras no Suricata:
Action | Header | Rule Options |
- Action: corresponde à ação (queda, alerta, etc.) que o Suricata realizará quando a regra for identificada no fluxo da rede.
- Header: essa seção corresponde ao fluxo de rede específico que será analisado. Da origem ao destino. Com a palavra "any" podemos indicar ao Suricata que todas as portas serão analisadas.
- Rule: regra que deve ser implementada para detectar (em nosso caso) o malware. Dentro deste campo existem palavras-chave que nos ajudam a criar nossa regra:
- Msg: mensagem de alerta emitida pelo Suricata.
- flow: fluxo de rede.
- Content: contém a cadeia de caracteres que deve ser buscada dentro do tráfego.
- Reference: contém referências, neste caso, colocamos um hash MD5 de verificação de uma amostra do Trickbot.
- Sid: ID da regra identificada.
- Rev: versão da regra.
- Classtype: fornece informações sobre a classificação de regras e alertas.
Tomando como exemplo a regra para o malware do Trickbot, vamos continuar adicionado a regra do Suricata no diretório /etc/suricata/rules para detecção:
Action | alert |
Header | http $EXTERNAL_NET any -> $HOME_NET any |
Rule | alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"TROJAN Win32/Trickbot Data Exfiltration"; flow:established,to_server; content:"POST"; http_method; content:"name=\"proclist\"";content:"svchost.exe";content:"name=\"sysinfo\"";content:"ipconfig";content:"net view /all";content:"nltest";distance:0; reference:md5,f99adab7b2560097119077b99aceb40d; classtype:trojan-activity; sid:1001001;rev:1; ) |
Salvamos nossa regra para o Trickbot obtida do repositório mencionado:
Agora vamos analisar o tráfego com o Suricata executando o seguinte comando:
sudo suricata -c /etc/suricata/suricata.yaml -r [archivo.pcap]:
A sentença anterior gera quatro arquivos:
O arquivo eve.json é o que mais nos interessa no momento, pois é o arquivo de saída que gera informações sobre alertas, anomalias, metadados e até mesmo informações sobre arquivos e registros específicos:
Se pesquisarmos pelo nome da mensagem "Trickbot" com o comando:
grep “Trickbot” eve.json
Veremos que nossa regra pode detectar um arquivo malicioso como o Trickbot.
Para finalizar essa prova de conceito é importante mencionar que o Suricata é uma ferramenta muito útil para realizar Threat Hunting. O Suricata é capaz de identificar protocolos de rede (TPC, UDP, HTTP, ICMP, etc.) permitindo o controle em tempo real do tráfego gerado em nossa rede e controlando a presença de possíveis códigos maliciosos. O último pode ser feito por meio de verificações MD5, como vimos na regra do Trickbot.
Por outro lado, também recomendamos revisar o repositório Open Source de regras do Suricata de Emerging Threats, onde podemos encontrar regras para a detecção de novas ameaças.
Para saber mais sobre as regras do Suricata, leia a documentação oficial da ferramenta.