Você está na página 1de 28

Blindagem de Servidores baseado

na Norma ISO 27002

www.linuxforce.com.br
NIDS

Network Intrusion Detection System

Existem ferramentas que servem para detectar as tentativas de intrusão na rede


toda.

Podemos trabalhar com ferramentas de NIDS - Network Intrusion Detection System,


ou Sistema de Detecção de Intrusão de Redes.

A norma diz no item 10.10.2, que deve haver um controle das tentativas de acesso
a rede. Portanto, caso haja esse tipo de tentativa indevida, será gerado um relatório
para uma suposta análise.

Ferramentas de NIDS que podemos usar:

Podemos usar o Snort que é a mais popular ferramenta de NIDS. No caso, vamos

3
Linux Force – www.linuxforce.com.br

trabalhar com Snort com suporte a MySQL. Pois o Snort pode gravar os logs dele
em arquivos texto, que é muito complicado para se analisar, ou ele pode gravar em
um base de dados, para usarmos uma ferramenta Web para analisar os Logs, que é
muito mais viável.

Como será que o Snort funciona:

O Snort tem basicamente 4 funções:

1 - Libpcap - Essa é uma biblioteca que é encontrada em todos os sistemas que


trabalham como sniffer. O Snort pode trabalhar só como um sniffer, mas tem outras
funções também. A libpcap é a responsável por deixar as placas em modo promís-
cuo.

2 - Pré-processadores - São partes do Snort, que são responsáveis por fazer uma
pré análise do pacote, para tentar diminuir os falsos positivos. O Snort tem muitos
pré-processadores, vamos ver alguns depois, mas uma referencia completa, pode
ser vista no site oficial:

http://www.snort.org/docs/snort_htmanuals/htmanual_283/node49.html

3 - Detecção de Intrusão - Depois que os pacotes passaram pelos pré- processado-


res, eles são passadas para as regras do Snort, que é onde vai chegar se o pacote
é uma tentativa de intrusão que o pré-processador não detectou, ou se é trafego
normal. Depois que o snort estiver instalado, vamos ver as regras dele.

4 - Sistema de Logs/alertas - Se as regras do snort detectam que é uma tentativa de


ataque, ele vai gerar um log/alerta sobre a determinada tentativa. Esse log pode ser
gravado em texto ou na base de dados como vamos fazer.

Página 4 Blindagem de Servidores baseado na Norma ISO 27002


Linux Force – www.linuxforce.com.br

Existem algumas coisas que dificultam a implantação, uma delas, e saber onde po-
sicionar o Snort na rede, e outra é como tratar os falsos-positivos, que acontecem
muito.

Vamos olhar a figura e ver onde o snort poderia ser posicionado na rede.

Primeiro vamos entender qual diferença de usarmos um HUB ou Switch na rede:

No Hub, quando uma máquina manda um pacote para outra, esse pacote é divulgado
para todas as portas do Hub, onde somente a máquina destino o recebe.

Com o Switch, o pacote só é enviado para a máquina destino, ou seja, o pacote não
é divulgado para todas as portas do Switch.

Se tivermos uma rede só com HUB’s, fica tudo tranquilo, pois é só eu ligar a máquina
com Snort em uma das portas e pronto, ele vai ouvir tudo o que passa nada rede.

No caso, o switch vai precisar ter suporte a Port Mirror, também conhecida como
Porta Espelho, é uma porta que quando configurada, recebe toda informação de
todas as outras portas. Essa função de Port Mirror, é encontrada em Switch’s geren-
ciáveis.

Olhando o slide, vamos analisar como fica a questão desse snort posicionado entre
o Firewall e o roteador.

Blindagem de Servidores baseado na Norma ISO 27002 Página 5


Linux Force – www.linuxforce.com.br

Nesse caso, podemos usar o Snort com uma bridge(ponte), é muito simples fazer
isso. Nesse caso a máquina com snort tem que ter 3 placas, 2 que vão formar a
bridge e não vão ter IP’s, e uma terceira com IP para pode administrar a máquina.

Para resolver a questão dos falsos-positivos é preciso ir adequando os pré- proces-


sadores e as regras, não existe uma receita de bolo para isso. O ideal é instalar o
Snort, deixar ele capturando por um tempo os pacotes e depois analisar o que foi
registrado, e ver o que é verdadeiro ou falso.

