# Ataques Teardrop

Em computação, Ataques Teardrop são um tipo de Ataque de Negação de Serviço que se valem de uma vulnerabilidade encontrada em alguns sistemas operacionais mais antigos como Windows 95, Windows NT e outros, para causar uma sobreposição de fragmentos de pacotes IP e, por conseguinte, falhas no sistema que podem ser bastante prejudiciais. Os fragmentos de pacote "mal intencionados" enviados neste tipo de ataque, fazem com que o sistema aja de maneira errada no processo de remontagem de um pacote. Este ataque não tem relatos atuais (apesar da vulnerabilidade ter sido detectada em versões não tão antigas do Windows, como o Windows XP) e, em alguns dos casos, uma simples reinicialização é uma maneira de cessar os problemas decorrentes. Entretanto, vale salientar que muito embora o ataque seja considerado não-destrutivo, ele pode causar problemas se houver algum dado não salvo em aplicações abertas no momento em que a máquina for atacada. Assim sendo, o primeiro problema que esse ataque pode gerar é a perda de dados. Outras variações desse ataque são conhecidas como "NewTear," Nestea," "SynDrop," e "Bonk," entre outros.

## Sistemas Operacionais Suscetíveis

Este tipo de Ataque de Negação de Serviço afeta o Windows 3.1, 95 e NT. Também podem ser afetadas versões do Linux anteriores a 2.0.32 e 2.1.63.
Mais recentemente, a falha que tornava os sistemas vulneráveis a este tipo de ataque foi encontrada no Windows 7 e no Windows Vista mas, isso já foi corrigido na versão 8 do Windows. De qualquer forma, é sempre recomendável que especialistas estejam atentos a esta questão.

## Como Detectar o Ataque Teardrop

Quando um Ataque Teardrop é executado contra uma máquina, ele vai causar travamento (em máquinas Windows, o usuário vai muito provavelmente se deparar com uma “Tela azul da morte”) ou reinicialização espontânea. Se o usuário tiver proteção contra ataques do tipo negação de serviço e ainda assim estiver enfrentando problemas de travamento ou reinicialização, é muito provável que o ataque seja do tipo Teardrop ou Land. Se o usuário estiver usando IRC e a máquina se desconecta da rede local ou Internet mas não trava, o tipo de ataque é provavelmente Click.
Vale salientar que este ataque pode comprometer mais de um computador na rede (e nao apenas a maquina que esta sendo atacada): A largura de banda de um determinado roteador pode ser comprometida pois estara sendo consumida pelos inumeros pacotes enviados no ataque e isto prejudicaria uma rede local inteira, por exemplo.

### Exemplo no Windows NT

De acordo com a própria Microsoft, um ataque Teardrop pode causar o seguinte problema no Windows NT:
* Windows NT pode parar de responder e apresentar uma mensagem de erro: STOP 0x0000000A or 0x00000019 após receber um número de pacotes corrompidos.

## Como Funciona o Ataque Teardrop

