Na criação de regras para o
Snort podemos definir intervalos de portas ou IP',s como no exemplo abaixo:
alert tcp 192.168.1.50 any -> 192.168.1.1 1:1024 (msg:"tentativa ou acesso, porta < 1025"; sid:1; rev:0;);
No exemplo acima o Snort gerará uma entrada no log de alerta quando o host 192.168.1.50 tentar ou realizar conexão com o host 192.168.1.1 em qualquer porta menor que 1025. Nós podemos utilizar apenas uma porta, um ou mais ranges de portas ou portas mistas também.
Agora o Snort está funcionando e gerando alertas de atividades suspeitas na rede e de possíveis ataques. Mas ele ainda não está trabalhando no modo defensivo. Irei mostrar como fazer mais adiante.
Para verificar o tráfego da rede com o snort em modo sniffer de rede, devemos utilizar o seguinte comando:
# snort -v
05/07-18:57:48.321440 192.168.2.50:4358 -> 192.168.2.80:53 UDP TTL:127 TOS:0×0 ID:6873 IpLen:20 DgmLen:70 Len: 42
Vimos que o comando "snort -v" mostra informações resumidas do tráfego da rede. Se precisarmos de mais detalhamento e conteúdo dos pacotes temos que utilizar o parâmetro "-vd", mostrado a seguir:
# snort -vd
05/07-19:00:02.941503 192.168.0.2.1:137 -> 192.168.255.255:137 UDP TTL:128 TOS:0×0 ID:51302 IpLen:20 DgmLen:78 Len: 50 AC 6D 01 10 00 01 00 00 00 00 00 00 20 45 45 45 .m.......... EEE 46 45 4D 46 45 45 42 44 43 43 41 43 41 43 41 43 FEMFEEBDCCACACAC 41 43 41 43 41 43 41 43 41 43 41 43 41 00 00 20 ACACACACACACA.. 00 01 ..
Perceba que agora temos informações do tráfego e dados da camada de aplicação. Neste modo é possível ver usuários e senhas de protocolos que utilizam texto limpo, como o FTP.
Vamos agora para a para mais interessante: o flexresp2. Abaixo a informação de cada flag:
- reset_dest: Envia pacotes TCP para o destino do ataque, fechando a conexão;
- reset_source: Envia pacotes TCP para a origem do ataque, fechando a conexão;
- reset_both: Envia pacotes TCP para ambos, origem e destino, fechando a conexão;
- icmp_net: Envia um pacote ICMP network unreachable para a origem do ataque;
- icmp_host: Envia um pacote ICMP host unreachable para a origem do ataque;
- icmp_port: Envia um pacote ICMP port unreachable para a origem do ataque;
- icmp_all: Envia pacotes ICMP host unreachable e ICMP network unreachable para a origem do ataque.
Vamos aos exemplos de utilização das flags:
alert icmp any any -> any any (msg:"Ping suspeito"; sid:1; resp:icmp_all;)
Com a regra acima o Snort gerará um alerta de qualquer pacote ICMP que estiver passando de qualquer máquina para qualquer máquina e enviará pacotes ICMP para a máquina de origem com as seguintes mensagens:
- host unreachable;
- network unreachable.
Para mudar o Snort para o modo defensivo devemos editar cada regra dentro de /etc/snort/rules e fazer como mostrado a seguir.
Antes:
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"DDOS TFN Probe"; icmp_id:678; itype:8; content:"1234"; reference:arachnids,443; classtype:attempted-recon; sid:221; rev:4;)
alert tcp $HOME_NET any <> $EXTERNAL_NET any (msg:"DDOS shaft synflood"; flow:stateless; flags:S,12; seq:674711609; reference:arachnids,253; reference:cve,2000-0138; classtype:attempted-dos; sid:241; rev:10;)
Depois:
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"DDOS TFN Probe"; icmp_id:678; itype:8; content:"1234"; reference:arachnids,443; classtype:attempted-recon; sid:221; rev:4; resp:icmp_host;)
alert tcp $HOME_NET any <> $EXTERNAL_NET any (msg:"DDOS shaft synflood"; flow:stateless; flags:S,12; seq:674711609; reference:arachnids,253; reference:cve,2000-0138; classtype:attempted-dos; sid:241; rev:10; resp:reset_both;)