O primeiro passo para colocar o Snort com o MySQL, é instalar o MySQL:

1 # aptitude install mysql - server

Para verificar se o MySQL abriu alguma porta:

1 # netstat - nlpt

O usuário root do MySQL vem por padrão sem senha, então, temos que definir uma
senha para esse usuário root do MySQL:

1 # mysqladmin -u root password senha

O próximo passo é conectar no MySQL, e criar um base de dados para o Snort:

1 # mysql -u root -p

1 mysql > show databases ;


2 mysql > create database snort ;
3 mysql > quit

Página 6 Blindagem de Servidores baseado na Norma ISO 27002


Linux Force – www.linuxforce.com.br

Agora estamos prontos para instalar o Snort com suporte ao MySQL:

1 # aptitude install snort - mysql

Na instalação, aparecerão duas telas de configuração, que podemos ver nos sli-
des:

O primeiro, é a faixa de endereços que o Snort deve ouvir: Exemplo: 192.168.200.0/24

Lembrando que o 24 define a mascára da rede. O IP é formado de 4 octectos. Cada


um deles podem chegar ao valor de 255. Se é /24, some 8+8 =16+8=24, ou seja, 3
octetos estão reservados para a parte de Rede e somente um octeto para a parte de
Host. Logo, estamos em uma Rede Classe C.

No segundo vai perguntar se deseja configurar uma base de dados para o snort-
mysql gravar os logs. Podem responder SIM.

A base de dados foi criada. Agora precisamos criar as tabelas da base de dados,

Blindagem de Servidores baseado na Norma ISO 27002 Página 7


Linux Force – www.linuxforce.com.br

quando instalamos o snort, ele traz o modelo das tabelas. Está no seguinte diretó-
rio:

1 # cd / usr / share / doc / snort - mysql

Dentro desse diretório, existe um arquivo chamado create_mysql.gz, podemos ex-


plodir o conteúdo dele, para dentro do MySQL, para criar as tabelas na base:

1 # zcat create \ _mysql . gz | mysql -u root -h localhost -p snort

Após isso, vocês podem conectar no MySQL e ver se as tabelas foram criadas:

1 # mysql -u root -p

1 mysql > show databases ;


2 mysql > use snort ;
3 mysql > show tables ;
4 mysql > status ;
5 mysql > quit

Podemos olhar agora, um pouco dos arquivos de configuração do Snort. Entrem no


diretório /etc/snort:

1 # cd / etc / snort
2 # ls -l

O principal arquivo de configuração do Snort, é o snort.conf. Deem uma olhada nele,


no modo original dele, pois vamos fazer umas modificações:

Página 8 Blindagem de Servidores baseado na Norma ISO 27002


Linux Force – www.linuxforce.com.br

1 # vim snort . conf

O arquivo de configuração do Snort, vem com comentários que são interessantes,


então é bom guardar esse arquivo, mas para trabalhar com ele no dia-a-dia, ele é um
pouco poluído. Então vamos tirar todas as linhas de comentários do arquivo e gerar
um novo arquivo:

1 # mv snort . conf snort . conf . original


2 # cat snort . conf . original | grep -v ^# | grep . > snort . conf

Agora que o arquivo está mais limpo vamos analisa-lo:

1 # vim snort . conf

Da linha 1 até a linha 13, nós temos as variáveis que Snort criar. Essa variáveis não
são usadas nesse arquivo, são usadas nas regras que vamos ver depois.

Nós temos que mudar a variável da linha 1, a HOME NET, ela não pode ficar como
any, isso causa muito falso-positivo, temos que definir qual é a nossa rede. Ficaria
assim:

Blindagem de Servidores baseado na Norma ISO 27002 Página 9


Linux Force – www.linuxforce.com.br

var HOME_NET 192.168.200.0/24

Outra que precisamos mudar, é a da linha 2, a EXTERNAL_NET, ela sim pode ficar
com any:

var EXTERNAL_NET any

Da linha 14 até a 64, é onde estão os pré-processadores, cada um com a suas


funções e parâmetros específicos, que podem ser vistos naquele link que eu pas-
sei. Mas por exemplo, o pre-processador frag2, só cuida de pacotes fragmentados
mal formados, ele remonta o pacote para ver se não é uma tentativa de ataque. O
sfportscan, só cuida de varreduras, e assim cada um com a sua função.

