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
– Essas opções provêem informação sobre a regra, mas não tem qualquer efeito durante a detecção;
Leia mais