Como detectar malware com regras do sistema Suricata

Saiba como implementar regras no sistema Suricata para detectar códigos maliciosos em uma rede.

Saiba como implementar regras no sistema Suricata para detectar códigos maliciosos em uma rede.

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.

Newsletter

Discussão