Snort + Guardian Tutorial

Por Allisson Azevedo (allisson@linuxmail.org)

O objetivo deste tutorial é ter um sistema de defesa contra ataques maliciosos, não pense que apenas seguindo este tutorial seu sistema vai estar a prova de balas contra invasões e outros tipos de ataques, digo isso porque nenhum sistema é perfeito.

Contudo a combinação do Snort com o Guardian pode ser considerada uma ferramenta muito util em um servidor que precisa de um minimo de segurança. O Snort funciona como um sniffer (analisador de pacotes), fazendo a monitoração dos pacotes que passam pelo seu sistema, quando ele detecta alguma assinatura digital que indique um ataque em potencial contra o seu sistema o Snort gera o alerta nos seus arquivos de logs. O problema é que o Snort diferentemente do Portsentry, apenas gera os alertas não podendo bloquear os hosts que fizeram o ataque, Ja li alguns tutorias pela internet sobre o Snort em português (e agradeço os autores por o terem escrito) mas infelizmente eles apenas mostram como instalar o Snort somente e esquecem da ferramenta chamada Guardian que tem o papel de ler os logs do Snort em tempo real e bloquear os hosts que fizeram os ataques.

Agora que estamos conversados sobre o objetivo deste tutorial, chegou a hora de botar a mão na massa.

Primeiramente vou avisando que o Snort depende de uma biblioteca chamada libpcap, que pode ser baixada em http://www.tcpdump.org/release/libpcap-0.7.1.tar.gz como eu estou usando o Slackware 8.1 que ja vem com o pacote tcpdump não precisei instalar o libpcap, se na hora da compilação o Snort gerar um tipo de erro de falta dessa biblioteca você tera que seguir os seguintes passos descritos abaixo, lembrando que todos as operações foram feitas no diretorio /usr/locar/src.

bash-2.05a# tar -xvzf libpcap-0.7.1.tar.gz

bash-2.05a# cd libpcap-0.7.1/

bash-2.05a# ./configure

bash-2.05a# make

bash-2.05a# make install

Vamos baixar o codigo fonte do Snort em http://www.snort.org/dl/snort-1.9.0.tar.gz, eu usei a versão 1.9.0 neste tutorial. O processo de instalação é simples como mostrado abaixo.

bash-2.05a# tar -xvzf snort-1.9.0.tar.gz

bash-2.05a# cd snort-1.9.0/

bash-2.05a# ./configure

bash-2.05a# make

bash-2.05a# make install

Criando o diretorio onde ficaram as configurações do Snort

bash-2.05a# mkdir /etc/snort

Vamos baixar o pacote de regras atualizadas que o Snort usa, o pacote se chama snortrules-stable.tar.gz e pode ser baixado em http://www.snort.org/dl/rules/snortrules-stable.tar.gz.

Descompactando e copiando o conteudo para o diretorio onde ficam as configurações do Snort.

bash-2.05a# tar -xvzf snortrules-stable.tar.gz

bash-2.05a# cd rules/

bash-2.05a# cp * /etc/snort/

Editando o arquivo de configurações do Snort que se encontra em /etc/snort/snort.conf, vamos aplicar algumas poucas mudanças para o Snort poder rodar sem problemas.

var HOME_NET any # mudar o any para o ip de seu sistema ou da rede inteira, por exemplo eu estou usando o ip 192.168.1.1 na minha placa de rede mas eu posso usar a notação 192.168.1.0/24 para o Snort farejar os ips 192.168.1.1 ate 192.168.1.254 .

var RULE_PATH ../rules # mudar o ../rules para o diretorio onde estão os arquivos de regras do Snort, como eu copiei todo o conteudo de regras para o /etc/snort mudei o valor para /etc/snort .

include $RULE_PATH/bad-traffic.rules # são os arquivos de regras que serão usados pelo Snort, estão nas linhas finais do snort.conf e cabe a você habilitar o que lhe convem (eu habilitei todos), para habilitar basta tirar o # do começo da linha (descomentar a linha) e para desabilitar basta adicionar o # ao começo da linha (comentar a linha).

Criando o usuario e o grupo para rodar o Snort.

bash-2.05a# groupadd snort

bash-2.05a# useradd snort -g snort

Criando o diretorio de logs do Snort.

bash-2.05a# mkdir /var/log/snort

Alterando o dono dos diretorios que o Snort irá usar para usuario snort e grupo snort.

bash-2.05a# chown snort.snort /etc/snort/ -R

bash-2.05a# chown snort.snort /var/log/snort/ -R

Vamos testar se esta tudo certo para que o Snort funcione corretamente, vamos inicia-lo e ver as mensagens de log.

bash-2.05a# snort -u snort -g snort -D -c /etc/snort/snort.conf -l /var/log/snort/

bash-2.05a# tail /var/log/messages

