Snort \u00e9 um IDS (Intrusion Detection System) - Sistema de Detec\u00e7\u00e3o de Intrus\u00e3o. Ele analisa em tempo real os pacotes que passam por uma dada interface de rede e os loga caso os diagnostique como amea\u00e7as. Seu funcionamento \u00e9 configur\u00e1vel e seu uso \u00e9 simples e transparente. Hoje o Snort \u00e9 o IDS mais usado do mundo GNU//Linux. Introdu\u00e7\u00e3o O que \u00e9 o Snort?
O Snort \u00e9 um famoso IDS (Intrusion Detection System) - Sistema de Detec\u00e7\u00e3o de Intrus\u00e3o. Ele \u00e9 u enquanto est\u00e1 funcionando, vigiando a entrada que a rede tem \u00e0 m\u00e1quina para nos informar caso haja algum Snort \u00e9 como um guarda desarmado, mas com uma m\u00e1quina fotogr\u00e1fica \u00e0 m\u00e3o. Essa foi a explic o que \u00e9 o Snort. melhor O Snort \u00e9 basicamente um farejador de rede com capacidade de reconhecer padr\u00f5es de cabe\u00e7alho e de co interessante \u00e9 que essa capacidade \u00e9 altamente configur\u00e1ve Um farejador de rede \u00e9 um programa que escuta em uma dada interface de rede os pacotes que por ela passam. Tipic pacotes que por ela passam e tamb\u00e9m s\u00e3o lidos por inteiro s\u00e3o aqueles que se destinam \u00e0 m\u00e1
Um farejador, no entanto, pode, se quiser, capturar n\u00e3o somente os pacotes destinados a sua m\u00e1quina, mas tam que por ela passarem independetemente de sua origem ou destino. Isso \u00e9 mais efic fi az, \u00e9 claro, quanto mais m\u00e enviando pacotes em broadcast na mesma se\u00e7\u00e3o de rede que o farejador. Uma interface de rede \u00e9 dita esta quando permite um farejador escutar quaisquer pacotes. O Snort pode funcionar e funciona por padr\u00e3o sobre interfa prom\u00edscuo.
Ao longo deste curso pode ser bastante \u00fatil que consultem o manual on-line na p\u00e1gina do Snort, que \u00e9 muito de O que o Snort faz?
Assim que o Snort captura os pacotes ele os analiza segundo assinaturas de reconhecimento de ataques, que nada mais s\u00 padr\u00f5es de conte\u00fados dos pacotes que s\u00e3o comparados aos dos pacotes reais que entram em nossa m\u00e1 fun\u00e7\u00e sua
Aqueles conjuntos de pacotes que forem reconhecidos como maliciosos fazem o Snort logar uma tentativa de ataque em seu lo alertas. Para tanto o Snort consulta regras que decidem o que deve ou n\u00e3o ser logado, e como o deve. Uma regra pega o d dado a um pacotes e decide o que como ir\u00e1 log\u00e1-lo. Um log \u00e9 simplismente um aviso informativo de alguma Esse aviso fica tipicamente armazenado em arquivos no disco da m\u00e1quina, ainda que possa ser redirecionado para ou rede ou mesmo enviado por e-mail. No caso do Snort, os mesmos logs podem ser enviados em tempo real para a sa\u00edda pa console.
Esse log, por sua vez, pode ser escrito tanto em texto plano em formato leg\u00edvel quanto em outros formatos otimizados q interpretados por um programa e que podem ser manipulados at\u00e9 mesmo em tempo real para o visualizarmos melhor, c plugin especial. algum O Snort \u00e9 capaz de reconhecer v\u00e1rios tipos de pacotes maliciosos. Alguns exemplos s\u00e3o pacotes de varredu ataques de CGI, ataques de estouro de buffe ff r e outros esfor\u00e7os que possam servir a futuros ataques, como reconhecim operacional, por exemplo. Como \u00e9 o Snort?
O Snort \u00e9 manipulado pela linha de comando. Podemos inicializ\u00e1-lo, interromp\u00ea-lo, acompanhar o qu configurar suas regras tudo com o console.
O Snort, por ser um programa compilado, tem seu arquivo bin\u00e1rio. Al\u00e9m deste, o Snort \u00e9 composto de um alguns scripts, que ficam na mesma pasta, e de uma pasta de logs, separada. O diret\u00f3rio de configura\u00e7\u00e3o do Snort \u00e9 o /etc/snort. Nele existem dois diret\u00f3rios que nos interess
/etc/snort/rules
-
Cont\u00e9as m
regras
que
decidem
o
que
logar,
como
e
onde.
/etc/snort/docs - Cont\u00e9m as assinaturas que permitem ao Snort reconhecer o car\u00e1ter de um pacote. Outro diret\u00f3rio que nos cabe conhecer \u00e9 a sua pasta de logs, que fica no diret\u00f3rio /var: /var/snort Al\u00e9m dos diret\u00f3rios, existe o pr\u00f3prio arquivo de configura\u00e7\u00e3o do Snort, sobre o qual vamos no /etc/snort/snort.conf O arquivo de configu fi ra\u00e7\u00e3o do Snort guarda vari\u00e1veis de valores da rede e da m\u00e1quina relevantes ao s nos interessam especialmente para a configu fi ra\u00e7\u00e3o das regras, e para tanto as vari\u00e1veis devem estar setad disso, o snort.conf lista os preprocessadores utilizados na an\u00e1lise de um pacote, o que vamos entender um pouco melh tamb\u00e9m a indica\u00e7\u00e3o dos plugins utilizados para dar suporte ao uso do Snort, como aqueles apresentados a c por fim, s\u00e3o listadas as regras de logging do Snort. Como o Snort funciona?
Existem ferramentas que facilitam a manipula\u00e7\u00e3o dos logs do Snort, como o programa BASE, uma que otimiza s comprometendo a logar e deixando o Snort livre para detec\u00e7\u00e3o de pacotes, o Barnyard, e at\u00e9 outra que ge Oinkmaster.
Neste curso, por\u00e9m, vamos nos concetrar para entender o Snort por ele mesmo, para que aqueles que quiserem e posteriormente outras ferramentas tenham um bom conhecimento do Snort.
Como sabemos, o Snort captura os pacotes que passam por uma dada interface de rede. Para descobrir se est\u00e1 ou n tentativa de intrus\u00e3o, o Snort atravessa os dados dos pacotes por uma s\u00e9rie de m\u00f3dulos de an\u00e1lis recebe os pacotes e os analisa no n\u00edvel dos protocolos e dos cabe\u00e7alhos, descobrindo os IP envolvidos, as por sua integridade, tudo antes mesmo deles serem remontados para uma aplica\u00e7\u00e3o.
O preprocessador identifica comportamentos suspeitos de pacotes e os encaminha para uma an\u00e1lise de conte\u00fa seguinte. J\u00e1 o processador de pacotes compara o conte\u00fado e natureza do pacote com assinaturas de ataques c no diret\u00f3rio /etc/snort/doc e indicadas pelas regras carregadas pelo Snort (lidas no arquivo de configu fi ra\u00e7\u00e enviam a informa\u00e7\u00e3o sobre os pacotes para serem processadas encaminham o diagn\u00f3stico para ser loga
O Snort pode ser configu fi rado por quem quiser para funcionar sob o controle do init.d, como \u00e9 padr\u00e3o para qu gerenciador de pacotes como o apt no Debian, o que faria com que o control\u00e1ssemos com /etc/init.d/snort start/st Aqui, por\u00e9m vamos manipul\u00e1-lo por conta pr\u00f3pria, inicializando-o quando quisermos (e n\u00e3o autom Instala\u00e7\u00e3o Instalando - 1
Primeiramente, Baixem
o
vamos c\u00f3digono
adquirir
o
codigo
endere\u00e7h ottp://www.snort.org/dl/
e
fonte
do
fa\u00e7ao
descrito
Snort. a
seguir.
Atualmente, no momento em que este texto foi escrito, o Snort se encontra na vers\u00e3o 2.6.0. \u00c9 importante que a com a vers\u00e3m o ais recente dispon\u00edve ml,esmo que ela n\u00e3oseja mais a 2.6.
O comando a seguir, o wget, baixa da internet o pacote no endere\u00e7o indicado. O mesmo vale para todos wgets. Est tornam naturalmente desnecess\u00e1rios 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\u00e3o a biblioteca libpcap, que a maioria esmagadora dos sniffers usam para escutar em um promiscua e o pcre, um conjunto de funcoes com expressoes regulares compativeis com perl. Hoje a vers\u00e3o do libpc baixando \u00e9 a 0.9.4 e a do pcre \u00e9 a 6.3. Mas caso haja outras mais recentes, baixe-as. Procure por elas nos sites Libpcap:
http://www.tcpdump.org/release/
a>
/>Pcre:
http://surfnet.dl.sourceforge.net/sourceforge/pcre/
a
$ wget http://www.tcpdump.org/release/libpcap-
.tar.gz >$ wget http://surfnet.dl.sourceforge.net/sourceforge/pcre/pcre-.tar.gz a>/>Bom, adquira um shell root e crie uma pasta /etc/snort:
mkdir os
c\u00f3digoscompactados
cp cp cp
que
/etc/snort
baixou
at\u00e9 a
pasta
/home//Desktop/snort-/Desktop/pcre-/Desktop/libpcap-
criada
e
entre
vers\u00e3o>.tar.gz vers\u00e3o>.tar.gz vers\u00e3o>.tar.gz
nela: /etc/snort /etc/snort /etc/snort /etc/snort
(Adapte para a pasta onde se encontram os arquivos baixados, se necess\u00e1rio) os
Descompacte
arquivos:
$
gzip
-dc
snort-
da
vers\u00e3o>.tar.gz |
tar
xvf
-
$
gzip
-dc
pcre-
da
vers\u00e3o>.tar.gz |
tar
xvf
-
$
gzip
-dc
tar
xvf
-
Entre
na
libpcap-
$ $ $ $ make install Entre na
do
pasta
do
e
digite
os
entre
libpcap
e
repita
os
na
pasta
do
codigo
o
script
descompactado
do
Snort
e
vamos
instalar
habilitando
plugins
./configure o
uso
do
banco
de
dados
mysql
o
Snort
ele
para
din\u00e2micos: --enable-dynamicplugin
uso
futuros
testes
e
experimentos
adicionando,
--with-mysql
Compile $ make $ su
e
m
../snort-
configure
$
comandos: ../libpcap- ./configure make
cd
Rode
comandos: pcre- ./configure make
cd
$
Habilite
pcre cd
$ $ $ $ make install Agora
vers\u00e3o>.tar.gz |
depois
instale:
se
qu
$
Caso
make
queira,
$ $ $ $
Por
retorne
a
copie
os
$ $ $ $ cp rules/reference.config .
pai
e
remova
cd snort-
rm rm rm
fim,
pasta
install
seguintes
arquivos
da
fontes
pasta
de
regras
utilizadas: /etc/snort versão>.tar.gz versão>.tar.gz versão>.tar.gz
da da da
cd
cp cp
as
para
a
pasta
rules/unicode.map rules/classification.config
pai:
/etc/snort . .
Instalando - 2
Vamos, ao mesmo tempo em que conhecemos um pouco dos arquivos e diretórios utilizados pelo snort, preparar o sistema pa 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 isso posteriormente). Para tanto, crie, caso já não tenha sido criada, a pasta rules dentro do diretório do 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 ficar mais à mão: $ cp /etc/snort/snort-/etc/snort.conf /etc/snort 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 n snort: $ groupadd snort $ useradd -g snort snort $ chown snort /var/log/snort Por último, baixe as regras do snort da sua versão em "http://www.snort.org/pub-bin/downloads.cgi"
No final da página tem uma sessão especial para não cadastrados. E uma sessão de regras feitas pela comunidade (e não pe do Snort). $ wget http://www.snort.org/pub-bin/downloads.cgi/Down load/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: tar -xvzf snortrules-pr-.tar.gz E por fim mova as duas pastas criadas (doc e rules) para a pasta do Snort: mv doc/ rules/ /etc/snort Por fim, copie os seguintes arquivos da pasta de regras para a pasta pai:
$ $ $ $ cp rules/reference.config .
cd
cp cp
/etc/snort . .
rules/unicode.map rules/classification.config
Montando um snort.conf
Selecionando o código funcional Vamos conhecer melhor o tal arquivo de configu fi ração do Snort. Entrem no seu diretório, /etc/snort, e abra o arquivo sn editor de texto. algum Logo
no
início
do
arquivo
vemos
a
seguinte
################################################### # This file contains a sample snort # You can take the following steps to create your own custom # # 1) Set the variables for your # 2) Configure dynamic loaded # 3) Configure # 4) Configure output # 5) Add any runtime config # 6) Customize your rule # ###################################################
mensagem: configuration. configuration: network libraries preprocessors plugins directives set
Como informado no início do snort.conf, a configu fi ração padrão é somente um exemplo de como um snort.conf pode ser. E sã quatro passos para montar o seu próprio arquivo. Como a configu fi ração padrão funciona bem, podemos simplismente adaptá nossas condições. Para customizar nosso arquivo sem ter nem de programar nem de embalar o Snort com outros programas precisamos conhecer e adaptar especialmente (senão somente) as variáveis e as regras do Snort.
Como os scripts de bash, os comentários no snort.conf são identificados pelo caractere ' # '. Observem como a maior parte do a de configuração é comentada. Boa parte desses trechos não são somente comentários, mas também código que pode ser eventualmente descomentado para ser habilitado. Para podermos ter uma boa visão da parte operante do arquivo e assim mo vamos criar um novo arquivo de configuração com todas e somente as linhas descomentadas do snort.conf padrão. O meu ar padrão tem exatamente 864 linhas. Só de código comentado, são 693 linhas! Obviamente, não queremos perder esse código. Pa perdermos esse código, e também por segurança, vamos manter o arquivo original intacto. Digitemos, portanto, os seguintes comandos: $ $ mv $ head -n 20 $ cat snort.conf.original | $ uniq original.sem.comentarios snort.conf
cd
snort.conf snort.conf.original grep -v ^#
>
>>
/etc/snort snort.conf.original original.sem.comentarios original.sem.comentarios
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 origin manter o mesmo cabeçalho no arquivo que criamos. No quarto comando removemos todas as linhas comentadas, chamando o resultante de original.sem.comentarios. Esse vai ser um segundo arquivo reserva. No último comando retiramos as linhas r caso somente as linhas em branco, para que ficasse mais legível, e nomeamos o arquivo resultante de snort.conf - o arquivo qu utilizar. Adequando a seção de regras Adequendo as regras apontadas pelo snort.conf
Antes de conhecermos a estrutura e a sintaxe de uma regra ou de montarmos a nossa própria, vamos nos preocupar em man arquivo de configu fi ração consistente com as regras de que dispomos. Para tanto, abra o snort.conf em um editor de textos, v final, onde estão as linhas "include" e abra um gerenciador de arquivos qualquer para visualizar o conteúdo da pasta /etc/sn Observe include include include include include include include
as
linhas
no
seu
arquivo
de
configuração
que
são
como
estas:
$RULE_PATH/bad-traffic.rules $RULE_PATH/exploit.rules $RULE_PATH/scan.rules $RULE_PATH/finger.rules $RULE_PATH/ftp.rules $RULE_PATH/telnet.rules $RULE_PATH/rpc.rules
include
$RULE_PATH/rservices.rules
Como em um código de uma linguagem de programação, estas linhas apontam cada uma delas para um conteúdo que está em arquivo. Estes arquivos, por sua vez, estão, como indicam as linhas, na pasta indicada pela variável $RULE_PATH. Lembrem qu atribuímos a essa variável o endereço da pasta /etc/snort/rules. Essas linhas apontam, pois, para arquivos contidos na nossa pa regras. Como o Snort lê o arquivo snort.conf para rodar e segue os caminhos apontados para os arquivos de regras, ocorreriam erro houvesse 'includes' que apontassem para arquivos de regras que não existem. Portanto, é importante, antes de acionar o Sn se as linhas de 'includes' apontam para arquivos de regras existentes. No caso de eles não existirem suas linhas devem ser c 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 par inexistentes. No entanto, pode ser do seu interesse não comentar as linhas inadequadas do snort.conf, mas sim incluir no sn linhas que apontem para todos e somente para os arquivos de regras existentes. Outro script está disponível para esta funç 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 c 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 deste curso que contêm os códigos explicam como executá-los caso tenha dificuldades. Note que os scripts estão preparados p procurar o snort.conf na pasta do snort /etc/snort e o diretório de regras em /etc/snort/rules. Caso sua configu fi ração seja dife altere o valor das variáveis no início do código. Comentador dos includes do snort.conf de regras do Snort
Este script comenta automaticamente as linhas do snort.conf que apontam para arquivos de regras que não ex Copie seu conteúdo para um arquivo de nome, por exemplo, "comentador.sh" e, para utilizá-lo, digite como root: 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 "#include \$RULE_PATH/$i" >> $ARQ_LISTA2 echo fi done cat $ARQ_CONF | grep -v "include \$RULE_PATH" > $TEMPORARIO cat $TEMPORARIO > $ARQ_CONF echo '' >> $ARQ_CONF cat $ARQ_LISTA2 >> $ARQ_CONF rm $ARQ_LISTA1 $ARQ_LISTA2 $TEMPORARIO --------------------------FINAL DO COGIDO---------------------------Inclusor de includes de regras do Snort no snort.conf
Este script escreve no snort.conf uma linha de include para cada arquivo de regras existente no diretório de regras padrão. Cop conteúdo para um arquivo de nome, por exemplo, "inclusor.sh" e, para utilizá-lo, digite como root: $ 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" ls -1 /etc/snort/rules | grep "rules$" > $ARQ_LISTA1 for i in $(cat $ARQ_LISTA1) do echo "include \$RULE_PATH/$i" >> $ARQ_LISTA2 done cat $ARQ_CONF | grep -v "include \$RULE_PATH" > $TEMPORARIO cat $TEMPORARIO > $ARQ_CONF echo '' >> $ARQ_CONF cat $ARQ_LISTA2 >> $ARQ_CONF rm $ARQ_LISTA1 $ARQ_LISTA2 $TEMPORARIO ---------------------------FINAL DO CODIGO-------------------------------snort.conf resultante
#-------------------------------------------------# http://www.snort.org Snort 2.6.0 config fi file # Contact: [email protected] #-------------------------------------------------# $Id$ # ################################################### # 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) Configu fi re dynamic loaded libraries # 3) Configu fi re preprocessors # 4) Configu fi re output plugins # 5) Add any runtime config fi directives # 6) Customize your rule set # ################################################### # Step #1: Set the network variables: # var HOME_NET any var EXTERNAL_NET any var DNS_SERVERS $HOME_NET var SMTP_SERVERS $HOME_NET var HTTP_SERVERS $HOME_NET var SQL_SERVERS $HOME_NET var TELNET_SERVERS $HOME_NET var SNMP_SERVERS $HOME_NET var HTTP_PORTS 80 var SHELLCODE_PORTS !80
var ORACLE_PORTS 1521 var AIM_SERVERS [64.12.24.0/23,64.12.28.0/23,64.12.161.0/24,64.12.163.0/24,64.12.200.0/24,205.188.3.0/24,205.188.5.0/24,205.188.7.0 8.9.0/24,205.188.153.0/24,205.188.179.0/24,205.188.248.0/24] var RULE_PATH rules dynamicpreprocessor directory /usr/local/lib/snort_dynamicpreprocessor/ dynamicengine /usr/local/lib/snort_dynamicengine/libsf_engine.so preprocessor flow: stats_interval 0 hash 2 preprocessor frag3_global: max_frags 65536 preprocessor frag3_engine: policy first detect_anomalies preprocessor stream4: disable_evasion_alerts preprocessor stream4_reassemble preprocessor http_inspect: global \ iis_unicode_map unicode.map 1252 preprocessor http_inspect_server: server default \ profile all ports { 80 8080 8180 } oversize_dir_length 500 preprocessor rpc_decode: 111 32771 preprocessor bo preprocessor ftp_telnet: global \ encrypted_traffic yes \ inspection_type stateful preprocessor ftp_telnet_protocol: telnet \ normalize \ ayt_attack_thresh 200 preprocessor ftp_telnet_protocol: ftp server default \ def_max_param_len 100 \ alt_max_param_len 200 { CWD } \ cmd_validity MODE < char ASBCZ > \ cmd_validity MDTM < [ date nnnnnnnnnnnnnn[.n[n[n]]] ] string > \ chk_str_fmt { USER PASS RNFR RNTO SITE MKD } \ telnet_cmds yes \ data_chan preprocessor ftp_telnet_protocol: ftp client default \ max_resp_len 256 \ bounce yes \ telnet_cmds yes 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 } preprocessor sfportscan: proto { all } \ memcap { 10000000 } \ sense_level { low } include classification.config include reference.config include $RULE_PATH/local.rules include $RULE_PATH/bad-traffic ff .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 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 Variáveis Conhecendo as variáveis
Bom, antes de mais nada, abram seus reespectivos snort.conf, que devem estar em /etc/snort, com qualquer editor de texto de preferência (eu recomendo o vim para qualquer coisa e sempre!). Na medida em que eu for descrevendo as variáveis, vamos adequando o snort.conf aos nossos usos particulares. As variáveis básicas
Vamos primeiramente dar uma olhada nas variáveis do snort.conf de que falávamos. Entre em /etc/snort e abra o nosso arqu snort.conf com qualquer editor de textos. No arquivo que apresentei na última página, as variáveis declaradas foram: var HOME_NET any var EXTERNAL_NET any var DNS_SERVERS $HOME_NET var SMTP_SERVERS $HOME_NET var HTTP_SERVERS $HOME_NET var SQL_SERVERS $HOME_NET var TELNET_SERVERS $HOME_NET var SNMP_SERVERS $HOME_NET var HTTP_PORTS 80 var SHELLCODE_PORTS !80 var ORACLE_PORTS 1521 var AIM_SERVERS [64.12.24.0/23,64.12.28.0/23,64.12.161.0/24,64.12.163.0/24,64.12.200.0/24,205.188.3.0/24,205.188.5.0/24,205.188.7.0/ 8.9.0/24,205.188.153.0/24,205.188.179.0/24,205.188.248.0/24] var RULE_PATH rules As variáveis básicas vitais
As variável que Snort reconhece, como podemos esperar, são predefin fi idas. As variáveis que vemos acima são importan funcionamento do Snort, ainda que a boa configu fi ração de três delas seja mais vital na medida em que são variáveis-chave HOME_NET EXTERNAL_NET RULE_PATH Sintaxes de definição de variável
A sintaxe de uma definição de variáveis para o Snort é muito simples: var nome-da-variável valor-da-variável
Entendendo e definindo as variáveis HOME_NET
Quando o valor declarado é any, significa que qualquer valor de tipo compatível com o da a variável será considerado um val variável. Se HOME_NET, pois, vale "any" e a HOME_NET é a variável relativa à seção da rede a estar no escopo interno do Sn qualquer interface de rede que for encontrada será analisada pelo Snort. Neste caso um pacote que sai de nossa máquina pa fora também é considerado interno ao Snort. Talvez não queiramos incluir no escopo interno da vistoria do Snort quaisquer interfaces. Se quisermos incluir todas interface interna, temos de substituir "any" pelo endereço da rede interna. Alguns exemplos são: var HONE_NET 192.168.0.0 var HOME_NET 192.168.1.0 var HOME_NET 10.0.0.0 var HOME_NET 172.16.0.0
Provavelmente, porém, também não queremos incluir toda uma rede interna no escopo da HOME_NET, e nesse caso, vamos q restringir sua seção. Para tanto, precisamos expecificar sub-redes com o padrão CIDR. Para saber mais, dê uma olhada ne o padão CIDR na wikipedia. sobre Uma definição como aquelas acima, que incluem var var var var HOME_NET 172.16.0.0/32 Podemos defin fi ir sub-redes como: var var var var HOME_NET 192.168.0.0/28
toda rede interna, é o mesmo que os exemplos abaixo, utilizando CIDR: HONE_NET 192.168.0.0/32 HOME_NET 192.168.1.0/32 HOME_NET 10.0.0.0/32 HOME_NET HONE_NET HOME_NET
192.168.0.0/16 192.168.0.0/24 192.168.0.0/26
Para determinar como HOME_NET somente a nossa própria máquina, porém, definimos, mais que naturalmente, o nosso pr como por exemplo: var HOME_NET 192.168.0.2 Note que, neste caso, o Snort não precisa trabalhar em modo promíscuo (ainda que ele o faça por pa 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: var HOME_NET [192.168.0.2,192.168.0.3] Analogamente, se queremos definir duas sub-redes distintas, ou mesmo uma máquina e uma sub-rede, fazemos, por exem var HOME_NET [10.0.0.1/24,192.168.0.0/24] ou var HOME_NET [10.0.0.1/24,192.168.0.2] EXTERNAL_NET
A variável EXTERNAL_NET é reservada para a defin fi ição de que endereços serão reconhecidos como externos para o Snort. Po seguindo as mesmas regras sintáticas da defin fi ição da HOME_NET, defin fi í-la seccionando a rede ou mesmo mantendo-a com ideal, no entanto, talvez fosse simplismente defin fi ir EXTERNAL_NET como tudo aquilo que não é considerado interno pelo S tudo aquilo que não for HOME_NET. Note, entretanto, que neste caso estará ignorando pacotes internos, correndo o risco de p detecções de ataques de dentro da própria rede. Para defin fi ir a rede externa como a negação do que seja a interna, enfim, pode utilizar o símbolo ' ! ' (exclamação), que significa a negação do valor que o segue. Para defin fi ir EXTERNAL_NET como sendo a não é HOME_NET, basta definí-la como: var EXTERNAL_NET !$HOME_NET
Tome somente o cuidado de não defin fi ir a EXTERNAL_NET como !$HOME_NET se antes defin fi iu a HOME_NET como "any", poi 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 alguma coisa. Caso queira fazer o Snort experimentar a vertigem de um paradoxo, faça-o e depois me conte o resultado. Provav 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 HOM à 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ór sistema de arquivos em que se encontram as regras que o Snort poderá utilizar. Dentre essas, indicaremos algumas ao final do a de configu fi ração e adequaremos e faremos outras. Mas todos arquivos de regras indicados no final do snort.conf devem esta 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 /etc/snort, e seu caminho absotulo é /etc/snort/rules. A defin fi ição de RULE_PATH para essa instalação pode ser, portanto: var RULE_PATH /etc/snort/rules ou até mesmo var RULE_PATH rules 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 um 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 defin fi ição pode ser: var HTTP_SERVERS $HOME_NET Algumas portas também devem ser informadas, como a porta em que o serviço Web roda: var var SHELLCODE_PORTS !80
HTTP_PORTS
[80,8080]
Regras Introduzindo Introdução às regras
Bom, tudo o que preparamos até então dentro do arquivo snort.conf, que foi adequar as variáveis às nossas condições, tem um exclusiva finalidade: a de permitir o funcionamento das regras comuns, como as três básicas e as que dizem respeito a serviç portas. Afin fi al, são essas regras que vão se utilizar das variáveis que defin fi imos. Essas regras têm a função de decidir que pro um pacote vai sofrer e que caminho o dignóstico vai tomar, para que essas decisões sejam tomadas, as informações que coloc variáveis são fundamentais. Essas regras decidem, pois, sobre o valor que as variáveis a elas relevantes possuem. Note que maioria delas faça referência às variáveis HOME_NET e EXTERNAL_NET, somente algumas fazem referência às variáveis do e serviços específicos. Defin fi ir bem todas as variáveis permite que o Snort faça uma análise mais inteligente tendo em vista o de pacotes intrusivos, ao mesmo tempo que economiza seu processamento evitando que ele procure exploits para Web direcion servidor exclusivo de DNS. Entendendo as regras O funcionamento das regras:
Assim como essas linhas de 'includes' estão apontando para outros arquivos, poderíamos perfeitamente simplismente colar lugares o conteúdo dos arquivos aos quais apontam. Utilizar arquivos distintos que são referenciados pelo snort.conf é, pois maneira de manter um arquivo de configuração mais organizado e regras mais fáceis de se manter e de atualizar. Fica claro po utilizar linhas que apontam para arquivos separados e não simplimente deixar todos códigos no mesmo arquivo se abrirmos um de regra arquivos qualquer. Abra, por exemplo, o arquivo de regras porn.rules. O caminho do arquivo, como sabemos, é /etc/snort/rules/porn.rules. Como pod imaginar, as regras desse arquivos se destinam a reconhecer conteúdos de pacotes que vêm de sites pornográficos. Esse arquivo d regras, apesar de engraçado e até constrangedor, revela de forma simples como as regras, em geral, operam. Sua função pode s muito bem a instituições decididas a retardar a difusão da pedofilia impedindo o acesso a sites pornográficos de dentro das rede mesmo pode servir a pais que querem saber se seus filhos vêem pornografia na internet. O exemplo é interessante pois é uma ar de regras que busca por strings no payload dos pacotes, tendo um funcionamento intuitivo, portanto.
Com o porn.rules aberto, observe que a partir da linha 9 há uma regra por linha. A frente segue uma regra do arquivo r alert tcp $EXTERNAL_NET $HTTP_PORTS -> $HOME_NET any (msg:"PORN erotica"; content:"erotic"; nocase; flow:to_client,e 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 a da regra. Aquilo que vem dentro dos parênteses e antes dos 'dois pontos' é chamado de palavra-chave.
•
Com alert, esta regra diz ao Snort para gerar um alerta e logar;
•
tcp informa o protocolo do pacote;
•
$var1 $var2 -> $var3 $var4 informa que os pacotes que interessam a esta regra são aqueles que vêm da rede de fora (n caso, $var1) pelas portas que servem o protocolo http (no caso, $var2) e entram ( -> ) na rede interna (no caso, $var3 qualquer porta (any);
é a palavra-chave que leva o alert do Snort a imprimir uma mensagem no alerta e nos logs. No caso, a m "PORN erotica";
•
msg
•
content informa ao Snort
•
nocase desabilita a sensibilidade da regra a se as letras são minúsculas ou maiúsculas;
•
flow:to_client,established
•
classtype classifica o tipo de pacote.
•
Sid e Rev respectivamente se referem ao número de identificação da regra e ao número de sua revisão.
estabelecido;
que string será procurada dentro do payload do pacote.
indica, no caso, que o pacote vai em direção ao cliente da conexão e que o estado de
Montando regras Vamos tentar montar uma regra para Snort extremamente simples, mas funcional, para tentarmos ganhar alguma familiar desenvolvimento de regras. Aquelas pessoas que gostam de programar, entendem de protocolos de rede e que gostam do S podem, quem sabe, partir daqui para uma pesquisa aprofundada de como se desenvolve regras especais para o Snort. Bom, vamos dizer que gostaríamos de saber quantas vezes em nossa rede parece o nome do atual presidente do Brasil, Lu ips vêm os pacotes em que ele aparece. Digamos, por exemplo, que quiséssemos essa informação para uma pe Abra, portanto, o seu snort.conf com qualquer editor de textos e vá até o seu final. Para conseguir o que queremos precisamo um alerta, que é uma das ações que uma regra pode realizar. A, em geral, mais interessante e certamente a mais comum. Nos começa, portanto, com a ação alert. 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 c 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). Com procurar por pacotes relativos a conexões web, a um site, então o protocolo dos nossos pacotes será o tcp regular. 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 cas queremos encontrar pacotes que saiam de nossa rede, portanto podemos informar o ip de origem como qualquer um que ve nossa rede, a defin fi ida em $HOME_NET e o ip de destino como qualquer um que saia de nossa rede, a defin fi ida em $EXTERNA porta de destino é a 80, e a de saída podemos defin fi ir 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 parenteses e escrever as opçoes da regra sempre iniciadas por palavras-chave. Estamos interessados(as) no uso de duas palavras-chave em particular: a content e a msg 'content' defin fi iremos que string procurar, e com 'msg' defin fi iremos que mensagem aparecerá no alerta que será gerado pa Como procuramos por aparições da string Lula, podemos informar a palavra-chave content com a string Lula. A mensagem qu queremos que apareça pode ser algo como "La vem 'Lula' pelo cabo de rede!". Adapte esta frase caso esteja em uma rede wir 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 d devem se encaixar, podemos dar um valor de identificação para a regra e setar a sua prioridade frente às outras. Es
informação tem de ser previa e adequadamente configurada dentro do arquivo classification.config. As pessoas interessadas deviam dar uma olhada na documentação oficial. Mais tarde neste curso vamos ter a oportunidade testar nossa regra. Comentador de snort-rules.sh #!/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 rm $ARQ_LISTA1 $ARQ_LISTA2 $TEMPORARIO inclusor de includes.sh #!/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" ls -1 /etc/snort/rules | grep "rules$" > $ARQ_LISTA1 for i in $(cat $ARQ_LISTA1) do echo "include \$RULE_PATH/$i" >> $ARQ_LISTA2 done cat $ARQ_CONF | grep -v "include \$RULE_PATH" > $TEMPORARIO cat $TEMPORARIO > $ARQ_CONF echo '' >> $ARQ_CONF cat $ARQ_LISTA2 >> $ARQ_CONF rm $ARQ_LISTA1 $ARQ_LISTA2 $TEMPORARIO Rodando o Snort Os logs
Uma última configu fi ração que vai nos interessar por hora é o destino dos diagnósticos, os logs. Os logs, além de poderem ser e para o console em tempo real, podem ser tanto armazenado em arquivos quanto escritos em tabelas de um banco de dados. pode ser escrito tanto em alertas quanto em formato tcpdump. Este formato não é legível sem uma ferramenta como o ether 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 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 , limit #Para logar todos os pacotes, escreva e substitua os valores: output log_unified: filename , limit #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= password= dbname= host= Os modos de funcionamento
Existem pelo menos quatro modos de funcionamento do Snort. Segundo a própria documentação oficial, eles são: •
Modo sniffer (Sniffer mode): neste modo o Snort simplesmente lê interpreta os pacotes capturados da rede e os apre
•
Modo de logger de pacotes (Packet Logger mode): neste modo o Snort loga os pacotes lidos no disco, de acordo com o m
•
Modo detector de intrusão (Network Intrusion Detection System (NIDS) mode): neste modo o Snort não somente captura e l
•
Modo Inline (Inline Mode): neste modo o Snort não utiliza a biblioteca de captura de pacotes libpcap diretamente, m
console em tempo real.
de output anteriormente selecionado.
pacotes, seja para apresentá-los no console ou para logá-los em disco, rodando neste modo o Snort analisa e interpre pacotes segundo as assinaturas e toma as decisões de acordo com as regras defin fi idas. Este é modo completo do Snor ele realiza aquilo que o temos preparado para realizar.
pacotes capturados pelo Iptables, o que permite a automatização de decisões de IDS ativas, como descartar ou au pacotes. Para tanto existem regras especiais inline. O uso deste modo não vai ser explicado neste curso. Enfim, rodando
Vamos experimentar alguns comandos que fazem o Snort rodar naqueles três primeiros modos apresentados. Vamos conhec de seus parâmetros para adequar o Snort aos nossos interesses. Abra um terminal como root e vamos lá. Testando o Snort
Antes de mais nada, digite: $ snort -T Com este comando simples o snort carrega o snort.conf, confere as linhas ativas, a referência dos includes interpreta as va relata se houve algum erro no carregamente. Este parâmetro solicita ao Snort que teste sua própria configuração.
Entre outras informações, as linhas impressas durante o carregamento do Snort revelam a interface sendo utilizada e a versão d 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 lis 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 quis fazer com ele. Mas note que não parece fazer sentido utilizá-lo como um daemon no modo sniffer se nesse modo queremos ve pacotes em tempo real e não logarmos eles. $ snort -D Desabilitando o modo promíscuo
Para utilizar o Snort fora do modo promíscuo setamos o parâmetro -p. Este parâmetro somente será interessante caso a variá $HOME_NET tenha sido defin fi ida com o próprio ip da máquina que serve o Snort, pois nesse caso não interessa a ele os pacote destinados a outras máquinas senão o localhost. $ snort -p Indicando um arquivo de configuração a ser carregado
Podemos querer carregar o Snort com um arquivo de configu fi ração alternativo que tenhamos construído para teste, por exem caso, na chamada do Snort devemos indicar a ele o caminho do arquivo com o parâmetro -c. Neste caso o Snort funcionaria e NIDS, que conheceremos logo adiante. $ snort -c Vamos conhecer mais parâmetros na medida em que formos conhecendo seus outros dois modos de funcionamento. Saia então pressionando '+c' e vamos fazê-lo rodar como queremos. Modo sniffer Utilizando o Snort no modo sniffer
$ snort -v Com o comando acima acionamos o Snort para rodar no modo sniffer. Observe como ele simplismente captura os pacotes qu atravessam a interface em modo promíscuo e apresenta o seus cabeçalhos, seja parte do protocolo TCP, UDP ou ICMP, e so cabeçalhos.
Nos cabeçalhos podemos ler os ips e portas de origem e destino, o protocolo e o Snort também nos informa a hora e data da c
Podemos também querer ver, mais do que os cabeçalhos, os dados da camada de aplicação. Para tanto adicionamos o parâm $ snort -vd
Com este parâmetro enxergamos não somente os cabeçalhos, mas o conteúdos dos pacotes que podem conter, por exemplo, digitadas claras, se conexão não era criptografada.
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 +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 p e quantos alertas e logs foram gerados.
Modo logger Utilizando o modo logger de pacotes do Snort
Este modo de fu n cion ame nt o, como foi ex plicado, se destina a permitir que as in formações que vemos no modo sn iffe loga das, sej a em arquivos texto, biná rio ou em ban cos de dados.
Este modo se baseia em um único pa râmet ro a ser adiciona do aos parâmet ro de sniffin g -v (verbose). É o parâmet ro -l de coma ndo m ais sim ples qu e faz o S nort roda r em modo logger seria : Simplismente logando
$ snort -v -l Caso omitisse o , o S nort provavelme nt e loga ria a saídas em uma pasta com endereço do loca lhost ou em acordo com os ips que origina ram os pacotoes. Podemos, exat amente por causa dessa lógica do Snort, pedir que ele logu e as saída s em uma estrutura de diretórios div endereços de origem. Para tanto, passamos o parâmetro -h seguido da sessão da rede a ser considerada: Organizando os logs em subdiretórios
$ snort -v -l -h 19 2.168.0.0/24 Logando em tcpdump
Como já sabemos, podemos também arquivar os logs não em arquivos planos, mas em arquivos binários no form tcpdum p. $ snort -l -b Qua ndo loga mos em formato tcpdump não precisamos nem in f orma r o pa râmet ro -v nem in formar o ho me network com com -b o S nort loga por padrão todo o pacote n ão precisa ndo separar em sessões legíveis e au toma tica mente organ Lendo arquivos de log em tcpdump com o Snort
Para ler os arquivos em tcpdump gravados podemos pedir que o Snort nos mostre a s in formações que queremos de de logs com o parâmet ro -r. Por exem plo:
$ snort -dev -r Ma is qu e isso, podemos pedir que nos mostre soment e os pacotes icmp adiciona ndo ICMP no fina l do com ando: $ snort -dev -r icm p Logan do em ASCII
Quando não especificamos a formatação do texto (com a opção -K), o Snort cria logs usando PCAP. Dessa form a, não podem ler os arquivos com um sim ples editor de texto, temos de usar programas como o Ethe real. Para podermos ler os a rquivos editores de texto, usamos '-K a scii', como no exemplo: # sno rt -b -l /var/log/sn ort -K ascii Modo NIDS Utilizando o Snort no modo de NIDS
Este é certamente o modo mais complexo do Snort, pois envolve etapas mais sofisticadas do que aque las de um simples sn de rede. É também exatamente isso que faz do Snort uma ferramenta es pec ial. As etapas que o modo de NIDS inc lui são a análise dos pacotes segun do as assinaturas, os diagnósticos e as tomadas de decisão sobre o out put de acordo com os diagnósticos dados. As duas últimas et apas são alta e, em alguns casos, facilmente configuráveis através das definições de regras cont idas no ou apont adas pelo sno rt.conf. Como neste modo o Snort consome mu ito mais processamento, é m ais eficiente rodá -lo sem o parâmet ro -v que o faz dire as saída s pa ra a tela. Pois o esforço de im primir em tela as saída s, a lém do de escrever os logs, pode fazer com qu e o Snort deixe pas sa r alguns pacotes por deba ixo do seu nariz por fa lta de tempo. É bom, portanto, deixar ele se concentrar em su função de análise e de log e ut iliza r out ro progra ma para a vistoria dos logs. Este mo do é in c iado a pa rtir do pa râmet ro -c, que especifica um a rquivo de con f iguração do Sn ort a ser lido. O coman form ato sim ples é:
$ snort -d -c sno rt.conf Neste caso, com o nã o defin imos arquivo de log, os logs irão pa ra /var/log/sn o rt. Como não defin imos o tipo de log, e escrito em texto simples. Podemos, no entanto, torna r a chamada ma is ela borada: $
snort
-dev
-l
-h
1 9 2 . 1 6 8 . 0 . 0 /2 4
-c
snort.con f
$ snort -b -l -h 1 92.16 8.0.0./24 -c sno rt.conf Alertas
Por padrão o Snort no modo NIDS a rquiva o log dos pacotes e gera de vez em qu ando logs especia is chamados a lertas, qu logs de aviso de aparentes tentativas de ataque ou vistoria para ataque. Esses logs de a lerta são gravados por padrão n arquivo /var/log/snort/alert. Quando não especificamos preferências quanto ao s alertas , como nos comandos ac ima, o S funcion a no modo qu e cham amos de fu ll a lert. Por pa drão, digitar um com andos comos os digita dos a cima é o mesmo que digitá-los acompan hados do pa râmet ro -A fu $ snort -d -A fu ll -c snort.conf Out ros modos de a lertas int eressantes são o modo qu e desabilita alerta s, o '-A none ', o modo que envia os a lerta s console (a lém, possivelm ent e, dos logs regulares), o '-A console', e modo de análise e log rápidos, o '-A fa st'. Desabilitando o log de alertas:
$ snort -d -A none -c sno rt.conf Enviando os alertas para a tela:
$ snort -d -A console -c snort.con f Processando pacotes de forma otimizada:
$ snort -d -A fast -c snort.con f
No caso deste ú ltim o modo, pode ser interessante que se utilize o pa râmetro -b para que o Snort use logs biná rios, qu e sã mais á geis, já qu e se precisa de velocida de. A lém disso va le mu ito a pen a considerar o uso da ferramenta barnyard, que oti o Snort fazendo por ele os logs em arquivos cla ros e em banco de dados, deixa ndo o Snort livre pa ra a análise de pacotes o processo de escrita, especilmente em ban cos, pode ser demorado para a velocidad e exigida ao Snort em uma rede de ba larga. $ snort -b -A fast -c snort.con f Notas fin a is Conferindo os alertas
En f im temos uma boa oportin idade de testa r a regra que criamos. Como é um a única regra e foi escrita dentro do no sno rt.conf, não precisa mos deixá-la na pasta de regra s.
Bom, entremos na linh a de comando e vamos bota r pra roda r nosso Snort no modo NIDS deixa ndo-o loga r no diret ório todos os alerta s. $ sno rt -A fu ll -c snort.con f Agora , en quanto o Snort roda, abra um navegador qu alque r e procure em um site de busca por notícia s sobre o preside Abra a lguns sites que fa lem sobre ele, navegue um pouco nas notícias e depois de um tempo feche a a ba do navegador e retorne pa ra o con sole. Leia en fim o a rquivo com os a lertas gera dos: $ cat /var/log/sno rt/a lert Outros aplicativos
Como já com enta do no cu rso, ex istem program as qu e pode m aux ilia r e mu ito o u so do S nort. Ex istem ba sica m at ividades ou fu nções em qu e o Snort pode ser auxiliado: 1. 2. 3.
Otim izaç ão do processo de loggin g; Gerencia mento e orga nização dos logs; Extender o Snort pa ra a gir como um IDS ativo.
Com 'a tivo' que ro dizer que um IDS poderia tom ar medida s de segurança a pa rtir dos resu ltados dos logs. O Snort, no e é passivo na medida em qu e simplism ente loga eventos, m as não bloqu eia ips nem normalmente impede de forma algum at aq u es aconteçam . os Aqu i va i pois a sugestão de três progra mas destina dos a sat isfa zer ca da uma das fun ções listadas acima. Caso pe implement ar a sério o Snort, considere bem essas ferramentas pesquisando sobre elas. 1 - Barnyard
O Snort analisa pacote por pacote, procu ran do aqueles que se encaixam em alguma regra configurad a. Antes de passar 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 da dos diretamente, ele precisa esperar a confirmação da escrita no banco antes de a nalisa r o pró pacote. Em redes de gra nde tráfego, esse tempo da con firmação pode fazer com qu e o Snort deixe de analisar algum pa que deterioraria a confiabilidade do programa. E se o banco de dados ca ir, o Snort ca i também. O Barnyard foi feito para contornar esse problema. Você con figura o Snort para escrever em um a rquivo, e o Barnyard cu jogar os da dos desse arquivo pa ra o ba nco, deixando o Snort livre para a análise de pacotes. 2 - Oinkmaster
Oin kmaster é um progra ma que geren cia as regras usadas pelo Sn ort. Ele ba ixa o arquivo, descompacta , faz backup da antigas e oferece out ras facilida des. En f im, ele nos ajuda a gerenciar as regras. 3 - Guardian
Segun do a própria des crição do site oficia l, o Gu ardia n é um progra ma de que trabalho em conj un to com o Snort pa autom aticam ente regras de firewa ll de acordo com os alertas gerados pelo Snort. As regras de firewa ll geradas bloqueiam todos da dos que vêm de endereços de máquinas qu e estão realizando ataques se diagnóstico dos alertas . os Ex istem recu rsos, n o entan to, qu e prev in em qu e o iptab les te rm ine bloqu ando o e n dereço de m áqu in as im portan te s e a