segunda-feira, 28 de junho de 2010

Snorby - Instalação do frontend para snort

Utilizei para esta implementação o snorby 1.1.3 , ambos sobre o FreeBSD 7.2, mais detalhes sobre essa aplicação:

- Snorby 1.1.3:

O snorby é um dos frontends utilizados para visualizar os alertas gerados pelo snort, ele também contém gráficos e estatisticas dos alertas coletados pelo snort. Possui uma interface bastante intuitiva e moderna. Conheça-o http://snorby.org/.

Particulamente gostei muito deste frontend, ele ainda esta em fase de desenvolvimento, mas já dar para utiliza-lo em produção. Veja o report bug do mesmo com a identificação de erros e suas devidas correções e ferramentas a serem implementadas: http://github.com/mephux/Snorby/issues.

O Snorby é desenvolvido utilizando a linguagem de programação ruby on rails para plataforma web. Outro ótimo frontend é o BASE(http://base.secureideas.net/) fork do antigo ACID ambos são desenvolvidos utilizando a ligaugem de programação php.

Vamos para a instalação:

- Programas/dependênias para instalação do Snorby(Instalaremos através do ports):

git-1.7.1 Distributed source code management tool
mysql-client-5.5.4 Multithreaded SQL database (client)
mysql-server-5.5.4 Multithreaded SQL database (server)
ruby18-gems-1.3.7 Package management framework for the Ruby language
ruby18-iconv-1.8.7.248,1 An iconv wrapper class for Ruby

- E através do gem(Gerenciador de pacote do ruby) instalaremos outros pacotes:

- prawn
- rake
- rails
- dbd-mysql
- mysql

- E finalmente através do git:

- Snorby

- Vamos a instalação dos programas e dependencias(No configure do make não marque as opções que aparecerão desmarcadas e deixe as que já estão marcadas):

Instalação do mysql:

# cd /usr/ports/databases/mysql55-server/ && make install clean

Instalação do git:

# cd /usr/ports/devel/git/ && make install clean

Instalação do ruby-gems:

# cd /usr/ports/devel/ruby-gems/ && make install clean

Instalação do ruby-iconv:

# cd /usr/ports/converters/ruby-iconv/ && make install clean

- Instalação dos pacotes através do gem:

# gem install prawn


# gem install rake


# gem install rails


# gem install dbd-mysql


# gem install mysql

Vamos instalar o aplicativo Snorby, instale o mesmo na pasta /usr/local/www então siga o passo a passo:
OBS.: O git utiliza uma porta especifica para realizar o download verifique o seu firewall.

# cd /usr/local/www/ && git clone git://github.com/mephux/Snorby.git

Pronto se tudo ocorreu sem problemas o servidor já se encontra com o snorby instalado, iremos para os pré-requisitos de seu funcionamento:

- Primeiro: Configure o seu snort com banco mysql.

- Segundo: O snorby terá um banco, criado automaticamente pelo rake setup(comando que veremos mais adiante);

- Terceiro : O mysql deve estar iniciado e com permissões de acesso para usuário e seu banco de dados snorby, pois, agora será utilizado somente um único banco que armazenará informações tanto do snort quanto do snorby.

- Quarto: O banco snorby/snort é criado automaticamente pelo rake setup(comando que veremos mais adiante) no localhost ou seja na máquina em que foi instalado o snorby. Não consegui descobri onde alterar essa config.

OBS.: Der permissão para o usuário do banco snorny, para o host localhost, exemplo:

na console do mysql:

GRANT ALL PRIVILEGES ON snorby.* TO snorby@'localhost' IDENTIFIED BY 'senhaDoBDSnorby' WITH GRANT OPTION;

- Após estes passos iremos configurar dois arquivos do Snorby que se encontram em /usr/local/www/Snorby/config, são eles o database.yml e email.yml;

# cp /usr/local/www/Snorby/config/database.yml.example /usr/local/www/Snorby/config/database.yml


# cp /usr/local/www/Snorby/config/email.yml.example /usr/local/www/Snorby/config/email.yml

- Configure os mesmos, o database.yml configura aonde será instalado o banco de dados do snorby e o email.yml confgs para enviar alertas para o email.

Vamos ao processo de confguração automatica do Snorby(Instale os requerimentos adicionais do gem, ele irá informa na console quais são os requerimentos, para carregar o Snorby)

ATENÇÂO: Nessa versão do snoby(1.1.3) a instalação automática só é executada com sucesso se for configurado no arquivo database.yml o BD como localhost e dada as devidas permissões para o usuário que você passa neste mesmo arquivo citado. Aqui onde trabalho configurei como localhost depois instalei o snprby e após instalação executei o script mysql do snorby em outro servidor mysql da minha rede e depois fiz os devidos apontamentos database.yml para o servidor mysql remoto da minha rede.

# cd /usr/local/www/Snorby && rake gems:install


# cd /usr/local/www/Snorby && rake snorby:setup RAILS_ENV=production

Se for a primeira instalação execute também:

# cd /usr/local/www/Snorby && rake snorby:update RAILS_ENV=production


# cd /usr/local/www/Snorby && rake snorby:reset RAILS_ENV=production # ALL DATA WILL BE LOST

Start Snorby:

# ruby18 script/server -e production -b 127.0.0.1 -p 80 -d

-b = bind address [Default: loopback]
-p = port number [Default: 3000]
-e = environment
-d = Run server as daemon

The default User Name and Password for Snorby:

User: snorby
Password: admin

FONTE:

http://github.com/mephux/Snorby

http://wiki.github.com/mephux/Snorby/snorby-recipe-with-barnyard2-unified2-and-apache-jjc


Fiz um script para colocar na inicialização do sistema operacional o snorby, como é FreeBSD este script deve ser colocado em /usr/local/etc/rc.d/:

#!/bin/sh
#
# $FreeBSD: snorby
#

# PROVIDE: snorby
# BY: Leonardo Couto Conrado
# IN: 11.06.2010

. /etc/rc.subr

name="snorby"

rcvar="`set_rcvar`"

load_rc_config $name

: ${snorby_enable="NO"}
: ${snorby_port_listen="80"}
: ${snorby_bind_addr="127.0.0.1"}
: ${snorby_environment="production"}


command="cd /usr/local/www/Snorby && /usr/local/bin/ruby18"
command_args="script/server -e ${snorby_environment} -b ${snorby_bind_addr} -p ${snorby_port_listen} -d"
procname="/usr/local/bin/ruby18"
pidfile="/var/run/${name}.pid"

run_rc_command "$1"

E no /etc/rc.conf colocamos as seguintes linhas:

#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
# SNORBY
#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
snorby_enable="YES"
snorby_port_listen="80"
snorby_bind_addr="127.0.0.1"
snorby_environment="production"

Pronto agora já temos o snorby instalado e na inicialização do SO.

segunda-feira, 21 de junho de 2010

Snort - Instalação

Utilizei para esta implementação o snort 2.8.6 , ambos sobre o FreeBSD 7.2, mais detalhes sobre essa aplicação:

- Snort 2.8.6:

http://conteudoopensource.blogspot.com/2010/06/snort-snort-286-em-modo-promiuscuo.html

O snort pode ser utilizado tanto para detectar ataques(IDS colocando-o em modo promiscuo utilizando por exemplo o port mirror no switch) quanto também para detectar e bloquear os ataques(IPS colocando-o no modo in-line no gateway, firewall de sua rede.), neste tutorial estou utilizando o snort em modo promiscuo realizei um port mirror da porta dos gateways da rede e os alertas estão sendo registrados em um banco mysql.

Bem, vamos dar o start-up em nosso assunto principal que é a instalação do snort:

OBS.: Para utilizar o output(alertas e logs) direcionado para banco de dados mysql, vc antes deverá instalar o mysql e suas bibliotecas.

1) Baixe o snort http://www.snort.org/downloads. Descompacte o tallbar(arquivo tar.gz) do snort;

