Configurando o Suricata como um Sistema de Prevenção de Intrusões (IPS)

Com a crescente popularidade do cibercrime, há uma necessidade urgente de as empresas terem uma melhor proteção contra hackers. Um Sistema de Prevenção de Intrusões (IPS) é uma das melhores maneiras de se defender contra ataques de computador. Mas antes de procurar na internet por um IPS, experimente o Suricata.

Neste tutorial, você aprenderá como configurar um IPS Suricata totalmente funcional em um servidor Linux para proteger sua rede contra ameaças online.

Pronto? Continue lendo e comece a proteger sua rede!

Pré-requisitos

Este tutorial será uma demonstração prática. Se você deseja acompanhar, certifique-se de ter o seguinte:

  • A Linux server – This demo uses Ubuntu 20.04 LTS, but any Linux distribution will work.
  • A non-root user with sudo privileges.
  • Dependendo da configuração da sua rede e de como você pretende usar o Suricata, você pode precisar de mais ou menos CPU e RAM para o seu servidor. Em geral, quanto mais tráfego você planeja inspecionar, mais recursos você alocará para o Suricata. Em um ambiente de desenvolvimento, planeje usar pelo menos 2 CPUs e 8GB de RAM para começar, para que o Suricata possa realizar suas tarefas sem comprometer a qualidade do serviço para todos os usuários.

Instalando o Suricata e Adicionando o Repositório PPA

Suricata não vem instalado por padrão no Ubuntu, mas instalar o Suricata é semelhante à instalação de outros pacotes no seu sistema.

1. Execute o comando apt update para atualizar os pacotes disponíveis no seu sistema.

sudo apt update -y
Updating the list of available packages

2. Em seguida, execute o comando add-apt-repository para adicionar o repositório PPA mantido pela Open Information Security Foundation (OISF). Ao adicionar o repositório PPA, você obterá a versão mais recente e estável do Suricata (ppa:oisf/suricata-stable).

sudo add-apt-repository ppa:oisf/suricata-stable
Adding the PPA repository for Suricata

3. Execute novamente o comando sudo apt update para carregar o repositório recém-adicionado do Suricata no índice de pacotes do seu sistema.

sudo apt update -y

4. Agora, execute o comando sudo apt policy para verificar se você adicionou corretamente o PPA do Suricata. Verifique se você vê o PPA do Suricata na lista, como mostrado abaixo, antes de instalar o Suricata

sudo apt policy
Running the sudo apt policy

5. Execute o seguinte comando para instalar o suricata no seu sistema.

sudo apt install suricata -y
Installing Suricata on your system

6. Depois que a instalação for concluída, execute o comando systemctl status abaixo para verificar o status do serviço suricata.

sudo systemctl status suricata

Abaixo, você pode ver que o serviço Suricata está ativo (em execução).

Checking the Suricata service status

Configurando o Suricata

O pacote Suricata vem com um arquivo de configuração chamado suricata.yaml localizado no diretório /etc/suricata. Este arquivo de configuração tem muitas configurações diferentes para muitos outros casos de uso. Mas esteja ciente de que há algumas configurações no arquivo de configuração padrão que você precisa ajustar antes de usar o Suricata.

O modo padrão para o Suricata é o modo de Detecção de Intrusão (IDS), que registra, mas não descarta nenhum tráfego. Este modo é usado ao configurar e se familiarizar com o Suricata. Uma vez que você esteja mais confortável com o Suricata e entenda melhor os tipos de tráfego sobre os quais o Suricata o alertará, você pode optar por ativar o modo IPS.

O Suricata anexa um campo em seu formato JSON (community flow ID). O community flow ID é um campo de 8 bytes que permite correlacionar registros gerados por outras ferramentas. Esta característica é útil ao usar o Suricata em conjunto com outras ferramentas como Bro ou Elasticsearch.

1. Abra o arquivo /etc/suricata/suricata.yaml no seu editor de texto favorito.

Encontre uma linha que diz community-id: false e altere para community-id: true. Salve as alterações e saia do editor de texto.

Cada vez que você examinar eventos, verá o ID do fluxo da comunidade na saída JSON deles.

Enabling Community ID

Em seguida, execute o seguinte comando para encontrar um dispositivo com uma rota padrão em seu sistema (route show default). A bandeira -p diz ao comando ip para imprimir o dispositivo de forma legível para humanos, enquanto a bandeira -j imprime a saída JSON.

O Suricata está configurado para capturar pacotes de qualquer interface de rede disponível por padrão. Mas você pode alterar esse comportamento e especificar uma interface para o Suricata ouvir quando ele é iniciado.

 ip -p -j route show default

