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.
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.
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
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
Então, precisamos criar aqui uma PassList diferente. Primeiramente vamos salvar aqui.
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 .
Em seguida, vamos clicar em Add para podermos adicionar uma nova 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.
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
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.
Agora voltamos para Interface e vamos clicar em editar.
Editando a interface LAN
Em seguida, vamos inserir como PassList o admin_PC.
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.
Escolhendo as categorias no Snort + pfsense
Agora vamos clicar em Lan_Categories e vamos selecionar a todas as categorias.
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.
Agora vamos clicar em Lan_Rules e vamos customizar nossa própria regra ok.
Criando uma regra no Snort
Depois disso, logo abaixo vamos em “Custom_Rules”. Em seguida, vamos fazer nossa regra.
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.
Iniciando a interface do Snort no pfsense
Agora, vamos em Snort interfaces e vamos iniciar a interface.
Depois de inicializada a interface vai aparecer dessa forma.
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.
Movendo para a esquerda podemos verificar o nome da regra que criamos. Além disso, podemos ver o SID da regra.
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.
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:
Veja mais :
SquidGuard : Instalação e Configuração
Squid: Autenticação de Usuário