Introdução
Snort é um sistema de detecção de intrusos (IDS), o qual usa seus sensores e um conjunto de regras para monitorar todo o tráfego da rede e gerar alertas de possíveis ameaças à segurança de seus sistemas. Com a ajuda do plugin SnortSam, será possível automatizar bloqueios de endereços IP em seu firewall.
Neste tutorial será mostrado como instalar e configurar o Snort. Como este pacote só gera alertas de ameaças, será necessária a ajuda do plugin SnortSam para recebê-los e executar uma regra de firewall para bloquear o endereço IP do computador mal-intencionado.
Para visualizar os alertas do Snort utilizaremos uma interface amigável de um sistema Web chamado BASE (Basic Analysis and Security Engine), conectada a uma base de dados emMySQL.
Abaixo, o sistema operacional e versões dos pacotes utilizados:
- S.O. → Debian Squeeze 6.0.5
- Snort → 2.9.2.2
- SnortSam → 2.70
- Firewall → IPtables
- BASE → 1.4.5
- MySQL → 5.1
Para proceder a instalação dos pacotes foi utilizado um servidor com duas placas de rede atuando como firewall/roteador, recebendo Internet por uma placa e distribuindo para a rede interna através da outra placa.
Endereços IPs do firewall:
- eth0 = 10.0.0.5 - obtido por DHCP = Internet (WAN)
- eth1 = 192.168.1.1 - IP fixo - Rede interna (LAN)
De forma resumida, para utilizar o Snort com o SnortSam, será necessário:
- Baixar o código fonte do Snort;
- Aplicar patch SnortSam sobre o fonte do Snort;
- Compilar e instalar Snort;
- Baixar código fonte do SnortSam;
- Compilar e instalar SnortSam.
Instalação do Snort
Inicie pelos procedimentos de compilação e instalação do
Snort
, para isto é preciso instalar algumas dependências via
apt-get
:
# apt-get install -y libfont-afm-perl libgcrypt11 libgnutls26 libgpg- error0 libhtml-format-perl libhtml-parser-perl autoconf automake # apt-get install -y libhtml-tagset-perl libhtml-tree-perl libltdl7 libmailtools-perl libmysqlclient16 libmysql++-dev libpcap0.8 libpcre3
# apt-get install -y libprelude2 libtasn1-3 liburi-perl libwww-perl oinkmaster libpcap-dev libpcre3-dev libxml2-dev bison flex libprelude-dev libdumbnet-dev
Outras dependências
Instalando
libdnet
:
# wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz
# tar zxvf libdnet-1.12.tgz
# cd libdnet-1.12
# ./configure --prefix=/usr --enable-shared
# make
# make install
# tar zxvf libdnet-1.12.tgz
# cd libdnet-1.12
# ./configure --prefix=/usr --enable-shared
# make
# make install
Instalando DAQ:
# cd ..
# wget http://www.snort.org/downloads/1623 -O daq-0.6.2.tar.gz
# tar zxvf daq-0.6.2.tar.gz
# cd daq-0.6.2
# ./configure
# make
# make install
# wget http://www.snort.org/downloads/1623 -O daq-0.6.2.tar.gz
# tar zxvf daq-0.6.2.tar.gz
# cd daq-0.6.2
# ./configure
# make
# make install
Atualizando as bibliotecas (importante para que não ocorra alguns erros):
# echo >> /etc/ld.so.conf /usr/lib
# ldconfig
# ldconfig
Preparando o Snort:
# cd ..
# wget http://www.snort.org/dl/snort-current/snort-2.9.2.2.tar.gz
# tar zxvf snort-2.9.2.2.tar.gz
# cd snort-2.9.2.2
# wget http://www.snort.org/dl/snort-current/snort-2.9.2.2.tar.gz
# tar zxvf snort-2.9.2.2.tar.gz
# cd snort-2.9.2.2
Download e aplicação do patch SnortSam: Baixe o patch compatível com a versão do Snort, no caso 2.9.2.2:
Descompacte na mesma pasta do código fonte do Snort e aplique o patch:
# gunzip snortsam-2.9.2.2.diff.gz
# patch -p1 < snortsam-2.9.2.2.diff
# patch -p1 < snortsam-2.9.2.2.diff
Compilar e instalar o Snort:
# ./configure --prefix=/usr/local/snort --with-mysql --with-daq-libraries=/usr/local/lib/daq/ --disable-prelude --disable-rzb-saac
# make
# make install
# make
# make install
Caso encontre algum erro de razorback ou libtool, faça os procedimentos abaixo:
1. Edite o arquivo "configure.in", comente as linhas: 1526 à 1557, que trata sobre o razorback e para corrigir o libtool.
2. Edite o arquivo "autojunk.sh" acrescentando o parâmetro: "-- force", na linha onde consta o comando libtoolize
3. Por último, torne o arquivo "autojunk" executável e execute:
2. Edite o arquivo "autojunk.sh" acrescentando o parâmetro: "-- force", na linha onde consta o comando libtoolize
3. Por último, torne o arquivo "autojunk" executável e execute:
# chmod +x autojunk.sh
# ./autojunk.sh
# ./autojunk.sh
Repita o processo de compilação e instalação.
Crie a pasta para os arquivos de configuração do Snort e copie os arquivos de configuração fornecidos na pasta do código fonte:
# mkdir /etc/snort
# cp src-pacote-snort/etc/*.* /etc/snort/
# cp src-pacote-snort/etc/*.* /etc/snort/
Edite o arquivo /etc/snort/snort.conf, localize e altere as linhas para que fique conforme abaixo:
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/preproc_rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/preproc_rules
dynamicpreprocessor directory /usr/local/snort/lib/snort_dynamicpreprocessor
dynamicengine /usr/local/snort/lib/snort_dynamicengine/libsf_engine.so
dynamicengine /usr/local/snort/lib/snort_dynamicengine/libsf_engine.so
#dynamicdetection directory /usr/local/lib/snort_dynamicrules
# Linhas necessárias para enviar os alertas para o banco de dados Mysql.
output database: log, mysql, user=snort password=senha-snort dbname=snort host=localhost
output database: alert, mysql, user=snort password=senha-snort dbname=snort host=localhost
output database: log, mysql, user=snort password=senha-snort dbname=snort host=localhost
output database: alert, mysql, user=snort password=senha-snort dbname=snort host=localhost
# Linha necessária para enviar os alertas específicos ao daemon SnortSam.
output alert_fwsam: 127.0.0.1:898/password
output alert_fwsam: 127.0.0.1:898/password
Em "Customize your rule site", comente todas regras com a exceção da "icmp-info.rules", pois será a única regra usada em nossos teste. Salve e feche o arquivo de configuração.
Crie o usuário "snort" para o sistema:
# useradd snort -d /var/log/snort -s /bin/false -c SNORT_IDS
Crie uma pasta para os logs:
# mkdir /var/log/snort
# chown -R snort /var/log/snort
# chown -R snort /var/log/snort
Faça o download do pacote de regras do Snort no site oficial (necessário criar uma conta no site):
E descompacte em
/etc/snort/
.
Faça um primeiro teste, execute o comando para que o Snort mostre na tela os pacotes da rede capturados, mas antes, coloque a interface eth0 no modo promíscuo:
# ifconfig eth0 promisc
# /usr/local/snort/bin/snort -v -i eth0
Instalação do MySQL e BASE
Instalação do
MySQL
:
# apt-get install mysql-server -y
O instalador irá pedir uma senha de acesso root ao MySQL (coloque a senha que preferir). Acesse o console de administração do MySQL e coloque a senha criada na hora da instalação:
# mysql -u root -p
Use os comandos abaixo para criar a base de dados e usuário para o Snort:
mysql> create database snort;
mysql> grant all on snort.* to snort@localhost identified by 'senha-snort';
mysql> flush privileges;
mysql> exit;
mysql> grant all on snort.* to snort@localhost identified by 'senha-snort';
mysql> flush privileges;
mysql> exit;
Crie as tabelas importando o arquivo "create_mysql" encontrado dentro do código fonte do Snort:
# cd src-pacote-snort/schema
# mysql -u root -p snort < create_mysql
# mysql -u root -p snort < create_mysql
Instalar o BASE:
# apt-get install acidbase -y
O instalador irá perguntar qual senha será usada para acessar a base de dados snort no MySQL, digite "senha-snort", confirme a senha digitando-a novamente.
Acrescente o acidbase no Apache:
# nano /etc/apache2/sites-enabled/000-default
Posicione o cursor antes da tag </VirtualHost>, aperte Ctrl+R e insira o caminho /etc/acidbase/apache.conf.
Permita o acesso via rede local alterando a linha:
allow from 127.0.0.0/255.0.0.0
Para:
allow from 192.168.1.0/255.255.255.0
Reinicie o serviço apache2:
# invoke-rc.d apache2 restart
Acesse a página do acidbase via rede local: http://192.168.1.1/acidbase
Para completar a instalação, surgirá uma página com um erro, mas é normal. Clique em Setup Page e depois em Create_ACID_AG. Após feita a instalação com sucesso, acesse novamente o endereço da página do acidbase.
Instalação do serviço SnortSam
Execute os comandos:
# wget http://www.snortsam.net/files/snortsam/snortsam-src-2.70.tar.gz
# tar zxvf snortsam-src-2.70.tar.gz
# cd snortsam
# chmod +x makesnortsam.sh
# ./makesnortsam.sh
# cp snortsam /usr/local/bin
# tar zxvf snortsam-src-2.70.tar.gz
# cd snortsam
# chmod +x makesnortsam.sh
# ./makesnortsam.sh
# cp snortsam /usr/local/bin
Crie um arquivo "snortsam.conf" em /etc e adicione as seguintes linhas de configuração:
defaultkey password
accept localhost
keyinterval 30 minutes
dontblock 192.168.1.1 # rede local
rollbackhosts 50
rollbackthreshold 20 / 30 secs
rollbacksleeptime 1 minute
logfile /var/log/snort/snortsam.log
loglevel 3
daemon
nothreads
# linha importante para gerar os bloqueios via iptables
iptables eth0 LOG
bindip 127.0.0.1
accept localhost
keyinterval 30 minutes
dontblock 192.168.1.1 # rede local
rollbackhosts 50
rollbackthreshold 20 / 30 secs
rollbacksleeptime 1 minute
logfile /var/log/snort/snortsam.log
loglevel 3
daemon
nothreads
# linha importante para gerar os bloqueios via iptables
iptables eth0 LOG
bindip 127.0.0.1
Pra finalizar as configurações, escolha um arquivo de regras dentro da pasta
/etc/snort/rules/
e acrescente no final da regra o parâmetro "fwsam: src, 5 minutes", onde src é o IP de origem e 5 minutes é o tempo em que o IP de origem será bloqueado.
Exemplo: Edite o arquivo "icmp-info.rules", encontre e descomente a regra com a descrição "ICMP-Info Echo Reply". Acrescente nesta regra o parâmetro "fwsam: src, 5 minutes" ao final da linha, como abaixo:
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"ICMP-INFO Echo Reply"; icode:0; itype:0; classtype:misc-activity; sid:408; rev:6;fwsam: src, 5 minutes;)
Testes finais
Inicie todos os serviços:
# /usr/local/snort/bin/snort -u snort -i eth0 -c /etc/snort/snort.conf -l /var/log/snort -Dq
Para depurar erros do Snort, inicie o serviço sem o parâmetro "-Dq".
# /usr/local/bin/snortsam
Para depurar erros do SnortSam, inicie o serviço snortsam-debug que se encontra na mesma pasta do pacote "snortsam-src-2.70.tar.gz" descompactado e compilado anteriormente.
Agora peça para alguém de fora de sua rede pingar para seu servidor e acompanhe via BASE os alertas gerados pelo Snort. Também é possível acompanhar os logs pra analisar os bloqueios ou possíveis erros de configuração:
# tail -f /var/log/snort/snortsam.log
Com Snort e SnortSam também é possível trabalhar de forma distribuída, você pode instalar Snort em outro local estratégico de sua rede e configurá-lo para que envie os alertas para o Daemon SnortSam em seu firewall, fazendo com que ele aplique a regra de bloqueio.
* Mas lembre-se, é possível que o Snort gere falsos positivos, então seja cauteloso ao acrescentar o parâmetro fwsam nas regras.
Referências
Snort e BASE no Debian:
- http://www.aboutdebian.com/snort.htm
- HowTo: Tutorial Snort no Debian Squeeze com BASE « Blog Cuidado Digital
Documentação do SnorSam:
Creditos:viniciusraupp(VOL)
Obrigado pelos crédito meu caro, aproveita pra elogiar o ótimo conteúdo sobre segurança em seu site.
ResponderExcluirOpa valeu cara :D
Excluir