Snort PfSense : Detectar ataque DoS

Vamos apresentar como se proteger e detectar um ataque de DoS  do tipo Flood usando o PfSense Snort. Vale ressaltar que existem diversas ferramentas para esse fim. No entanto, o nosso foco será a proteção de D.o.S. utilizando o Snort + PfSense. 

Sabemos que existem diversas ferramentas para negação de serviço.No entanto, apresentaremos uma ferramenta que já vem na distribuição Kali. Inclusive, temo um vídeo fazendo a investigação da ferramenta de D.o.S de forma mais detalhada AQUI

O utilizaremos o PfSense  com uma interface em modo promíscuo e capturando o tráfego da rede. Dessa forma, poderemos capturar e identificar ataques de uma máquina que está dentro da rede para uma outra máquina por exemplo um servidor interno. 

Pfsense+Kali+webserver
Pfsense+Kali+webserver

Configurando o Snort+ PfSense

Agora vamos configurar o Snort. Vale ressaltar que temos um vídeo ensinando a instalação e configuração do Snort no PfSense AQUI. Então, nesse post estamos supondo que o Snort já está instalado no PfSese. Além disso, estamos supondo que já foram feitas as configurações expostas no vídeo acima. 

Primeiramente, vamos criar uma interface, nesse caso aqui a nossa interface vai ser do tipo Lan. Pois queremos identificar esse ataque dentro da Lan ok. Então, vamos substituir por LAN.  

Interfaces
Interfaces
LAN interface
LAN interface

Agora, vamos marcar a opção Block Offenders pois queremos que o Snort atue como IPs. Dessa forma,  queremos o bloqueio pela origem porque se alguma máquina está realizando um ataque nesta rede bloquearemos justamente a máquina que está originando o tráfico de ataque. 

Ativando o modo IPS do Snort

Block Offenders
Block Offenders
Block SRC
Block SRC

Ok, depois temos as variáveis  Home_Net que será a rede interna e External_Net que será a rede externa. Por padrão o PassLIst inclui a rede local. Mas não queremos isso. Portanto, vamos clicar em View List para verificar que nossa rede interna está dentro da lista Pass List. 

Criando Pass List para o Snort

Pass List
Pass List
View pass list
View pass list

Então, precisamos criar aqui uma PassList diferente. Primeiramente vamos salvar aqui. 

SAVE
Save

Ok, nós salvamos e agora nós vamos aqui em PassList e vamos criar um PassList diferente. Dessa forma, vamos nomear como admin_PC . 

Click Pass Lists
Click Pass Lists

Em seguida, vamos clicar em Add para podermos adicionar uma nova Pass List. 

Add pass list
Add pass list

Então, vamos renomear para admin_PC. Dessa forma, essa pass list será usada para garantir acesso ao computador que vai administrar o PfSense e vai estar acessando o PfSense utilizando a interface WEB. 

pass list name
pass list name

Em seguida, vamos desabilitar a inclusão de Local Networks, WAN gateways, WAN DNS Servers, Virtual IP Addresses e VPN Addresses. Assim, se houver necessidade de ignorar alguma dessas interfaces podemos voltar aqui e habilitar.  

Desmarque as opções

uncheck the options/ desmarque as opções
uncheck the options/ desmarque as opções

Agora vamos colocar o IP do computador que será usado para acessar o PfSense. Nesse caso, o IP é 192.168.24.9 . Depois disso podemos clicar em Save. 

ip of the machine that accesses pfsense / ip da máquina que acessa o pfsense
ip of the machine that accesses pfsense / ip da máquina que acessa o pfsense

Agora voltamos para Interface e vamos clicar em editar. 

Snort interfaces
Snort interfaces

Editando a interface LAN

Click edit LAN
Click edit LAN

Em seguida, vamos inserir como PassList o admin_PC. 

Select admin_PC to Pass List
Select admin_PC to Pass List

Precisamos fazer essa alteração no pass list. Caso contrário, no momento em que acontecer um ataque dentro da sua rede, este não será identificado. Isso porque o ataque será interpretado como pertencente a sua rede interna. Consequentemente, por padrão a rede interna será ignorada. Portanto, temos que realizar essa alteração.  

Ok, feita essa alteração vamos salvar. 

SAVE
Save

Escolhendo as categorias no Snort + pfsense

Agora vamos clicar em Lan_Categories e vamos selecionar a todas as categorias. 

lan CATEGORIES
Lan Categories

Geralmente eu gosto de selecionar todas as categorias Select ALL. Depois disso, vamos clicar em Save. Vale ressaltar que essa ativação de categorias não é necessária, pois vamos criar nossa própria regra. 

Select All / selecionar todas
Select All / selecionar todas

 Agora vamos clicar em Lan_Rules e vamos customizar nossa própria regra ok. 

Criando uma regra no Snort

LAN RULES
LAN RULES

Depois disso, logo abaixo vamos em “Custom_Rules”.  Em seguida, vamos fazer nossa regra.  

CUSTOM RULES
CUSTOM RULES

Portanto, essa será uma regra para detectar um ataque de D.o.S. do tipo Flood. Então, o atacante faz diversas conexões com os serviços disponíveis na máquina destino. Dessa forma, o atacante tenta ocupar os serviços para que outros clientes não consigam acessar os serviços. Então iniciando a regra será = ALERT TCP e inserimos a origem = $HOME_NET . 

