Você está na página 1de 51

Monitoramento e Sistemas de Deteco de Intruso

Instrutor Mrcio Oliveira


oliv.ms@gmail.com
Monitoramento e SDI
Oys -2013
www.oys.com.br

1. Registro de Eventos
1.1 Syslog-NG
O Syslog-NG o substituto do Syslog e Rsyslog, que so as ferramentas padres
de registros de Logs do Sistema. O Syslog-NG tem mais recursos e traz uma gama
maior de opes de registro de logs para o administrador.
O contedo dos arquivos do Syslog, Rsyslog e Syslog-NG seguem as seguintes regras:

facilidade - usada para especificar que tipo de programa est enviando a

mensagem.

nvel - Especifica o nvel de gravidade da mensagem.

destino - O destino das mensagens pode ser um arquivo, um pipe (se iniciado

por um "|"), um computador remoto (se iniciado por uma "@"), determinados usurios
do sistema (especificando os logins separados por vrgula) ou para todos os usurios
logados via wall (usando "*")
A facilidade e o nvel so separadas por um "." e contm parmetros que
definem o que ser registrado nos arquivos de log do sistema:

auth - Mensagens de segurana/autorizao.

authpriv - Mensagens de segurana/autorizao (privativas).

cron - Servios de agendamento (cron e at).

daemon - Outros servios do sistema que no possuem facilidades especficas.

ftp - Servio de ftp do sistema.

kern - Mensagens do kernel.

lpr - Subsistema de impresso.

local0 a local7 - Reservados para uso local.

mail - Subsistema de e-mail.

news - Subsistema de notcias da USENET.

security - Sinnimo para a facilidade auth.

syslog - Mensagens internas geradas pelo syslogd.

user - Mensagens genricas de nvel do usurio.

uucp - Subsistema de UUCP.

* - Confere com todas as facilidades.

Nveis:

emerg - O sistema est inutilizvel.

alert - Uma ao deve ser tomada imediatamente para resolver o problema.

crit - Condies crticas.

err - Condies de erro.

warning - Condies de alerta.

notice - Condio normal, mas significante.

info - Mensagens informativas.

debug - Mensagens de depurao.

* - Confere com todos os nveis.

none - Nenhuma prioridade.


Alm destes nveis, os seguintes sinnimos esto disponveis:

error - Sinnimo para o nvel err.

panic - Sinnimo para o nvel emerg.

warn - Sinnimo para o nvel warning.

- Instale o Syslog-NG:
# aptitude install syslog-ng
ou
# yum install syslog-ng
1.2 Criando uma estrutura de Logs Personalizada
O objetivo desta tarefa definir a sua estrutura de logs personalizada, diferente
da padro. um procedimento simples e que aumenta o poder de gerenciamento de
Logs.
1 - Faa um backup do arquivo de configurao original:
# cd /etc/syslog-ng
# mv syslog-ng.conf syslog-ng.original

2 - Crie um novo syslog-ng.conf, com a seguinte estrutura personalizada (Esse arquivo


est no CD do curso.):

# vim syslog-ng.conf
OPCES GLOBAIS
options { long_hostnames(off);};
#-----------------------------------------------------------------------------#
#OPES DE ORIGEM
source src { unix-dgram("/dev/log"); internal(); file("/proc/kmsg" log_prefix("kernel:
"));};
# --------------------------------------------------------------------#
# OPCES DE FILTRAGEM
filter f_authpriv { facility(auth, authpriv); };
filter f_syslog { not facility(auth, authpriv); };
filter f_cron { facility(cron); };
filter f_daemon { facility(daemon); };
filter f_kern { facility(kern); };
filter f_lpr { facility(lpr); };
filter f_mail { facility(mail); };
filter f_user { facility(user); };
filter f_uucp { facility(uucp); };
filter f_news { facility(news); };
filter f_debug { not facility(auth, authpriv, news, mail); };
filter f_messages { level(info .. warn)
and not facility(auth, authpriv, cron, daemon, mail, news); };
filter f_emergency { level(emerg); };
filter f_info { level(info); };
filter f_notice { level(notice); };
filter f_warn { level(warn); };
filter f_crit { level(crit); };
filter f_err { level(err); };
filter f_cnews { level(notice, err, crit) and facility(news); };
filter f_cother { level(debug, info, notice, warn) or facility(daemon, mail); };
filter ppp { facility(local2); };
# --------------------------------------------------------------------#
# OPCES DE DESTINO
destination
d_authlog
{
file("/var/log/auth.log"
owner("root")
group("adm")
perm(0640)); };
destination
d_syslog
{
file("/var/log/syslog"
owner("root")
group("adm")
perm(0640)); };
destination
d_cron
{
file("/var/log/cron.log"
owner("root")
group("adm")
perm(0640)); };
destination d_daemon { file("/var/log/daemon.log" owner("root") group("adm")
perm(0640)); };
destination
d_kern
{
file("/var/log/kern.log"
owner("root")
group("adm")
perm(0640)); };
destination d_lpr { file("/var/log/lpr.log" owner("root") group("adm") perm(0640)); };
destination
d_mail
{
file("/var/log/mail.log"
owner("root")
group("adm")

perm(0640)); };
destination
d_user
{
file("/var/log/user.log"
owner("root")
group("adm")
perm(0640)); };
destination
d_uucp
{
file("/var/log/uucp.log"
owner("root")
group("adm")
perm(0640)); };
destination d_mailinfo { file("/var/log/mail.info" owner("root") group("adm")
perm(0640)); };
destination d_mailwarn { file("/var/log/mail.warn" owner("root") group("adm")
perm(0640)); };
destination
d_mailerr
{
file("/var/log/mail.err"
owner("root")
group("adm")
perm(0640)); };
destination d_newscrit { file("/var/log/news/news.crit" owner("root") group("adm")
perm(0640)); };
destination d_newserr { file("/var/log/news/news.err" owner("root") group("adm")
perm(0640)); };
destination
d_newsnotice
{
file("/var/log/news/news.notice"
owner("root")
group("adm") perm(0640)); };
destination
d_debug
{
file("/var/log/debug"
owner("root")
group("adm")
perm(0640)); };
destination d_messages { file("/var/log/messages" owner("root") group("adm")
perm(0640)); };
destination d_console { usertty("root"); };
destination d_console_all { file("/dev/tty8"); };
destination d_xconsole { pipe("/dev/xconsole"); };
destination d_ppp { file("/var/log/ppp.log" owner("root") group("adm") perm(0640)); };
# --------------------------------------------------------------------#
# OPCES DE LOG ( Montagem do Log)
log
log
log
log
log
log
log
log
log
log
log
log
log
log
log
log
log
log
log
log
log

{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{

source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);

filter(f_authpriv); destination(d_authlog); };
filter(f_syslog); destination(d_syslog); };
filter(f_daemon); destination(d_daemon); };
filter(f_kern); destination(d_kern); };
filter(f_lpr); destination(d_lpr); };
filter(f_mail); destination(d_mail); };
filter(f_user); destination(d_user); };
filter(f_uucp); destination(d_uucp); };
filter(f_mail); filter(f_info); destination(d_mailinfo); };
filter(f_mail); filter(f_warn); destination(d_mailwarn); };
filter(f_mail); filter(f_err); destination(d_mailerr); };
filter(f_news); filter(f_crit); destination(d_newscrit); };
filter(f_news); filter(f_err); destination(d_newserr); };
filter(f_news); filter(f_notice);destination(d_newsnotice); };
filter(f_debug); destination(d_debug); };
filter(f_messages); destination(d_messages); };
filter(f_emergency); destination(d_console); };
filter(f_cnews); destination(d_xconsole); };
filter(f_cother); destination(d_xconsole); };
filter(ppp); destination(d_ppp); };
filter(f_cron); destination(d_cron); };