Durante o processo de transmissão de pacotes pelas redes em geral, existe um conceito chamado de Unidade Máxima de Transmissão (UMT) que refere-se ao tamanho do maior pacote que uma camada de um protocolo de comunicação pode transmitir. Logo, muito comumente, pacotes de dados precisam ser "quebrados" em fragmentos menores para que sejam transmitidos pela rede, dependendo desta unidade máxima de transmissão. Vários núcleos (kernels) antigos verificam se os pacotes fragmentados que estão trafegando são maiores de que a UMT e rejeitam os que não estão de acordo, porém, não verificam e nem rejeitam fragmentos que são muito pequenos. Assim, invasores tomam vantagem desta não verificação por um limite inferior e constroem pacotes que sejam menores do que o aceitável (uma vez que estes pacotes não serão rejeitados), causando uma "confusão" por parte do sistema que não saberá executar o procedimento de reintegração dos fragmentos corretamente, já que os fragmentos vão se sobrepondo muito rapidamente.
Embora seja muito mais popular em versões velhas do Windows, o ataque Teardrop é também possível em Windows7 e Windows Vista que estejam com o SMB habilitado (os pacotes de ataque entram pelas portas TCP 139 e 444 no Firewall das máquinas com o SMB habilitado). A vulnerabilidade do Driver nessas duas últimas versões citadas, foi notada no ano de 2009 mas, o Windows 2000 e Windows XP foram considerados livres dela.
Para mostrar como o ataque funciona, vamos supor que um pacote de 2400 bytes esteja sendo enviado pela internet e que a Unidade Maxima de Transmissao da internet seja 1500 bytes. Logo, o remetente "quebra" o pacote em dois:
Primeiro Pacote - 1500 bytes
| Campo | Tamanho (bytes) |
| Cabecalho IP | 20 |
| Cabecalho TCP | 24 |
| Dados | 1456 |
* Na estrutura do pacote, existe uma flag chamada de “Nao Fragmente” (do ingles, do not fragment - DF) para indicar se o pacote pode ou nao ser fragmentado. Para este caso, essa flag recebe o valor 0 (indicando que o pacote pode ser fragmentado);
* Outra flag denominada Mais Fragmentos (do ingles, More fragments - MF) recebe o valor 1, indicando que existirao pacotes subsequentes;
* O campo de Offset de fragmentacao eh preenchido com o valor 0, o que significa que este eh o inicio do primeiro pacote;
Segundo Pacote - 944 bytes
| Campo | Tamanho (bytes) |
| Cabecalho IP | 20 |
| Cabecalho TCP | 24 |
| Dados | 900 |
* A flag DF (do not fragment) recebe o valor 0, indicando que o pacote pode ser fragmentado;
* A flag MF recebe o valor 0, indicando que este eh o ultimo pacote.
* O bit de offset de fragmentacao recebe o valor 182 (um byte equivale a 8 bits, entao, 1456/8 = 182).
Desta maneira, o pacote seria reintegrado quando atingisse o destino final e os dados seriam recebidos precisamente.
No caso de um ataque Teardrop, apos o envio do primeiro pacote, outros varios pacotes sao enviados e o campo offset de fragmentacao desses outros pacotes (advindos do ataque) eh preenchido com valores incorretos e, geralmente, nenhum dado adicional eh encaminhado. Isto torna o tamanho destes pacotes de ataque muito pequeno.
Levando em consideracao o exemplo anterior de um envio ideal e suponto que um segundo pacote malicioso fosse recebido pelo destino com a seguinte configuracao:
Segundo Pacote - Malicioso - 944 bytes
| Campo | Tamanho (bytes) |
| Cabecalho IP | 20 |
| Cabecalho TCP | 24 |
| Dados | 0 |
* A flag DF (do not fragment) recebe o valor 0, indicando que o pacote pode ser fragmentado;
* A flag MF recebe o valor 0, indicando que este eh o ultimo pacote.Ataque Teardrop - Parte 1.
* O bit de offset de fragmentacao recebe o valor 92.
O valor correto para o campo do offset eh 182. Como o offset foi preenchido com 92, isso gerara uma sobresposicao de 90 bytes de dados entre os pacotes.
Quando a soma do offset e do tamanho do pacote fragmentado diferem do próximo pacote fragmentado, os pacotes se sobrepõem e o servidor realiza uma tentativa de fazer a reintegração com os fragmentos verificados até o momento e, como fragmentos maliciosos estarão sobrepostos aos fragmentos que compõem o dado original, o comportamento do sistema em relação a esta reintegração se dará de maneira inapropriada, levando a travamento, reinicialização, etc.
A imagem ao lado (Ataque Teardrop - Parte 2) mostra um outro exemplo de como o sistema se confunde com a sobreposição: O segundo fragmento deveria iniciar 20 bytes antes (no 800) de onde o primeiro fragmento termina (no 820). O offset do fragmento #2 não está correspondendo ao tamanho do pacote do fragmento #1. Esta discrepância vai fazer com que o sistema tente uma reintegração que usará dados inconsistentes.

## Prevenção e Mitigação
### Windows

Se um usuário está sofrendo um Ataque Teardrop em um Sistema Windows, deve visitar a página central de ataques Teardrop do Windows para verificar como se defender contra esse tipo de ataque. Uma das medidas propostas eh aplicar o mais recente Windows NT Service Pack (SP4 ou posterior), disponível no site da Microsoft Product Support Services.

