Porque o DNS está quebrado, em linguagem simples

Post original: Why the DNS is broken, in plain language
(Kim Davies, no Blog da Icann)

Na reunião da ICANN no Egito na semana passada, tive a oportunidade de tentar explicar a várias audiências não técnicas a razão pela qual o DNS (Domain Name System) é vulnerável a ataques, e porque isto é um tema importante, sem que seja necessário um diploma de ciência da computação para compreendê-lo. Aqui está o resumo. Como funciona o DNS?

O DNS pode ser considerado como um sistema questão-e-resposta. Quando você digita um endereço como “icann.org” em um navegador da web, seu computador precisa transformar isso em um endereço numérico do computador que hospeda o site. Para fazer isso, ele envia uma pergunta pela Internet para um servidor DNS “Onde está icann.org?” O servidor DNS envia de volta uma resposta, “O endereço é 192.0.2.0″.

Operação t?pica do DNS

Como você pode atacar o DNS?

Vamos dizer que eu quero executar um ataque a esta troca de pergunta e resposta, a fim de convencer o computador a ir para o endereço errado. Quando o computador que eu desejo atacar faz uma pergunta, meu objetivo é fornecer uma resposta falsa de volta para este computador mais rápido do que o verdadeiro servidor possa retornar com a resposta. Ao obter a minha resposta forjada mais rápido, o computador irá continuar utilizando-a, em vez da resposta oficial.

Execução de um ataque de spoofing

Então, se eu devolver um endereço falso a um computador, posso fazer com que esse computador vá para um endereço diferente do que o que pretendia. Por exemplo, no endereço forjado eu poderia ter criado um falso site destinado a tirar de alguém dados sensíveis, como uma réplica de um sítio de Internet baking.

Se eu conseguir sucesso em atacar um computador, isto poderia ser um problema?

Um ataque bem-sucedido em um computador de forma isolada pode ser problemático para o usuário desse computador, mas não é interessante para um invasor obter êxito contra apenas uma pessoa. Mas para nosso azer, um ataque com êxito pode muito facilmente ter consequências mais vastas. Deixe-me explicar.

O DNS se torna muito mais eficaz através da utilização de “caching” para os nomes de servidores. Estes servidores de nomes ficam nos provedores de acesso (ISPs), ou em redes corporativas, e realizam consultas DNS em nome de clientes. Os servidores então armazenam as respostas que recebem em um cache, para que as pesquisas futuras para o mesmo domínio que não tenham que ser realizadas novamente – apenas se lembram da resposta anterior.

Isto significa que se você executar um ataque e ele ficar armazenado em um cache, ele pode realmente impactar muitas pessoas, muitas vezes, porque essa resposta será redistribuída para todo mundo que usa esse mesmo servidor de cache.

Esta é a razão pela qual este tipo de ataque é geralmente chamado de “envenenamento de cache”, uma vez que, por envenenamento do cache com os dados errados, ele cria um problema muito mais grave.

Então é só enviar de volta uma resposta mais rápida, e pronto?

Não é tão simples quanto apenas enviar uma resposta mais rápida de volta para um computador. Você também tem que adivinhar corretamente determinados atributos que correspondem a resposta à pergunta.  Por exemplo, a resposta tem de voltar para a mesmo computador que originou a questão. Você também precisa coincidir com a questão que estava sendo solicitada na sua resposta.

Atributos que precisa ser igual

É simples, no entanto, adivinhar a maioria destes atributos. Como você sabe o computador que você está tentando atacar, você não precisa adivinhar isso. Como você sabe qual domínio que você está tentando imitar, este atributo também é um dado. Convencionalmente, existem apenas duas variáveis. One variable is you need to guess which server the answer is coming from. Uma variável é que você precisa adivinhar de qual servidor a resposta estará vindo. Um domínio comum da Internet tem cerca de dois ou três servidores de nomes, dos quais apenas um irá responder a qualquer pergunta realizada. Portanto você tem uma chance em três de adivinhar corretamente. A segunda variável é um número de referência único (formalmente, um “ID da operação”), que tem cerca de 65000 possibilidades. Portanto sobre você tem uma chance em 65000 de adivinhar esta variável corretamente.