2) Dentro da pasta descompactada, iremos iniciar a configuração, compilção e instalação:

-> Configure com output para DB mysql:


#./configure --with-mysql --with-mysql-includes=/usr/local/include/mysql --with-mysql-libraries=/usr/local/lib/mysql --prefix=/usr/local/snort


# make


# make install


3) Criar estruturas de diretórios do snort

# mkdir /usr/local/etc/snort

Na pasta descompactada do snort, copie os arquivos do diretório conforme abaixo:

# cp /home/leonardo.conrado/snort-2.8.6/etc/* /usr/local/etc/snort/


4) Copiar as rules que deve ser baixados do site snort.org(Vc deve se cadastrar antes) e coloque-as em /usr/local/snort/rules(crie a pasta rules se não existir)

# cp /home/leonardo.conrado/snortrules-snapshot-2860/* /usr/local/snort/rules

5) Configurar o snort, conforme abaixo:

# vi /usr/local/etc/snort/snort.conf

Configure as principais variáveis, veja os exemplos já configurado:

###################################################
# Step #1: Set the network variables. For more information, see README.variables
###################################################
# Setup the network addresses you are protecting
var HOME_NET [192.168.1.0/24]

# List of DNS servers on your network
var DNS_SERVERS [192.168.0.60/32,187.84.92.1,187.84.92.2/32]