Nas linhas 65 e 66, temos as regras de OUTPUT, a primeira, é para ele gravar os
logs nos formatos binários e textos, a segunda, nós precisamos completar ela, para
o Snort gravar na base de dados.

Então a linha 66 fica assim:

output database: log, mysql, user=root password=senha dbname=snort host=localhos

Página 10 Blindagem de Servidores baseado na Norma ISO 27002


Linux Force – www.linuxforce.com.br

Quais são os pontos de falha?

1 - O ideal que quando forem fazer o snort com mysql, que vocês criem um usuário
para fazer isso e não usem o usuário root do MySQL.

2 - A senha aqui é informada em texto claro, então o ideal é mudar a permissão do


arquivo para 400 (r——–), ou seja, só o root que é o dono do arquivo que via poder
manipulá-lo.

Da linha 67 até o final, é onde o Snort inseri as regras que ele vai utilizar, se a regra
não estiver dentro desse arquivo, ele não vai utilizar ela.

Podemos salvar o arquivo, e ver um outro arquivo chamado snort.debian.conf, que é


um arquivo que vem no Snort do Debian:

1 # vim snort . debian . conf

Nesse arquivo, é importante se atentarem as essas duas linhas:

Blindagem de Servidores baseado na Norma ISO 27002 Página 11


Linux Force – www.linuxforce.com.br

DEBIAN_SNORT_HOME_NET="192.168.200.0/24"

DEBIAN_SNORT_INTERFACE="eth0"

A primeira é a sua rede, e a segunda, é a interface que o Snort vai ouvir, isso tem
que estar configurado corretamente.

Após isso, podemos dar uma olhada nas regras dos snort:

1 # cd rules
2 # ls

Aqui estão as regras do Snort, depois vocês podem dar uma olhada nelas, elas são
bem fáceis de entender. No prepara-se antes da aula, tem um exemplo de como
criar uma regra para o Snort.

Agora, vejam se o snort vai iniciar:

1 # / etc / init . d / snort start


2 # ps ax | grep snort

Observem que o Snort não iniciou.

Página 12 Blindagem de Servidores baseado na Norma ISO 27002


Linux Force – www.linuxforce.com.br

Quando vocês instalaram o Snort, ele não configurou a base de dados, logo ele
criou um arquivo chamado db-pending-config dentro de /etc/snort. Agora que a base
já está configurada, vocês podem apagar esse arquivo e iniciar o Snort:

1 # rm db - pending - config
2 # / etc / init . d snort start
3 # ps ax | grep snort

Agora, vocês poderiam fazer um teste de uma máquina para outra.

Uma das máquinas ficaria com o Log aberto:

1 # tail -f / var / log / snort / alert

E outra por exemplo, faria uma varregudar com o nmap:

1 # nmap -sX 192.168.200.1

Após o nmap, vem no log que o snort já começou a capturar os pacotes.

Para administrar o Snort, nós vamos usar uma ferramenta web chamada AcidBase,
para isso, vamos precisar instalar o Apache2 com suporte ao PHP5.

Instalem o Apache2:

1 # aptitude install apache2

Com o apache2 instalado, vamos editar o arquivo apache2.conf e definir um FQDN.

O FQDN (Full Qualify Domain Name), é o nome do domínio ou IP que o Apache vai
trabalhar.

Blindagem de Servidores baseado na Norma ISO 27002 Página 13


Linux Force – www.linuxforce.com.br

1 # vim / etc / apache2 / apache2 . conf


2 ServerName 192.168.200. X

Para validar a modificação, reiniciem o Apache2:

1 # / etc / init . d / apache2 restart

Agora veja no seu browser se o apache está funcionando:

http://192.168.200.X

Agora vamos ver alguns procedimentos básicos, para deixar o Apache2 um pouco
mais seguro. Mas um dica muito importante. Se quiserem fazer um boa segurança
no Apache2, estudem o mod_security do Apache.

A primeira coisa que podemos fazer, é remover o diretório apache2-default dentro do


/var/www. Esse diretório é bom para testarmos se o apache está funcionando, mas
depois de instalado, não precisamos mais dele:

