IPS com Snort Inline - Prof. Claudio Silva

Transcrição

IPS com Snort Inline - Prof. Claudio Silva
IPS com Snort Inline
Objetivo
Descrever a implementação inline do Snort, que aliado ao IPTABLES, adiciona
características de IPS ao Snort.
Prof. Claudio Silva
IPS com Snort Inline
Os sistemas de detecção de intrusão, em sua maioria, são passivos, ou seja, eles
detectam atividades maliciosas, porém a única atitude tomada é fazer o registro da
tentativa. Já o IPS, alia a função da detecção da tentativa de intrusão com a
possibilidade de fazer o bloqueio daquela atividade maliciosa.
Prof. Claudio Silva
IPS com Snort Inline
Onde instalar o IPS ?
Prof. Claudio Silva
IPS com Snort Inline
Onde instalar o IPS ?
Prof. Claudio Silva
IPS com Snort Inline
Como funciona o Snort Inline
O Snort inline recebe os pacotes do iptables, através da biblioteca libipq, ao invés de
receber os pacotes via libpcap. O iptables envia os pacotes recebidos para o Snort e
aguarda um retorno sobre o que deve ser feito. Caso nada seja detectado, o pacote
volta para o seu fluxo normal via iptables.
Quando alguma regra é disparada, estão o Snort pode devolver as seguintes ações ao
iptables:
•  drop – informa ao iptables que o pacote deve ser descartado, e o Snort faz o registro
da atividade.
•  reject – Informa ao iptables que o pacote deve ser descartado enviando um TCP Reset
se o protocolo for TCP ou envia um ICMP port Unreachable se for o protocolo UDP, e o
Snort faz o registro da atividade.
•  sdrop – Informa ao iptables que o pacote deve ser descartado e o Snort não vai fazer
nenhum registro da atividade.
Prof. Claudio Silva
IPS com Snort Inline
Implementando o Snort inline
Verificando o tráfego para um servidor WEB específico:
iptables -A FORWARD -p tcp --dport 80 -d 192.168.10.12/32 -j QUEUE
Prof. Claudio Silva
IPS com Snort Inline
Linux em modo BRIDGE
Uma das grandes vantagens de utilizar o Linux para criar um IPS, é a facilidade de criar
uma bridge e interligar segmentos de rede sem ser notado. Dessa forma é possível,
além de bloquear pacotes sendo invisível na rede, ainda podemos fazer filtro de pacotes,
limitar banda, etc.
No kernel 2.6 do debian, o suporte a bridge vem habilitado por padrão, bastando apenas
instalar os utilitários de configuração. Para tal, execute:
$ sudo aptitude install bridge-utils
Prof. Claudio Silva
IPS com Snort Inline
Usando o Iptables com BRIDGE
Para criar uma bridge com linux, utilizamos o utilitário brctl. Através deste utilitário,
criamos uma interface de bridge e adicionamos a esta, as interfaces reais que recebem
as conexões dos segmentos. Ou seja, se vamos interligar dois segmentos, devemos ter
uma placa de rede ligada a cada segmento, e devemos informar a nossa bridge que ela
deve utilizar tais interfaces.
Criando a Bridge
$ sudo brctl addbr br0
$sudo brctl addif br0 eth0
$sudo brctl addif br0 eth1
Para podermos acessar a nossa bridge remotamente, precisamos adicionar um
endereço IP. Se não quisermos acessar a bridge remotamente, esse passo é
desnecessário.
$sudo /sbin/ifconfig br0 10.10.10.1 netmask 255.255.255.0 broadcast 10.10.10.255
Os pacotes que passam pela bridge são de repasse, então devemos aplicar as regras
na chain FORWARD do iptables.
$sudo iptables –A FORWARD –s 200.167.89.5/32 –p tcp --dport 80 –j REJECT
Prof. Claudio Silva
IPS com Snort Inline
Instalando o Snort
É preciso baixar alguns pacotes para poder compilar o Snort no Debian:
$sudo apt-get install snort-rules-default libnet0-dev iptables-dev libpcre3-dev
libdnet-dev libmysqlclient15-dev build-essentials
Prof. Claudio Silva
IPS com Snort Inline
Compilando com suporte ao modo inline
Precisamos baixar o código fonte do Snort e habilitar o modo inline em sua compilação.
Habilitaremos também, o suporte a bando de dados MySQL.
$wget http://www.snort.org/dl/current/snort-2.8.1.tar.gz
$tar –zxf snort-2.8.0.1.tar.gz
$ cd snort-2.8.0.1
$./configure --enable-inline --with-mysql --with-libipq-libraries=/usr/lib/ --with-libipqincludes=/usr/include/libipq
$make
$sudo make install
$sudo cp etc/snort.conf /etc/snort/snort.conf
$sudo cp etc/unicod.map /etc/snort/
Prof. Claudio Silva
IPS com Snort Inline
Configurando o Snort
Para configurar o Snort, precisamos alterar seu arquivo de configuração: /etc/snort/
snort.conf
As mudanças básicas são para as variáveis:
HOME_NET
Que deve conter os IPs da rede que devem ser auditados pelo Snort.
EXTERNAL_NET
Que normalmente é configurado para “qualquer ip”.
RULE_PATH
Que deve conter o caminho para as regras do Snort.
Prof. Claudio Silva
IPS com Snort Inline
Configuraçôes para o modo inline
Quando estamos utilizando a opção reject em uma regra para o Snort inline, temos duas
coisas para levar em consideração:
Se for utilizar RAW sockets para enviar o RESET da conexão, é necessário que a
interface de rede possua um endereço IP. Caso contrário, o reset nunca vai ser enviado.
• 
É possível enviar resets através da interface física quando usando o iptables. O Snort
pega o nome da interface através da ip_queue e utiliza essa interface para enviar o
reset. Nesse caso, não é necessário um endereço IP carregado na interface da bridge,
permanecendo invisível, uma vez que utilizaremos o config layer2resets. Essa
configuração pode receber um MAC address que podemos utilizar como sendo a origem
do reset, ou, caso não informado, o Snort vai utilizar o MAC da interface da bridge.
• 
config layer2resets:00:0C:29:5B:41:5A
Prof. Claudio Silva
IPS com Snort Inline
Opções para o pre-processador stream4:
Inline_state (sem argumentos)
Essa opção faz com que o Snort descarte o pacote se ele não estiver associado a
nenhuma conexão tcp existente ou não seja um pacote válido de início de conexão tcp.
midstream_drop_alerts (sem argumentos)
Por padrão, o Snort já vem preparado para não gerar alertas criados por ferramentas
tipo snot/stick. Se ativada essa opção e não ativas a opção acima, o Snort vai gerar o
alerta de cada pacote de ataques utilizados por essas ferramentas.
Prof. Claudio Silva
IPS com Snort Inline
Salvando registros em bando de dados
Vamos utilizar o MySQL para fazer log dos alertas. Para tal, é necessário criar a base de
dados no MySQL:
$sudo mysqladmin create snort
$sudo mysql snort < schemas/create_mysql
A configuração no snort.conf é simples:
Output database: log, mysql, user=root password=dbname=snort host=localhost
Prof. Claudio Silva
IPS com Snort Inline
Regras do Snort
O Snort possui uma linguagem para criação de regras bastante flexível e muito rica em
possibilidades. O domínio de sua semântica são extremamente importantes. Uma regra
pode ter apenas uma linha, especificando um simples objetos ou possuir várias linhas
para se alcançar um melhor requinte e conseguir especificar o objetivo com mais
exatidão.
Obs.: Quando uma regra precisa ter mais de uma linha, utiliza-se a barra invertida
“\” ao final de cada linha para indicar que a linha abaixo faz parte da mesma linha.
Prof. Claudio Silva
IPS com Snort Inline
O básico das regras
As regras do Snort são divididas em duas seções lógicas: RULE HEADER e RULE
OPTIONS.
A sessão RULE HEADER contém informações referentes a rule action (ação da regra),
protocolo, endereços IPs de origem e destino e suas respectivas máscaras e portas.
A sessão RULE OPTIONS contém mensagens de alerta e informações informando a(s)
porta(s) do pacote que deve(m) ser inspecionada(s) se a rule action deve ser executada.
alert tcp any any -> 192.168.1.0/24 111 (content:”|00 01 86 51|”;msg:”mountd access”;)
É necessário que todos os elementos de uma regra sejam verdade para que a rule
action seja executada. Quando colocados juntos, todos os elementos de uma regra
formam um AND lógico. Ao mesmo tempo, todas as regras do Snort, na biblioteca de
regras do Snort, formam um OR lógico.
Prof. Claudio Silva
IPS com Snort Inline
Regras para o Snort inline
Basicamente, a única mudança para implementar uma regra para o Snort inline, é mudar
o tipo da ação. Como mostrado abaixo:
drop tcp any any -> any 80 (classtype:attempted-user;msg:”Port 80 connection
initiated”;sid:15001)
Prof. Claudio Silva
IPS com Snort Inline
Implementando o Snort inline
Especificações de Alvos (TARGET's)
Após examinar um pacote, é necessário indicar um destino para o mesmo, caso seja
ativada alguma das regras. Isto é chamado de regra de alvo (rule's target). Os dois alvos
mais comumente utilizados em um filtro de pacotes são o DROP (para barrar o pacote) e
o ACCEPT (para aceitá-lo). Se uma regra é ativada e o alvo é um destes dois, nenhuma
regra mais é consultada.
Prof. Claudio Silva
IPS com Snort Inline
Implementando o Snort inline
Existem 2 alvos padrão especiais: RETURN e QUEUE;
QUEUE é um alvo especial, que enfileira (QUEUE) o pacote para um "userspace
processing". Para implementar isto, 2 componentes adicionais são requeridos:
Uma "queue handler", que trabalhe conjuntamente com o atual mecanismo de
passagem de pacotes entre o kernel e o o "userspace" ; e
• 
Uma aplicação "userspace" para receber, (possivelmente manipular), e emitir um
veredicto sobre o pacote.
• 
O modelo de "queue handler" para IPv4 iptables é o módulo ip_queue, que é distribuído
com o kernel e marcado como experimental em algumas distribuições.
O status do ip_queue pode ser checado via:
/proc/net/ip_queue
Prof. Claudio Silva
IPS com Snort Inline
Implementando o Snort inline
O valor padrão para o comprimento máximo do queue é 1024. Sempre que este limite
for ultrapassado, novos pacotes serão barrados após o comprimento da queue atingir o
seu limite. Alguns protocolos como o TCP interpreta a barragem de pacotes como
congestionamento, e aguardará a queue retornar. Outras vezes, ele pode experimentar
determinar um comprimento máximo ideal da queue para uma próxima situação se o
valor padrão form muito pequeno.
Prof. Claudio Silva
IPS com Snort Inline
Implementando o Snort inline
O Snort em modo inline deve ser executado em conjunto com o IPTABLES. No caso,
quando rodamos o Snort em modo inline, ele vai esperar pelos pacotes encaminhados
pelo IPTABLES, e portanto é necessário criar uma regra de IPTABLES para que
encaminhe os pacotes QUEUE para o snort poder processar.
IPTABLES –A FORWARD –j QUEUE
IPTABLES –A FORWARD –p tcp - -dport 23 –j REJECT
IPTABLES –A FORWARD –j REJECT
Prof. Claudio Silva
IPS com Snort Inline
Implementando o Snort inline
Verificando o tráfego para um servidor WEB específico:
iptables -A FORWARD -p tcp --dport 80 -d 192.168.10.12/32 -j QUEUE
Prof. Claudio Silva
IPS com Snort Inline
Inicializando o snort inline
É preciso informar ao Snort na inicialização que ele deve escutar os pacotes pelo
IPTABLES e não pela libpcap. Isso é feito passando a opção: ‘-Q’ na linha de comando.
Exemplo de inicialização do Snort em modo inline:
#snort –Qvc /etc/snort/snort.conf –l /var/log/snort
Prof. Claudio Silva
IPS com Snort Inline
Atacando o Snort
Nada melhor para testar o Snort do que utilizar uma ferramenta de varredura por
vulnerabilidades. No caso, podemos utilizar o nikto para detectar vulnerabilidades em um
servidor WEB que esteja protegido pelo Snort.
#nikto –h 192.168.10.12
Prof. Claudio Silva
IPS com Snort Inline
BASE
Utilizaremos o BASE (Basic Analisys and Security Engine) como ferramenta de análise
para os alertas gerados pelo snort. O BASE atualmente é o melhor analisador de base
snort e seu projeto é baseado no ACID (Analysis Console for Intrusion Databases).
Prof. Claudio Silva
IPS com Snort Inline
Instalação e configuração do acidbase
Podemos baixar o base do site oficial http://secureideas.sourceforge.net/ ou via
repositório.
$sudo aptitude install acidbase
$cd /var/www
$sudo ln –s /usr/share/acidbase
Após a instalação, aponte o browser para o endereço do seu servidor:
http://x.y.z.k/acidbase/setup/
Será exibido a tela de setup do BASE.
Prof. Claudio Silva

Documentos relacionados

SNORT - Marcos Monteiro

SNORT - Marcos Monteiro – Essas opções provêem informação sobre a regra, mas não tem qualquer efeito durante a detecção;

Leia mais