### LINUX

Se um usuário LINUX está sofrendo esse ataque, é recomendável que atualize a versão do seu Sistema Operacional para 2.0.32 / 2.1.63 ou posterior.

### Plataforma JUNOS

Utilizando qualquer sistema operacional JUNOS é possível detectar a discrepância em um pacote fragmentado (se acionado a opção de mostrar ataques Teardrop) e o sistema elimina o ataque. Basta seguir o passo-a-passo abaixo:
* Especificar o nome da Tela
* Associar a tela a uma zona de segurança
* Se tiver terminado de configurar o dispositivo, só executar o Commit
E para verificar se está funcionando certamente, basta digitar os seguintes comandos no terminal no modo operacional:

### Casos Gerais

Em todo caso, existem diversas maneiras de mitigar ataques de fragmentação como o Teardrop, dependendo, obviamente, do tipo e do grau de severidade do ataque. A maioria dos métodos de mitigação garantem que pacotes de dados maliciosos nunca cheguem ao seu destino alvo. O mais comum envolve inspecionar pacotes que estão chegando por violação às regras de fragmentação (por exemplo, usando um roteador ou um proxy seguro).
Um exemplo de sistema que tem mecanismos dedicados de proteção para este ataque é o Incapsula (https://www.incapsula.com/). Neste, as inspeções são de pacotes intensificadas por Hardware dedicado a Proteção contra Ataques de negação de serviço. Em casos extremos, o Incapsula dedica mecanismos de “lista negra” e “Lista branca” que filtram o tráfego baseado em fatores como reputação IP e taxa de padrões. Utilizando esses métodos, as plataformas Incapsula proporcionam imunidade completa para todos os tipos de ataques de fragmentação IP conhecidos até o momento.
Se um usuário Windows não tem meios de proteção contra teste tipo de Ataque de Negação de Serviço, o SMBv2 deve ser desabilitado (conforme recomendado pela própria Microsoft) e as portas 139 e 445 devem ser bloqueadas.
De modo geral, são consideradas boas práticas para se prevenir contra esse tipo de ataque:
* Proteger os computadores com antivírus que escaneiem o sistema regularmente;
* Manter padrões e drivers atualizados;
* Implementar filtro Firewall;
* Sempre abrir e fechar serviços não necessários todo o tempo;
* Egress filters - Um dos maiores problemas com os Ataques de negação de serviço, são os falsos endereços IP. Filtros dedicados (Egress filters) devem ser configurados em roteadores para resolver essa questão. Com essa filtragem, pacotes saindo para a internet são inspecionados antes de serem encaminhados para fora do mundo dos roteadores. Como os roteadores devem conhecer todos os endereços atrás do firewall, eles devem poder identificar falsos endereços e eliminar pacotes com estes endeeços antes que eles alcancem um roteador externo;
* Uma outra técnica usada para se defender contra Ataques de Negação de Serviço é configurar roteadores para não permitir o broadcast de mensagens dentro da rede e também configurar os computadores nesta rede para não responderem a mensagens broadcast;
* Todos os pontos de acesso públicos devem ser mantidos em uma rede separada, geralmente chamada de zona desmilitarizada e, deve não possuir acesso a internet preferencialmente;
* Admistradores de rede devem também instalar Sistemas de detecção de intrusão para analisar padrões no tráfego da rede. Entretanto, estes não devem ser os únicos meios de proteção.
De qualquer modo, estes não devem ser os únicos meios de defesa. É importante ter uma política de segurança que não permita acessos não-autorizados. AInda, é bom ter uma equipe de emergência a postos com membros treinados sobre como responder a ataques.

## Exemplos para Ataque TearDrop
### Código em C

O código deste link foi disponibilizado em uma página na internet e mostra o exemplo de um código em C que causa um ataque Teardrop.

### Código em Python

Este outro link redireciona para um código feito por Sam Bowne, disponibilizado em sua página. O autor utiliza-o como recurso para cursos pessoais ministrados sobre este tema.