Dec 6 22:05:15 slack snort: All

Dec 6 22:05:15 slack snort:

Dec 6 22:05:15 slack snort: Portscan2 config:

Dec 6 22:05:15 slack snort: log: /var/log/snort//scan.log

Dec 6 22:05:15 slack snort: scanners_max: 3200

Dec 6 22:05:15 slack snort: targets_max: 5000

Dec 6 22:05:15 slack snort: target_limit: 5

Dec 6 22:05:15 slack snort: port_limit: 20

Dec 6 22:05:15 slack snort: timeout: 60

Dec 6 22:05:16 slack snort: Snort initialization completed successfully, Snort running

Pela ultima linha constatamos que esta tudo certo com o Snort.

Se o seu objetivo era apenas instalar o Snort para ver como anda os ataques ao seu sistema o tutorial acaba aqui para você. Mas se por acaso você alem de detectar os ataques quer barrar o trafego da maquina hostil ao seu sistema, continue com a instalação do Guardian.

Baixe o Guardian em http://www.snort.org/dl/contrib/other_tools/guardian/guardian-1.6.tar.gz, a versão usada neste tutorial é o Guardian 1.6, lembrando que o Guardian é escrito em perl, portanto é necessario você ter o perl instalado no seu sistema.

Descompactando o Guardian.

bash-2.05a# tar -xvzf guardian-1.6.tar.gz

bash-2.05a# cd guardian-1.6/

Agora você tem que decidir qual programa filtro de pacotes quer que funcione junto com o Guardian para barrar o trafego das maquinas hostis ao seu sistema, O Guardian funciona junto com dois scripts shell chamados guardian_block.sh e guardian_unblock.sh.

guardian_block.sh: script que o Guardian usa para adicionar o ip da maquina hostil ao seu filtro de pacotes.

guardian_unblock.sh: script que o Guardian usa para deletar o ip da maquina hostil do seu filtro de pacotes.

Sendo assim vamos ao diretorio scripts para copiar esses dois scripts para o /usr/local/bin/

bash-2.05a# cd scripts/

bash-2.05a# ls

freebsd_block.sh freebsd_unblock.sh ipchain_block.sh ipchain_unblock.sh iptables_block.sh iptables_unblock.sh

Como mostrado nesse diretorio temos seis scripts ja prontos para utilizar com o Guardian, basta escolher qual usar e copiar para o /usr/local/bin com os nomes de guardian_block.sh e guardian_unblock.sh, como eu vou trabalhar com o iptables eu vou proceder do seguinte modo.

bash-2.05a# cp iptables_block.sh /usr/local/bin/guardian_block.sh

bash-2.05a# cp iptables_unblock.sh /usr/local/bin/guardian_unblock.sh

Copiando o resto do programa para os seus devidos locais.

bash-2.05a# cd ..

bash-2.05a# cp guardian.conf /etc/

bash-2.05a# cp guardian.pl /usr/local/bin/

Editando o /etc/guardian.conf mude os seguintes valores.

Interface eth0 # mude para a interface que você vai usar para barrar os hosts hostis.

AlertFile /var/adm/secure # mude para /var/log/snort/alert .

TimeLimit 86400 # mude para quanto tempo (em segundos) você quiser que o host fique barrado pelo firewall, use o valor 99999999 desabilitar essa opção.

Criando o arquivo de logs do Guardian em /var/log.

bash-2.05a# touch /var/log/guardian.log

Criando o arquivo /etc/guardian.ignore, e inserindo nele os ips que o Guardian vai ignorar.

bash-2.05a# touch /etc/guardian.ignore

Agora edite o arquivo colocando os ips que o Guardian deve ignorar, lembrando que deve ficar um ip por linha, veja como ficou o meu arquivo.

bash-2.05a# cat /etc/guardian.ignore

127.0.0.1

192.168.1.1

Inicie o Guardian desse modo.

bash-2.05a# guardian.pl -c /etc/guardian.conf

OS shows Linux

Warning! HostIpAddr is undefined! Attempting to guess..

Got it.. your HostIpAddr is 192.168.1.1

My ip address and interface are: 192.168.1.1 eth0

Loaded 2 addresses from /etc/guardian.ignore

Becoming a daemon..

Com essa mensagem mostrada pelo Guardian concluimos a sua instalação.

Bom este tutorial termina por aqui, acho que o objetivo de instalar o Snort + Guardian foi mostrado de uma maneira clara sem tanta “receita de bolo”, espero que com essa pequena contribuição eu consiga ajudar alguem. Tambem quero deixar claro que eu não sou o dono da verdade e podem existir maneiras mais interessantes de fazer funcionar o que foi exposto neste tutorial, se você tem conhecimento compartilhe com a comunidade :]

Tambem queria pedir desculpas pelos erros de português em geral :]