Slowloris – Ataque DDoS na Camada 7

No Post anterior, abordei o tema ataque de negação de serviço (DoS), como apenas uma tentativa de tornar um serviço indisponível para usuários legítimos. No entanto, às vezes, o DoS também pode ser usado para criar outro patamar de ataque visando atividades maliciosas (por exemplo, remover firewalls de aplicativos da web) atacando um serviço, não o hardware

Os ataques da camada de aplicativos, também chamados de ataques da camada 7, podem ser DoS ou DDoS. Esses tipos de ataques tentam imitar o comportamento humano à medida que interagem com a interface do usuário.

Os protocolos de destino geralmente são HTTP, HTTPS, DNS, SMTP, FTP, VOIP e outros protocolos de aplicativo que possuem pontos fracos exploráveis que permitem ataques DoS.

Ataques Low and Slow

Ao contrário das inundações, os ataques baixos e lentos não exigem um grande volume de tráfego de dados. Esses tipos de ataques direcionam recursos do aplicativo ou do servidor.

Eles são difíceis de detectar porque o tráfego parece ocorrer em taxas normais e legítimas.

O Slowloris pode ser usado para realizar esses tipos de ataques. A lógica operacional dessa ferramenta consiste em abrir várias conexões e mantê-las abertas o maior tempo possível. Ele envia solicitações HTTP parciais e nenhuma dessas conexões será concluída. Se conexões suficientes forem abertas o servidor não aceitará mais solicitações.

TCP e UDP

Sem entrar em detalhes, os dois principais protocolos para transporte de dados pela Internet são UDP e TCP. Eles diferem na natureza da conexão, o TCP exige um handshake (uma conexão formal entre um servidor e um processo do cliente), enquanto uma conexão UDP não garante a fidelidade da comunicação (não há confirmação do recebimento integro dos dados pelo interlocutor).

Para os fins deste post, vamos nos concentrar em TCP como para o tráfego da Internet usando HTTP, o TCP é quase sempre usado (daí a rotulagem típica da pilha de protocolos da Internet como TCP/IP)

Então, como podemos transferir dados entre dois processos pela rede usando o TCP? A resposta é: sockets.

Os sockets são a mágica que permite a interface entre o programa e o sistema operacional. Uma API de socket é fornecida pelo SO e pode ser acessada usando bibliotecas em todas as linguagens de programação, portanto, um desenvolvedor pode escolher qualquer um – desde que seja em Python.

NÃO CONFUNDA Sockets com SOCKS

Socket

No post anterior, expliquei o que é socket e mostrei como usar um socket tipo SOCK_RAW (permite o acesso direto a protocolos das camadas inferiores L2 e L3); Os aplicativos abordados neste post usam o SOCK_STREAM. O código pode ser apreciado em: https://github.com/gkbrk/slowloris/blob/master/slowloris.py

O socket SOCK_STREAM significa protocolo TCP orientado por conexão.

– SOCK_STREAM significa que é um socket TCP.

– SOCK_DGRAM significa que é um socket UDP.

A comunicação via HTTP é geralmente feita usando sockets e o protocolo de transporte TCP

SOCKS

O SOCKS é um protocolo da Internet que troca pacotes de rede entre um cliente e um servidor por meio de um servidor proxy. Praticamente, um servidor SOCKS faz proxy de conexões TCP para um endereço IP arbitrário e fornece um meio para os pacotes UDP serem encaminhados.

O SOCKS é executado na camada 5 do modelo OSI (a camada de sessão, uma camada intermediária entre a camada de apresentação e a camada de transporte).

Durante uma conexão HTTP, o endereço IP da máquina cliente é necessariamente transmitido para obter as informações de volta. Isso permite que um servidor identifique a origem da solicitação HTTP.

O slowloris tem suporte ao protocolo SOCKS5, permitindo anonimato, mascarando o IP do atacante através de um Proxy Server ao executar um ataque.

Conceitos Básicos do Ataque de Slowloris

O servidor da Web processa uma solicitação analisando o HTTP Request Header (cabeçalho de solicitação HTTP) que chega do cliente e encerra a conexão depois que a resposta é enviada ao cliente. O servidor da Web limita o número de clientes que podem se conectar para fazer uso eficiente dos recursos do sistema, incluindo todos os dispositivos físicos e lógicos, como CPU, memória, HDD e outros recursos gerenciados dentro do servidor da Web. Um ataque Slowloris é uma técnica que força um sistema fora de serviço usando o número de conexões que podem se conectar ao servidor da Web ao máximo.