# List of web servers on your network
var HTTP_SERVERS [192.168.0.64/32]

# List of sql servers on your network
var SQL_SERVERS [192.168.0.65/32]

# List of SMTP servers on your network
var SMTP_SERVERS 187.84.92.99

# Path to your rules files (this can be a relative path)
# Note for Windows users: You are advised to make this an absolute path,
# such as: c:\snort\rules
var RULE_PATH /usr/local/snort/rules/rules
var SO_RULE_PATH /usr/local/snort/rules/so_rules
var PREPROC_RULE_PATH /usr/local/snort/rules/preproc_rules

###################################################
# Step #6: Configure output plugins
# For more information, see Snort Manual, Configuring Snort - Output Modules
###################################################

# syslog
output alert_syslog: LOG_AUTH LOG_ALERT

# pcap
# output log_tcpdump: tcpdump.log

# database
output database: alert, mysql,user=snort password=senhaBancoSnortmysql dbname=snort host=192.168.0.65

output database: log, mysql,dbname=snort username=snort password=senhaBancoSnortmysql host=192.168.0.65

###################################################
# Step #7: Customize your rule set
# For more information, see Snort Manual, Writing Snort Rules
###################################################


Para debugar habilitei também o output dos alertas e logs do snort para o syslog e sua saida esta sendo escrita no /var/log/messages.
6) Para testar inicie o snort, acompanhe a saída e se ocorrer algum erro a inicialização será interrompida e vc poderá verificar qual o motivo para o erro:

# /usr/local/snort/bin/snort -c /usr/local/etc/snort/snort.conf


Para coloca-lo na inicialização do S.O e setar alguns parametros como interface que o snort irá escutar, coloca o seu processo em back ground etc, então criei um script para o rc.d(lembrando que neste caso estou utilizando o FreeBSD). Abaixo o script snort dentro da pasta /usr/local/etc/rc.d:

#!/bin/sh
Exp $

# PROVIDE: snort
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: shutdown

. /etc/rc.subr

name="snort"

rcvar="`set_rcvar`"

load_rc_config $name

: ${snort_enable="YES"}
: ${snort_if_listen="re0"}
: ${snort_config_file="/usr/local/etc/snort/snort.conf"}

command="/usr/local/sbin/snort/${name}"
command_args="-q -D -i ${snort_if_listen} -c ${snort_config_file}"
procname="/usr/local/sbin/snort/snort"
pidfile="/var/run/${name}_${snort_if_listen}.pid"

run_rc_command "$1"


Já no arquivo /etc/rc.conf, ahbilito o mesmo para carregar na inicialização e seto alguns parametros:

#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
# SNORT
#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
snort_enable="YES"
snort_if_listen="re1"
snort_config_file="/usr/local/etc/snort/snort.conf"