3 - Reinicialize o Daemon do Syslog-NG:


# /etc/init.d/syslog-ng restart
4 - Faa com que a sada do arquivo de log /var/log/auth.log (arquivo que loga
autenticao em servios) seja visualizada no terminal 12 (/dev/tty12):
# tail -f /var/log/auth.log > /dev/tty12 &
5 - Efetue conexo com seu servidor SSH:
# ssh toor@127.0.0.1
6 - Agora, veja o contedo do arquivo de log no terminal /dev/tty12:
CTRL+ALT+F12

1.3. Syslog-NG - Estrutura Servidor e Cliente


1.3.1 Configurando o servidor
1 - Edite o arquivo de configurao do Syslog-NG, e insira uma nova origem para
aceitar pacotes remotos:
# vim /etc/syslog-ng/syslog-ng.conf
# OPCES DE ORIGEM
## Origem Mquinas Remotas
source maqremotas { udp();};

2 - Ainda no arquivo, insira uma nova entrada de filtro para capturar as informaes
vindas de determinada mquina:
#OPES DE FILTRO
## Filtro para mquina Remota
filter f_maqremota1 { netmask(192.168.200.X); };
OU
filter f_maqremota1 { host("maquina1"); };
3 - Pode-se tambm capturar os Logs provenientes do host maquina1 que contenham
a palavra sshd:
filter f_maqremota1_ssh { netmask(192.168.200.X) and match("sshd"); };
OU
filter f_maqremota1_ssh { host("maquina1") and match("sshd"); };
4 - Insira agora as opes de destino para a mquina remota:
# OPES DE DESTINO
## Destino da mquina1
destination

d_maqremota1

file("/var/log/maqremota1.log"

owner("root")

group("adm") perm(0640)); };
5 - Insira tambm um destino para a palavra sshd provenientes da maquina1:
destination d_maqremota1_ssh { file("/var/log/maqremota1_ssh.log" owner("root")
group("adm") perm(0640)); };
6 - Para finalizar, insira as opes de montagem dos Logs:
# OPCES DE LOG
## Logs da mquina1

log { source(maqremotas); filter(f_maqremota1); destination(d_maqremota1); };


log { source(maqremotas); filter(f_maqremota1_ssh); destination(d_maqremota1_ssh);
};
7 - Reinicialize o Syslog-NG:
# /etc/init.d/syslog-ng restart
8 - Faa o check list de conexo na porta 514:
# netstat -nlpu | grep 514
1.3.2 Configurando o cliente
1 - Edite o arquivo de configurao do Syslog-NG e insira uma nova opo de destino
para enviar as informaes para o servidor remoto:
# vim /etc/syslog-ng/syslog-ng.conf
# OPES DE DESTINO
## Destino Servidor de Logs
destination servlog { udp("192.168.200.X" port(514)); };
2 - Se necessrio, pode-se informar no cliente quais os logs devem ser enviados para
o servidor. Caso contrrio, no ser necessrio especificar um filtro e, dessa forma,
enviar todos os logs:

# OPES DE FILTRAGEM
## Filtro dos Logs que devem ser enviados

filter f_servlog { level(info, warn, err, crit) and facility(auth, authpriv, daemon, mail,
news, cron, user); };
3 - Agora insira as opes para montagem dos logs:
# OPES DE LOG
## Montagem dos Logs para o Servidor remoto
log { source(src); destination(servlog); };
OU
log { source(src); filter(f_servlog); destination(servlog); };
4 - Reinicialize o Syslog-NG:
# /etc/init.d/syslog-ng restart
5 - Para fazer o teste, a mquina servidor pode deixar um arquivo de log
constantemente aberto com o comando tail, enquanto a mquina cliente reinicia um
servio ou faz uma autenticao:
1.4 Definindo poltica de rotacionamento de LOGS
At agora vimos a importncia do registro de eventos, para isso, criamos uma
estrutura personalizada e uma estrutura servidor/cliente.
Pode acontecer um problema, esses logs vo comear a crescer e se no forem
monitorados, podem crescer at estourar o espao da partio. Para resolver esse tipo
de problema, necessrio trabalhar com o rotacionamento de Logs.
Esse rotacionamento feito pelo Logrotate.
1- Visualize algumas opes globais do LogRotate:
# vim /etc/logrotate.conf
weekly

Essa opo faz com que os logs sejam rotacionados semanalmente.


