Enjoy…
Objetivo
Instalação do Snort com gravação de log unificado (unified log), instlação do PostgreSQL 8.1 à partir dos pacotes pré-compilados para distribuição Debian Etch e também a compilação e configuração do aplicativo Barnyard, utilitário responsável pela leitura dos logs unificados e envio das informações para o banco de dados PostgreSQL.
Configurações utilizadas:
* Hostname: nids
* Interface de rede: eth0
* Endereço IP: 192.168.0.133
* Endereço de rede: 192.168.0.0/24
Ao final dos procedimentos a seguir, estarão instalados:
* PostgreSQL 8.1
* Snort Version 2.3.3 (Build 14)
* Barnyard Version 0.2.0 (Build 32)
Instalação PostgreSQL
Para instalar utilize:
# aptitude install postgresql-8.1
Crie a base de dados e o usuário que irá utilizá-la:
# su - postgres
Crie a base de dados:
$ createdb snort
Crie o usuário que será utilizado pelo Snort, usuário "snort":
$ createuser -P snort
Digite a senha para a nova role: snort123[ENTER]
Digite-a novamente: snort123[ENTER]
A nova role poderá criar um super-usuário? (s/n) n
A nova role poderá criar bancos de dados? (s/n) n
A nova role poderá criar novas roles? (s/n) n
CREATE ROLE
* Neste tutorial estou utilizando uma senha fraca, para instalações em produção recomendo utilizar senhas robustas, onde na sua criação utilize letras maiúsculas e minúsculas, números, símbolos com pelo menos dez caracteres.
Crie regra para acesso local à base de dados snort para o usuário snort.
* Também não recomendo o uso de nomes com fácil dedução, tanto para o banco de dados como para o usuário que o utiliza, em produção modifique isto também.
Como usuário root, edite o arquivo /etc/postgresql/8.1/main/pg_hba.conf, e abaixo da entrada:
(…)
# Database administrative login by UNIX sockets
local all postgres ident sameuser
(…)
Acrescente:
local snort snort md5
Salve o arquivo e saia.
Explicando:
local - Origem da conexão feita ao banco de dados;
snort - Nome da base de dados;
snort - Nome do usuário que tem permissão de acesso;
md5 - Método utilizado para autenticação.
Reinicie o serviço PostgreSQL:
# invoke-rc.d postgresql-8.1 stop
# invoke-rc.d postgresql-8.1 start
Verifique se o PostgreSQL está ouvindo na porta 5432 e aguardando por conexões locais:
# lsof -i -n -P | grep 5432
Logo, será configurado a estrutura para base de dados do Snort…
Instalação Snort
Para instalar o Snort com o suporte a PostgreSQL no Debian, utilize:
# aptitude install snort-pgsql
Serão feitas perguntas, na primeira irá questionar qual é sua rede, para este documento adotamos a seguinte rede:
192.168.0.0/24
Na segunda pergunta, responda NÃO, afinal não queremos que o Snort guarde seus log em um banco de dados e sim em um arquivo de log unificado para utilização com Barnyard, que demonstro logo a seguir.
Por precaução, faça uma cópia de segurança do arquivo de configuração:
# cp -av /etc/snort/snort.conf /etc/snort/snort.conf.original
# cp -av /etc/snort/snort.debian.conf /etc/snort/snort.debian.conf.original
Na distribuição Debian Etch, dentro de /etc/snort existe um arquivo chamado snort.debian.conf onde algumas configurações específicas são definidas, edite o arquivo e faça as seguintes modificações:
DEBIAN_SNORT_STARTUP="boot"
DEBIAN_SNORT_HOME_NET="192.168.0.0/24"
DEBIAN_SNORT_INTERFACE="eth0"
Explicando:
DEBIAN_SNORT_STARTUP – Diz ao Snort que deve iniciar na inicialização do sistema operacional;
DEBIAN_SNORT_HOME_NET - Define sua rede local;
DEBIAN_SNORT_INTERFACE - A interface que o snort ficará ouvindo.
Edite o arquivo snort.conf procure pela entrada var HOME_NET any e configure:
var HOME_NET 192.168.0.0/24
Definindo a forma de log que o Snort gravará os logs, para utilização em conjunto com o Barnyard é preciso que utilize o método de log unificado (unified log). Procure pelas linhas abaixo e descomente-as:
output alert_unified: filename snort.alert, limit 128
output log_unified: filename snort.log, limit 128
Salve o arquivo, saia.
Explicando:
filename - Nome do arquivo onde ficarão gravados os logs;
limit - Tamanho máximo até seu rotacionamento. (128mb)
O log unificado (unified log) faz com que o Snort grave suas mensagens em formato octal em um arquivo binário, com isto, ganha-se muito desempenho pois o Snort não precisa parar seu processamento de pacotes para executar os INSERTS no banco de dados.
* De acordo com algumas notas postadas em diversos blogs pela internet, não teremos esta perda de performance no Snort 3.0 pois utilizará um sistema de processamento diferente do atual, novas features e outras informações sobre o snort 3.0 ficam para um próximo post. ;)
Para verifcar onde o Snort grava seus arquivos de log, entre outras definições (Debian):
# cat /etc/default/snort
Para iniciar o Snort, remova antes o arquivo:
# rm /etc/snort/db-pending-config
Inicie o serviço do Snort:
# invoke-rc.d snort start
Verifique o status do serviço:
# invoke-rc.d snort status
O resultado deve ser este:
Status of snort daemon(s): eth0 (ok).
Criando estrutura para base de dados do Snort
Torne-se usuário postgres novamente:
# su - postgres
Com o script sql fornecido pelo pacote snort-pgsql, crie as tabelas necessárias:
$ zcat /usr/share/doc/snort-pgsql/create_postgresql.gz | psql -U postgres snort
Dê permissão somente para consultar, atualizar e inserir nas seguintes tabelas ao usuário snort:
$ psql -U postgres snort -c "GRANT INSERT, SELECT, UPDATE ON TABLE data,detail,encoding,event,icmphdr,iphdr,opt,reference,reference_system,schema,sensor,sig_class,signature,sig_reference,tcphdr,udphdr TO snort;"
E também para atualizar as tabelas sequenciais:
$ psql -U postgres snort -c "GRANT UPDATE ON reference_ref_id_seq,reference_system_ref_system_id_seq,sensor_sid_seq,sig_class_sig_class_id_seq,signature_sig_id_seq TO snort;"
Volte a ser usuário root:
$ exit
Instalação Barnyard
Barnyard foi desenvolvido com o objetivo de ler os arquivos de log unificados e enviar seu conteúdo ao banco, desta forma diminuindo o serviço "braçal" de inserir os logs no banco assim aumenando a performance do Snort como já foi mencionado.
Acesse o diretório:
# cd /usr/src/
E baixe o Barnyard:
# wget http://www.snort.org/dl/barnyard/barnyard-0.2.0.tar.gz
Descompacte e acesse o diretório:
# tar xvzf barnyard-0.2.0.tar.gz
# cd barnyard-0.2.0
Para instalar o Barnyard com suporte a PostgreSQL no Debian Etch, supra as dependências instalando os pacotes:
# aptitude install build-essential postgresql-server-dev-8.1
Para ativar o suporte a PostgreSQL utilize o parâmetro –enable-postgres ao configurar:
# ./configure –enable-postgres
Compile e instale:
# make && make install
Será instalado dentro de /usr/local/bin o executável barnyard e um arquivo de exemplo para configuração é criado no diretório /usr/src/barnyard-0.2.0/etc, mas não será utilizado.
Para organizar, crie e acesse o diretório:
# mkdir /etc/snort/barnyard
# cd /etc/snort/barnyard
Crie os arquivos de configuração para o Barnyard:
# vi barnyard.conf
config localtime
config hostname: nids
config interface: eth0
config sid-msg-map: /etc/snort/sid-msg.map
config gen-msg-map: /etc/snort/gen-msg.map
config class-file: /etc/snort/classifications.config
output alert_acid_db: postgres, database snort, server localhost, user snort, password snort123, detail full
Salve, saia e defina as permissões para o arquivo de configuração:
chown root:snort /etc/snort/barnyard/barnyard.conf
chmod 640 /etc/snort/barnyard/barnyard.conf
Crie o diretório e defina as permissões onde serão guardados os logs processados pelo Barnyard:
# mkdir /var/log/snort/processados
# chmod 2750 /var/log/snort/processados
Primeiramente faça o teste executando em dois terminais distintos o Barnyard sem a opção (-D) que o transforma em serviço.
Em um terminal, execute-o apontando para o arquivo de log unificado snort.log:
# /usr/local/bin/barnyard -c /etc/snort/barnyard/barnyard.conf -d /var/log/snort -a /var/log/snort/processados -f snort.log -w /etc/snort/barnyard/snort.log.bookmark
Em outro terminal execute apontando para o arquivo de log unificado snort.alert:
# /usr/local/bin/barnyard -c /etc/snort/barnyard/barnyard.conf -d /var/log/snort -a /var/log/snort/processados -f snort.alert -w /etc/snort/barnyard/snort.log.bookmark
Os terminais ficarão presos com uma mensagem similar a esta:
Barnyard Version 0.2.0 (Build 32)
Opened spool file ‘/var/log/snort/snort.log.1206731745′
Waiting for new data
Pare os dois Barnyards agora (Ctrl+C) e inicie-os como serviço.
Um apontando para o snort.log:
# /usr/local/bin/barnyard -c /etc/snort/barnyard/barnyard.conf -d /var/log/snort -a /var/log/snort/processados -f snort.log -w /etc/snort/barnyard/snort.log.bookmark -D
E outro apontando para snort.alert:
# /usr/local/bin/barnyard -c /etc/snort/barnyard/barnyard.conf -d /var/log/snort -a /var/log/snort/processados -f snort.alert -w /etc/snort/barnyard/snort.alert.bookmark -D
Explicando:
-c - Define o arquivo de configuração;
-d - Diretório onde será feito a busca pelos arquivos de log;
-a - Diretório onde serão guardados os aquivos que já foram processados;
-f - Arquivo de log unificado que o Barnyard processará;
-w - Arquivo utilizado para bookmark;
-D - Transforma-o em serviço.
Bookmark é utilizado para que o Barnyard lembre-se de onde parou caso ocorra algum problema, desta forma não sendo necessário processar novamente todo o arquivo de log.
O ambiente Snort, PostgreSQL e Barnyard está funcionando, abaixo demonstro uma forma de testar.
Colocando à prova
Para testar, de uma outra máquina faça uma varredura onde o Snort possa registrar algo, rode um Nmap:
# nmap -e <interface> -S <IP spoofado> -sX <IP do alvo>
Neste ambiente com estas configurações foi executado:
# nmap -e eth0 -S 10.10.10.10 -sX 192.168.0.133
Depois acesse a base de dados snort com usuário snort:
# psql -U snort snort
E faça uma consulta:
SELECT * from signature;
E também:
SELECT * from event;
Aparecerão informações registradas pelo Snort e enviadas pelo Barnyard.
Conclusão
A solução Snort, Barnyard e PostgreSQL é recomendada, quando bem posicionada na topologia. O Barnyard completa a solução do Snort, tornando-o mais rápido pois com a utilização dos logs unificados não se desperdiça tempo em executar sql’s para enviar seus logs ao banco, ganhando desta forma muito desempenho.
Referências
http://www.snort.org
http://www.postgresql.org
http://www.snort.org/dl/barnyard/
http://www.snorg.org.br/
Decidi postar este tutorial pois mesmo procurando muito na internet não encontrei informações de como utilizar o Barnyard em conjunto com o banco de dados PostgreSQL, espero que ajude outras pessoas.
Fiquem à vontade para sugestões, críticas e correções…
Obrigado! Abraços e até o próximo post! ;)