Curso Livre de Segurança de Sistemas/Tecnologia e Princípios de Segurança de Computadores/Ataques de negação/Caderno Colaborativo

Fonte: Wikiversidade

Ataques de negação de serviço[editar | editar código-fonte]

Os Ataques de negação de serviço (DoS) e ataques de negação de serviço distribuído (DDoS). Tornaram-se algumas das ameaças mais significativas à segurança corporativa e de aplicações na última década. é uma tentativa de fazer com que aconteça uma sobrecarga em um servidor ou computador comum para que recursos do sistema fiquem indisponíveis para seus utilizadores.

Para isso, o invasor utiliza meios para enviar diversos pedidos de pacotes para o alvo, com a finalidade de que este fique tão sobrecarregado que não consiga mais responder a nenhuma requisição.

Já no ataque distribuído de negação de serviço, DDoS, o ataque acontece de forma similar ao DoS, porém, ele ganha algumas camadas extras. Nele, um computador mestre pode gerenciar uma série de outros computadores, que são chamados de zumbis. Por meio do DDoS, o hacker ou cracker invade um computador mestre e este, por sua vez, escraviza várias máquinas, fazendo com que elas passem a acessar um determinado recurso em um servidor todos ao mesmo tempo. Assim, todos os zumbis acessam juntamente e de maneira ininterrupta o mesmo recurso de um servidor, tentando sobrecarregá-lo.


Ataques de inundação[editar | editar código-fonte]

Esses ataques podem assumir várias formas, que dependem do protocolo de rede que é usado. Geralmente, a meta do ataque é sobrecarregar a capacidade do servidor, sendo que isso é feito em algum enlace da rede. O nome inundação se deve ao fato de que o enlace da rede é inundado e acaba ocasionando um congestionamento, fazendo com que pacotes sejam descartados. Um dos grandes problemas desse ataque é que qualquer tipo de pacote pode ser usado, bastando ele ter permissão de andar pelos enlaces até o sistema visado, e dessa forma, consumindo toda a capacidade do servidor.

Além disso, o tamanho do pacote também influencia no tamanho da inundação, sendo que quando maior o pacote, pior é o ataque. Em casos graves, o servidor pode ficar totalmente impossibilitado de responder novas requisições. Todas os tipos de ataque de inundação são limitados pelo volume total do tráfego da rede que o atacante consegue disponíbilizar.

Abaixo, serão listados alguns tipos de ataques de inundação:

ICMP[editar | editar código-fonte]

A inundação utilizando requisisções de ping com pacotes ICMP, utiliza essa abordagem pois os administradores da rede, usualmente permitiam pacotes desse tipo em sua rede, pois o ping por exemplo, era uma ferramenta útil para o diagnóstico da rede. Com isso, diversas empresas limitaram a capacidade desse pacote em seus firewalls. Assim, os atacantes introduziram outros tipos de pacotes ICMP ao ataque, utilizando pacotes ICMP críticos, no caso, com tempo limite expirado ou com um destino inalcançável, de forma a buscar degradar ou impedir a operação normal da rede, utilizando grandes volumes desse tipo de pacote.

UDP[editar | editar código-fonte]

O ataque de inundação utilizando pacotes UDP, são enviados a determinado número de porta, com foco em algum serviço potencial. Geralmente os ataques eram dirigidos a serviços de diagnóstico de eco, habilitados por padrão em diversos sistemas. Caso ativo no servidor, o atacante envia a requisição e recebe um pacote UDP com as informações originais. Caso desativado no servidor, o pacote é descartado, e provavelmente é criado um pacote ICMP do tipo inalcançável, e esse pacote é retornado ao cliente, dessa forma o atacante consegue comprometer a capacidade de enlace do servidor.

TCP SYN[editar | editar código-fonte]

A inundação SYN (ataque de porta entreaberta) é um tipo de ataque de negação de serviço (DDoS) com a intenção de deixar um servidor indisponível para o tráfego legítimo ao consumir todos os seus recursos disponíveis. Ao enviar pacotes de solicitação de conexão inicial (SYN) repetidamente, o invasor consegue sobrecarregar todas as portas disponíveis na máquina do servidor visado, fazendo com que o dispositivo atingido responda lentamente ou pare totalmente de responder ao tráfego legítimo.

