IDS - Intrusion Detection System

Introdução

A ideia desse mecanismo de defesa é de alertar ataques na rede. Ele alerta ao administrador quando por exemplo, fizemos um scan de porta, interagimos com o serviço, conseguimos explorar algum serviço, etc, para que ele saiba que esse ambiente está sendo atacado. Sua função então é monitorar e avisar essas ocorrências de acordo com as regras que está configurado. Para isso, vamos instalar o snort, que é um software de detecção de intrusos.

sudo apt install snort

Sua pasta fica localizada em /etc/snort. Os arquivos de configuração é o snort.conf e as regras ficam dentro de rules.

Vamos utilizar o parâmetro -A fast para salvar numa saída mais rápida, -q para entrar no modo quiet e não mostrar muitos resultados no output, -h para informar a rede, -c para informar qual o arquivo de configuração.

sudo snort -A fast -q -h 192.168.2.0/24 -c snort.conf

Assim que executarmos esse comando, o output será salvo no arquivo alert, o caminho desse arquivo é /var/log/snort.

Obs: ao invés de passarmos o "fast" podemos usar "console" para ir exibindo os resultados direto no terminal, evitando assim ter que abrir o arquivo para visualizar.

sudo snort -A console -q -h 192.168.2.0/24 -c snort.conf

Criando regras de IDS

Para criar uma regra, basta criar um arquivo com extensão .rules dentro da pasta rules, seguindo o padrão abaixo.

Após criar o arquivo com a regra, é necessário incluir no arquivo de configuração do snort. Para isso basta adicionar include $RULE_PATH/<arquivo>.rules

Bypass de regras de IDS

Para conseguirmos dar bypass em uma regra de IDS, precisamos saber como que uma regra funciona para burlarmos ela. Por exemplo, quando usamos o protocolo ICMP enviando um ping para o alvo, o snort irá mostrar alguns alertas com uma mensagem IMCP PING *NIX. Essa mensagem está configurado nas regras, como dito anteriormente, elas ficam salvas em /etc/snort/rules. Sabendo disso, podemos filtrar por essa frase nas regras e ver como ela está configurada.

┌──(user㉿kali)-[/etc/snort]
└─$ grep -r "ICMP PING \*NIX"
rules/icmp-info.rules:alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"ICMP PING *NIX"; itype:8; content:"|10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F|"; depth:32; classtype:misc-activity; sid:366; rev:7;)

Podemos ver que ele analisa o itype (o tipo do protocolo IMCP é 8) e o content (uma sequência em hexadecimal) se caso essas duas condições sejam igual o que está nessa regra, ele irá alertar. Vamos enviar um ping para nós mesmos e analisar no wireshark para visualizar, filtrando os pacotes ICMP.

Podemos notar que tudo está de acordo, o Type 8 e no campo Data, contém o valor 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F. Com isso, para bypassar essa regra, podemos mudar o content que está sendo analisado pelo snort.

O ping possui o parâmetro -p que podemos enviar um hexadecimal manualmente.

ping -c 1 -p "6161616161" 192.168.2.112

Analisando esse pacote, podemos ver que o conteúdo foi alterado, burlando essa regra.

Last updated