No início deste ano, o pesquisador de segurança Dan Kaminsky descobriu que é devastadoramente simples  esgotar todas essas possibilidades em muito pouco tempo através da realização de um ataque sob certa maneira. Neste caso, o que significa pouco tempo? Bem, o pesquisador britânico especialista em DNS, John Dickinson, fez alguns testes e constatou que, em média, ele poderia atacar com sucesso um servidor em apenas 1,3 segundos.

Como resolver o problema?

A triste notícia é que não existe uma solução real, no que concerce ao DNS como o conhecemos. Não é como uma falha de segurança em um pedaço de software que pode ser reparada com uma atualização. Esta é uma falha na arquitetura do DNS enquanto protocolo. Existem patches de software para o DNS, mas estes apenas tentam tornar mais difícil a execução de um ataque, mas não resolvem o problema.

Algumas das abordagens de curto prazo para tornar os ataques mais difíceis são as seguintes:

  1. Randomise a “porta fonte” Um dos atributos incluídos no pacote que um atacante tem de adivinhar é o chamado número da porta. Por razões arquitetônicas, esta precisa ser a porta 53 no caminho para o servidor – essa é a forma como o servidor percebe tratar-se de uma consulta DNS, por oposição a um tipo diferente de pesquisa. No entanto, o número da porta que uma resposta retorna ao servidor não tem de ser a porta 53. Ao randomizar isto, tornamos mais difícil para um atacante adivinhar. Much of the software updates to this problem in mid-2008 related to adding source port randomisation. Grande parte das atualizações de software para este problema desenvolvidas em  2008 adicionam aleatorização na porta de retorno.
  2. Bloqueio ao serviço de nome recursivo aberto. Se você fornece o acesso a um servidor de cache de nomes para toda a Internet, então é muito fácil para toda a Internet executar um ataque contra o seu servidor. Se você limitar o acesso a apenas aqueles que precisam dela (ou seja, sua rede local), então você reduz esse risco.
  3. Experimentação com capitalização de domínios. Domínios, na prática, não são sensíveis à capitalização – se você digitar ICANN.ORG ou icann.org, significa a mesma coisa. No entanto, no interior do próprio protocolo DNS, a transmissão de dados entre computadores codificados, de fato, é sensível à capitalização. Essa propriedade pode ser usada para acrescentar mais alguma aleatoriedade para transmissões. Se o meu computador envia uma questão perguntando sobre “iCaNn.OrG” e recebe de volta uma resposta para “icann.org”, pode deitá-la fora como falsa. Esta abordagem ainda é experimental e está sendo discutida.

O efeito dessas tentativas de reduzir o risco de ataques envolvem principalmente a adição de mais aleatoriedade para o atacante adivinhar. Estas abordagens aproximadamente dobram o número de “bits” de aleatoriedade. Para ser claro, porém, elas apenas tornam um ataque mais difícil, mas o ataque permanece viável. Além disso, sabemos que ambas as velocidades de rede, e de processamento do computador, tornam-se mais e mais rápidas a cada ano. Estes são os dois elementos que retardam a possibilidade do ataque. Portanto, sabemos que os ataques bem sucedidos irão se tornar mais fáceis no futuro.

Se não há nenhuma solução a curto prazo, qual é a solução a longo prazo?

Embora o DNS em si não possa ser devidamente corrigido em relação a este problema de segurança, um novo protocolo que complementa o DNS, chamado DNSSEC, faz. O DNSSEC utiliza um sistema de certificação para mostrar que uma resposta do DNS não foi modificado. Se alguém tenta executar um ataque, o certificado não irá validar, e a má resposta será jogada fora.

O DNSSEC é difícil de implantar. Exige upgrades nos servidores de DNS, e muda a forma como os detentores de nomes de domínio gerem seus servidores de nome, adicionando complexidades extra. No entanto o conhecimento de que, sem o DNSSEC, ataques no DNS são tão simples de executar, tem gerado um consenso crescente de que a dor para implanta-lo é menor que a dor de operar um DNS no qual você já não pode confiar.

Mais informações

Você pode visualizar os slides da apresentação realizada no Cairo.

Tradução: José Murilo Junior

José Murilo em Icann, seguranca


Nenhum Comentário Publicado


Deixe seu Comentário







Voltar ao topo