Sobre Vulnerabilidades de Negação de Serviço

Nos posts anteriores desta série, usei controles remotos de carros e portões de garagem para ilustrar algumas vulnerabilidades clássicas, tais como a ataques de replay ou à busca exaustiva. Mas eu ainda não tinha falado da mais clássica, básica e fulminante delas: as vulnerabilidades a "negação de serviço", que permitem a um atacante parar seu sistema (seja ele web, eletrônico, físico ou biológico), temporária ou permanentemente, de propósito. São, basicamente, sabotagens.

Em um post anterior, usei como exemplo o controle remoto integrado à chave física que abre as portas dos carros modernos. Contei que eles usam um treco chamado "secure rolling code" para transmitir padrões diferentes de "toc-tocs" via rádio, de forma a serem resistentes a ataques de replay e busca exaustiva. Mas isso também os torna vulneráveis a um trote: pegue a chave do seu carro e aperte no botão de abrir umas 300 vezes com o carro fora do alcance. Depois, vá para próximo do carro para colocá-lo dentro do alcance e experimente apertar novamente o botão de abrir: você descobrirá que ele não funciona mais.

Isso acontece porque o receptor no carro, justamente para tratar o caso em que você acidentalmente aciona o transmissor fora do alcance, aceita os próximos 256 (tipicamente; em alguns modelos, pode ser mais ou menos) códigos da sequência secreta. Por isso, se você acionar o receptor fora do alcance mais de 256 vezes, eles "sairão de sincronismo" e se desentenderão. Convenhamos, é muito pouco provável que alguém acione o transmissor 256 vezes fora do alcance sem ser com a expressa intenção de sabotar o dispositivo. Claro, só estou contando essa vulnerabilidade aqui porque: a) você ainda vai conseguir abrir seu carro com a chave física comum; e b) levando seu carro na assistência técnica, você conseguirá fazer o controle remoto funcionar de novo, mas talvez você tenha de pagar por um novo. (Alguns modelos voltam a funcionar se você mantiver os botões de abrir e fechar o carro apertados por mais de cinco segundos, com o carro dentro do alcance.)

Aliás, esse mesmo truque malvado funciona com tokens de senhas descartáveis que os bancos vêm distribuindo para seus clientes (especialmente pessoas jurídicas). Aperte o botão algumas centenas de vezes e chegará a um ponto em que as senhas que ele gera não mais são reconhecidas pelo site do banco. Naturalmente, os tokens baseados em data/hora, que não têm botões, não são sucetíveis a essa vulnerabilidade em particular.

Quase tudo que transmite via rádio é sucetível a um tipo de ataque chamado "jamming", um fenômeno conhecido por todo mundo que já tentou conversar em bares, shows ou locais superlotados: o ruído de fundo é tão alto que você mal consegue entender o que seu interlocutor diz, mesmo a centímetros de distância dele. "Jamming" (do verbo inglês "to jam", "emperrar") é justamente isso: gerar tanto ruído nos canais de rádio a ponto de impedir as comunicações.

Criar um jammer para impedir o funcionamento de abridores de garagem é um projetinho que qualquer hobbysta de eletrônica sabe fazer. Só não é mais comum porque parece não haver muito a se ganhar atrapalhando as pessoas de entrarem em suas garagens. Mas há toda uma indústra de jammers especializados pra diferentes sistemas de rádio. Um dos mais vendidos são os GSM jammers, que bloqueiam o funcionamento de celulares GSM ao redor de uma área. Costumam ser muito usados ao redor de presídios para dificultar a comunicação dos dententos com o mundo exterior.

Um dos meus favoritos são os jammers multibanda, capazes de atrapalhar comunicações de GPS e de GSM simultaneamente, tal como esse aqui ou esse outro aqui, que tem a virtude extra de ser sintonizável. Aqui você pode ver também uma loja especializada em vender jammers, inclusive para WiFi e câmeras de vigilância sem fio. Já esse cara fez um vídeo mostrando que um certo modelo de transmissor de vídeo sem fio faz tanta interferência no adaptador WiFi-USB dele que a conexão chega a cair.

É a existência de aparelhos como esse, a preços surpreendentemente acessíveis, que me faz encarar com muito ceticismo aquela proposta de exigir rastreadores de GPS para evitar roubo de carros ou de caminhões de mercadoria, como esse estudo. O texto é interessantíssimo, mas de uma ingenuidade atroz – isso só vai funcionar enquanto os malfeitores não se equiparem com jammers tais como os que citei.

Note bem: não estou dizendo que rastreadores GPS+GSM não prestam pra nada; eles me parecem, sim, muito úteis para os fins lícitos de otimizar os roteiros, controlar pontualidade, etc. Mas pra prevenir roubos, parece-me uma furada por ser trivialmente sucetível aos jammers. Pensar só nas funcionalidades sem levar em conta as vulnerabilidades é uma miopia infelizmente muito comum que fatalmente redunda em sistemas cada vez menos seguros. Temos, sim, que adotar a tecnologia, mas somente onde ela não nos leva a furadas; ou, no mínimo, que tenhamos plena consciência de suas limitações para que as possamos tratar de outras formas.

Recentemente li outra idéia que me causou estranheza: o conceito de colocar uma tornozeleira com GPS e rádio para dar uma espécie de "liberdade vigiada" a condenados por crimes leves, ao invés do encarceramento convencional. O artigo onde li isso é fascinante e os benefícios parecem tentadores, mas, fiquei chocado por não terem sequer comentado sobre o que me parece uma vulnerabilidade óbvia: o condendado (ou alguém próximo dele) pode comprar um jammer e fazer um "ataque de negação de serviço" no serviço de rastreamento por tempo suficiente para viabilizar uma fuga.

Na Internet, quase tudo é vulnerável a negação de serviço. É conceitualmente simples fazer um site qualquer parar de propósito: faça mais acessos a ele do que ele tem capacidade de atender – um fenômeno muito familiar para quem já amargou longas esperas em filas bancárias ou casas lotéricas. Quanto maior for a disparidade entre o esforço necessário para o atacante fazer a requisição e o site oferecer a resposta, tanto maior a eficiência do ataque.

A diferença fundamental entre a Internet e a vida real, que escapa a muitos leigos, pode ser explicada usando a seguinte analogia: imagine que fosse possível clonar pessoas instantaneamente. Então, se eu quisesse provocar um engarrafamento de propósito, bastaria gerar um ou dois (ou por que não dez ou vinte? ou cem?) milhões de clones de mim mesmo e despejá-los em algum ponto da cidade (ou por que não na cidade inteira?) Isso é impossível na vida real, mas é perfeitamente possível (e até relativamente comum) na Internet.

A Internet foi concebida para resistir a certos ataques de negação de serviço, mas não a outros. Quando os militares americanos começaram a projetar o que viria a se tornar a Internet de hoje, a preocupação deles era que um "inimigo" jogasse uma bomba atômica em algum ponto importante da rede deles. Disso surgiu a filosofia do "centro" da Internet ter múltiplas linhas de comunicação ligando-as a seus vizinhos imediatos, tal como há múltiplas ruas ligando o centro de uma cidade aos subúrbios. O resultado é que a Internet é meio difícil de "desligar" – seria necessário bombardear muita gente. Por outro lado, os políticos americanos andam flertando com a idéia de implantar recursos para desligar a Internet em caso de emergência. Pra mim, soa o cúmulo da ironia: eles inventaram uma rede difícil de desligar e agora querem um jeito de desligá-la.

Mas a Internet original não resistia muito bem a congestionamentos propositais causados por milhões de clones, sobretudo quando vinham de vários lugares diferentes. Esses ataques, que viraram meio que "moda" nos anos 2000, eram chamados de "DDoSs", da sigla em inglês "Distributed Denial of Service [Attack]s". Ao longo da primeira década do século XXI, os grandes provedores de acesso uniram forças para implementar um recurso chamado "ingress filtering anti-spoofing", para bloquear pacotes com endereços IP falsificados logo na origem, dificultando bastante a forma mais intensa do ataque e facilitando a identificação do computador que estava originando a inundação proposital. Todavia, até hoje essa técnica não é adotada pelos provedores de acesso de vários países.

Grandes provedores de serviços, como os sites dos grandes jornais e veículos de comunicação, o site da Receita Federal, e outros, têm uma linha direta com os provedores "Tier 1" da Internet (alguns desses megasites são hospedados nos datacenters desses próprios provedores). Quando algum ataque de DDoS é lançado contra esses sites, o próprio provedor detecta e bloqueia as origens na borda do seu sistema autônomo, ou redireciona o tráfego para uma "rede-ralo" ("sinkhole networks", em inglês; às vezes também chamadas de "darknets"). Há alguns anos atrás, uma equipe da Tempest foi fazer um Ethical Hacking em um cliente que gozava desse nível de proteção. Menos de dois minutos após iniciada nossa varredura, nossa conexão até o site de destino foi totalmente bloqueada. É um recurso que os grandes têm que infelizmente não está ao alcance dos pequenos sites e pequenos provedores.

Hoje em dia, a moda é que os atacantes primeiro injetam vírus nas máquinas de usuários incautos, tornando-as zumbis sob seu controle – exércitos de milhares de máquinas-zumbi são conhecidas como "botnets". Quando os malvados querem atacar algum site, os fazem não de seu próprio computador, mas de seus zumbis, incriminando os pobres usuários que nem tinham notado que suas máquinas estavam infectadas. Certa vez já vi um ataque coordenado desses, em que pouco mais de seis mil máquinas geraram tráfego elevado para um único site, saturando-o por completo. Esse caso é mais complicado, porque os provedores Tier 1 não podem simplesmente bloquear todo mundo.

Uma questão que desconheço e que me desperta a curiosidade é a legalidade ou ilegalidade dos ataques de negação de serviço. Não pesquisei realmente a fundo, mas nunca vi ninguém ir para a cadeia por lançar tais ataques. Já vi muitas notícias de autores de vírus sendo descobertos e processados, mas nada muito além disso.

De fato, há empresas que estão contratando outras para lançarem ataques contra seus desafetos. Essa notícia, por exemplo, dá conta que as grandes empresas do ramo cinematográfico estão contratando um sujeito para atacar sites que facilitem a distribuição de filmes pirateados.

Por analogia com o mundo físico, ataques de negação de serviço deveriam ser algo muito sério. Se alguém sabotasse seu carro, ou seus caminhões de transporte de mercadoria, de forma a que não funcionassem, você certamente iria querer a cabeça de alguém e provavelmente a polícia e os juízes ficariam do seu lado. Mas se seu site é inundado, estes últimos não parecem se interessar muito. Por que será, eu me pergunto?

Proteger-se adequadamente de ataques de negação de serviço na Internet é um desafio técnico formidável, mas nem de longe impossível. Requer um profundo conhecimento técnico dos ataques e contramedidas disponíveis, bem como uma calibração bem equilibrada entre o custo das proteções e o tipo dos ataques esperados, mas é perfeitamente factível. Os conceitos básicos nem são difíceis nem originais. Por exemplo, uma forma de resistir a um ataque de inundação é ter dezenas, e não somente um, servidor web hospedando um site, de preferência em pontos distintos da Internet – uma versão digital dos velhos ditados populares "não ponha todos os seus ovos em uma cesta só" e "quem tem um, não tem nenhum". Quem leva essa abordagem ao extremo, com centenas de milhares de computadores espalhados por vários lugares do mundo são empresas como o Google ou as redes de distribuição de conteúdo, como a Akamai. Para conhecer simplificadamente como funcionam essas redes, veja o site da Coral CDN, uma rede de distribuição de conteúdo gratuita. Aliás, eles recentemente publicaram um artigo narrando seus últimos 5 anos de experiência operacional.