1 # cd / var / www
2 # rm -rf apache2 - default
3 http ://192.168.200. X / icons /

Página 14 Blindagem de Servidores baseado na Norma ISO 27002


Linux Force – www.linuxforce.com.br

Vamos retirar a opção de Indexes para o diretório padrão do Apache2 e outros que
forem interessantes.

A opção Indexes, é a opção que mostra toda a estrutura de diretório da pasta, caso
não exista um arquivo index.html. Veja um exemplo no slide:

Retirem a opção:

1 # cd / etc / apache2 / sites - available


2 # vim default

Blindagem de Servidores baseado na Norma ISO 27002 Página 15


Linux Force – www.linuxforce.com.br

Olhando no Slide, eu copiei e colei a linha de Options, mantive a original comentada,


e retirei a opção de Indexes da que não está comentada.

Vejam no slide como fica, quando não existe a opção Indexes:

Nesse arquivo, também vamos comentar a opção de redirecionamento para a pasta


apache2-default. Vejam que a linha RedirectMatch está comentada.

Reparem que quando o site não tem um index.html, ou a página da algum erro, o
Apache mostra o banner dele, que contém qual é a versão dele, do sistema e outras
coisas.

Para desativar o banner, temos que mudar a seguinte opção no arquivo default:

1 ServerSignature Off

Mas isso não desativa o banner de um varredura com nmap por exemplo.

Esses banners só podem ser desativados recompilando a aplicação. Algumas tra-


zem esses banners em arquivos de configuração, mas a grande maioria é recompi-
lando.

Após essas modificações, podemos reiniciar o apache e ver como fica a página no
browser:

Página 16 Blindagem de Servidores baseado na Norma ISO 27002


Linux Force – www.linuxforce.com.br

1 # / etc / init . d / apache2 restart


2 http ://192.168.200. X

Como a ferramenta que vamos usar é em PHP, vamos precisar instalar o PHP5 no
sistema, e o suporte ao PHP no Apache2.

Vamos instalar os seguintes pacotes:

1 # aptitude install php5 php5 - mysql libapache2 - mod - php5

Agora precisamos editar o arquivo php.ini do PHP5, para habilitar o suporte ao


MySQL:

1 # vim / etc / php5 / apache2 / php . ini

Descomente a seguinte linha:

1 extension = mysql . so

Ainda nesse arquivo, podemos mudar alguns parâmetros, para ajudar na prevenção
contra ataques de PHP Injection:

1 safe_mode = On
2 safe_mode_gid = On

Após isso, podemos reiniciar o Apache2:

1 # / etc / init . d / apache2 restart

Blindagem de Servidores baseado na Norma ISO 27002 Página 17


Linux Force – www.linuxforce.com.br

AcidBase

Vamos instalar e configurar o AcidBase:

O AcidBase é a ferramenta que será utilizada para visualizar os eventos de alerta que
serão gerados pelo Snort e gravados dentro do MySQL. Para funcionar, o Acidbase
depende do Apache com PHP que já foram instalados na aula passada.

Então agora vamos para a instalação do AcidBase:

1 # aptitude install acidbase

Aparecerão algumas telas de configuração, como podem observar nos slides a se-
guir:

Página 18 Blindagem de Servidores baseado na Norma ISO 27002


Linux Force – www.linuxforce.com.br

Após a instalação, precisamos fazer algumas modificações no AcidBase.

A primeira coisa, é editarmos o arquivo database.php do Acidbase e fazer alguns


ajustes:

Blindagem de Servidores baseado na Norma ISO 27002 Página 19


Linux Force – www.linuxforce.com.br

1 # vim / etc / acidbase / database . php

Vamos acertar o seguintes itens:

Ainda poderemos aumentar ainda mais a segurança desse arquivo. Para isso iremos
novamente mudar a permissão do arquivo para 400, onde só o root vai conseguir
ler.

Para o acidbase ser acessado de qualquer máquina na rede, precisamos liberar o


acesso ao range de IP na rede. Vamos editar o arquivo apache.conf do acidbase:

1 # vim / etc / acidbase / apache . conf

Temos que acrescentar a seguinte linha:

1 allow from 192.168.200.0/255.255.255.0

Vejam como fica no Slide:

Página 20 Blindagem de Servidores baseado na Norma ISO 27002


