Snort + Mysql + Guardian + ACID
Ataliba Teixeira
Publicado em 10/07/2003 ás 10 h20 min
Bom, o Snort é uma das ferramentas mais conhecidas de IDS na atualidade, para sistemas Linux. Por este motivo, acabei escolhendo falar sobre ele. O uso da base MySQL foi principalmente, para poder usar o ACID, que é uma ferramenta que usa qualquer browser disponível no mercado, e assim, torna a leitura dos logs do acid, muito mais interessante. Ou seja, elimina aquele lado chato da leitura dos logs em um sistema e que normalmente, acaba deixando com que nós deixemos alguma coisa passar ( às vezes o que passa é o mais importante ). O Guardian, é uma ferramenta que lê os logs do snort em tempo real, e bloqueia algum ataque que esteja vindo de algum lugar na internet, ou melhor, bloqueia alguma coisa que possa vir a ser um problema para seu servidor e/ou você.
Você vai precisar baixar :
- Snort - http://www.snort.org
- ACID - http://www.acidlab.org
- Mysql - http://www.mysql.com
- PHP - http://www.php.net
Bom, com as ferramentas em mãos, vamos agora compilar os programas ( caso você esteja pensando em baixar pacotes dos programas citados acima, consulte o site da sua distribuição favorita, e baixe os pacotes referentes, levando em conta suas dependências ). Primeiro, iremos copiar todas as ferramentas para o diretório /usr/src ( somente para tornar o processo de escrita deste texto mais fácil. ). Após copiar todas as ferramentas para o diretório /usr/src, iremos começar pela compilação do mysql e também pela descompactação do snort :
# cd /usr/src/
# tar -xvzf mysql-x-x-x.tar.gz
# cd mysql-x-x-x
# addgroup mysql
# adduser mysql -g mysql -s /dev/nologin
os dois passos acima podem ser deixados de lado, a maioria das distribuições já vem por padrão com o usuário e grupo do mysql criados.
# ./configure --prefix=/usr/local/mysql && make && make install
# cd /usr/local/mysql
# chown -R mysql.mysql /usr/local/mysql/var
# bin/mysqld_safe &
# cd mysql-test
# ./install-test-db
Agora com MySQL rodando, vamos garantir que o mesmo vá funcionar toda vez que seu Linux for reiniciado. Escolha um editor de sua preferência e digite os seguintes comandos no seu arquivo /etc/rc.d/rc.local. Lembre-se de colocar uma senha no seu mysql, pois ele por padrão funciona sem nenhuma senha.
if [ -x /usr/local/mysql/bin/mysqld_safe ];then
echo \"Iniciando o Mysql \" /usr/local/mysql/bin/mysqld_safe &
fi
Executados os passos acima, agora vamos passar para a preparação do mesmo para trabalhar com o snort.
# /usr/local/mysql/bin/mysql -p
já no shell do mysql.
> create database snort;
> grant insert, select on snort.* to snort@localhost identified by \'senha_do_snort\';
> grant insert, select, delete, update, create on snort.* to acid@localhost identified by \'senha_do_acid\';
> quit
Agora, iremos criar o MySQL a base de dados do snort dentro do MySQL. Lembra-se que copiamos todos os nossos arquivos para o diretório /usr/src ? Bom, então vamos lá :
# cd /usr/src
# tar -xvzf snort-x-x-x.tar.gz
# cd snort-x-x-x/contrib
# mysql -p snort < create_mysql
ou
# cd /usr/src
# tar -xvzf snort-x-x-x.tar.gz
# cd snort-x-x-x/contrib
# mysql -p snort
> \\. create_mysql
> quit
Ambos os processos irão criar a base de dados dentro do MySQL. Preparado o MySQL, agora vamos passar para a compilação do snort. Porque compilamos primeiro o mysql ? Bom, porque o snort vai precisar de alguns cabeçalhos do mysql que estarão presentes no sistema somente após o mesmo estar instalado. Além disto, há um passo opcional. Você vai precisar da libcap. Portanto, caso vocẽ não tenha a mesma instalada, veja só os passos que vocẽ vai ter que seguir antes de prosseguir com a instalação.
Baixe a LibCap do seguinte site http://www.tcpdump.org. Uma observação, se você usar o Slackware e possuir o tcpdump instalado, vocẽ já possui a libcap.
# cp libcap-x-x-x.tar.gz /usr/src
# tar -xvzf libcap-x-x-x.tar.gz
# cd libcap-x-x-x
# ./configure && make && make install
# ldconfig
Executados os passos acima, tendo certeza de possuir a libcap, agora vamos para a compilação do Snort.
# cd /usr/src/snort-x-x-x
# ./configure --with-mysql=/usr/local/mysql
# make && make install
# mkdir /etc/snort
# mkdir /var/log/snort
# cd /usr/src
# tar -xvzf snortrules-current.tar.gz
# cd rules
# cp * /etc/snort
# cd /etc/snort
# wget http://cerebro.freeshell.org/sections/aplicationpatches/vision18.conf.gz
Obs : esta regra estava disponivel no site http://www.whitehats.com, mas varias pessoas reclamaram que nao estavam conseguindo baixa-las la, portanto, disponibilizei por aqui mesmo .
# gzip -d vision18.conf.gz
Bom, a partir do que foi feito acima, já temos o Snort instalado no nosso sistema operacional. Agora, iremos para a parte de configuração do mesmo ( estou fazendo tudo passo a passo para que a pessoa ao final do artigo tenha uma estrutura de IDS totalmente funcional ).
Você vai editar as seguintes linhas no seu snort.conf : var HOME_NET any - aqui você vai mudar o any para o ip de sua placa de rede ou então a sua rede inteira. Isto vai ser opcional e você vai ter que achar a melhor opção. Uma observação, caso você tenha mais de uma placa de rede, você vai usar a seguinte notação var HOME_NET [10.1.1.0/24,192.168.1.0/24].
var RULE_PATH ../rules - como o diretòrio de regras está em /etc/snort, você vai mudar o valor desta variável para /etc/snort.
include $RULE_PATH/bad-traffic.rules - é a parte final do arquivo de configuração do snort, você pode optar por descomentar todas ou então, deixar somente as que lhe interessarem. Estas linhas são os arquivos de regras do snort, que serão usadas para gerar os logs que você irá ler.
Feito isto, vamos adicionar a regras vision18.conf e ainda, também, preparar o arquivo de configuração para trabalhar com o banco de dados. Continue com o arquivo de configuração aberto.
Procure a seguinte linha :
output database: log, mysql, user=snort password=suasenha dbname=snort host=localhost
E mude os dados para os que você já tinha configurado no início do artigo. Logo, após iremos adicionar a regra vision18 no seu arquivo de configuração. Vá até o final do arquivo e adicone a seguinte linha : include $RULE_PATH/vision18.conf
Pronto, agora o seu snort já está preparado para rodar sem problema nenhum. Agora, vamos finalmente colocar o snort para funcionar.
# snort -D -c /etc/snort/snort.conf -l /var/log/snort/
Conferindo se o snort já está rodando :
# tail -f /var/log/messages
Caso você tenha uma linha com a seguinte mensagem Snort initialization completed successfully, Snort running, o seu snort está rodando sem nenhum problema. Caso não esteja rodando, releia todos os passos e veja se esqueceu alguma coisa.
Bom, a esta altura do artigo, você já tem um snort funcional ( e se você quiser monitorar as mensagens em tempo real no seu snort, deixei uma ferramenta disponível no meu site http://ataliba.eti.br/sections/shell-scripts/real-snort.sh ).
Mas, lógico, o snort sozinho não faz todo o serviço. Por isto, ele trabalhar com outra ferramenta que irá aproveitar suas regras, é uma boa pedida. Neste artigo, iremos instalar o Guardian, que faz a leitura das regras do snort em tempo real, agindo contra um possível invasor no momento da tentativa.
Primeiro, vamos baixar a ferramenta. Baixe o Guardian no site do Snort. Ele está na parte de contrib, ou seja, ferramentas feitas para trabalhar com o snort. Baixado o arquivo, vamos passar para a configuração e preparo do mesmo para trabalhar em paralelo com o snort.
# mv guardian-x-x.tar.gz /usr/src
# tar -xvzf guardian-x-x.tar.gz
# cd guardian-x-x
# cd scripts
# ls
# freebsd_block.sh freebsd_unblock.sh ipchain_block.sh ipchain_unblock.sh iptables_block.sh iptables_unblock.sh
Como pode ser visto, há diversos scripts neste diretório. O Guardian, trabalha com os seguintes scripts, guardian_block.sh e guardian_unblock.sh. Você tem que escolher o filtro de pacotes que você usa e instalar os scripts necessário. No meu caso e acredito, em boa parte dos sistemas hoje, utilizei os scripts referentes ao iptables.
# cp iptables_block.sh /usr/bin/guardian_block.sh
# cp iptables_unblock.sh /usr/bin/guardian_unblock.sh
# chmod 755 /usr/bin/guardian_block.sh /usr/bin/guardian_unblock.sh
Copiando agora o resto do programa para seus locais necessários :
# cd ..
# cp guardian.pl /usr/bin
# chmod 755 /usr/bin/guardian.pl
# cp guardian.conf /etc/
Agora, vamos mudar os valores para os referentes a sua estrutura de rede :
Interface eth0 -> sua interface eth0, a que vai ter os hosts hostis barrados
AlertFile /var/adm/secure -> mude para /var/log/snort/alert
TimeLimit 86400 -> mude para quanto tempo em segundos você quer que o host fique barrado pelo firewall, 99999999 desabilita esta opção.
Agora criamos o arquivo de log do guardian :
# touch /var/log/guardian.log
Criando agora o arquivo guardian.ignore, com os ips que ele vai ignorar. Tenha certeza de adicionar todos os ips que você achar que devem ser ignorados.
# touch /etc/guardian.ignore
Exemplo, se você quer ignorar os ips 192.168.1.1 , 200.200.200.200 e 127.0.0.1, você vai editar o arquivo do seguinte modo :
# cat /etc/guardian.ignore
200.200.200.200
127.0.0.1
192.168.1.1
Logo após, vamos iniciar o guardian :
# 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 3 addresses from /etc/guardian.ignore
Becoming a daemon..
Guardian iniciado. A primeira parte do nosso tutorial, já está funcionando. Agora, iremos preparar o sistema para possuir um apache + php ( suporte mysql ) + acid rodando, para que você possa ler seus logs do snort on line, sem que tenha que acessar arquivos textos enormes dentro do seu sistema Linux.
Pegue as seguintes bibliotecas :
* ADODB - http://php.weblogs.com/adodb
* PHPLOT - http://www.phplot.com
* GD - http://www.boutell.com/gd
Agora, vamos compilar o php para ter suporte ao mysql e ao apache :
# cd /usr/src
# tar -xvzf apache-x-x-x.tar.gz
# tar -xvzf php-x-x-x.tar.gz
# cd apache-x-x-x
# ./configure
# cd ..
# cd php-x-x-x
# ./configure --with-apache=../apache-x-x-x --with-mysql=/usr/local/mysql -with-gd --prefix=/usr/local/apache --enable-track-vars
# make && make install
# cd .. # cd apache-x-x-x # ./configure -activate-module=src/modules/php4/libphp4.a
# make && make install
Agora vamos descompactar cada uma das bibliotecas no diretório em que o de documentos html em que o apache estiver instalado :
# tar -xvzf adodb.tgz
# mv adodb-x-x /usr/local/apache/htdocs
# tar -xvzf phplot-x-x-x.tar.gz
# mv phplot-x-x /usr/local/apache/htdocs
Agora, vamos preparar o apache para rodar o php. Adicione as seguintes linhas ao seu httpd.conf ( está no diretório /usr/local/apache/conf/httpd.conf ).
Adicione na seguinte opção, as opções de index :
Adicione depois, também, no arquivo de configuração a seguinte linha :
AddType application/x-httpd-php .php .php3 .phtml
AddType application/x-httpd-php-source .phps
Bom, agora o apache já está pronto para funcionar. Bom, seu sistema vai ficar on line em um servidor http. Você precisa também, proteger o seu diretório do acid, para que ninguém venha a ter acesso a estas informações além de você ou outras pessoas autorizadas.
# /usr/local/apache/bin/htpasswd -c /usr/local/etc/passwd usuario
No seu httpd.conf adicione as seguintes linhas :
Agora, vamos instalar e configurar o acid.
# tar -xvzf acid-x-x-x.tar.gz
# mv acid /usr/local/apache/htdocs/acid
# cd /usr/local/apache/htdocs/acid
Agora, configuração do acid. Esta é a última parte do artigo, finalmente teremos o sistema rodando e facilitando a sua vida :
# vim acid_conf.php
Após estas configurações o seu sistema já estará pronto para rodar.
Agora você vai digitar :
# /usr/local/apache/bin/apachectl start
E você já pode acessar o seu acid via :
Para finalizar, adicione no seu /etc/rc.d/rc.local :
# echo \"/usr/local/apache/bin/apachectl start\" >> /etc/rc.d/rc.local
# echo \"snort -D -c /etc/snort/snort.conf -l /var/log/snort/\" >> /etc/rc.d/rc.local
# echo \"guardian.pl -c /etc/guardian.conf\" >> /etc/rc.d/rc.local
Espero que este artigo tenha sido de alguma utilidade para a comunidade. Qualquer dúvida e/o erro, não se acanhe em escrever apresentando o mesmo. Abraços a todos.
Referências :
- Manual do Snort - [ http://www.bsbnet.com/snort/ ]
<p> </p> </li> <li>Snort + Guardian - [ <a href="http://www.underlinux.com.br/modules.php?nameSections&op=viewarticle&artid=167">http://www.underlinux.com.br/modules.php?nameSections&op=viewarticle&artid=167</a> ] <p> </p> </li> <li>Linuxit ( site do autor do artigo acima ) - [ <a href="http://www.linuxit.com.br">http://www.linuxit.com.br</a> ]</li>