Ou seja, faz mais requisições do que o servidor pode suportar, como acontece com o site da Receita Federal que fica indisponível na época do imposto de renda, muita gente acessando.

Se a solicitação de serviço for normal, o serviço será concluído em alguns segundos e a conexão será encerrada. Um ataque DoS, como um Flood HTTP, exige que um número de PCs zumbis emita um grande número de solicitações de serviços. No entanto, um Slowloris Attack é um ataque poderoso que pode paralisar o servidor Web usando apenas um PC. Os logs do servidor da Web usados em muitos desses ataques podem ser analisados, portanto, são registrados apenas quando o arquivo de cabeçalho é concluído. Em um ataque de Slowloris, dados errados são transmitidos para o servidor da Web para evitar que os arquivos de cabeçalho sejam analisados, portanto, isso não deixa um “rastro” no arquivo de log. Portanto, é difícil detectar o ataque. No entanto, é de boa prática se camuflar atrás de um proxy SOCKS5.

Figure 2-64.png

Um cabeçalho HTTP normal é terminado por “/r/n/r/n”. Ao procurar por “/r/n/r/n”, o servidor Web analisa o cabeçalho e processa o serviço. Os cabeçalhos usados no ataque de Slowloris geralmente terminam apenas com  “/r/n”. Quando o servidor da web não identifica o final do cabeçalho, não poderá analisa-lo nem manter a conexão em um estado aberto. Depois de iniciar o ataque, o servidor da web pode entrar no estado “fora de serviço” em minutos.

Bem, o conceito foi apresentado. Agora vamos ao que interessa.

Vou começar com o mais robusto: o Slowloris.py

Basicamente um ataque de negação de serviço HTTP que afeta servidores de thread. Funciona assim:

Começa fazendo muitas solicitações HTTP.

Envia cabeçalhos periodicamente a cada 15s p/ manter as conexões abertas.

Nunca fecha a conexão a menos que o servidor o faça. Se o servidor fecha uma conexão, Slowloris cria uma novamente.

Em teoria isso esgota o pool de threads servidores e o servidor não pode responder a outras pessoas.

Depois o PyLoris, o mais famoso na comunidade Python

A a principal diferença é que o PyLoris tem bela UI feita em Tkinter. O a última versão do slowloris roda em Python 3 e o Pyloris em Python 2

observaçãoO Tkinter é um wrapper do tcl/Tk, e acompanha a distribuição oficial do interpretador Python. É, de fato, a biblioteca de UI da linguagem Python

Slowloris no Termux

Resolvi testar o slowloris no Termux (python 3), segui a orientação descrita em https://github.com/gkbrk/slowloris/blob/master/README.md

$ pip3 install slowloris
$ slowloris alvo.com

Fui além, usei a opção -x para ativar o suporte ao SOCKS5 (tive que instalar a lib PySocks: pip3 install PySocks) e a opção –proxy-host e –proxy-port para especificar o host do proxy SOCKS5 e a porta. Escolhi um proxy público em https://www.socks-proxy.net (110.78.137.252:14153). Usei a opção –https para os requests

$ slowloris -x --proxy-host 110.78.137.252 --proxy-port 14153 --https www.alvoamigo.com.br -p 443

Abri no meu Android atacante, abri o app Wicap (sniffer) para conferir.wicap.png

Termux-slowris.png

PyLoris

Instalação do PyLoris

O PyLoris” pode ser baixado em http://sourceforge.net/projects/pyloris/

O PyLoris 3.0 requer o Python 2.x para ser executado.

Não há a necessidade de um processo de instalação. Basta descompactar o arquivo .zip baixado no diretório C:\, cd para o diretório do pyloris e executar no Python. Simplesmente assim:

C:\>cd C:\pyloris-3.2
C:\pyloris-3.2>C:\python27\python pyloris.py

O módulo pyloris fornece uma interface do usuário dividida em “General (geral), “Behavior” (comportamento), “Proxy” e “Request  Body” (corpo da solicitação). As seções relevantes para o ataque de Slowloris são “General” e “Behavior

Figure 2-66

A área “General” (1) especifica o servidor e a porta de destino. Aqui nós especificamos o servidor PC usando a porta 80. A “Behavior” (2) contém as configurações ambientais para executar o ataque. A área “Request Body” (3) mostra o conteúdo do protocolo HTTP que deve ser enviado ao servidor de destino. Quando todas as configurações tiverem sido concluídas, basta clicar no botão Launch (4) para iniciar o ataque. A área “Proxy” é como já explicado anteriormente.

Os campos do “Behavior” são os seguintes:

Attack Limit (Limite de Ataque): Especifique o número total de conexões (atual + final) que podem ser geradas em uma sessão