Pronto! Agora você já possui o snort na inicialização...

Observações:

- No arquivo snort.conf habilite rules/regras que sejam relevantes a sua rede, por exemplo, você não precisa deixar habilitada a regra para serviços mysql se você não possui nenhum servidor mysql em sua rede... Outra coisa importante também, é definir bem as váriaveis do seu arquivo snort.conf, para que se tenha um bom filtro e que se colete alertas que realmente sejam importantes para a segurança de sua rede e também para se evitar logs que sejam falsos positivo.

- Sempre mantenha suas regras atualizadas, para autmatizar essa atualização de regras utilizo o aplicativo oinkmaster pesquise como instala-lo e configura-lo é bastante simples.

- Utilize as regras do Emerging Threats que é uma comunidade de projetos open sources que desenvolve assinaturas/regras para o snort e que também possui outros projetos open sources ligados a segurança da informação. Conheça http://www.emergingthreats.net/index.php/about-et-mainmenu-43.html

- Existe um arquivo na pasta etc do snort chamado threshold.conf lá você poderá colocar limites para alertas que são gerados com muita frequência ocasionando em alto output se preferir você poderá suprimi-los também utilizando este arquivo threshold.conf.

quarta-feira, 16 de junho de 2010

Snort - Introdução ao IDS/IPS Snort

O Snort é um sistema de detecção de invasão baseado em rede (SDIR) de código fonte aberto, possuindo muitos recursos. Ele é sniffer que tem como diferencial a capacidade de inspecionar o payload do pacote, área que contém os dados do mesmo, fazendo o registros dos pacotes, além de detectar as invasões.

O Snort é um sistema avançado capaz de detectar quando um ataque
está sendo realizado e, baseado nas características do ataque, alterar ou remodelar sua configuração de acordo com as necessidades, e até avisar ao administrador do ambiente sobre o ataque.

Considera-se o Snort um SDI ligthweight, ou seja, ele pode ser colocado em funcionamento com muito pouco esforço tanto no sentido computacional quanto no sentido configuração e suporte.
Um característica marcante do Snort é a facilidade de criação de assinaturas de ataques. Profissionais da área de segurança da informação sabem da velocidade que os eventos ocorrem no mundo virtual. A prontidão, exatidão e rapidez são assuntos essenciais em se tratando de segurança. Como o Snort é um sistema de código aberto e apresenta linguagem fácil de criação de assinaturas, permite a pronta criação e adição de uma nova assinatura de ataque por parte do
administrador.

O Snort é uma ótima ferramenta, mas como todo aplicativo deve ser bem implementada. Devem ser aplicadas somente as assinaturas de ataques relevantes a realidade da rede. Por exemplo, não é necessário monitorar ataque a banco de dados MySQL se ele não se encontra em uso, o que ocasionaria apenas alertas irrelevantes. Além disso o banco de assinaturas deve estar constantemente atualizado evitando assim que ataques passem desapercebidos. O administrador tendo esses cuidados evita ou minimiza os falsos positivos e falsos negativos.

O profissional responsável pela rede deve certificar-se que o sistema onde o Snort esta operando é o mais seguro possível, ou seja, deve-se esta atendo a segurança do sistema operacional onde o Snort esta rodando. Uma invasão à máquina SDI invalida qualquer alerta do mesmo.
O Snort é um sistema que não requer grandes recursos de hardware. Os recursos de hardware necessário para o sistema operacional em uso atende ao Snort.

O Snort foi projetado para ser executado em uma grande gama de sistemas entre eles Linux, FreeBSD, NetBSD, OpenBSD, Solaris, MacOS, Windows, entre outros.

Existem alguns programas opcionais que podem ser instalados para melhorar/facilitar a administração do sistema. Cita-se os aplicativos para o mundo Linux. Os softwares são:

http://www.snort.org/downloads/additional-downloads/

FONTE: http://www.ginux.ufla.br/files/mono-BrunoSantos.pdf

Seguidores