alert tcp $HOME_NET any -> $HOME_NET any (flags: S; msg:" Manual rule DoS flood"; flow:established; detection_filter: track by_src, count 60, seconds 10; sid:99901; rev:1;)

Dessa forma, a origem vai ser da nossa rede interna, a porta de origem será qualquer uma “ANY” e o destino também é para rede interna. Poderíamos alterar essa regra e colocar que é originado na rede externa e com destino a rede interna ou o inverso disso. Dessa forma, vale a pena verificar qual o seu objetivo na proteção do seu perímetro.  

Em relação a porta de destino, vamos colocar “ANY” também. Além disso, estou colocando Flag S, que é o pacote SYN de início de conexão. Depois disso, vamos colocar a mensagem que vai ser enviada quando a regra for acionada = “MANUAL RULE DOS FLOOD”.  

Poderíamos ter colocado qualquer outro texto para a mensagem. Agora, vamos inserir a direção do tráfego. Então, vamos para o “FLOW” e vamos colocar “ESTABLISHED” . Dessa forma, eu quero que a regra seja acionada depois de ter passado pelas três vias da conexão TCP. Isso porque, esse ataque específico, ocupa o Socket do alvo após fazer as três vias de conexão. 

Depois disso, vamos para o “DETECTION_FILTER” “ TRACK”  “BY_SRC”. Dessa forma, estou criando um filtro de detecção e quero que seja rastreado pela origem. Assim, meu objetivo é detectar a máquina que está realizando o ataque. 

Em seguida, usaremos “COUNT 60”  e “SECONDS 20 “. Isso porque eu quero que contabilize 60 entradas dentro da janela de 10 segundos. Dessa forma, a regra vai contabilizar o número de pacotes SYNs que efetivamente estabelecerão conexões. Além disso, se tiver mais de 60 entradas em 20 segundos de um mesmo IP de origem. Consequentemente, obedecendo os requisitos dessa regra, podemos identificar esse DoS específico. 

Você pode alterar e  aumentar a quantidade de pacote por exemplo. Além disso, você pode aumentar a janela de tempo ou reduzir. Consequentemente, isso vai depender do comportamento da sua rede e do tipo de anomalia que deseja detectar. 

Em alguns casos vale a pena fazer alterações para verificar se não está dando falso positivo.  

O “SID” será a identificação dessa regra. Dessa forma, o ideal é que escolha um SID diferente dos outros que já estão naquelas outras regras que habilitamos. Portanto, vou colocar um SID bem elevado. Depois disso vamos colocar a revisão da regra como 1. A revisão da regra é bem interessante para verificar atualizações nas regras nos LOGs.  

Depois disso vamos clicar em Save. Em seguida veremos a mensagem dizendo que a regra foi aplicada com sucesso e já está operacional.

 

CUSTOM RULES APPLIED / APLICADA
CUSTOM RULES APPLIED / APLICADA

Iniciando a interface do Snort no pfsense

Agora, vamos em Snort interfaces e vamos iniciar a interface. 

SNORT INTERFACES
SNORT INTERFACES
START LAN
START LAN

Depois de inicializada a interface vai aparecer dessa forma. 

LAN OK
LAN OK

Testando o Snort no pfsense

Agora podemos usar uma ferramenta chamada Ettercap no  Kali para verificar se o Snort vai detectar e bloquear o IP de origem. Para esse teste, temos um servidor WEB denro da rede interna e a ferramenta ettercap é direcionada para esse servidor. A ideia é que os recursos do servidor WEB sejam consumidos pela ferramenta. Isso pode ser verificado no vídeo AQUI

Logs de alerta

Depois disso, podemos observar que foram gerados alertas. Dessa forma, temos alertas da origem 192.168.24.77. Assim, podemos verificar que o Snort detectou corretamente o comportamento de DoS da ferramenta Ettercap. 

SNORT ALERTS
SNORT ALERTS
SNORT ALERT LOG
ALERT LOG

Movendo para a esquerda podemos verificar o  nome da regra que criamos. Além disso, podemos ver o  SID da regra. 

RULE SID AND NAME
RULE SID AND NAME

Testando o bloquio do snort

Vale ressaltar que o Snort está funcionando aqui como IPS. Portanto, além de gerar alertas o Snort também bloqueia o endereço que gerou o alerta. Consequentemente, podemos ver que o IP bloqueado foi o 192.168.24.77.  

BLOCKED HOSTS
BLOCKED HOSTS
BLOCKED IP
IP BLOCKED

Então, usando essa configuração, a máquina que executou o DoS será bloqueada no PfSense e consequentemente terá seu acesso a internet bloqueado. Isso porque o Pfsense está sendo usado como gateway para as máquinas da rede interna ( LAN).  Assim , podemos evitar que máquinas que estejam realizando um DoS como esse tenham seu acesso a internet bloqueado. 

Vale ressaltar que é interessante realizar o bloqueio do acesso à Internet de máquinas que estão realizando comportamentos anômalos dentro de sua rede. Dessa forma, podemos restringir a evasão de dados internos e também um possível controle remoto da máquina usada no DoS. 

Mais detalhes podem ser vistos no vídeo abaixo: 

VIDEO TUTORIAL

Veja mais :

SquidGuard : Instalação e Configuração

Squid: Autenticação de Usuário

Arpwatch: Instalação e Configuração

Squid Proxy: Filtrar clientes por IP e MAC