rotate 4
Rotate 4 define que sero mantidos os 4 ltimos rotacionamentos para no
fugirem do controle.
mail root
Essa opo faz com que, em que casos de erros de no existncia dos logs,
sejam enviados para o usurio root.
create
Com essa opo estamos configurando para que sejam criados novos arquivos
de log (vazios) aps rodar os antigos.
compress
Essa opo faz que as cpias de logs sejam compactadas mantendo sempre o
ltimo rodado descompactado.
include /etc/logrotate.d
Diretrio onde ficam scripts personalizados a serem includos no arquivo
principal.
2 - O Syslog-NG cria um script personalizado dentro de /etc/logrotate.d. Edite esse
script e faa a seguinte personalizao em um dos logs:
# cd /etc/logrotate.d
# vim syslog-ng
/var/log/auth.log {
daily
size 3M
sharedscripts
postrotate
/usr/bin/killall -1 syslog-ng

endscript
rotate 5
}
3 - Para fazer um teste de rotacionamento, execute o seguinte comando:
# logrotate /etc/logrotate.conf
4 - Depois, visualize o diretrio de logs e veja o que aconteceu:
# ls -l /var/log
O controle das aes do logrotate feito pelo utilitrio de agendamento de tarefas do
sistema, o cron. Ele possui uma configurao especfica para tarefas que so rodadas
durante um perodo certo (diariamente, mensalmente, etc).
5 - Visualize o script de controle das aes do logrotate no cron:
# cat /etc/cron.daily/logrotate
6 - Verifique qual o horrio que o logrotate ir executar:
# cat /etc/crontab
7 - Para melhorar a segurana, no deixando que o contedo dos scripts sejam
apagados, pode-se colocar um atributo nos arquivos de logs. Edite o script do
logrotate dirio deixando-o da seguinte maneira:
# vim /etc/cron.daily/logrotate
#!/bin/sh
test -x /usr/sbin/logrotate || exit 0
chattr -a /var/log/*

/usr/sbin/logrotate /etc/logrotate.conf
chattr +a /var/log/*
8 - Execute o script:
# /etc/cron.daily/logrotate
9 - Visualize os atributos nos logs:
# lsattr /var/log
10 Veja se os arquivos esto sendo rotacionados:
# ls -lh /var/log/auth*

2. Host-IDS(HIDS)
2.1. Objetivos:
- Entender a importncia do uso de ferramentas HIDS.
- Conhecer as ferramentas OSSEC.
2.2.

OSSEC
O OSSEC um HIDS que tem muitas funcionalidades, ele tem a capacidade de

trabalhar localmente, ou trabalhar em uma rede como cliente e servidor. Uma das
grandes vantagens dos OSSEC que trabalha com active-response, ou seja, para
determinados tipos de ataques ele pode tomar algumas medidas como bloquear o IP
que est atacando por um determinado tempo e mandar um e-mail alertando sobre o
ocorrido.
1 - Primeiro necessrio obter o cdigo-fonte do Ossec no seu site oficial:
www.ossec.net:
# cd /opt
# Mova o arquivo baixado para este diretrio.
2 Agora, descompacte o pacote:
# tar xzvf ossec-hids-X.X.tar.gz
# ls
3 - Instale os pacotes necessrio para fazer a compilao:
# aptitude install make gcc g++
4 - O OSSEC possu um script para ser feita a sua instalao onde sero feitas vrias
perguntas. Instale o OSSEC:
# cd ossec-hids-X.X

# ./install.sh
No primeiro passo da instalao escolha o idioma a ser instalado:
** Para instalao em portugus, escolha [br].
** Fur eine deutsche Installation wohlen Sie [de].
** For installation in English, choose [en].
** Para instalar en Espaol , eliga [es].
** Pour une installation en franais, choisissez [fr]
** Per l'installazione in Italiano, scegli [it].
** Za instalaciju na srpskom, izaberi [sr].
(en/br/cn/de/es/fr/it/jp/pl/ru/sr/tr) [en]:br
Agora escolha o modo como ele vai trabalhar, que pode ser local, cliente e servidor. O
nosso caso local:
1- Que tipo de instalao voc deseja (servidor, cliente, local ou ajuda)? local
Prximo passo escolher onde o OSSEC ser instalado. Aceite o diretrio proposto:
2- Configurando o ambiente de instalao.
- Escolha onde instalar o OSSEC HIDS [/var/ossec]:
Depois, aceitar para receber notificaes por e-mail:
3- Configurando o OSSEC HIDS.
3.1- Deseja receber notificaes por e-mail? (s/n) [s]:
- Qual o seu endereo de e-mail? seu_email@dominio.com.br
- Seu servidor SMTP foi encontrado como: smtp.dominio.com.br
- Deseja us-lo? (s/n) [s]:

Em seguida, habilite alguns tipos de checagens:


- Deseja habilitar o sistema de verificao de integridade? (s/n) [s]:
- Deseja habilitar o sistema de deteco de rootkis? (s/n) [s]:
- Respostas automticas permitem voc executar um comando especfico baseado
nos eventos recebidos. Voc pode bloquear um endereo de IP ou desabilitar o acesso
de um usurio especfico, por exemplo.
Maiores informaes:
http://www.ossec.net/en/manual.html#active-response
- Deseja habilitar o sistema de respostas automticas? (s/n) [s]:
- Deseja habilitar o firewall-drop? (s/n) [s]:
- Deseja adicionar mais algum endereo a essa lista? (s/n)? [n]:
Aps isso o OSSEC ser compilado e instalado.
5 - Com OSSEC instalado, pode inci-lo:
# /etc/init.d/ossec start
# ps ax | grep ossec
6 Visualize onde o OSSEC est instalado e seu arquivo de configurao principal:
# cd /var/ossec
# ls
# cd etc
# vim ossec.conf
(Para alterar o arquivo de conf, primeiramente deve-se configurar as permisses do
arquivo, para leitura e escrita. Alterar o contedo, e recolocar por segurana, as
permisses padres).
Todos os aquivos de configurao do OSSEC esto em um formato XML, que muito
simples de entender.

2.2.1.

Testando o OSSEC

Podemos fazer um teste com o OSSEC e ver como o seu active-response


trabalha. Vamos testar utilizando um servidor de e-mail instalado em nosso sistema,
utilizaremos o Postfix nesse exemplo.
1 - Instale o Postfix:
n
# aptitude install postfix
# yum install postfix
2 - Realize um teste de telnet na porta 25 em outra mquina e veja que seu IP ser
bloqueado na outra mquina, em seguida pea para realizarem o mesmo teste em sua
mquina:

# telnet 192.168.200.X 25
Trying 192.168.200.X...
Connected to 192.168.200.X.
Escape character is '^]'.
220 postfix ESMTP Postfix (Debian/GNU)
helo teste.com.br
mail from: teste@teste.com.br
250 2.1.0 Ok
rcpt to: teste@teste.com.br
554 5.7.1 <teste@teste.com.br>: Relay access denied
Nesse momento a mquina do que est recebendo a conexo j deve ter bloqueado o
seu IP.
3 - Se j tentaram fazer essa conexo em sua mquina, veja se o IP da pessoa que
tentou j est bloqueado:

# iptables -n -L
# vi /etc/hosts.deny
Essa regra ficar setada at passar o tempo que est setado nas regras do OSSEC.

3. Nagios
Nagios uma popular aplicao de monitorao de rede de cdigo aberto distribuda
sob a licena GPL. Ele pode monitorar tanto hosts quanto servios,

alertando-o

quando ocorrerem problemas e tambm quando os problemas forem resolvidos.


O Nagios, anteriormente o Netsaint, tambm pode ser adquirido em sua verso
Enterprise. Onde o Cliente paga pelo suporte atualizaes do prprio fabricante.

3.1 Componentes do Nagios e seu ambiente de monitoramento.


O Nagios basicamente precisa apenas de dois itens para seu funcionamento bsico:
So eles:
1) O ambiente de monitorao O Servidor propriamente dito, onde so
processadas as informaes e publicadas para o administrador de redes. O servidor
2)

Plugins Onde so executadas as checagens no servidor, para determinado

servio ou aplicao
3)

Clientes ou agentes mdulos de conexo com clientes para coleta de

informaes. Muito comuns em plataformas Windows.


O agente centraliza as informaes e as envia para o servidor Nagios.
Em nosso laboratrios, utilizaremos o NSClient.
3.2 Instalando o Nagios
Para instalar o Nagios 3, em distribuies Debian Linux, basta executar os comandos
abaixo:
# apt-get install nagios 3 -y

Obs.: a opo -y, indica ao gerenciador de pacotes apt0get, instalar o pacote, sem a
interatividade (y/n).
Aps a instalao do nagios e de todas as suas dependncias, vamos configurar o
nagios
Lembrando que para plataformas RedHat (CentOS), bas utilizar o comando do
gerenciado de pacotes yum ou instalar o pacote Nagios a partir dos fontes.
Os pacotes bsicos para instalao, so o nagios-core e nagios plugins.
Estes

podem

ser

obtidos

em

http://www.nagios.org/download/core/thanks?

t=1380497669 e os plugins em http://www.nagios.org/download/plugins.


Embora seja solicitado, no necessrio o cadastro.
Aps a instalao (via apt), algumas informaes sero solicitadas para concluso da
instalao:
- Solicitao de senha para administrao web Nagios:

Para o exemplo acima, foi utilizada a senha 123. Em seguida confirme a senha.
Pronto o Nagios j foi instalado no seu servidor.

Para fazer o teste final, basta abrir um navegador de sua preferncia, e digitar o IP do
servidor e o path do nagios3.

Em nosso exemplo, http://192.168.0.253/nagios3

Para acessar o painel do Nagios, basta inserir o usurio nagiosadmin e senha


cadastrada durante a instalao do servidor.

No painel a esquerda, encontramos os links de visualizao de relatrios, evento e


etc.
J no painel central, alm da apresentao do Nagios, os hosts, servios, ou relatrios
de atividades.
Veja a figura abaixo:

Painel de administrao

Painel de visualizao

Note que j possumos um host sendo monitorado. Neste caso, o prprio servidor.
Os prximos passos, so incluses de diferentes plataformas, e seus servios.
Vamos aproveitar a instalao base, para fazer um tour no Nagios, e conhecer um
pouco sobre suas opes e relatrios.
3.3 Adicionando novos hosts ao Nagios
Os arquivos utilizados para configurao original do nosso Nagios (Nagios 3.4.1), so
os seguintes:
Diretrio /etc/nagios3/conf.d/
Os principais arquivos:
- Servios habilitados: services_nagios2.cfg

Onde basicamente os servios monitorados so habilitados.


Exemplo de configurao de servios monitorados:
# check that web services are running
define service {
hostgroup_name
service_description
check_command
use
notification_interval

http-servers
HTTP
check_http
generic-service
0 ; set > 0 if you want to be renotified

}
# check that ssh services are running
define service {
hostgroup_name
service_description
check_command
use
notification_interval

ssh-servers
SSH
check_ssh
generic-service
0 ; set > 0 if you want to be renotified

}
# check that ssh services are running
define service {
hostgroup_name
service_description
check_command
use
notification_interval

smtp-servers
SMTP
check_smtp
generic-service
0 ; set > 0 if you want to be renotified

- Contatos habilitados: contacts_nagios2.cfg


Arquivo de configurao de usurios habilitados, para notificao de alertas.

Abaixo exemplo de configuraes deste arquivo:


####################################################
###########################
####################################################
###########################
#
# CONTACTS
#
####################################################
###########################
####################################################
###########################
# In this simple config file, a single contact will receive all alerts.
define contact{
contact_name
alias

root
Root

service_notification_period
host_notification_period
service_notification_options
host_notification_options

24x7
24x7
w,u,c,r
d,r

service_notification_commands notify-service-by-email
host_notification_commands
email

notify-host-by-email

root@localhost

####################################################
###########################
####################################################
###########################

#
# CONTACT GROUPS
#
####################################################
###########################
####################################################
###########################
# We only have one contact in this simple configuration file, so there is
# no need to create more than one contact group.
define contactgroup{
contactgroup_name
alias

admins

Nagios Administrators

members

root

}
- Grupo de Servidores: hostgroups_nagios2.cfg
Arquivo utilizado para agregar hosts monitorados, por grupos de servios.
O exemplo abaixo, identifica os servios monitorados e os hosts que fazem parte
destes grupos:
# Some generic hostgroup definitions
# A simple wildcard hostgroup
define hostgroup {
hostgroup_name all
alias
members

All Servers
*

}
# A list of your Debian GNU/Linux servers
define hostgroup {
hostgroup_name debian-servers

alias

Debian GNU/Linux Servers

members

localhost,debian2

}
# A list of your web servers
define hostgroup {
hostgroup_name http-servers
alias

HTTP servers

members

localhost,debian2

}
# A list of your ssh-accessible servers
define hostgroup {
hostgroup_name ssh-servers
alias

SSH servers

members

localhost,debian2

}
# A list of your smtp-accessible servers
define hostgroup {
hostgroup_name smtp-servers
alias

SSH servers

members

debian2

}
- Servidores Habilitados: <hostname>_nagios2.cfg
Este arquivo habilita o monitoramento dos hosts no Nagios.
Exemplo de configuraes para monitoramento de hosts:
localhost_nagios2.cfg
# A simple configuration file for monitoring the local host
# This can serve as an example for configuring other servers;
# Custom services specific to this host are added here, but services

# defined in nagios2-common_services.cfg may also apply.


#
define host{
use

generic-host

host_name
alias

; Name of host template to use

localhost
localhost

address

127.0.0.1

}
# Define a service to check the disk space of the root partition
# on the local machine. Warning if < 20% free, critical if
# < 10% free space on partition.
define service{
use
host_name
service_description
check_command

generic-service

; Name of service template to use

localhost
Disk Space
check_all_disks!20%!10%

# Define a service to check the number of currently logged in


# users on the local machine. Warning if > 20 users, critical
# if > 50 users.
define service{
use
host_name
service_description
check_command
}

generic-service

; Name of service template to use

localhost
Current Users
check_users!20!50

# Define a service to check the number of currently running procs


# on the local machine. Warning if > 250 processes, critical if
# > 400 processes.
define service{
use

generic-service

host_name

; Name of service template to use

localhost

service_description

Total Processes

check_command

check_procs!250!400

# Define a service to check the load on the local machine.


define service{
use

generic-service

host_name

; Name of service template to use

localhost

service_description

Current Load

check_command

check_load!5.0!4.0!3.0!10.0!6.0!4.0

}
debian2_nagios2.cfg
# A simple configuration file for monitoring the local host
# This can serve as an example for configuring other servers;
# Custom services specific to this host are added here, but services
# defined in nagios2-common_services.cfg may also apply.
#
define host{
use
host_name
alias

generic-host
debian2
debian2

; Name of host template to use

address

192.168.1.9

}
# Define a service to check the disk space of the root partition
# on the local machine. Warning if < 20% free, critical if
# < 10% free space on partition.
define service{
use
host_name
service_description
check_command

generic-service

; Name of service template to use

debian2
Disk Space
check_all_disks!20%!10%

# Define a service to check the number of currently logged in


# users on the local machine. Warning if > 20 users, critical
# if > 50 users.
define service{
use
host_name
service_description
check_command

generic-service

; Name of service template to use

debian2
Current Users
check_users!20!50

# Define a service to check the number of currently running procs


# on the local machine. Warning if > 250 processes, critical if
# > 400 processes.
define service{
use
host_name

generic-service
debian2

; Name of service template to use

service_description

Total Processes

check_command

check_procs!250!400

}
# Define a service to check the load on the local machine.
define service{
use

generic-service

host_name

; Name of service template to use

debian2

service_description

Current Load

check_command

check_load!5.0!4.0!3.0!10.0!6.0!4.0

Aps a configurao, utilize o binrio do Nagios 3 para testes na configurao:


# nagios3 -v /etc/nagios3/nagios.cfg
Nagios Core 3.4.1
Copyright (c) 2009-2011 Nagios Core Development Team and Community Contributors
Copyright (c) 1999-2009 Ethan Galstad
Last Modified: 05-11-2012
License: GPL
Website: http://www.nagios.org
Reading configuration data...
Read main config file okay...
Processing object config file '/etc/nagios3/commands.cfg'...
Processing object config directory '/etc/nagios-plugins/config'...
Processing object config file '/etc/nagios-plugins/config/ifstatus.cfg'...
Processing object config file '/etc/nagios-plugins/config/dhcp.cfg'...
Processing object config file '/etc/nagios-plugins/config/http.cfg'...
Processing object config file '/etc/nagios-plugins/config/mailq.cfg'...
Processing object config file '/etc/nagios-plugins/config/ssl_cert.cfg'...
Processing object config file '/etc/nagios-plugins/config/hppjd.cfg'...
Processing object config file '/etc/nagios-plugins/config/apt.cfg'...

Processing object config file '/etc/nagios-plugins/config/real.cfg'...


Processing object config file '/etc/nagios-plugins/config/memcached.cfg'...
Processing object config file '/etc/nagios-plugins/config/procs.cfg'...
Processing object config file '/etc/nagios-plugins/config/mysql.cfg'...
Processing object config file '/etc/nagios-plugins/config/nt.cfg'...
Processing object config file '/etc/nagios-plugins/config/ssh.cfg'...
Processing object config file '/etc/nagios-plugins/config/radius.cfg'...
Processing object config file '/etc/nagios-plugins/config/disk-smb.cfg'...
Processing object config file '/etc/nagios-plugins/config/rpc-nfs.cfg'...
Processing object config file '/etc/nagios-plugins/config/netware.cfg'...
Processing object config file '/etc/nagios-plugins/config/ntp.cfg'...
Processing object config file '/etc/nagios-plugins/config/load.cfg'...
Processing object config file '/etc/nagios-plugins/config/mail.cfg'...
Processing object config file '/etc/nagios-plugins/config/webinject.cfg'...
Processing object config file '/etc/nagios-plugins/config/disk.cfg'...
Processing object config file '/etc/nagios-plugins/config/dns.cfg'...
Processing object config file '/etc/nagios-plugins/config/tcp_udp.cfg'...
Processing object config file '/etc/nagios-plugins/config/zone_auth.cfg'...
Processing object config file '/etc/nagios-plugins/config/ldap.cfg'...
Processing object config file '/etc/nagios-plugins/config/pgsql.cfg'...
Processing object config file '/etc/nagios-plugins/config/dummy.cfg'...
Processing object config file '/etc/nagios-plugins/config/ftp.cfg'...
Processing object config file '/etc/nagios-plugins/config/haproxy.cfg'...
Processing object config file '/etc/nagios-plugins/config/games.cfg'...
Processing object config file '/etc/nagios-plugins/config/telnet.cfg'...
Processing object config file '/etc/nagios-plugins/config/printer.cfg'...
Processing object config file '/etc/nagios-plugins/config/flexlm.cfg'...
Processing object config file '/etc/nagios-plugins/config/mrtg.cfg'...
Processing object config file '/etc/nagios-plugins/config/fping.cfg'...
Processing object config file '/etc/nagios-plugins/config/httpd_status.cfg'...
Processing object config file '/etc/nagios-plugins/config/zone-rrsig.cfg'...
Processing object config file '/etc/nagios-plugins/config/ipmi_sensor.cfg'...
Processing object config file '/etc/nagios-plugins/config/snmp.cfg'...
Processing object config file '/etc/nagios-plugins/config/news.cfg'...

Processing object config file '/etc/nagios-plugins/config/rbl.cfg'...


Processing object config file '/etc/nagios-plugins/config/multipath.cfg'...
Processing object config file '/etc/nagios-plugins/config/whois.cfg'...
Processing object config file '/etc/nagios-plugins/config/lm_sensors.cfg'...
Processing object config file '/etc/nagios-plugins/config/users.cfg'...
Processing object config file '/etc/nagios-plugins/config/breeze.cfg'...
Processing object config file '/etc/nagios-plugins/config/email_delivery.cfg'...
Processing object config file '/etc/nagios-plugins/config/ping.cfg'...
Processing object config directory '/etc/nagios3/conf.d'...
Processing object config file '/etc/nagios3/conf.d/services_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/generic-service_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/timeperiods_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/localhost_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/contacts_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/extinfo_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/debian2_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/hostgroups_nagios2.cfg'...
Processing object config file '/etc/nagios3/conf.d/generic-host_nagios2.cfg'...
Read object config files okay...
Running pre-flight check on configuration data...
Checking services...
Checked 13 services.
Checking hosts...
Checked 2 hosts.
Checking host groups...
Checked 5 host groups.
Checking service groups...
Checked 0 service groups.
Checking contacts...
Checked 1 contacts.
Checking contact groups...
Checked 1 contact groups.

Checking service escalations...


Checked 0 service escalations.
Checking service dependencies...
Checked 0 service dependencies.
Checking host escalations...
Checked 0 host escalations.
Checking host dependencies...
Checked 0 host dependencies.
Checking commands...
Checked 171 commands.
Checking time periods...
Checked 4 time periods.
Checking for circular paths between hosts...
Checking for circular host and service dependencies...
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...
Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check
Se tudo estiver ok, reinicie o Nagios 3
# /etc/init.d/nagios3 restart
[....] Restarting nagios3 monitoring daemon: nagios3
. ok
#
O novo host e seus servios agora esto sendo monitorados plo Nagios 3.

Hosts monitorados
Servios Monitorados

4. NIDS Snort e IPS (Guardian)


4.1 Como funciona a soluo SNORT.
O Snort realizando sozinho a tarefa de registros de possveis tentativas de
ataque em potencial uma tima soluo e se torna melhor combinado com uma
ferramenta para tratar os logs, tornando a informao ainda mais til para um
administrador.
O Snort basicamente formado por 4 componentes:
libpcap Biblioteca utilizada por todas as ferramentas de sniffers. Ela
responsvel por colocar a placa de rede em modo promiscuo, ou seja, o modo que
captura todos os pacotes que passam pela rede.
4)

Pr-processadores - So recursos do Snort que so responsveis por fazer um


pr filtro nos pacotes que esto passando por ele, sendo assim, ele diminui bastante o
processamento da mquina e do Snort e tambm ajuda a evitar os falsos positivos. Se
o pr-processador detecta algum tipo de tentativa de ataque, ele j gera um log no
passando o pacote para as regras do Snort.
5)

6)
Regras do Snort - Depois que os pacotes passam pelos pr-processadores
sem gerar uma tentativa de ataque, eles vo para as regras do Snort, onde feito
uma checagem mais completa conforme as regras que o Snort possu. Caso as regras
detectem algo, gerado um log.
7) Logs Os logs podem ser gerados tanto na deteco dos pr-processadores
quanto nas regras do Snort. Esses logs por padro so gerados no formato texto, e
para facilitar a visualizao deles, vamos configurar para serem gravados em uma
base MySQL.

4.2 Onde o Snort deve ficar?

O mais complexo em uma implementao do servio Snort, no a instalao


do prprio servidor e sim saber onde posicionar o NIDS.
Na figura abaixo, podemos ver um exemplo de onde podemos posicionar o
nosso NIDS(Snort).

Obs: Para o caso do Snort que pode ficar entre o Firewall e o Switch, ele est
trabalhando como uma bridge que ser visto no final desse captulo.

4.3. Instalao e configurao do Snort em modo NIDS, com suporte do


MySQL.
4.3.1 Instalando o MySQL
1 Instale o mysql-server:
# aptitude install mysql-server

Neste momento ser solicitado a senha do root (administrador do MySQL)


2 Verifique se o MySQL est rodando e se os sockets esto ativos:
# ps aux | grep mysql
# netstat -nlpt
3 Se na instalao no for definido uma senha do usurio root do MySQL,
pode-se fazer com o seguinte comando:
# mysqladmin -u root password nova_senha
Para manter a segurana no acesso da base de dados que ser criada, necessrio
criar um usurio comum para ser o dono dessa base, no comprometendo a
segurana de todo o banco de dados.
4 Crie um usurio chamado snort no banco de dados:
# mysql -u root -p
mysql> grant all privileges on snort.* to snort@192.168.200.X identified by "123";
mysql> grant all privileges on snort.* to snort@localhost identified by "123";
mysql> quit

Dessa maneira, o usurio snort ser criado e ter acesso base snort atravs do IP da
mquina e do hostname.

5 Agora, conecte no MySQL com o usrio snort e crie a base de dados


snort:
# mysql -u snort -p
mysql> show databases;
mysql> create database snort;
mysql> quit

4.4 Instalao e Configurao do Snort com suporte a MySQL.

1 Instale o Snort com suporte a MySQL:


# aptitude install snort-mysql
2 Detalhes de configurao:

Faixa de endereo na qual o Snort deve ouvir: 192.168.200.0/24

Deseja configurar uma base de dados para snort-mysql gravar os logs: Sim

3 - necessrio criar as tabelas dentro da base de dados snort. O Snort traz


um exemplo das tabelas na sua documentao. Entre no seguinte diretrio:
# cd /usr/share/doc/snort-mysql
4 - Utilize o arquivo create_mysql.gz para criar as tabelas dentro da base de
dados snort:
# zcat create_mysql.gz | mysql -u snort -h localhost -p snort -D snort
5 Acesse o servidor MySQL e verifique as tabelas na base de dados snort:
# mysql -u snort -p123 -D snort
mysql> show databases;
mysql> show tables;
mysql> status;
mysql> quit;

6 Verifique os arquivos de configurao do snort:


# cd /etc/snort
# ls -l
7 Faa um cpia do snort.conf original e mantenha um novo arquivo sem os
comentrios:
# mv snort.conf snort.conf.original
# cat snort.conf.original | grep -v ^# | grep . > snort.conf
8 Edite o snort.conf e modifique-o da seguinte maneira:
# vim snort.conf

var HOME_NET 192.168.200.0/24


var EXTERNAL_NET any
var DNS_SERVERS $HOME_NET
var SMTP_SERVERS $HOME_NET
var HTTP_SERVERS $HOME_NET
var SQL_SERVERS $HOME_NET
(suprimido)
output database: log, mysql, user=snort password=123456 dbname=snort
host=localhost
# Comentar a linha include dabases.conf
...(suprimido)...
# Comentar a linha include dabases.conf
include classification.config
include reference.config
include $RULE_PATH/local.rules
include $RULE_PATH/bad-traffic.rules
include $RULE_PATH/exploit.rules
include $RULE_PATH/community-exploit.rules
include $RULE_PATH/scan.rules
include $RULE_PATH/finger.rules
include $RULE_PATH/ftp.rules
...(suprimido)...
9 Verifique tambm o arquivo de configurao snort.debian.conf:
# vim snort.debian.conf
DEBIAN_SNORT_STARTUP="boot"
DEBIAN_SNORT_HOME_NET="192.168.254.0/24"
DEBIAN_SNORT_OPTIONS=""
DEBIAN_SNORT_INTERFACE="eth0"
DEBIAN_SNORT_SEND_STATS="true"
DEBIAN_SNORT_STATS_RCPT="root"
10 Visualize as regras (assinaturas) do Snort dentro do diretrio rules:
# cd rules
# ls
11 Antes de reiniciar o snort, apague o arquivo de pendncia da
configurao do banco de dados que ele criou dentro de /etc/snort:
# cd /etc/snort
# rm db-pending-config

12 Inicie o snort:
# /etc/init.d/snort start

4.5. Instalao e Configurao segura do Apache2 para visualizao dos


Logs.
1 Instale o apache2
#apt-get install apache2
2 Edite o arquivo de configurao do apache2 e defina um FQDN:
# vim /etc/apache2/apache2.conf
ServerName 192.168.200.X
3 Reinicie o Apache2:
# /etc/init.d/apache2 restart
4 Faa um teste acessando a pgina do seu servidor pelo browser:
http://192.168.200.x
4.5.1 Instalao e Configurao do PHP5

1 Instale o PHP5 e alguns mdulos necessrios:


# aptitude install php5
# aptitude install php5-mysql
# aptitude install libapache2-mod-php5
2 Crie um arquivo na raiz das paginas servidas do apache, com o nome
index.php, com o seguinte contedo:
# vim /var/www/index.php
<?php
phpinfo();
?>
3 Salve o arquivo e reinicie o apache2:
# /etc/init.d/apache2 restart

4 Em um navegador, acesse o contedo que o apache est servindo, com o


teste do php:

Seu servidor foi instalado corretamente, com suporte a php / mysql.


4.6. Instalao e Configurao do AcidBase

O AcidBase a ferramenta que ser utilizada para visualizar os eventos de


alerta que sero gerados pelo Snort e gravados dentro do MySQL. Para funcionar, o
AcidBase depende do Apache com PHP pois uma ferramenta Web. O Apache2 e o
PHP5 j esto instalados no sistema chroot, ento, o AcidBase dever ser instalado l
tambm.
1 Instale o Acidbase:
Obs.: O AcidBase ainda no est disponvel para a verso do Debian 7.1 (Wheezy).
Adicione um repositrio antigo (Squeezy) e proceda a instalao, conforme o exemplo
abaixo:
deb http://ftp.de.debian.org/debian/ squeeze main
# apt-get update
# apt-get install acidbase

Sero solicitados o tipo de banco (MySQL ou PostgreSQL) e a senha do banco.

2 Edite o arquivo de configurao de base de dados do AcidBase,


informando os valores corretos:
# cd /etc/acidbase
# vim database.php
$alert_user='snort';
$alert_password='123456';
$basepath='';
$alert_dbname='snort';
$alert_host='192.168.200.X';
$alert_port='3306';
$DBtype='mysql';

3 Libere acesso pgina do AcidBase nas configuraes do Apache2:


# cd /etc/acidbase
# vim apache.conf
<IfModule mod_alias.c>
Alias /acidbase "/usr/share/acidbase"
</IfModule>
<DirectoryMatch /usr/share/acidbase/>
Options +FollowSymLinks
AllowOverride None
order deny,allow
deny from all
allow from 192.168.200.0/255.255.255.0
allow from 127.0.0.0/255.0.0.0
<IfModule mod_php4.c>
php_flag magic_quotes_gpc Off
php_flag track_vars On
php_value include_path .:/usr/share/php
</IfModule>
</DirectoryMatch>

4 Crie o link simblico para a pasta do apache2:


# ln -s /etc/acidbase/apache.conf /etc/apache2/conf.d/acidbase.conf

5 Reinicie o Apache2:
# /etc/init.d/apache2 restart
6 Permita que o Mysql trabalhe no IP da mquina e no s em localhost:
# vim /etc/mysql/my.cnf
bind-address
= 192.168.200.X
# /etc/init.d/mysql restart
7 Acesse o AcidBase no browser:
http://192.168.200.X/acidbase/
Obs: No primeiro acesso, a interface do AcidBase dar um erro reclamando a falta de
algumas das tabelas que o AcidBase utiliza. Para resolver esse erro, clique em Setup
Page e depois em Create Base AG.

5. IPS Intrusion Prevention System

5.1 Definio de IPS


O IPS o dispositivo que trabalha junto com o NIDS ou HIDS para tomar uma
ao relacionado a determinado evento que o NIDS/HIDS registraram. Em nosso caso
o nosso NIDS Snort, e o IPS que vamos trabalhar o Guardian que foi desenvolvido
para trabalhar exclusivamente com o Snort.
Sua funcionalidade simples, o Guardian fica constantemente analisando os
logs do Snort, quando gerado uma alerta de nvel 2, que o mais alto do Snort, o
Guardian criar automaticamente uma regra com iptables para bloquear o IP que est
atacando. Esse IP pode ficar bloqueado constantemente, ou por um determinado
tempo.

5.2 Instalando o Guardian

1 O Guardian basicamente um script em Perl, e no est em repositrios


Debian. Pode-se obt-lo pelo seguinte site:
http://www.chaotic.org/guardian/
2 Aps baixar o Guardian, vamos descompacta-lo:
# cd /opt
# tar xzvf guardian-1.X.tar.gz
# cd guardian-1.X
3 Primeiro, modifique o arquivo de configurao guardian.conf e coloque-o
no /etc:

# vim guardian.conf
HostIpAddr 192.168.200.X
Interface ethX
LogFile

/var/log/guardian.log

AlertFile /var/log/snort/alert
IgnoreFile /etc/guardian.ignore
TimeLimit 3600

# cp guardian.conf /etc
4 Pode-se criar o aquivo guardian.ignore, e colocar os IPS que no
precisam ser checados, no caso, podemos colocar o nosso prprio IP:
# vim /etc/guardian.ignore
192.168.200.X
5 Agora, necessrio preparar os scripts que o guardian utilizar par
bloquear e desbloquear os IP's:
# cd scripts
# cp iptables_block.sh /sbin/guardian_block.sh
# cp iptables_unblock.sh /sbin/guardian_unblock.sh
6 Para colocar o Guardian em funcionamento, coloque o script guardian.pl
para um dos diretrios do PATH:

# cd ..
# cp guardian.pl /sbin

Obs: Por uma limitao do Guardian, seu sistema precisa estar com o idioma em
ingls, pois o Guardian se baseia nos parmetros que esto no ifconfig.

7 Crie o arquivo de log do Guardian:


# touch /var/log/guardian.log
8 Crie o arquivo de Target para incluir os IPs, a serem monitorados:
# vim /etc/guardian.target
192.168.0.21
192.168.1.1
200.x.x.x
9 Incluir na configurao do Snort, a opo de armazenamento de alertas,
no arquivo alert, independente do que for logado no MySQL:
# vim /etc/snort/snort.conf

output alert_full: /var/log/snort/alert


output log_tcpdump: tcpdump.log
output database: log, mysql, user=snort password=123456 dbname=snort
host=localhost

10 Reinicie o Snort
#/etc/init.d/snort restart

11 Inicie o Guardian:
# guardian.pl -c /etc/guardian.conf
# ps ax
12 Para testar, acompanhe o log do Guardian enquanto outra mquina faz
uma varredura com nmap:
# tail -f /var/log/guardian.log
13 Para testar, execute um nmap no host onde encontra-se instalado o
snort / guardian:
# nmap -sX 192.168.200.x
Obs.: No se esquea de colocar o guardian para iniciar no boot do sistema
operacional.
Uma boa opo coloc-lo no arquivo /etc/rc.local

6. Modos de utilizao do Snort

6.1 Modo Sniffer


Em modo de Sniffer o programa l todos os pacotes de uma rede e faz o dump de
cada pacote num modo descodificado e capaz de ser compreendido, para um
dispositivo de sada.
Para activar o modo de sniffer, temos os seguintes opes:
v: verbose mode
d: dump packects payloads com os headers
e: display link-layer data
O modo -e display o link-layer data que para o Ethernet o header do pacote, no
entanto o Snort suporta tambm os header do Token Ring e do FDDI.
Combinando todos os switches temos uma viso muito detalhada do trfego da rede.
Alm desta opo, a opo -i, tambm foi utilizada, especificando a interface
eth0, com a ser monitorada.
Caso esta opo no seja definida, o snort monitora a primeira interface do sistema.
Inicie o snort em modo sniffer, utilizando as opes acima:
# snort -vde -i eth0

Modo de utilizao do Snort como Sniffer

A sada do comando tambm poder se concatenada para um arquivo-texto, a fim de


registrar o monitoramento.
Para isso, use o comando tee, segui o nome do arquivo que deseja armazenar as
sadas do monitoramento:
# snort -vde -i eth0 | tee arquivo_monitoramento.txt
Aps o monitoramento, use um edito de texto, para visualizar os eventos registrados

6.2 Em modo de Packet Logger

Neste modo o Snort registra todos os pacotes que se encontram relacionados com um
arquivo ou directrio.
A opo que permite ativar este modo l, e quando ativado permite registar os
pacotes do monitoramento, bem como os endereos IP dos hosts envolvidos,
colocando-os em arquivos por protocolo e nmero das portas.
Os pacotes podem ser registados ou logged no formato binrio se for especificado a
opo -b, podendo desta forma preservar os pacotes para que uma aplicao capaz
de manusear ficheiros em raw TCPDump.
Opes no modo Packet Logger:
l <logdir>: Despeja os pacotes no ficheiro <logdir>
b: Regista os pacotes no formato binrio (tcpdump)

#snort -l /var/log/snort/
#snort -b -l /var/log/snort/
A opo --i, tambm poder ser utilizada, para especificao da inrterface

6.3 Em modo de NIDS


O modo NIDS foi apresentado nos captulos anteriores (instalao e configurao,
pag.: 35)

Você também pode gostar