Linux Force – www.linuxforce.com.br

Pessoal, com isso, qualquer máquina da rede vai poder acessar. O que podemos
fazer para criar uma certa segurança no acesso a essa página, ou a qualquer outra
página que consideramos importante em nosso servidor web?

Podemos usar o htaccess para criar uma página de autenticação, liberando usuário
e senha para quem precisar acessar. Postei mais um documento sobre htaccess no
preparando-se para aula.

Para que o apache consiga trabalhar com o AcidBase, vamos ter que criar um link
simbólico para dentro da pasta conf.d do Apache2:

1 # ln -s / etc / acibase / apache . conf / etc / apache2 / conf . d / acibase

E em seguida, podemos reinicar o apache:

1 # / etc / init . d / apache2 restart

Agora podemos ir ao browser e acessar o AcidBase:

Blindagem de Servidores baseado na Norma ISO 27002 Página 21


Linux Force – www.linuxforce.com.br

http://192.168.200.X/acidbase

Nesse momento, vai abrir uma página igual ao do slide:

Temos que clicar na opção Setup page, pois faltam alguns procedimentos para o
AcidBase começa funcionar.

Quando clicarmos em Setup page, nós vamos para um página onde será necessário
criar novas tabelas para o AcidBase, temos que clicar no botão Create BASE Ag,
igual ao slide:

Após isso vai aparecer que as tabelas foram criadas com sucesso.

Página 22 Blindagem de Servidores baseado na Norma ISO 27002


Linux Force – www.linuxforce.com.br

Podemos clicar no botão home, para ir para a página principal do AcidBase.

Essa página é como a que está no Slide:

Nessa página podemos ver que Snort já está capturando pacotes, que já está re-
gistrando informações. No Acibase podemos ver todos os eventos do Snort, e fazer
filtros por datas, horário, IP que estão atacando e vários outros tipos. É uma ferra-
menta que da para perder um bom tempo mexendo nela.

Reparem no Total Number of Alerts. Ali são todos os alertar que ele gerou até agora.
Se clicarmos no número, ele vai nos levar para uma página detalhando os eventos,
como está que está no slide:

Blindagem de Servidores baseado na Norma ISO 27002 Página 23


Linux Force – www.linuxforce.com.br

Em cada uma dessas linhas nos temos o ID, que é o número que identifica o pa-
cote recebido, o signature que é a assinatura conforme a regra do snort ou o pré-
processador, o TimeStamp que é o horário que aconteceu o evento, IP’s de origem e
destino e por último o protocolo tipo TCP, UDP ou qualquer outro.

O bacana do signature, é que quando o evento foi gerado pelo pré- processador, ele
identifica que foi por ele. Como no exemplo:

#0-(1-5) [snort] (http_inspect) OVERSIZE REQUEST-URI DIRECTORY

Um coisa muito importante no signature, são as referencias para os registros de


vulnerabilidades.

Registros de vulnerabilidades, são descrições para cada uma das vulnerabilidades,


explicando o que elas são e quais danos podem causar. As referencias que podemos
ter ai são as seguintes:

snort - Se clicado, direciona para o site do snort. Não é muito bom, mas traz algumas
informações.

local - Nesse momento, elas não vão funcionar se clicarmos, só vamos ter elas,
depois que atualizarmos as regras do Snort, vamos fazer isso depois. Mas elas
trazem boas informações, inclusive quando pode ser falso-positivo.

nessus - Se clicado, leva para o site do nessus, que é uma outra ferramenta que
vamos ver. A ferramenta é muito boa, mas as referencias do site não.

Página 24 Blindagem de Servidores baseado na Norma ISO 27002


Linux Force – www.linuxforce.com.br

BID (Bugtrack ID) - Se clicado, leva para o site do securityfocus.org. Essas são
referencias muito boas, bem explicadas. O diferencial desse site, é que se existe um
exploit para explorar deterimada falha, ele traz também.

CVE/CAN - Se clicado, leva para o site cve.mitre.org, onde também traz boas infor-
macões sobre as vulnerabilidades.

Os dois últimos são os que trazem as melhores informações. Tudo isso é para nos
deixar informados sobre as vulnerabilidades.

