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:

Imagem 1. Regras que vêm por padrão no Suricata.

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:

Imagem 2. Regra do Suricata para o malware Trickbot.

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:

Imagem 3. Arquivos gerados a partir das regras para o Trickbot.

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.

Imagem 4. Exemplo de detecção do Trickbot no sistema a partir das regras criadas no Suricata.

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.