Escolar Documentos
Profissional Documentos
Cultura Documentos
19 de dezembro de 2006
Sumário
II Informações Básicas 4
III Snort 9
1 Snort 10
2 Plano de ensino 11
2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.8 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3 Introdução 13
3.1 O que é o Snort? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2 O que o Snort faz? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4 Como é o Snort? 15
4.1 Como o Snort funciona? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5 Instalação 17
5.1 Instalando - 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.2 Instalando - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
6 Montando um snort.conf 21
6.1 Selecionando o código funcional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6.2 Adequando a seção de regras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.3 Comentador dos includes do snort.conf de regras do Snort . . . . . . . . . . . . . . 23
6.4 Inclusor de includes de regras do Snort no snort.conf . . . . . . . . . . . . . . . . . 24
6.5 snort.conf resultante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
7 Variáveis 29
7.1 Conhecendo as variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
7.2 Entendendo e definindo as variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
8 Regras 33
8.1 Introduzindo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
8.2 Entendendo as regras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
8.3 Montando regras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
9 Rodando o Snort 36
9.1 Os logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
9.2 Os modos de funcionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
9.3 Enfim, rodando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
9.4 Modo sniffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
9.5 Modo logger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
9.6 Modo NIDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
10 Notas finais 43
10.1 Conferindo os alertas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
10.2 Outros aplicativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2
Parte I
3
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Conteúdo
O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-
ternet, disponíveis em diversos sites ou originalmente produzido no CDTC em http://www.cdtc.org.br.
O formato original deste material bem como sua atualização está disponível dentro da licença
GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de
mesmo nome, tendo inclusive uma versão traduzida (não oficial).
A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br), desde outubro
de 2006. Criticas e sugestões construtivas são bem-vindas a qualquer tempo.
Autores
A autoria deste conteúdo, atividades e avaliações é de responsabilidade de Tomas Ribeiro
Cardoso (tomas@cdtc.org.br).
O texto original faz parte do projeto Centro de Difusão de Tecnolgia e Conhecimento, que vem
sendo realizado pelo ITI em conjunto com outros parceiros institucionais, atuando em conjunto
com as universidades federais brasileiras que tem produzido e utilizado Software Livre, apoiando
inclusive a comunidade Free Software junto a outras entidades no país.
Garantias
O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-
lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam
direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.
Licença
Copyright ©2006,Tomas Ribeiro Cardoso (tomas@cdtc.org.br).
Permission is granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.1 or any later version published by
the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-
TILA. A copy of the license is included in the section entitled GNU Free Documentation
License.
4
Parte II
Informações Básicas
5
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Sobre o CDTC
Objetivo Geral
Objetivo Específico
Guia do aluno
Neste guia, você terá reunidas uma série de informações importantes para que você comece
seu curso. São elas:
• Primeiros passos
É muito importante que você entre em contato com TODAS estas informações, seguindo o
roteiro acima.
Licença
Copyright ©2006, Tomas Ribeiro Cardoso (tomas@cdtc.org.br).
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos
da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior
6
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA
APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-
mentação Livre GNU".
• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão
e a sua recuperação de materiais.
• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e
realizá-las em tempo real.
• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não
controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.
A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:
. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações
que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a
todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que
interesse ao grupo, favor postá-la aqui.
Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do
curso. É recomendado que você faça uso do Forum de dúvidas gerais que lhe dá recursos mais
7
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo
para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas
a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem
ajudar.
Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a
formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico
é recomendável ver se a sua pergunta já foi feita por outro participante.
. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-
ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem
ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um
ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-
dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em português pelos links:
Primeiros Passos
Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:
• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas básicas do mesmo;
Perfil do Tutor
Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.
• fornece explicações claras acerca do que ele espera, e do estilo de classificação que irá
utilizar;
8
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-
que motivo a classificação foi ou não foi atribuída’;
• tece comentários completos e construtivos, mas de forma agradável (em contraste com um
reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de
ameaça e de nervossismo’)
9
Parte III
Snort
10
Capítulo 1
Snort
Snort é um IDS (Intrusion Detection System) - Sistema de Detecção de Intrusão. Ele analisa em
tempo real os pacotes que passam por uma dada interface de rede e os loga caso os diagnostique
como ameaças. Seu funcionamento é configurável e seu uso é simples e transparente. Hoje o
Snort é o IDS mais usado do mundo GNU//Linux.
11
Capítulo 2
Plano de ensino
2.1 Objetivo
Capacitar o usuário para o uso dos principais recursos do Detector de Intrusão Snort.
2.3 Pré-requisitos
Os usuários devem ter experiência e familiaridade com o(s) shell(s) do linux e ter conhecimento
de redes.
2.4 Descrição
O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodle
como ferramenta de aprendizagem. O curso tem duração de uma semana e possui um conjunto
de lições que deverão ser lidas e repondidas ao longo da semana. O material didático está
disponível on-line de acordo com as datas pré-estabelecidas em cada tópico.
2.5 Metodologia
Todo o material está no formato de lições, sendo que cada uma dispõe de um texto explicativo e
uma ou mais perguntas para acompanhar panoramicamente a leitura dos participantes. Ao final
do curso um questionário será apresentado para que se faça uma avaliação do aprendizado de
cada um. Aconselhamos a leitura de "Ambientação do Moodle"para aquelas pessoas que não
tenham nenhum familiaridade com o que seja nem o Moodle nem o que seja ensino à distância.
12
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
2.6 Cronograma
Duração Descrição do Módulo
De segunda-feira a domingo Lição 1 - Introdução
Lição 2 - Instalação
Lição 3 - Montando um snort.conf
Lição 4 - Variáveis
Lição 6 - Regras
Lição 7 - Rodando o Snort
Lição 8 - Notas finais
Avaliação de aprendizagem
Avaliação do curso
As lições contém o contéudo principal. Elas poderão ser acessadas quantas vezes forem ne-
cessárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberá
uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada lição,
pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição for menor
do que 7, sugerimos que você faça novamente esta lição. Ao final do curso será disponibilizada a
avaliação referente ao curso. Tanto as notas das lições quanto a da avaliação serão consideradas
para a nota final. Todos os módulos ficarão visíveis para que possam ser consultados durante a
avaliação final.
Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de
Ensino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma.
Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deverá ser
enviada no fórum. Diariamente os monitores darão respostas e esclarecimentos.
2.7 Avaliação
Toda a avaliação será feita on-line. Tanto o resultado das lições quanto o resultado do questionário
final serão relevantes para a média final das notas, que por sua vez nos habilita ou não a liberar
a certificação. Para a aprovação o participante deverá obter nota maior ou igual a 6,0 na média
final.
2.8 Bibliografia
• http://afrodita.unicauca.edu.co/
• http://packetstormsecurity.nl/papers/IDS/snort_rules.htm
• http://neworder.box.sk/newsread.php?newsid=7646
• http://docs.triforsec.com.br/index.php?option=com_content&task=view&id=18&It
• http://www.snort.org/docs/snort_manual/node19.html
13
Capítulo 3
Introdução
14
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
No caso do Snort, os mesmos logs podem ser enviados em tempo real para a saída padrão, o
console.
Esse log, por sua vez, pode ser escrito tanto em texto plano em formato legível quanto em
outros formatos otimizados que tem de ser interpretados por um programa e que podem ser
manipulados até mesmo em tempo real para o visualizarmos melhor, caso utilizemos algum plugin
especial.
O Snort é capaz de reconhecer vários tipos de pacotes maliciosos. Alguns exemplos são
pacotes de varreduras discretas de portas, ataques de CGI, ataques de estouro de buffer e outros
esforços que possam servir a futuros ataques, como reconhecimento de sistema operacional, por
exemplo.
15
Capítulo 4
Como é o Snort?
16
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Como sabemos, o Snort captura os pacotes que passam por uma dada interface de rede.
Para descobrir se está ou não havendo uma tentativa de intrusão, o Snort atravessa os dados
dos pacotes por uma série de módulos de análise e de diagnóstico. O decodificador recebe os
pacotes e os analisa no nível dos protocolos e dos cabeçalhos, descobrindo os IP envolvidos, as
portas, o tamanho do pacote e sua integridade, tudo antes mesmo deles serem remontados para
uma aplicação.
O preprocessador identifica comportamentos suspeitos de pacotes e os encaminha para uma
análise de conteúdo para o módulo seguinte. Já o processador de pacotes compara o con-
teúdo e natureza do pacote com assinaturas de ataques conhecidos, armazenadas no diretório
/etc/snort/doc e indicadas pelas regras carregadas pelo Snort (lidas no arquivo de configuração).
As mesmas regras que enviam a informação sobre os pacotes para serem processadas encami-
nham o diagnóstico para ser logado e/ou impresso no console.
O Snort pode ser configurado por quem quiser para funcionar sob o controle do inet.d, como
é padrão para quem o instalou por um gerenciador de pacotes como o apt no Debian, o que faria
com que o controlássemos com /etc/init.d/snort start/stop/restart/status... Aqui, porém vamos
manipulá-lo por conta própria, inicializando-o quando quisermos (e não automaticamente com o
boot).
17
Capítulo 5
Instalação
5.1 Instalando - 1
Primeiramente, vamos adquirir o codigo fonte do Snort.
Baixem o código no endereço http://www.snort.org/dl/ e faça o descrito a seguir.
Atualmente, no momento em que este texto foi escrito, o Snort se encontra na versão 2.6.0. É
importante que acompanhem o curso com a versão mais recente disponível, mesmo que ela não
seja mais a 2.6.
O comando a seguir, o wget, baixa da internet o pacote no endereço indicado. O mesmo vale
para todos wgets. Estes comandos se tornam naturalmente desnecessários se visitarem os sites
e baixarem os pacotes diretamente deles.
$ wget http://www.snort.org/dl/current/snort-2.6.0.1.tar.gz
Outros pacotes importantes são a biblioteca libpcap, que a maioria esmagadora dos sniffers usam
para escutar em uma interface promiscua e o pcre, um conjunto de funcoes com expressoes re-
gulares compativeis com perl. Hoje a versão do libpcap que estou baixando é a 0.9.4 e a do pcre
é a 6.3. Mas caso haja outras mais recentes, baixe-as. Procure por elas nos sites
Libpcap: http://www.tcpdump.org/release/ Pcre: http://surfnet.dl.sourceforge.net/sourceforge/pcre/
$ wget http://www.tcpdump.org/release/libpcap-<versão.mais.nova>.tar.gz
$ wget http://surfnet.dl.sourceforge.net/sourceforge/pcre/pcre-<versão.mais.nova>.tar.gz
$ mkdir /etc/snort
Copie os códigos compactados que baixou até a pasta criada e entre nela:
18
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
$ cd /etc/snort
$ cd pcre-<versão>
$ ./configure
$ make
$ make install
$ cd ../libpcap-<versão>
$ ./configure
$ make
$ make install
Agora entre na pasta do codigo descompactado do Snort e vamos instalar o Snort ele mesmo:
$ cd ../snort-<versão>
$ ./configure –enable-dynamicplugin
Habilite o uso do banco de dados mysql para uso futuros testes e experimentos adicionando,
se quiser:
–with-mysql
$ make
$ su
$ make install
19
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
$ cd /etc/snort
$ rm snort-<número da versão>.tar.gz
$ rm pcre-<número da versão>.tar.gz
$ rm libpcap-<número da versão>.tar.gz
Por fim, copie os seguintes arquivos da pasta de regras para a pasta pai:
$ cd /etc/snort
$ cp rules/unicode.map .
$ cp rules/classification.config .
$ cp rules/reference.config .
5.2 Instalando - 2
Vamos, ao mesmo tempo em que conhecemos um pouco dos arquivos e diretórios utilizados
pelo snort, preparar o sistema para o seu uso. Quem instalou com apt-get não terá de fazer
adaptações.
Antes de mais nada, ganhe um shell como root. Precisamos de uma pasta para guardar as
regras de análise do snort (vamos entender isso posteriormente). Para tanto, crie, caso já não
tenha sido criada, a pasta rules dentro do diretório do snort:
Agora crie outra pasta fundamental, a pasta snort em que ficarão os logs do snort, dentro do
diretório /var/log:
$ mkdir /var/log/snort
Copie o arquivo de configuração do snort para a pasta base do snort que criamos, só para fi-
car mais à mão:
Agora vamos criar um usuário e um grupo para utilizar o snort e altere o proprietário da pasta
de logs do snort para o novo usuário snort:
$ groupadd snort
20
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
$ wget http://www.snort.org/pub-bin/downloads.cgi/Download/vrt_pr/snortrules-pr-2.4.tar.gz
Esse comando baixa as regras do Snort 2.4 feita para os não cadastrados. Para se cadastrar não
é preciso pagar nada, mas para se inscrever sim, e esses últimos que recebem as regras mais
novas e readequadas. Para se cadastrar, entre em "https://www.snort.org/pub-bin/register.cgi".
Descompacte o arquivo:
E por fim mova as duas pastas criadas (doc e rules) para a pasta do Snort:
Por fim, copie os seguintes arquivos da pasta de regras para a pasta pai:
$ cd /etc/snort
$ cp rules/unicode.map .
$ cp rules/classification.config .
$ cp rules/reference.config .
21
Capítulo 6
Montando um snort.conf
###################################################
# This file contains a sample snort configuration.
# You can take the following steps to create your own custom configuration:
#
# 1) Set the variables for your network
# 2) Configure dynamic loaded libraries
# 3) Configure preprocessors
# 4) Configure output plugins
# 5) Add any runtime config directives
# 6) Customize your rule set
#
###################################################
22
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
$ cd /etc/snort
$ mv snort.conf snort.conf.original
$ head -n 20 snort.conf.original > original.sem.comentarios
$ cat snort.conf.original | grep -v #̂ » original.sem.comentarios
$ uniq original.sem.comentarios snort.conf
Para quem não entendeu o que foi feito, entramos na pasta do Snort para no segundo comando
renomear o snort.conf para snort.conf.original. Esse é o arquivo como veio. No terceiro comando
capturamos as primeiras vinte linhas do arquivo original para manter o mesmo cabeçalho no ar-
quivo que criamos. No quarto comando removemos todas as linhas comentadas, chamando o
arquivo resultante de original.sem.comentarios. Esse vai ser um segundo arquivo reserva. No
último comando retiramos as linhas repetidas, no caso somente as linhas em branco, para que
ficasse mais legível, e nomeamos o arquivo resultante de snort.conf - o arquivo que vamos utilizar.
Como em um código de uma linguagem de programação, estas linhas apontam cada uma
delas para um conteúdo que está em outro arquivo. Estes arquivos, por sua vez, estão, como
indicam as linhas, na pasta indicada pela variável $RULE_PATH. Lembrem que atribuímos a essa
variável o endereço da pasta /etc/snort/rules. Essas linhas apontam, pois, para arquivos contidos
na nossa pasta de regras.
Como o Snort lê o arquivo snort.conf para rodar e segue os caminhos apontados para os
arquivos de regras, ocorreriam erros caso houvesse ’includes’ que apontassem para arquivos de
regras que não existem. Portanto, é importante, antes de acionar o Snort, conferir se as linhas de
’includes’ apontam para arquivos de regras existentes. No caso de eles não existirem suas linhas
devem ser comentadas no snort.conf. Para tanto podemos comparar as linhas do snort.conf com
os arquivos que vemos no diretório /etc/snort/rules/.
Fiz, para este curso, entretanto, um script que automatiza essa tarefa comentando as linhas
do snort.conf que apontam para arquivos inexistentes. No entanto, pode ser do seu interesse não
comentar as linhas inadequadas do snort.conf, mas sim incluir no snort.conf linhas que apontem
23
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
para todos e somente para os arquivos de regras existentes. Outro script está disponível para
esta função. Neste caso, o Snort faria uso de todos os arquivos de regras disponíveis, e pode
ser uma boa opção para quem precisa de um IDS completo. Quem atualiza com frequência os
arquivos de regras também podem fazer um bom uso desse script.
Os scripts podem ser encontrados na página principal do curso de Snort e também nas
próximas páginas ainda nesta lição. As páginas deste curso que contêm os códigos explicam
como executá-los caso tenha dificuldades. Note que os scripts estão preparados para procurar
o snort.conf na pasta do snort /etc/snort e o diretório de regras em /etc/snort/rules. Caso sua
configuração seja diferente, altere o valor das variáveis no início do código.
$ chmod +x comentador.sh
$ ./comentador.sh
———————-INICIO DO CODIGO————————-
#!/bin/bash
#Comenta as linhas do snort.conf que apontam para arquivos de regras no
diretório rules/ que não existem.
ARQ_CONF="/etc/snort/snort.conf"
RULES_DIR="/etc/snort/rules"
ARQ_LISTA1="lista_de_includes_pura"
ARQ_LISTA2="lista_de_includes_gerada"
TEMPORARIO="snort.conf-temporario"
cat $ARQ_CONF | grep "include $RULE_PATH awk -F’/’ ’{print $2}’ >
$ARQ_LISTA1
for i in $(cat $ARQ_LISTA1 )
do
if [ -e $RULES_DIR/$i ]
then
echo "include $RULE_PATH/$i»> $ARQ_LISTA2
else
echo "#include $RULE_PATH/$i»> $ARQ_LISTA2
fi
done
cat $ARQ_CONF | grep -v "include $RULE_PATH» $TEMPORARIO
cat $TEMPORARIO > $ARQ_CONF
echo ” » $ARQ_CONF
cat $ARQ_LISTA2 » $ARQ_CONF
24
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
————————–FINAL DO COGIDO—————————-
$ chmod +x inclusor.sh
./inclusor.sh
—————————-INICIO DO CODIGO—————————
#!/bin/bash
#Inclui no snort.conf uma chamada para cada arquivo de regras existente em
rules/
ARQ_CONF="/etc/snort/snort.conf"
RULES_DIR="/etc/snort/rules"
ARQ_LISTA1="lista_de_regras_pura"
ARQ_LISTA2="lista_de_regras_gerada"
TEMPORARIO="snort.conf-temporario"
—————————FINAL DO CODIGO——————————–
25
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
var HTTP_PORTS 80
26
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
preprocessor stream4_reassemble
preprocessor bo
preprocessor ftp_telnet_protocol:
ftp client default \
max_resp_len 256 \
bounce yes \
telnet_cmds yes
27
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
preprocessor smtp: \
ports 25 \
inspection_type stateful \
normalize cmds \
normalize_cmds EXPN VRFY
RCPT \
alt_max_command_line_len
260 MAIL \
alt_max_command_line_len
300 RCPT \
alt_max_command_line_len
500 HELP
HELO
ETRN
\
alt_max_command_line_len
255
EXPN
VRFY
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/scan.rules
include $RULE_PATH/finger.rules
include $RULE_PATH/ftp.rules
include $RULE_PATH/telnet.rules
include $RULE_PATH/rpc.rules
include $RULE_PATH/rservices.rules
include $RULE_PATH/dos.rules
include $RULE_PATH/ddos.rules
include $RULE_PATH/dns.rules
include $RULE_PATH/tftp.rules
include $RULE_PATH/web-cgi.rules
include $RULE_PATH/web-coldfusion.rules
include $RULE_PATH/web-iis.rules
28
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
include $RULE_PATH/web-frontpage.rules
include $RULE_PATH/web-misc.rules
include $RULE_PATH/web-client.rules
include $RULE_PATH/web-php.rules
include $RULE_PATH/sql.rules
include $RULE_PATH/x11.rules
include $RULE_PATH/icmp.rules
include $RULE_PATH/netbios.rules
include $RULE_PATH/misc.rules
include $RULE_PATH/attack-responses.rules
include $RULE_PATH/oracle.rules
include $RULE_PATH/mysql.rules
include $RULE_PATH/snmp.rules
include $RULE_PATH/smtp.rules
include $RULE_PATH/imap.rules
include $RULE_PATH/pop2.rules
include $RULE_PATH/pop3.rules
include $RULE_PATH/nntp.rules
include $RULE_PATH/other-ids.rules
include $RULE_PATH/virus.rules
include $RULE_PATH/experimental.rules
29
Capítulo 7
Variáveis
As variáveis básicas vitais As variável que Snort reconhece, como podemos esperar, são pre-
definidas. As variáveis que vemos acima são importantes para o funcionamento do Snort, ainda
que a boa configuração de três delas seja mais vital na medida em que são variáveis-chave. Elas
são:
HOME_NET
30
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
EXTERNAL_NET
RULE_PATH
Provavelmente, porém, também não queremos incluir toda uma rede interna no escopo da HOME_NET,
e nesse caso, vamos querer restringir sua seção. Para tanto, precisamos expecificar sub-redes
com o padrão CIDR. Para saber mais, dê uma olhada nesta página sobre o padão CIDR na
wikipedia.
Uma definição como aquelas acima, que incluem toda rede interna, é o mesmo que os exem-
plos abaixo, utilizando CIDR:
Para determinar como HOME_NET somente a nossa própria máquina, porém, definimos, mais
que naturalmente, o nosso próprio IP, como por exemplo:
31
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Note que, neste caso, o Snort não precisa trabalhar em modo promíscuo (ainda que ele o faça
por padrão)! Caso queiramos, o que é razoável, incluir mais de uma máquina, definimos uma lista
separada por vírgula, sem espaços e entre colchetes, como por exemplo:
Analogamente, se queremos definir duas sub-redes distintas, ou mesmo uma máquina e uma
sub-rede, fazemos, por exemplo:
ou
EXTERNAL_NET
A variável EXTERNAL_NET é reservada para a definição de que endereços serão reconheci-
dos como externos para o Snort. Podemos, seguindo as mesmas regras sintáticas da definição
da HOME_NET, definí-la seccionando a rede ou mesmo mantendo-a como "any". O ideal, no
entanto, talvez fosse simplismente definir EXTERNAL_NET como tudo aquilo que não é conside-
rado interno pelo Snort, ou seja, tudo aquilo que não for HOME_NET. Note, entretanto, que neste
caso estará ignorando pacotes internos, correndo o risco de perder detecções de ataques de
dentro da própria rede. Para definir a rede externa como a negação do que seja a interna, enfim,
podemos utilizar o símbolo ’ ! ’ (exclamação), que significa a negação do valor que o segue. Para
definir EXTERNAL_NET como sendo aquilo que não é HOME_NET, basta definí-la como:
var EXTERNAL_NET !$HOME_NET
Tome somente o cuidado de não definir a EXTERNAL_NET como !$HOME_NET se antes
definiu a HOME_NET como "any", pois neste caso estaria informando que a rede externa é tudo
que não é qualquer coisa, o que não é possível, visto que a sua rede externa tem de ser alguma
coisa. Caso queira fazer o Snort experimentar a vertigem de um paradoxo, faça-o e depois me
conte o resultado. Provavelmente um erro simples.
Como de se esperar, temos de utilizar o símbolo do cifrão ’ $ ’ antes de HOME_NET para
estarmos referindo a variável HOME_NET, e não à palavra HOME_NET.
RULE_PATH
A variável RULE_PATH não depende da sua rede nem do que queremos fazer com ela. Esta
variável indica o caminho do diretório no seu sistema de arquivos em que se encontram as regras
que o Snort poderá utilizar. Dentre essas, indicaremos algumas ao final do arquivo de confi-
guração e adequaremos e faremos outras. Mas todos arquivos de regras indicados no final do
snort.conf devem estar no mesmo diretório. O caminho desse diretório deve ser o valor da variá-
vel RULE_PATH. Na instalação que sugeri, o diretório de regras fica em /etc/snort, e seu caminho
absotulo é /etc/snort/rules. A definição de RULE_PATH para essa instalação pode ser, portanto:
ou até mesmo
32
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
As outras variáveis
As outras variáveis dizem respeito aos servidores da sua rede e a algumas portas relevantes.
Cada tipo de serviço possui uma variável particular que deve apontar para o IP da máquina que
o realiza. Se sua própria máquina que serve o Snort realiza um serviço, a definição pode ser:
33
Capítulo 8
Regras
8.1 Introduzindo
Bom, tudo o que preparamos até então dentro do arquivo snort.conf, que foi adequar as variáveis
às nossas condições, tem uma única e exclusiva finalidade: a de permitir o funcionamento das
regras comuns, como as três básicas e as que dizem respeito a serviços e portas. Afinal, são
essas regras que vão se utilizar das variáveis que definimos. Essas regras têm a função de
decidir que processamento um pacote vai sofrer e que caminho o dignóstico vai tomar, para que
essas decisões sejam tomadas, as informações que colocamos nas variáveis são fundamentais.
Essas regras decidem, pois, sobre o valor que as variáveis a elas relevantes possuem. Note que
qinda que a maioria delas faça referência às variáveis HOME_NET e EXTERNAL_NET, somente
algumas fazem referência às variáveis do endereço de serviços específicos. Definir bem todas
as variáveis permite que o Snort faça uma análise mais inteligente tendo em vista o destino dos
pacotes intrusivos, ao mesmo tempo que economiza seu processamento evitando que ele procure
exploits para Web direcionados para o servidor exclusivo de DNS.
34
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
alert tcp $EXTERNAL_NET $HTTP_PORTS -> $HOME_NET any (msg:"PORN erotica"; con-
tent:"erotic"; nocase; flow:to_client,established; classtype:kickass-porn; sid:1798; rev:1;)
As informações escritas até os parênteses são parte do que chamamos de cabeçalho da
regra, e o que vem dentro deles são as opções da regra. Aquilo que vem dentro dos parênteses
e antes dos ’dois pontos’ é chamado de palavra-chave.
1. Com alert, esta regra diz ao Snort para gerar um alerta e logar;
3. $var1 $var2 -> $var3 $var4 informa que os pacotes que interessam a esta regra são aqueles
que vêm da rede de fora (no caso, $var1) pelas portas que servem o protocolo http (no caso,
$var2) e entram ( -> ) na rede interna (no caso, $var3) por qualquer porta (any);
4. msg é a palavra-chave que leva o alert do Snort a imprimir uma mensagem no alerta e nos
logs. No caso, a mensagem é "PORN erotica";
5. content informa ao Snort que string será procurada dentro do payload do pacote.
alert
Note que até a última versão do Snort todas as regras tinham que ser escritas em uma única
linha, mas que agora podemos continuá-las na linha seguinte se ’escaparmos’ o salto de linha
com o caractere ’ ’ ao final de cada linha.
Depois de alert informamos que tipo de protocolo constitui a conexão dos pacotes em que
estamos interessados(as). Como vamos procurar por pacotes relativos a conexões web, a um
35
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
alert tcp
Em seguida, como já vimos em nosso exemplo de regra, vem os ips e portas de origem e de
destino dos pacotes. Em nosso caso, queremos encontrar pacotes que saiam de nossa rede,
portanto podemos informar o ip de origem como qualquer um que venha de nossa rede, a defi-
nida em $HOME_NET e o ip de destino como qualquer um que saia de nossa rede, a definida em
$EXTERNAL_NET. A porta de destino é a 80, e a de saída podemos definir como qualquer
uma, any. Veja como está a nossa regra até então:
alert tcp $HOME_NET any -> $EXTERNAL_NET 80
O que acabamos de escrever foi o cabeçalho de nossa regra. Agora precisamos abrir pa-
renteses e escrever as opçoes da regra, que são sempre iniciadas por palavras-chave. Estamos
interessados(as) no uso de duas palavras-chave em particular: a content e a msg. Com ’content’
definiremos que string procurar, e com ’msg’ definiremos que mensagem aparecerá no alerta que
será gerado para nos.
Como procuramos por aparições da string Lula, podemos informar a palavra-chave content
com a string Lula. A mensagem que queremos que apareça pode ser algo como "La vem ’Lula’
pelo cabo de rede!". Adapte esta frase caso esteja em uma rede wireless! Nossa regra fica:
alert tcp $HOME_NET any -> $EXTERNAL_NET 80 (content: "Lula"; msg: "La vem ’Lula’ pelo
cabo de rede!";)
Nossa regra pode ser considerada pronta. Como vimos, podemos adicionar um indicador
do tipo de alerta em que os alvos dessa regra devem se encaixar, podemos dar um valor de
identificação para a regra e setar a sua prioridade frente às outras. Este tipo de informação tem
de ser previa e adequadamente configurada dentro do arquivo classification.config. As pessoas
interessadas realmente deviam dar uma olhada na documentação oficial.
Mais tarde neste curso vamos ter a oportunidade testar nossa regra.
36
Capítulo 9
Rodando o Snort
9.1 Os logs
Uma última configuração que vai nos interessar por hora é o destino dos diagnósticos, os logs. Os
logs, além de poderem ser enviados para o console em tempo real, podem ser tanto armazenado
em arquivos quanto escritos em tabelas de um banco de dados. O arquivo pode ser escrito tanto
em alertas quanto em formato tcpdump. Este formato não é legível sem uma ferramenta como o
ethereal ou o próprio Snort.
Existem outras formas de gerar outputs com o Snort, dêem uma olhada nesta página da
documentação on-line. Aqueles já familiarizados com o syslog podem se interessar em utilizar o
syslog como gerenciador dos logs do Snort. A documentação é bastante completa.
#Para logar os alertas no arquivo de alerta regular, descomente ou escreva a linha a seguir e
substitua os valores:
output alert_unified: filename <arquivo>, limit <tamanho máximo do arquivo, em MB>
#Para logar todos os pacotes, escreva e substitua os valores:
output log_unified: filename <arquivo>, limit <tamanho máximo do arquivo, em MB>
#Para o snort colocar os resultados em um banco de dados mysql, descomente a seguinte
linha e substitua os valores:
output database: log, mysql, user=<usuário> password=<senha> dbname=<nome do banco>
host=<host>
• Modo sniffer (Sniffer mode): neste modo o Snort simplesmente lê interpreta os pacotes
capturados da rede e os apresenta no console em tempo real.
• Modo de logger de pacotes (Packet Logger mode): neste modo o Snort loga os pacotes
lidos no disco, de acordo com o método de output anteriormente selecionado.
• Modo detector de intrusão (Network Intrusion Detection System (NIDS) mode): neste modo
o Snort não somente captura e lê pacotes, seja para apresentá-los no console ou para
logá-los em disco, rodando neste modo o Snort analisa e interpreta os pacotes segundo as
37
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
assinaturas e toma as decisões de acordo com as regras definidas. Este é modo completo
do Snort, em que ele realiza aquilo que o temos preparado para realizar.
• Modo Inline (Inline Mode): neste modo o Snort não utiliza a biblioteca de captura de pacotes
libpcap diretamente, mas lê os pacotes capturados pelo Iptables, o que permite a automati-
zação de decisões de IDS ativas, como descartar ou autorizar pacotes. Para tanto existem
regras especiais inline. O uso deste modo não vai ser explicado neste curso.
Conhecendo os parâmetros
Possivelmente o somando simples ’snort’ vá mostrar uma lista de parâmetros para uso. Caso
não mostre, podemos ver a lista com o comando:
snort –help
Vendo a versão
Para saber a versão instalada do Snort basta, porém, utilizar o parâmetro -V:
$ snort -V
Rodando em modo daemon
Para rodar o Snort automaticamente em background, em modo daemon, podemos utilizar o
parâmetro -D, aliado ao que quisermos fazer com ele. Mas note que não parece fazer sentido
utilizá-lo como um daemon no modo sniffer se nesse modo queremos ver os pacotes em tempo
real e não logarmos eles.
$ snort <uso> -D
Desabilitando o modo promíscuo
38
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Para utilizar o Snort fora do modo promíscuo setamos o parâmetro -p. Este parâmetro so-
mente será interessante caso a variável $HOME_NET tenha sido definida com o próprio ip da
máquina que serve o Snort, pois nesse caso não interessa a ele os pacotes destinados a outras
máquinas senão o localhost.
$ snort <uso> -p
Indicando um arquivo de configuração a ser carregado
Podemos querer carregar o Snort com um arquivo de configuração alternativo que tenhamos
construído para teste, por exemplo. Neste caso, na chamada do Snort devemos indicar a ele o
caminho do arquivo com o parâmetro -c. Neste caso o Snort funcionaria em modo NIDS, que
conheceremos logo adiante.
$ snort <uso> -c <arquivo>
Vamos conhecer mais parâmetros na medida em que formos conhecendo seus outros dois
modos de funcionamento.
Saia então pressionando ’<Ctrl>+c’ e vamos fazê-lo rodar como queremos.
Podemos também querer ver, mais do que os cabeçalhos, os dados da camada de aplicação.
Para tanto adicionamos o parâmetro -d:
$ snort -vd
Com este parâmetro enxergamos não somente os cabeçalhos, mas o conteúdos dos pacotes
que podem conter, por exemplo, strings digitadas claras, se conexão não era criptografada.
39
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Por último, podemos também querer ver os dados dos cabeçalhos da camada de enlace
adicionando o parâmetro -e:
$ snort -dev
$ snort -e
Para terminar a captura de pacotes com o modo sniffer, basta digitar <Ctrl>+c. Ao final de uma
sessão de captura, algumas informações interessantes são apresentadas, como a quantidaed de
pacotes capturados, a porcentagem de aparição de cada protocolo, e quantos alertas e logs foram
gerados.
40
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
41
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Alertas
Por padrão o Snort no modo NIDS arquiva o log dos pacotes e gera de vez em quando logs
especiais chamados alertas, que são logs de aviso de aparentes tentativas de ataque ou visto-
ria para ataque. Esses logs de alerta são gravados por padrão no arquivo /var/log/snort/alert.
Quando não especificamos preferências quanto aos alertas, como nos comandos acima, o Snort
funciona no modo que chamamos de full alert. Por padrão, digitar um comandos comos os digi-
tados acima é o mesmo que digitá-los acompanhados do parâmetro -A full:
$ snort -d -A full -c snort.conf
42
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Outros modos de alertas interessantes são o modo que desabilita alertas, o ’-A none’, o modo
que envia os alertas para o console (além, possivelmente, dos logs regulares), o ’-A console’, e
modo de análise e log rápidos, o ’-A fast’.
No caso deste último modo, pode ser interessante que se utilize o parâmetro -b para que o Snort
use logs binários, que são mais ágeis, já que se precisa de velocidade. Além disso vale muito a
pena considerar o uso da ferramenta barnyard, que otimiza o Snort fazendo por ele os logs em
arquivos claros e em banco de dados, deixando o Snort livre para a análise de pacotes, afinal o
processo de escrita, especilmente em bancos, pode ser demorado para a velocidade exigida ao
Snort em uma rede de banda larga.
$ snort -b -A fast -c snort.conf
43
Capítulo 10
Notas finais
1 - Barnyard O Snort analisa pacote por pacote, procurando aqueles que se encaixam em
alguma regra configurada. Antes de passar para o próximo pacote, o Snort pode precisar gerar
um log e/ou um alerta sobre esse pacote. Se, por exemplo, o Snort estiver escrevendo no banco
de dados diretamente, ele precisa esperar a confirmação da escrita no banco antes de analisar
o próximo pacote. Em redes de grande tráfego, esse tempo da confirmação pode fazer com que
o Snort deixe de analisar algum pacote, o que deterioraria a confiabilidade do programa. E se o
banco de dados cair, o Snort cai também.
O Barnyard foi feito para contornar esse problema. Você configura o Snort para escrever em
um arquivo, e o Barnyard cuida de jogar os dados desse arquivo para o banco, deixando o Snort
livre para a análise de pacotes.
44
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
2 - Oinkmaster Oinkmaster é um programa que gerencia as regras usadas pelo Snort. Ele
baixa o arquivo, descompacta, faz backup das regras antigas e oferece outras facilidades. Enfim,
ele nos ajuda a gerenciar as regras.
3 - Guardian Segundo a própria descrição do site oficial, o Guardian é um programa de que
trabalho em conjunto com o Snort para atualizar automaticamente regras de firewall de acordo
com os alertas gerados pelo Snort. As regras de firewall geradas bloqueiam todos dados que vêm
de endereços de máquinas que estão realizando ataques segundo os diagnóstico dos alertas.
Existem recursos, no entanto, que previnem que o iptables termine bloquando o endereço de
máquinas importantes e amistosas.
Com ’ativo’ quero dizer que um IDS poderia tomar medidas de segurança a partir dos resulta-
dos dos logs. O Snort, no entanto, é passivo na medida em que simplismente loga eventos, mas
não bloqueia ips nem normalmente impede de forma alguma que os ataques aconteçam.
Aqui vai pois a sugestão de três programas destinados a satisfazer cada uma das funções
listadas acima. Caso pense em implementar a sério o Snort, considere bem essas ferramentas
pesquisando sobre elas.
O trecho que recortei começa próximo à linha 45, e trata do backend de banco de dados.
Como podemos ver o bdb é considerado o padrão, mas outros podem ser utilizados se informados
no lugar de <other>, como é explicado no trecho acima. Caso queira utilizar outro backend de
banco exclusivamente, comente as linhas padrões do dbd. Outras possibilidades são:
45