Connection Limit (Limite de Conexão): Especifique o número total de conexões que podem ser usadas ao mesmo tempo em uma sessão

Thread Limit: Determina o número total de encadeamentos que podem operar em uma sessão

Connection Speed (Velocidade de conexão): especifica a velocidade de cada conexão. A unidade está em bytes/segundo

Time between thread spawns (Tempo entre spawns de thread): Especifique o atraso de tempo usado para gerar o thread

Time between the connections (Tempo entre as conexões): Especifique o tempo de atraso necessário para criar uma conexão de soquete

*thread: encadeamento, fluxo de execução, linha de execução …

**spawn threads: criar e iniciar uma nova thread

Executando o Ataque

O Servidor Alvo

Para testar, instalei um IIS (Internet Information System), o servidor web da Microsoft. O IIS é o segundo Servidor Web mais usado, em primeiro vem o sobejamente conhecido Apache.

É fácil! Tenho o Windows 7 em uma máquina virtual. Basta ir ao “Painel de Controle” > “Programas e Recursos” > “Ativar ou Desativar recursos do Windows” (necessita de privilégios administrativos) e, na lista que aparece, navegar até “Serviços World Wide Web” e seleccionar na checkbox, por padrão já estão marcados os componentes básicos suficientes para o funcionamento do IIS na maioria dos casos, no entanto devemos também selecionar o item “Consola de Gestão Web” que está em “Ferramentas de Gestão Web” de forma a ter uma interface gráfica para “mexer” nas configurações do IIS.

Após concluído o processo de instalação podemos navegar até ao nosso site local que fica imediatamente disponível, para isso basta escrever o url no browser (http://localhost) deverá aparecer uma página com a imagem do IIS.

IIS_Win7.png

Executei o ataque clicando no botão “Launch“. A tela de resultados é dividida em duas regiões. O “Log” (registro) mostra o log do programa que executa o ataque. O “Status” (Estado) indica o status dos ataques que estão atualmente em execução. “Attacks” indica o número das conexões atualmente sendo usadas e “Threads” refere-se ao número de encadeamentos que foram criados até o momento.

Figure 2-67

Depois que um minuto se passou desde o momento em que o ataque é executado, o status da rede no PC servidor pode ser monitorado simplesmente abrindo o prompt de comando no Windows e inserindo o comando

netstat -n -p TCP

A seguir, é mostrado o estado atual da conexão TCP.

Figure 2-68

O número de conexões que estão atualmente ativas mostrará uma quantidade excessiva de saída. Portanto, podemos verificar o número específico usando o seguinte comando. Os resultados para o comando “netstat -n -p tcp” | find /c TCP” indica o número de ataques na área “Status” do Pyloris. Normalmente, são indicados mais de 300 resultados, o que é suficiente para fazer com que os serviços da Web na porta 80 entrem em estado “fora de serviço”.

IIS_off-Win7

Para terminar o teste, clique no botão “Stop Attack”. Depois que todas as conexões tiverem sido finalizadas, o servidor da web retornará ao serviço normal. Uma defesa primária é possível para aumentar o número de conexões máximas ou limitar o número que pode vir de uma conexão IP. A defesa secundária envolve a instalação de um dispositivo de segurança que pode verificar a Camada 7, como um Web Firewall, para bloquear a entrada de cabeçalhos com erro.

Saibam que todas as técnicas de DDoS de hoje já não utilizam mais essa técnica, que apesar de sofisticada já não tem mais tanta eficácia, os DDoS de hoje são na força bruta, são usadas requisições verdadeiras, tal como o site da receita federal, que cai na época do imposto de renda porque tem muita gente acessando e não tem como negar esses pedidos pois são verdadeiros e de máquinas diferentes. O maior ataque que tenho conhecimento foi em 2026 com 1 bilhão de dispositivos (60% sendo câmeras IPs que foram hackeadas e deixadas como zumbis) além de milhares de PCs, todos eles sincronizados para que, em tal dia e tal hora, acessem um determinado site.

A negação de serviço através da técnica Slowloris é, apesar de muito interessante, tecnicamente pouco eficaz; na verdade, a considero como EDUCACIONAL. Já existem várias opções de contramedidas protetivas para mitigar ataques DDoS até bem mais potentes. Os bons roteadores domésticos já vêm com proteções como um Firewall SPI (Stateful Packet Inspection) e proteção DoS. O Firewall SPI pode impedir ataques validando o tráfego, através do roteador, com base nos protocolos. É fundamental saber como configurar a proteção contra DoS em seu roteador!

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s