A inundação SYN pode ocorrer de três maneiras diferentes:[editar | editar código-fonte]
  • Ataque direto: uma inundação SYN na qual o endereço IP não é falsificado é conhecida como um ataque direto. Nesse ataque, o invasor não mascara o seu endereço IP. Como resultado do uso de um único dispositivo de origem com endereço IP real para criar o ataque, o invasor fica altamente vulnerável à descoberta e mitigação. Para criar o estado de porta entreaberta na máquina visada, o hacker impede que sua máquina responda aos pacotes SYN-ACK do servidor. Geralmente isso é conseguido por meio de regras de firewall, que detêm os pacotes de saída que não sejam pacotes SYN, ou por meio da filtragem de todos os pacotes de entrada SYN-ACK antes de chegarem à máquina do usuário mal-intencionado. Na prática, esse método é usado raramente (se é que é usado), pois a mitigação é bastante direta: basta bloquear o endereço IP de cada sistema mal-intencionado. Se usar uma botnet como a Mirai, o invasor não irá se preocupar em mascarar o IP do dispositivo infectado.
  • Ataque falsificado: um usuário mal-intencionado também pode falsificar o endereço IP em cada pacote SYN que enviar para inibir os esforços de mitigação e tornar sua identidade mais difícil de ser descoberta. Porém, embora possam ser falsificados, os pacotes podem possivelmente ser rastreados até sua origem. Fazer esse tipo de trabalho de detetive é difícil, mas não é impossível, especialmente se os provedores de serviços de internet (ISPs) estiverem dispostos a ajudar.
  • Ataque distribuído de negação de serviço (DDoS): se um ataque for criado com o uso de uma botnet, a probabilidade de rastrear o ataque até sua origem é pequena. Para obter um nível extra de dissimulação, o invasor também pode fazer com que cada dispositivo distribuído falsifique os endereços IP dos quais envia pacotes. Se usar uma botnet como a Mirai, geralmente o invasor não irá se preocupar em mascarar o IP do dispositivo infectado.

Outras formas de ataques[editar | editar código-fonte]

Deficiências no código do programa[editar | editar código-fonte]

Os invasores procuram por erros no código do programa de qualquer programa ou sistema operacional, forçando-o a lidar com situações excepcionais que não pode controlar. Isso leva a erros. Um exemplo simples é a transmissão frequente de pacotes, que não respeita as especificações e padrões RFC. Os invasores monitoram se a pilha da rede está lidando com o tratamento de exceções. Do contrário, a transmissão de tais pacotes levará a um kernel panic ou mesmo ao colapso de todo o sistema.

Transbordamento de dados[editar | editar código-fonte]

Um Transbordamento de dados ocorre quando um programa grava dados fora do buffer devido a um erro do programador. Digamos que um programador tenha escrito um aplicativo para comunicação em uma rede que funciona por meio de um protocolo. Este protocolo afirma estritamente que um campo específico de um pacote pode conter no máximo 65536 bytes de dados. Mas depois de testar o aplicativo, descobriu-se que em sua parte cliente, não há necessidade de colocar dados neste campo, cujo tamanho é superior a 255 bytes. Portanto, o lado do servidor não aceitará mais do que 255 bytes. Em seguida, o invasor modifica o código do aplicativo para que agora a parte do cliente envie todos os 65536 bytes permitidos pelo protocolo, mas o servidor não está pronto para recebê-los. Por causa disso, ocorre um estouro de buffer e os usuários não podem acessar o aplicativo.

Ataques de largura de banda baseados em aplicação[editar | editar código-fonte]

Os ataques de largura de banda, tem similaridade com os ataques de inundação, este, por sua vez tenta exaurir o sistema através de um processo que exija demasiado recurso do servidor que esta sendo atacado, a fim de sobrecarrega-lo, para a realização deste ataque, os dois protocolos mais utilizados para tal feito são: o SIP e o HTTP, que serão abordados em seguida:

Inundação SIP[editar | editar código-fonte]

Primeiramente, se faz necessário falar acerca do que é o protocolo SIP (Session Initial Protocol), ele possui uma estrutura de texto semelhante ao protocolo HTTP, e é utilizado para sistemas VoIP, ou seja, chamadas.

Há dois tipos de mensagens no SIP, estes são as requisições e as respostas.

Para o estabelecimento de uma comunicação através do protocolo SIP, o sistema deve enviar o SIP INVITE, que realiza a interligação dos usuários.

Para que o ataque de inundação SIP ocorra, basta somente realizar inúmeras requisições SIP INVITE, pois estas, exigem um alto nível de processamento, o que pode ainda mais ser agrado em casos de ataque DDoS utilizando este protocolo.

Este tipo de ataque acaba impactando os servidores proxy SIP de dois modos, os recursos são exauridos por conta do processamento das requisições INVITE, e seu segundo impacto está na redução da capacidade de rede, os destinatários das chamadas também são vitimas deste tipo de ataque.

Ataques baseado em HTTP[editar | editar código-fonte]

Existem dois modos de ataque mais usados no que se refere a ataques baseados em HTTP, o primeiro deles, consiste em realizar um ataque DDoS nos servidores web, que façam atividades que exijam um alto nível de processamento dos servidores, como por exemplo o download de um arquivo extremamente pesado, este tipo de requisição e ação já é o suficiente para ser explorado por ataques DDoS, outra característica deste tipo de ataque é que são realizados de vários lugares diferentes o que dificulta a sua localização e resolução do problema.

O outro ataque de nome Inundação HTTP recursiva, busca os links que tal site ou servidor possuem vinculados e vai explorando eles e realizando as requisições a fim de sobrecarregar o sistema, este tipo de ataque se alastra pelos links de forma que parece uma teia que se prende a vários pontos, por isso outro nome dado a este tipo de ataque é o Spidering.

