quinta-feira, 15 de março de 2018

Por que ataques de negação de serviço refletidos quebram recordes?


O ataque de negação de serviço é um dos que mais chama atenção na internet, mas não por qualquer façanha técnica. Como o objetivo desses ataques é derrubar um site, muitos internautas acabam percebendo o problema, o que torna o ataque muito mais conhecido do que outros. Sites e serviços de diversos tamanhos, desde indivíduos que fazem alguma transmissão on-line famosa a grandes lojas de comércio eletrônico, viram alvos desses ataques. Quando bem-sucedido, o ataque de negação de serviço tira o conteúdo alvo do ar.

A maioria dos ataques de negação de serviço hoje ocorre de forma distribuída e usam de bem pouca inteligência. De modo geral, os sites caem pela força bruta: são inundados de conexões e dados não solicitados até que a rede fique congestionada e o site não consiga atender seus visitantes reais.

Em uma semana entre o final de fevereiro e o início de março, porém, o recorde de volume desse tipo de ataque foi quebrado duas vezes. No dia 28 de fevereiro, um ataque de 1,35 Tbps (1.350.000 Mbps) foi realizado contra o Github, segundo a Akamai, que fornece um serviço de proteção contra esses ataques. No dia 5 de março, o recorde foi quebrado novamente, com 1,7 Tbps (1.700.000 Mbps) de dados sendo enviados para derrubar um provedor de internet nos Estados Unidos.




Serviços de proteção contra ataques de de negação de serviço filtram os dados recebidos para deixar passar somente solicitações legítimas. Esse processo ocorre em várias partes do mundo para 'desmembrar' os ataques. (Foto: Arte G1)

Apesar do volume, os ataques tiveram pouquíssimo sucesso: o Github ficou apenas alguns minutos fora do ar e o provedor norte-americano nem sequer chegou a ficar inacessível, segundo a Arbor Networks.

Esse dupla de recorde não aconteceu por acaso: são raros momentos em que os ataques de negação de serviço se valeram de uma técnica diferente. Nesse caso, foram ataques refletidos em cima do software memcached.

Ataque refletido e memcached

O ataque refletido é diferente do ataque comum porque o criminoso não utiliza as máquinas que ele controla para atacar o alvo diretamente. Em vez disso, ele envia um pedido de dados para um computador intermediário (a internet funciona com pedidos e respostas). Portanto, esse intermediário, ao receber o pedido do criminoso, ataca o alvo, com sua resposta como "reflexo" da solicitação do criminoso.

Esse "reflexo" é possível porque alguns aplicativos e softwares, que prezam pela agilidade, utilizam o protocolo de comunicação UDP. Como o foco do UDP é velocidade, ele dispensa a verificação de remetente. Assim, se o criminoso envia uma solicitação via UDP e injeta o endereço do alvo no campo de remetente, a resposta a essa solicitação irá para o alvo e não para o sistema do criminoso que de fato originou o pedido.

E há mais um detalhe importante: se o pedido enviado pelo criminoso tiver um tamanho menor do que a resposta enviada pelo intermediário, o ataque não é apenas refletido, mas também é amplificado, porque o criminoso consegue transformar um esforço menor (o pedido). A reflexão confere ao criminoso uma carta na manga para "recrutar" milhares de sistemas para o ataque com quase nenhum esforço.

E onde o memcached entra na história?

O memcached é um programa usado em servidores para armazenar dados na memória RAM. Um site pode se aproveitar do memcached para colocar dados de uso frequente na memória RAM e depois solicitar essas informações durante o processamento das páginas. O internauta nunca vê a ação do memcached (afinal, o programa roda no computador onde está o site, não no computador do visitante), mas o site fica mais rápido por poder acessar dados na memória RAM.

Como o memcached funciona pela rede, sites mais complexos podem utilizar uma mesma fonte de dados de memcached externa, "puxando" dados armazenados na memória RAM de outro computador na rede local, em alta velocidade. Como o memcached tem por objetivo agilizar as coisas, ele usa o UDP.