A melhor coisa a se fazer quando instala o Snort, é deixar ele capturando os pa-
cotes da rede por um dia. Depois disso, analisar os eventos, e comecar a verificar
se são possíveis falsos positivos ou não, para depois fazer alguns ajustes nos pré-
processadores ou nas regras.

Vamos analisar o seguinte cenário:

Você está usando autenticação via htaccess no Apache2, pois você só quer que
algumas pessoas tenham acesso ao AcidBase. E em outro servidor, você tem o
servidor de webmail que também tem autenticação, mas não htaccess. Mas existe
um grande problema de segurança aqui:

O grande problema é que a porta 80 http trafega tudo em Clear Text (Texto Claro),
ou seja, tudo que for capturado por um sniffer nessa comunicação, será mostrado as
claras, usuários, senhas, tudo.

Para resolver isso, podemos colocar o Apache trabalhando com SSL.

Quando vamos trabalhar com SSL, precisamos ter uma Chave Privada, e um Cer-
tificado. Se a sua empresa é uma instituição que vai liberar algum serviço para os
clientes, é muito importante que ela tenha um certificado assinado por uma empresa
Certificadora como a Verisign (http://www.verisign.com.br/), pois é uma certificadora
reconhecida em todos os browsers.

Mas como vamos fazer algo que para os funcionários da empresa, nós mesmos

Blindagem de Servidores baseado na Norma ISO 27002 Página 25


Linux Force – www.linuxforce.com.br

podemos criar o nosso certificado e assiná-lo com a nossa própria chave.

Primeiro, temos que verificar se o módulo ssl do Apache está ativado:

1 # apache2ctl -M

Caso ele não esteja ativado, precisamos ativá-lo:

1 # a2emod ssl

Quando o SSL está ativado, o apache precisa trabalhar na porta 443. Ele pode
trabalhar na 80 e na 443 ao mesmo tempo, mas vamos deixá-lo somente na 443.

Editem o arquivo ports.conf do Apache2 e deixem da seguinte maneira:

1 # vim / etc / apache2 / ports . conf


2 Listen 443

Para gerar o nosso certificado e nossa chave privada, precisamos instalar o pacote
openssl:

1 # aptitude install openssl

Para criarmos a nossa chave e certificados, vamos criar o seguinte diretório:

1 # mkdir / etc / apache2 / ssl


2 # cd / etc / apache2 / ssl

O primeiro a ser criado será a chave:

Página 26 Blindagem de Servidores baseado na Norma ISO 27002


Linux Force – www.linuxforce.com.br

1 # openssl genrsa - out minhachave . key 1024

Estamos criando uma chave com a criptografia RSA, no nome dela vai ser minhah-
chave.key, poderia ter qualquer nome, e ela vai ter 1024 bits.

Agora nós precisamos criar a requisição do certificado. Esse é o que deve ser envi-
ado para a empresa Certificadora, para ela assinar com a chave dela.

Como falei, não vamos usar uma empresa Certificadora, nós mesmos vamos assinar
para criarmos o nosso certificado:

1 # openssl req - new - key minhachave . key - out requisicao . csr

Aqui estamos gerando a nossa requisição, que vai ser chamar requisica.csr, ela po-
deria ter qualquer nome.

Nesse momento, serão feitos algumas perguntas, no caso vocês podem preencher
com os dados de sua organização.

Agora finalmente podemos criar o nosso certificado:

1 # openssl x509 - req - days 365 - in requisicao . csr - signkey minhachave


. key - out certificado . crt

Vamos ter um certificado chamado certificado.crt com válidade de 365 dias.

Nesse momento, precisamos fazer com que o apache trabalhe com o SSL.

Vamos alterar o nosso domínio virtual padrão e adicionar as diretivas necessárias


para ativar o SSL:

Blindagem de Servidores baseado na Norma ISO 27002 Página 27


Linux Force – www.linuxforce.com.br

1 # vim / etc / apache2 / sites - enable /000 - default

Temos que adicionar as 3 linhas conforme está no slide:

Depois disso, podemos reinicar o apache2:

1 # / etc / init . d / apache2 restart

Para verificar se o serviço está rodando na porta 443:

1 # netstat - nlpt

Agora ele está rodando na porta 443. Para acessar nossa página no browser:

https://192.168.200.X/acidbase

Página 28 Blindagem de Servidores baseado na Norma ISO 27002

Você também pode gostar