Slowloris[editar | editar código-fonte]

O ataque Slowloris, possui uma característica diferente dos demais ataques citados anteriormente, primeiramente este ataque usa de requisições HTTP legitimas, ou seja, ele não usa de brechas em requisições HTTP, logo este detalhe consegue burlar sistemas de busca de intrusos.

O ataque vai se apossando das threads de processamento do servidor a fim de possuir todas as threads que o servidor alvo possui a fim de que este não consiga mais processar nenhuma requisição de conexão de usuários legítimos. Para que ele consiga realizar tal tipo de posse das threads do sistema, este envia uma requisição HTTP que estabelece a conexão, porem ele não encerra a sessão e não insere a linha que encerra a sessão, sendo assim, a sessão permanece e então ele vai criando outras requisições da mesma natureza, o que acaba exaurindo as threads, as mantendo ocupadas com estas requisições e conexões sem fim.

A fim de evitar que tal ataque seja infligindo nos servidores e sistemas, é recomendado que se estabeleça um tempo limite de sessão, a encerrando assim que o tempo se esgotar, outra técnica é a limitação de requisições que podem ser realizas de determinado local, por fim também temos o balanceador de carga, que examina a requisição HTTP sendo que este não a envia se não possuir todas as linhas condizentes com o protocolo, no caso a linha de encerramento.

Defesas de ataque de negação de serviço[editar | editar código-fonte]

Esses ataques não podem ser evitados completamente, se um atacante dirigir um grande tráfego para um sistema pode ser que ele sobrecarregue a conexão, limitando requisições de outros usuários. Essa situações ocorrem até mesmo em eventos esportivos populares, como em Copas do Mundo, onde sites de notícia recebem muito tráfego(situação conhecida como slashdotted, flash crowd ou flash event). Há muito pouco a fazer para impedir esse tipo de sobrecarga sem comprometer o desempenho da rede. Sites de notícias costumam fazer uma superprovisão de largura de banda de rede adicional e de servidores distribuídos replicados quando a sobrecarga é esperada, mas essa resposta tem um custo de implementação significativo.

Há quatro linhas de defesa contra ataques de DDoS:

  • Prevenção e preempção de ataque (antes do ataque): mecanismos que habilitam um que um sistema suporte tentativas de ataque e continue disponibilizando o serviço para os clientes legítimos. Entre as principais técnicas estão as políticas de consumo de recursos sob demanda e mecanismos que alteram protocolos na Internet para reduzir a possibilidade de ataque.
  • Detecção e filtragem de ataque (durante o ataque): mecanismos para detectar ataque assim que ele começa a responder, minimizando os impactos. Essa detecção procura padrões de comportamento suspeitos e a resposta filtra e elimina pacotes que podem estar relacionados com o ataque.
  • Rastreamento retroativo e identificação da fonte (durante e após o ataque): tentativa de identificar de onde vem o ataque para impedir ataques futuros.
  • Reação ao ataque (depois do ataque): tentativa de reduzir os efeitos negativos causados.


Resposta a um ataque de negação de serviço[editar | editar código-fonte]

Para realizar uma resposta bem-sucedida contra ataques de negação de serviço, deve-se conseguir contatar o provedor de serviço de Internet por outros meios que não sua rede que pode ter sido inutilizada pelo ataque. Além disso, é necessário a implementação de uma técnica de detecção de intrusão de rede caso ocorra um tráfego anormal. A detecção de tráfegos anormais podem ser em mudanças em padrões de fluxo de controle ou endereços de origem. Conhecendo o tráfego padrão, ele pode ser utilizado par comparar com tráfegos anormais.

Quando é identificado o ataque de negação, deve-se realizar a captura de um pacote da rede para a análise para encontrar algum tipo de pacotes de ataques comuns. Após a identificação é criado filtros para bloquear a entrada de pacotes desse tipo. Caso ocorra um ataque DDoS, o filtro pode não ser adequado para identificar todos os pacotes. Para isso, precisa-se possuir algum "plano B", como utilizar servidores de back-up ou utilizar novos servidores em um novo endereço. [1]

Ataques refletores e amplificadores[editar | editar código-fonte]

Esse tipo de ataque usa sistemas de redes que estão funcionando normalmente. Ele funciona com o invasor enviando um pacote de rede que possui um endereço de origem falso a um serviço que é executado em algum servidor de rede. Com isso o servidor envia uma resposta para o endereço falsificado, que pertence a vítima do invasor. Se o invasor optar por enviar diversas requisições para vários servidores, com o mesmo endereço falsificado, pode haver uma sobrecarga no enlace de rede da vítima, por conta do grande volume de respostas resultantes geradas.

Com o fato de servidores normais, geralmente serem usados como intermediários e o tratamento de pacotes que utilizam serem convencionais, facilita que ocorra esse tipo de ataque, enquanto o rastreio do endereço real de quem está realizando o ataque é dificultado.

  1. STALLINGS, William. BROWN, Lawrie. Segurança de Computadores. 2ed.