Como você pode ver abaixo, o parâmetro dev especifica a interface que o Suricata usará para capturar pacotes. Neste exemplo, a interface é eth0, mas sua interface pode ser diferente, como tun0, wlan0, e assim por diante.

Previewing the Network Interface

Por fim, abra o arquivo de configuração /etc/suricata/suricata.yaml, localize o parâmetro interface sob a seção af-packet e modifique-o conforme necessário. Neste exemplo, eth0 é usado como a interface para capturar pacotes.

Salve as alterações, mas mantenha seu editor de texto aberto por enquanto.

Editing the /etc/suricata/suricata.yaml configuration file

Configurando o Recarregamento de Regras ao Vivo

Você configurou o Suricata, mas isso é apenas o começo da proteção da sua rede. Normalmente, você gostaria de adicionar regras imediatamente e recarregar automaticamente as regras. Como? O recurso de recarregamento de regras ao vivo do Suricata permite que você atualize as regras em tempo real. Como resultado, você não precisa reiniciar o Suricata manualmente para que as novas regras entrem em vigor.

Abra o arquivo /etc/suricata/suricata.yaml, copie/cole as seguintes diretivas no final do conteúdo do arquivo e salve as alterações. Essas diretivas permitem que você habilite o recurso de recarregamento de regras ao vivo.

Com essa configuração em vigor, quando você editar/atualizar seus conjuntos de regras, as alterações entrarão em vigor sem reiniciar o serviço do Suricata.

detect-engine:
  - rule-reload: true
Setting up the Live Rule Reloading

Agora execute o comando kill abaixo para notificar o processo do seu Suricata ($(pidof suricata)) para atualizar as regras sem reiniciar.

O comando envia um sinal definido pelo usuário (-usr2) para o ID do processo especificado, então o Suricata executa automaticamente o seguinte:

  • Carregar nova configuração para atualizar variáveis e valores de regras.
  • Carregar novas regras
  • Construir novo mecanismo de detecção
  • Trocar os mecanismos de detecção antigos e novos
  • Garantir que todos os threads estejam atualizados
  • Liberar o mecanismo de detecção antigo
sudo kill -usr2 $(pidof suricata)

Atualizando Conjuntos de Regras do Suricata

O recurso de recarregamento de regras ao vivo está pronto, mas não servirá para nada a menos que você atualize seus conjuntos de regras. Por padrão, o pacote Suricata possui um conjunto de regras limitado que apenas detecta os protocolos de Internet mais comuns localizados no diretório /etc/suricata/rules.

Neste ponto, você receberá uma mensagem de erro Nenhum arquivo de regra corresponde ao padrão, semelhante à abaixo, sempre que tentar iniciar e usar o serviço Suricata. Essa mensagem de erro indica que não há conjuntos de regras para o Suricata usar.

Previewing Error Message when No Rulesets Exist

Para corrigir esse erro, forneça arquivos de conjunto de regras para a sua instância do Suricata. Felizmente, o Suricata possui uma ferramenta chamada suricata-update que o ajudará a obter mais conjuntos de regras de provedores terceirizados.

1. Execute o comando abaixo para obter uma atualização para a sua instância do Suricata.

sudo suricata-update

Como você pode ver abaixo, a saída indica que o comando suricata-update obteve as regras conectando-se a https://rules.emergingthreats.net/open/. Em seguida, salva as novas regras no diretório /var/lib/suricata/rules/.

A saída também imprime o seguinte:

  • O número total (31737) de conjuntos de regras
  • O número de regras ativadas (24355)
  • O número de quantas foram adicionadas(31737)/removidas(0).
Updating Your Suricata Rulesets

Em seguida, execute o comando abaixo para listar todos os provedores de conjuntos de regras (list-sources).

O comando suricata-update obtém conjuntos de regras de muitos provedores, incluindo provedores gratuitos e comerciais.

sudo suricata-update list-sources

Abaixo, você pode ver uma pequena parte da lista. Observe um nome de conjunto de regras do qual você deseja que o Suricata obtenha conjuntos de regras especificamente. Este tutorial obtém conjuntos de regras et/open para demonstração (passo três).

Listing all ruleset providers

3. Execute o comando abaixo para buscar e incluir os conjuntos de regras et/open no seu arquivo de regras do Suricata (enable-source).

sudo suricata-update enable-source et/open
Fetching the et/open rulesets

Por fim, execute novamente o comando suricata-update para carregar o conjunto de regras recém-selecionado.

