segunda-feira, 19 de março de 2012

Introdução aos decoders - Serie Snortando (Parte 4)

Primeiramente me desculpar pelo atraso do post mas as coisam andam corridas por esses lados mas não vamos deixar a peteca cair mesmo com atrasos =)!

Nesse post iremos falar sobre os decoders do Snort. Para lembrar exato onde estamos os decoders estão logo após a aquisição de dados através do DAQ .

Em resumo o processo do snort é o seguinte:

DAQ (Captura de pacotes) --> Decoders --> Preprocessors --> Rule Engine --> Output Plugins 

Os decoder são de EXTREMA importancia para o snort pois ali é onde podemos dizer que se separa a parte "Protocolo"  da parte "Payload". Caso não exista decoders para tráfegos específicos o snort simplesmente não terá como analisar o conteúdo.

Atualmente o snort possui basicamente os seguintes decoders :

TCP
UDP
IPv4
IPv6
MPLS
GRE
GTP (GRPS Tunneling Protocol)*

* Suporte a GTP/GPRS é algo totalmente novo implantado na versão 2.9.2. Certamente adicionarei algo sobre isso na agenda para o futuro. Caso queiram mais informação leiam o README.gtp no doc/ to tarball mais recente e/ou o blogpost do VRT sobre isso http://blog.snort.org/2012/01/gtp-decoder-and-preprocessor.html . O encapsulamento do GPRS é BEM interessante.

Além do fato de separar a parte protocolo da parte payload os decoders também podem tomar ações e tirar pacotes de serem analisados ou mesmo bloqueados com as decoders rules.

Aqui algumas configurações default com os decoder no snort.conf

# Stop generic decode events:
config disable_decode_alerts

# Stop Alerts on experimental TCP options
config disable_tcpopt_experimental_alerts

# Stop Alerts on obsolete TCP options
config disable_tcpopt_obsolete_alerts

# Stop Alerts on T/TCP alerts
config disable_tcpopt_ttcp_alerts

# Stop Alerts on all other TCPOption type events:
config disable_tcpopt_alerts

# Stop Alerts on invalid ip options
config disable_ipopt_alerts

# Alert if value in length field (IP, TCP, UDP) is greater th elength of the packet
# config enable_decode_oversized_alerts

# Same as above, but drop packet if in Inline mode (requires enable_decode_oversized_alerts)
# config enable_decode_oversized_drops

# Configure IP / TCP checksum mode
config checksum_mode: all


* Pra mim essa configuração acima em vermelho é bem importante pois ele vai tirar da inspecção pacotes com bad checksum o que vai liberar esse tempo para pacotes não malformados.

Um ponto muito importante aqui é que essas regras são desabilitadas por padrão, não a normalização de separação do "Protocolo do Payload" mas as proteções em si.

Para habilitar você terá que realizar 3 passos:

- Configurar o PATH das preprocrules

var PREPROC_RULE_PATH /etc/snort/preproc_rules

- Copiar as decoder.rules para o diretorio configurado acima

- Reiniciar seu snort (lembre-se sempre se usar a opcão -T para checar o arquivo de configuração antes de parar seu snort para o mesmo não ficar fora do ar por alguma razão)

O que essas decoders rules alertam?

Atualmente existem por volta de 142 decode rules e abaixo mostrar algumas que acho interessante. Vale lembra que é de suma importancia saber e ler sobre os protocolos citados que a mesma faz decode para melhor entendimento da regra e logicamente de quando a mesma gerar um alerta saber analisar.

alert ( msg:"DECODE_IPV4_INVALID_HEADER_LEN"; sid:2; gid:116; rev:1; metadata:rule-type decode; classtype:protocol-command-decode; )

alert ( msg:"DECODE_IPV6_ISATAP_SPOOF"; sid:453; gid:116; rev:1; metadata:rule-type decode; reference:cve,2010-0812; reference:url,www.microsoft.com/technet/security/bulletin/MS10-029.mspx; classtype:misc-attack; )

alert ( msg:"DECODE_ICMP_ORIG_PAYLOAD_GT_576"; sid:254; gid:116; rev:1; metadata:rule-type decode; classtype:protocol-command-decode; )

alert ( msg:"DECODE_TCP_NMAP_XMAS"; sid: 401; gid: 116; rev: 1; metadata: rule-type decode ; classtype:attempted-recon; reference:bugtraq,7700; reference:cve,2003-0393; )

alert ( msg:"DECODE_ICMP_REDIRECT_HOST"; sid:436; gid:116; rev:1; metadata:rule-type decode; classtype:attempted-recon; )


Lembrem-se galera que é nos detalhes que achamos os grandes perigos, não adiantar ficar observando somente os payload enquanto tem muita coisa já acontecendo umas camadas antes. Estude protocolos, cabeçalhos e se tiverem paciencia leiam as RFC =) .

Recomendo também que leiam o README.decode que voce encontra no doc/ do tarball do snort.


Happy Snorting!

Rodrigo "Sp0oKeR" Montoro


Nenhum comentário: