Configurar 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 pesquisar 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 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 do Suricata recém-adicionado 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. Certifique-se de ver o PPA do Suricata na lista, conforme mostrado abaixo, antes de instalar o Suricata.

sudo apt policy
Running the sudo apt policy

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

sudo apt install suricata -y
Installing Suricata on your system

6. Após a conclusão da instalação, 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 possui muitas configurações diferentes para muitos outros casos de uso. Mas observe 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ões (IDS), que registra, mas não descarta nenhum tráfego. Este modo é usado ao configurar e se familiarizar com o Suricata. Quando estiver mais confortável com o Suricata e entender melhor os tipos de tráfego sobre os quais o Suricata o alertará, você pode optar por ativar o modo IPS.

O Suricata adiciona um campo em seu formato JSON (identificação de fluxo da comunidade). A identificação de fluxo da comunidade é um campo de 8 bytes que permite correlacionar registros gerados por outras ferramentas. Este recurso é útil ao usar o Suricata em conjunto com outras ferramentas como Bro ou Elasticsearch.

1. Abra o arquivo /etc/suricata/suricata.yaml em 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 de 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 flag -p diz ao comando ip para imprimir o dispositivo de forma legível para humanos, enquanto a flag -j imprime a saída JSON.

O Suricata está configurado para farejar pacotes de qualquer interface de rede disponível por padrão. Mas você pode mudar esse comportamento e especificar uma interface para o Suricata escutar quando ele iniciar.

 ip -p -j route show default

Como você vê abaixo, o parâmetro dev especifica a interface que o Suricata usará para farejar pacotes. Nesta demonstração, 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. Nesta demonstração, eth0 é usada como a interface para farejar 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 para proteger 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 enquanto elas estão em uso. Como resultado, você não precisa reiniciar manualmente o Suricata para que as novas regras entrem em vigor.

Abra o arquivo /etc/suricata/suricata.yaml, copie/colecione as seguintes diretivas ao 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, ao editar/atualizar seus conjuntos de regras, as mudanças terão efeito 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 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 o seguinte automaticamente:

  • Carregar nova configuração para atualizar variáveis e valores de regras.
  • Carregar novas regras
  • Construir novo mecanismo de detecção
  • Substituir 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 detecta apenas os protocolos de Internet mais comuns localizados no diretório /etc/suricata/rules.

Neste ponto, você receberá uma mensagem de erro Nenhum arquivo de regras corresponde ao padrão, como a abaixo, sempre que tentar iniciar e usar o seu serviço Suricata. Esta 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 instância do Suricata. Felizmente, o Suricata possui uma ferramenta chamada suricata-update que o ajudará a buscar mais conjuntos de regras de provedores de terceiros.

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

sudo suricata-update

Como você pode ver abaixo, a saída indica que o comando suricata-update buscou as regras conectando-se a https://rules.emergingthreats.net/open/. Em seguida, o comando 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 que estão habilitadas (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 busca 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 busque conjuntos de regras especificamente. Este tutorial busca 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 em suas regras do Suricata.

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 do Suricata possui um serviço de validação integrado que permite ver qualquer desvio 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 flag -T diz ao Suricata para executar no modo “teste” e “top down”. Ambos os modos têm regras mais rígidas para a correspondência de 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 aos abaixo, o Suricata imprimirá cada erro, indicando linhas específicas que estão causando 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 os seus arquivos de configuração do Suricata estão validados, você pode executar o Suricata para ver 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 o Suricata obteve de diversos 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/solicitações HTTP/atividades do site TestMyNIDS. O TestMyNIDS é um projeto de e-learning dedicado a apoiar 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 para ver se seu conjunto de regras configurado está funcionando como esperado.

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

Os dados de resposta são projetados para disparar um alerta falso fingindo ser um usuário root do Linux/Unix. E este root do usuário 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 para alerta 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ê vai consultar para tráfego suspeito e tentativas bloqueadas. Quando encontrado, 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 que você especificou no comando.

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

Este community_id é útil quando você usa o Suricata em conjunto com outras ferramentas como o Elasticsearch para obter um “conjunto de monitoramento de segurança” completo a um custo razoavelmente baixo.

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 por testes para verificar se os conjuntos de 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 com este novo conhecimento? Talvez começar com a instalação e configuração do Suricata, Zeek, o conjunto Elasticsearch para configurar uma “pilha de monitoramento de segurança” completa?

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