sudo suricata-update

Validando a Configuração do Suricata

Você configurou o Suricata e até adicionou conjuntos de regras, então é hora de validar suas alterações e garantir que tudo funcione conforme o esperado. O pacote Suricata possui um serviço de validação embutido que permite visualizar quaisquer desvios da configuração atual.

Execute o comando suricata abaixo para validar as alterações no arquivo de configuração do Suricata (-c /etc/suricata/suricata.yaml). O comando também exibe todas as mensagens de validação (-v).

A bandeira -T indica ao Suricata para executar no modo “teste” e “top down”. Ambos os modos têm regras mais rigorosas para combinar pacotes e são menos propensos a gerar falsos positivos.

sudo suricata -T -c /etc/suricata/suricata.yaml -v

Como o Suricata é um firewall altamente configurável, o teste pode levar vários minutos para ser concluído. Se não houver erros, você verá uma saída semelhante à abaixo que mostra uma mensagem completa.

Validating Your Suricata Configuration: complete

Se o seu arquivo de configuração tiver erros semelhantes ao abaixo, o Suricata imprimirá cada erro, indicando linhas específicas que causam problemas. Se você receber esses erros, corrija cada problema de configuração um por um até que a validação seja bem-sucedida.

Validating Your Suricata Configuration: errors

Testando as Regras do Suricata

Agora que seus arquivos de configuração do Suricata foram validados, você pode executar o Suricata para verificar se eles estão funcionando corretamente. Você usará o Suricata para testar o ET Open (2100498) com o comando curl para detectar atividades/tráfego suspeitos.

Neste momento, sua instância do Suricata possui mais de 30.000 regras que foram obtidas de vários conjuntos de regras. Portanto, um teste completo de todas as regras com suas explicações não caberá neste tutorial.

1. Execute o comando curl abaixo para gerar algum tráfego/requisições/atividades HTTP a partir do site TestMyNIDS. O TestMyNIDS é um projeto de aprendizado eletrônico dedicado ao suporte de testes, validação e comparação de NIDS. O site fornece uma plataforma única para análise comparativa de NIDS e ferramentas relacionadas.

Você pode usar este site para testar qualquer atividade/tráfego suspeito e verificar se seu conjunto de regras configurado está funcionando conforme o esperado.

curl http://testmynids.org/uid/index.html

Os dados de resposta são projetados para acionar um falso alerta, simulando ser um usuário root Linux/Unix. E este usuário root está em um sistema que pode estar comprometido.

Testing Your Suricata Rules

Em seguida, execute o comando grep abaixo para examinar o arquivo fast.log no diretório /var/log/suricata/ em busca de uma mensagem de alerta correspondente 2100498. Este comando verifica o arquivo de log em busca de alertas de usuário.

Além do arquivo fast.log, outro arquivo de log para ficar de olho é o eve.log no mesmo diretório.

grep 2100498 /var/log/suricata/fast.log

Você verá uma saída semelhante à abaixo, que mostra o endereço IPv4 público do seu sistema.

Examining the fast.log file

3. Agora, execute o comando jq abaixo para examinar o arquivo eve.log. O arquivo eve.log também é usado para registrar eventos, mas em formato JSON (/var/log/suricata/eve.json). São os arquivos eve.json e fast.log que você consultará para tráfego suspeito e tentativas bloqueadas. Uma vez encontrados, tome as medidas necessárias.

jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json

Abaixo, você pode ver “signature_id”: 2100498 na saída, que é o ID de assinatura de alerta especificado no comando.

Você também pode ver o “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=” na saída, que é o ID de Fluxo Comunitário que você configurou no arquivo /etc/suricata/suricata.yaml.

Este community_id é útil ao usar o Suricata em conjunto com outras ferramentas como o Elasticsearch para obter uma pilha completa de “monitoramento de segurança” a um custo razoável.

Examining the eve.log file

Conclusão

Ao longo deste tutorial, você aprendeu como instalar e configurar o Suricata com conjuntos de regras para proteger sua rede. Você também passou pelo teste se as regras estão funcionando gerando tráfego em sua rede.

Neste ponto, o Suricata está funcionando perfeitamente com seu conjunto de regras personalizado para detectar atividades/tráfego suspeitos em sua rede.

Agora, por que não construir sobre esse conhecimento recém-descoberto? Talvez começar com a instalação e configuração do Suricata, Zeek, a pilha Elasticsearch para montar um conjunto completo de “monitoramento de segurança”?

Source:
https://adamtheautomator.com/suricata/