Escolar Documentos
Profissional Documentos
Cultura Documentos
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:
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:
Nveis:
- 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
# 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); };
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
# 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
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]:
2.2.1.
Testando o OSSEC
# 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
servio ou aplicao
3)
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?
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.
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
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
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
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
generic-host
host_name
alias
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
localhost
Disk Space
check_all_disks!20%!10%
generic-service
localhost
Current Users
check_users!20!50
generic-service
host_name
localhost
service_description
Total Processes
check_command
check_procs!250!400
generic-service
host_name
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
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
debian2
Disk Space
check_all_disks!20%!10%
generic-service
debian2
Current Users
check_users!20!50
generic-service
debian2
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
debian2
service_description
Current Load
check_command
check_load!5.0!4.0!3.0!10.0!6.0!4.0
Hosts monitorados
Servios Monitorados
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.
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.
Dessa maneira, o usurio snort ser criado e ter acesso base snort atravs do IP da
mquina e do hostname.
Deseja configurar uma base de dados para snort-mysql gravar os logs: Sim
12 Inicie o snort:
# /etc/init.d/snort start
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.
# 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.
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
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