2.1:
Como os ataques são feitos
Ataques DDoS precisam ser
planejados pelo atacante. Primeiro, conseguindo domínio sobre as máquinas que
efetuarão a negação. Busca-se computadores vulneráveis que são invadidos e têm
os códigos de ataque instalados neles. A seguir, o atacante estabelece laços de
controle entre as máquinas sob seu comando, geralmente através de ferramentas
IRC. Quando a rede de ataque (rede agente) está pronta, pode ser usada como bem
se entender contra variados alvos.
As máquinas para a rede podem ser
ora conseguidas através de bots de IRC (programas cliente que dão aos usuários
de IRC permissões nos canais), permanentemente escaneando máquinas vulneráveis
e remetendo suas informações ao atacante; ora por worms, que se propagam de um
computador vulnerável a outro, procurando também outras máquinas vulneráveis,
estabelecendo domínio sobre a máquina infectada e realizando o payload (um código que é executado para conseguir
funções de ataque).
2.2:
Controlando DDoS
Estabelecida a rede agente, o
atacante pode controlá-la, especificar os comandos de ataque e recolher
estatísticas do comportamento da rede.
Ferramentas DDoS constroem uma
hierarquia operador (handler) / agentes, nas quais o atacante controla a
rede agente através de comandos diretos impostos ao operador, que os repassa
aos agentes, às vezes usando um conjunto de comandos e semântica diferentes. Os
operadores guardam em arquivos as identidades dos agentes, e este era o grande
ponto fraco deste modelo de comandos diretos, esquematizado abaixo:
Como os agentes por vezes acabavam por guardar
também as identidades dos operadores, uma investigação podia revelá-los, e com
eles todos os demais agentes, desmantelando assim a rede DDoS.
Com grande parte das batalhas de negação de serviço
tendo já como campo o IRC, e bots sendo já programados para encontrar agentes
para ataques, os atacantes passaram a desenvolver bots de IRC também para
desempenhar funções de DDoS. As vantagens eram inúmeras: o servidor já estava
disponível e era mantido por outros; seria difícil encontrar o canal de chat no
qual atua o operador do atacante e seus agentes. Mesmo que seja estranho que um
canal repentinamente ganhe dezenas de milhares de usuários, seria difícil
encontrá-lo dentre tantos outros canais do servidor – e, mesmo quando
encontrado, é necessário contatar os administradores do servidor para alertar a
farsa, o que pode também levar tempo. É comum transformar computadores em
servidores forjados de IRC, em geral usando outra porta que não a padrão
(6667/TCP) do protocolo, ou usar bots como proxies TCP para conectar-se a
servidores reais na porta padrão. Este controle da rede de agentes, feito de
forma indireta, está esquematizado abaixo:
2.3: Classificação dos Ataques
2.3.1: Ataque por Inundação
É dos tipos de ataque de DoS mais comuns.
Ocorre inundação de tráfego TCP SYN, explorando a abertura de conexões do
protocolo de TCP, utilizado em serviços que necessitam de entrega com confiável
de dados, e que se inicia com a negociação de determinados parâmetros entre o
cliente e o servidor.
O cliente envia um pacote SYN para o
servidor, pedindo abertura de conexão. O pacote leva um parâmetro chamado
número de seqüência inicial, que permite que o receptor reconheça dados
perdidos, repetidos ou fora de ordem. Após o recebimento do pacote SYN, o
servidor processa o pedido de conexão e aloca memória para armazenar
informações do cliente. A seguir, um pacote TCP SYN/ACK é enviado como resposta
ao cliente, notificando que o seu pedido de conexão foi aceito. O cliente envia
então um pacote ACK, para completar a abertura da conexão. Esse procedimento é
conhecido como aperto de mão de três vias (three-way handshake).
A partir deste tipo de ataque, os recursos
da vítima podem ser explorados de diversas formas.
2.3.2: Ataque Reflexivo
Variação
de um ataque de inundação, que visa exaurir recursos da vítima. Todavia, neste
há a presença de um agente intermediário entre o atacante e a vítima.
Utiliza-se este intermediário para espelhar o tráfego de ataque em direção à
vítima, o que dificulta ainda mais a identificação dos atacantes, pois o
tráfego que chega à vítima é originado no intermediário, e não no próprio
atacante. Para este ataque, é necessário que o atacante envie uma requisição
(REQ) ao agente intermediário, forjando o endereço da vítima (IP Spoofing, seção 2.4)
ao invés de usar seu próprio endereço. Ao receber o REQ, o agente não consegue
verificar a autenticidade da origem da requisição (que de fato não é autêntica)
e envia uma resposta (RESP) diretamente para a vítima.
Entretanto,
como o objetivo do ataque é usar os recursos do refletor e não inundá-lo, é
preciso que o agente consiga processar as requisições em tempo, que deve ser
menor ou igual ao intervalo entre pacotes de ataque, ou seja, tempo de resposta
menor ou igual ao tempo de ataque . Caso contrário, o processamento
do agente não será suficiente, e o tráfego excedente será descartado, e não
atingirá a vítima. Este tipo de ataque não é restrito
a determinado protocolo. Qualquer protocolo que envie pacotes de resposta ao
atender a requisições pode ser usado, como o próprio TCP, quando o atacante
enviaria diversos pacotes SYN para o agente, que os responderia pacotes ACK
direcionados para a vítima. Poder-se-ia ainda usar UDP (User Datagram
Protocol) associado ao DNS, quando o atacante enviaria diversas requisições
ao DNS do agente, que enviaria respostas para a vítima.
2.3.3: Ataque à
Infra-Estrutura da rede
Sobretudo
usado contra os grandes sites da Internet como Yahoo, Amazon e Microsoft, que
em geral possuem grandes recursos de processamento e de memória. Contra eles,
DDoS de pequena escala não conseguem exaurir os suficientemente rápido para que
a vítima tenha o serviço negado a usuários legítimos. Pode-se ainda concentrar
esforços em algum elemento vital para o fornecimento do serviço, mas que não
dependa da vítima, como por exemplo consumir toda a banda passante da vítima
com o tráfego de ataque, o que causaria
perda de requisições na infra-estrutura de rede. O ponto onde ocorrem as
perdas seria algum roteador entre o atacante e a vítima, e onde o tráfego
direcionado à vítima (entrada) é maior do que o de saída. Como precisarão
disputar o mesmo recurso com o tráfego enviado pelo atacante, o tráfego
legítimo eventualmente pode ser descartado. É um tipo de ataque de difícil
combate, já que os pacotes não precisam ter nenhum padrão semelhante que
possibilite filtrá-los.
Contra os mesmos tipos de alvos, usa-se
inundação aos seus servidores DNS. Este ataque não atinge a vítima diretamente,
mas estes servidores são responsáveis por traduzir nomes dos sites - que é o
que os usuários usam para acessá-los - em endereços IP. Um ataque ao serviço de
resolução de nomes acaba por negar serviços. Como vimos no capítulo 1, um
destes ataques ocorreu contra a Microsoft.
2.3.4: Ataque de Vulnerabilidade
Obejtiva deixar a vítima inoperante. Uma
das maneiras conseguir o intento é explorar alguma vulnerabilidade na
implementação da pilha de protocolos ou da própria aplicação da vítima.
Ocorreu, por exemplo, na implementação do protocolo TCP em sistemas
operacionais Microsoft Windows. O atacante precisava construir um pacote TCP
particular e enviá-lo para a vítima. Ao receber o pacote, o sistema operacional
da vítima abortava, causando congelamento total do processamento.
2.4: IP Spoofing
Spoof significa forjar, ou seja, falsificar. É
exatamente esta a tática no IP Spoofing: fornecer um falso endereço IP. Todo
pacote de comunicação IP contém em seu cabeçalho o endereço do remetente e o do
destinatário.
Programas maliciosos podem forjar cabeçalhos falsos,
fazendo assim crer que o pacote veio de outro endereço. Isto pode ser usado por
atacantes para quebrar medidas de segurança, como autenticações baseadas em
endereço IP.
Este tipo de ataque é mais comum quando existe
relação de confiança entre máquinas. Por exemplo, não é incomum que
computadores dentro de uma mesma rede local confiem uns nos outros, aceitando
conexões vindas dos outros sem exigência de login e senha. O mesmo pode ocorrer
com a aceitação de pacotes, e isto se torna uma ferramenta muito útil para
ataques de negação de serviço.
IP Spoofing
pode ser feito por:
· Geração
aleatória de endereços IP, quando um endereço dentro da faixa IPv4 (0.0.0.0 –
255.255.255.255) é forjado. Embora possam surgir endereços reservados, como os
da faixa 192.168 ou inválidos, como os da faixa 0, a maior parte dos endereços
simulará um IP válido e roteável. A forma mais comum de combater este tipo de
spoofing é com filtragens de ingresso e egresso, técnica através da qual
compara-se o endereço-fonte do pacote com o intervalo de endereços IP designado
às redes da fonte e do destino, dependendo da localização do roteador de
filtragem, descartando pacotes cujas fontes parecem ter IP forjado.
· Forja
de subrede: Se uma máquina está em uma subrede de faixa pré-determinada e
conhecida, é fácil forjar um endereço que esteja dentro desta faixa e fazê-lo
passar-se por um integrante da subrede. A filtragem de ingresso e egresso neste
caso deve ser feito apenas na faixa de IPs compreendida pela subrede. Todavia,
mesmo assim ainda é difícil filtrar o IP forjado e identificar a máquina
responsável pelo congestionamento de tráfego.
· Forjar
o IP da vítima: Coloca-se o IP da vítima nos pacotes de pedidos de serviços
para provocar uma inundação de pacotes não requisitados sendo a ela enviados.
Forjar IPs é uma tática que gera sucessos em DDoS,
embora não seja imprescindível. Oculta os endereços reais dos agentes em
ataques DoS de agente único, permite ataques reflexivos (nestes, é realmente
essencial forjar o IP como sendo o da vítima), nos quais a vítima recebe
pacotes não requisitados de fato por ela, mas sim pelo IP que se fazia passar
pelo seu; Por fim, IP Spoofing é uma arma para trespassar defesas contra DDoS.
Algumas destas defesas criam listas de clientes legítimos, aos quais será dada
preferência. Forja-se o IP dos pacotes de ataque como sendo de um destes
clientes, que receberá tratamento preferencial – ou seja, um pacote falso não
só será aceito, como terá preferência sobre outros.
Mas no cenário atual da negação de serviço, não é raro ter
redes de agentes com dezenas de milhares de máquinas. É razoável que elas
tenham pouca ou nenhuma relação entre si, estando geograficamente espalhadas.
Com IPs diversos, passam-se por clientes legítimos dos serviços com pouca
dificuldade.
2.5: Ferramentas de Ataque
Embora haja atacantes que cheguem ao ponto de
escrever seus próprios códigos para ataques de negação de serviço, há uma série
de programas facilmente encontrados na Internet:
·
Trinoo: Arquitetura operador / agentes. Atacante se
comunica com o operador via TCP; O operador se comunica com os agentes via UDP.
Permite senhas para operadores e agentes, e gera pacotes UDP para portas
aleatórias para múltiplos recipientes.
·
Tribe Flood Network (TFN): Usa uma arquitetura
diferente da do Trinoo. O atacante não precisa se logar ao operador. Os agentes
podem atacar via UDP ou TCP.
·
Stacheldraht (Arame farpado): Combina características
do Trinoo e do TFN, com comunicação encriptada via TCP entre atacante e
operador.
·
Shaft: Combina características dos três anteriores.
Permite mudança de portas de comunicação entre operador e agentes durante a
conexão e tem recursos de coleta de estatísticas.
·
Tribe Flood Network 2000 (TFN2K): Versão melhorada do
TFN, adiciona características para dificultar detecção do tráfego e controle
remoto da rede de agentes.
·
Mstream: Gera inundações com tráfego TCP; Operadores
podem ser controlados remotamente por mais de um atacante, e a forma de
comunicação entre operadores e agentes é manipulável em tempo de compilação;
·
Trinity: Primeira ferramenta DDoS controlada via IRC.
Cada agente, após infectado pelo Trinity, conecta-se a um canal e espera
comandos.
·
Agobot & Phatbot: Congestionamentos de tráfego SYN,
UDP e ICMP.