Apesar de não ser muito difícil preparar-se adequadamente para resistir a esse tipo de ataque, são poucos os que realmente fazem. Toda vez que um cliente chega aqui na Tempest pedindo para fazermos uma inspeção nos seus sites, oferecíamos também testarmos resistência contra tais ataques, simulando ataques de inundação de diferentes intensidades – nada mais natural, pois segurança contra indisponibilidade é uma das neuras mais presentes na cabeça de todo mundo que trabalha em TI. Todavia, quase sempre o cliente explicitamente pedia para não testarmos contra negação de serviço – eles sabem que o site provavelmente não resistirá e não querem correr o risco.

Quem entende bastante sobre ataques de negação de serviço são os militares – afinal, em uma guerra, o objetivo é destruir. Livros inteiros já foram escritos sobre o assunto e milhares de pessoas por ano são formadas, nas academias militares de todo o mundo, na arte da destruição e de como resistir a elas. Quando se envereda por esses assuntos, algumas conclusões esquisitas são inescapáveis – por exemplo, que nossa mania de construir para cima a partir superfície da Terra nos torna especialmente vulneráveis a bombas, mísseis, etc. Quando se quer resistir a algum tipo de bombardeio, a estratégia mais eficiente parece ser usar a própria Terra como escudo, fazendo construções subterrâneas ou submarinas. De fato, na segunda guerra mundial, a população de Londres se escondia nos túneis do metrô para resistir aos bombardeios alemães; os silos que guardavam as armas nucleares no auge da Guerra Fria eram todos subterrâneos – e as equivalentes de hoje em dia ficam escondidas em submarinos nucleares; os Talibãs estão dando o maior trabalho à coalizão no Afeganistão escondendo-se em cavernas – uma proteção bem low-tech para as armas high-tech dos americanos.

Não é exagero dizer que, hoje em dia, vivemos sob a ameaça do maior de todos os ataques de negação de serviço: a aniquilação de toda a humanidade por uma guerra nuclear. A relativa paz que vivemos hoje em dia tida como fruto da doutrina da Destruição Mútua Garantida, que basicamente afirma nenhuma potência nuclear seria tola o bastante para iniciar uma guerra porque morreria também.

Essas e outras considerações fazem com que muita gente ache o estudo sistemático das vulnerabilidades em geral, e das de negação de serviço em particular, um assunto meio depressivo, negativista. Talvez, mas, eu, pessoalmente, não acho; pra mim está claríssimo que escondermos a cabeça na areia, fingindo que essas coisas não existem ou nos recusarmos a analisá-las detidamente, vai nos tornar apenas mais e mais vulneráveis. Ao meu ver, a maneira de aprendermos como nos defendermos é entender como podemos ser atacados e nos prepararmos de acordo. Só assim estaremos suficientemente bem equipados para fazer software, sites, redes (e quem sabe até nações) que não sucumbam tão facilmente como as de hoje.

Partes anteriores

Comentários
Aceita-se formatação à la TWiki. HTML e scripts são filtrados. Máximo 15KiB.

 
Enviando... por favor aguarde...
Comentário enviado com suceso -- obrigado.
Ele aparecerá quando os moderadores o aprovarem.
Houve uma falha no envio do formulário!
Deixei uma nota para os admins verificarem o problema.
Perdoe-nos o transtorno. Por favor tente novamente mais tarde.
Tímido Visitante Anônimo | 2010-10-10 09:20:46 | permalink | topo

E lá nos EUA o sistema de rastreamento das tornozeleiras ficou fora do ar por 12 horas:

http://www.bbc.co.uk/news/world-us-canada-11491937

Joao Paulo Campello | 2010-09-14 10:48:18 | permalink | topo

Artigo/notícia interessante do 'Portal G1' da Globo.com sobre o assunto "liberdade vigiada" mencionado no teu post:

Coloquei o seguinte comentário no link do G1:

"http://blog.tempest.com.br/marco-carnut/sobre-vulnerabilidades-negacao-servico.html

'Transcrição livre' de trecho do artigo sobre Negação de Serviço:

O condendado (ou alguém próximo) pode comprar um jammer e ´derrubar´ o serviço de rastreamento por tempo suficiente para viabilizar uma fuga!"

Abraços, ótimo post!

J.