Porém, o memcached nunca foi feito para ficar exposto à internet. Inclusive, não haveria ganho algum em armazenar algo na memória RAM se o conteúdo tivesse que ser baixado da internet. Só que muitos administradores descuidados deixaram o memcached exposto: no final de fevereiro, a Akamai calculou que 50 mil máquinas tinham o memcached aberto para toda a internet.

Como o memcached é apenas um programa que armazena e recupera dados armazenados na memória RAM, criminosos podem inserir quantidades enormes de dados nesses computadores com memcached abertos e depois pedir os mesmos dados que eles inseriram.




Criminosos podem inserir no memcached a informação que será refletida no ataque, o que permite personalizar o tráfego recebido pelo alvo. Nessa imagem, trecho da inundação de dados extorquindo a vítima com a cobrança de 50 XMR (criptomoeda Monero, cerca de R$ 35 mil) para supostamente parar o ataque. (Foto: Reprodução/Akamai)

Isso confere aos ataques refletidos com memcached um poder de amplificação nunca antes visto -- a resposta refletida pode ser até 500 mil vezes maior que o pedido --, o que levou à quebra dos recordes.

Para frear esses ataques, administradores de sistemas que usam o memcached devem barrar o acesso externo ao programa. Além disso, os provedores de internet podem cooperar com a eliminação de todos os ataques refletidos adotando filtragem para bloquear pacotes de dados saindo de sua rede com remetente de outra rede. Infelizmente, muitos provedores ainda não adotam esse filtro básico.

Ping da morte

Um um dos mais clássicos ataques de negação de serviço foi o chamado "ping da morte". Em sistemas operacionais antigos, era possível enviar um pacote deformado do tipo "ping" (que serve para verificar se um computador está on-line) e esse pacote, por ter um formato imprevisto, fazia o sistema entrar em pane e travar. Bastava reenviar o "ping da morte" após o sistema reiniciar para que o computador ficasse permanentemente inacessível. Por muito tempo, ataques de negação de serviço foram associados ao ping por causa do ping da morte, mas os ataques modernos nada tem a ver com o ping.

Hoje, felizmente, o "ping da morte" é passado. Na ausência de qualquer falha parecidas, os criminosos virtuais recorrem à força bruta: inundam o alvo com tráfego inútil para congestionar a rede e impedir o acesso de quem realmente quer se conectar ao site. Para conseguir acumular tráfego o suficiente para inundar um alvo, os criminosos usam vários computadores para enviar os dados simultaneamente. É daí que temos o "ataque de negação de serviço distribuído" -- ele é "distribuído" porque a origem está "distribuída" entre vários sistemas.

Um protesto na vida real bem próximo ao ataque de negação de serviço distribuído são os abastecimentos simbólicos em postos de gasolina, nos quais motoristas abastecem pequenas quantidades de combustível e interditam o posto, impedindo o acesso de quem realmente quer abastecer (https://g1.globo.com/mg/triangulo-mineiro/noticia/em-protesto-contra-preco-da-gasolina-motoristas-fazem-abastecimento-simbolico-em-uberlandia.ghtml).

O ataque de negação de serviço on-line tem quase o mesmo nível de sofisticação técnica do que esses protestos: nenhuma, porque o conceito de manter um sistema ocupado é muito simples. A parte mais interessante costuma ser a forma como os criminosos conseguiram obter o controle dos computadores usados no ataque: podem ser redes-zumbi criadas por vírus, produtos inseguros da "internet das coisas" ou servidores comprometidos com falhas em software empresarial.

O ataque refletido adiciona mais uma camada de sofisticação técnica a esses ataques, mas é quase sempre transitório: o mecanismo de reflexão tende a ser excessivamente abusado por criminosos, de modo a criar problemas não só para o alvo atacado, mas também para o intermediário refletor. Isso leva o intermediário a averiguar a causa do problema e fechar a vulnerabilidade.