NSA e o monitoramento dos EUA, parte 4: resolução de nomes

Quando falei de criptografia na semana passada, a conclusão foi de que as técnicas de criptografia, quando bem utilizadas, são bastante efetivas e ainda hoje atrapalham bastante a NSA, e que na maior parte das vezes o trabalho deles não é de “quebrar” a criptografia, mas simplesmente utilizar outros tipos de ataque para identificar as chaves criptográficas e assim conseguir acessar os dados. A forma mais poderosa de ataque à criptografia é o chamado “man in the middle” (MITM) – ou homem no meio – na realidade não implica a quebra da criptografia, mas sim em fazer-se passar pelo site que o usuário pretendia acessar.

Então hoje vamos entender como funciona esse tipo de ataque que possui implicações muito profundas na estrutura da Internet, pois afeta um de seus serviços mais básicos, que é a resolução de nomes. Mas para isso, mais uma vez vamos precisar entender melhor como funciona a grande rede, e por isso esse artigo será um pouco mais técnico e complexo. Peço a sua paciência para isso, pois é a única forma de você entender o funcionamento e o impacto desse ataque.

Vimos anteriormente que cada equipamento conectado à Internet possui um endereço IP, composto por uma série de quatro números separados por ponto. Porém, não é dessa forma que acessamos as páginas, mas sim pelo seu nome, mais fácil de escrever e memorizar para seres humanos. Então cada equipamento conectado possui pelo menos um endereço IP e um nome para você digitar no seu browser.

Nome da página do Google: www.google.com.br

Endereço IP: 173.194.118.115

Quando você informa o nome no seu browser, o que ele faz é acionar o serviço de resolução de nomes, chamado DNS (Domain Name System), que pesquisa o nome digitado e retorna o endereço IP correspondente. Então o browser executa o comando GET informando o endereço IP do site que deve ser acessado, e apresenta para você o conteúdo retornado. Um teste interessante é digitar o endereço IP direto no browser: http://173.194.118.115. Você vai ver que a página inicial é retornada da mesma forma.

O DNS é um serviço de resolução de nomes hierárquico, então o nome do site possui essa mesma estrutura hierárquica, no formato:  <servidor>.<domínio>.<tipo>.<pais>

Onde:

  • País: é o país onde o site está hospedado. O valor default é “us”, então se você não digitar o país, ele irá procurar como US.
  • Tipo: indica o tipo de serviço oferecido pelo site. O mais comum é “com”, mas existem inúmeros outros, como “mil” – militar, “edu” – educacional, “gov” – governos, “org” – organizações civis, “pes” – pessoal, etc. Quem define as regras para a criação de cada tipo é o país onde o endereço é registrado. Como não podem existir dois sites com o mesmo endereço, existe sempre um órgão para que você faça o registro, que no caso do Brasil é o NIC.br, ou Núcleo de Informação e Coordenação do Ponto BR, que possui uma área específica para o registro de domínios, no site http://registro.br.
  • Domínio: normalmente indica o nome da organização, produto ou serviço que está sendo registrado. Ao fazer o registro, você precisa enviar a documentação relativa à empresa, e se você pedir o registro de um domínio muito diferente do nome da empresa, vai precisar justificar o porquê do domínio ou sua solicitação será recusada. Isso é feito para evitar os problemas que existiam no passado, onde empresas registravam centenas de nomes de empresas e produtos do mercado para depois tentar vender os nomes às empresas reais.
  • Servidor: esta parte é você que define, e pode ter qualquer valor, desde que sem caracteres especiais. Uma curiosidade é que o nome “www” não significa nada, sendo colocado até hoje por alguns sites somente por tradição. Na verdade, o que indica o tipo de serviço é o protocolo, que o browser coloca antes do nome de site: “http://”.

Os servidores DNS não existem somente na Internet. Toda rede local precisa ter pelo menos um, e o endereço IP dele precisa ser informado ao seu computador para que ele possa resolver os nomes. Mesmo na sua casa, o seu roteador ADSL é configurado para apontar para o servidor DNS da operadora que fornece o serviço, e o próprio roteador também funciona como um servidor DNS, ou seja, seu computador pede a ele para resolver um nome, ele encaminha a solicitação para o servidor da operadora e quando recebe a resposta, envia para você. Além disso todo servidor DNS possui um cache, ou memória, onde ele anota por algum tempo os nomes e endereços correspondentes. Então se você pedir o mesmo nome, ao invés de perder tempo solicitando ao próximo servidor ele responde o endereço que está no cache.

Sempre que um servidor DNS é instalado (seja no provedor ou na sua empresa), ele possui uma lista de servidores raiz da Internet, que é imutável, contendo os seguintes 13 endereços abaixo, com sua localização:

 

Mas somente com treze servidores raiz, não daria para atender a toda a Internet, então foi utilizada um recurso chamado anycast, que permite que inúmeros servidores raiz sejam criados em diferentes países, porém utilizando os mesmos endereços IP, e replicando o conteúdo do servidor original; em cada país existe um PTT (Ponto de Troca de Tráfego), onde seu pacote é encaminhado para o servidor raiz mais próximo de acordo com o endereço IP solicitado, de preferência sem precisar que o tráfego saia do país. Hoje temos no Brasil réplicas do servidores F, I, J e L, sendo o L o de melhor performance.

Mapa dos servidores DNS espalhados pelo mundo

Outro ponto importante é que existem dois tipos de solicitação para o DNS: recursiva e interativa. A recursiva significa “se vire e me informe o endereço”, então o servidor precisa descobrir o endereço final e devolvê-lo. A interativa significa “me informe o endereço ou onde eu posso encontrá-lo”, então o servidor pode responder com o endereço final, ou com o endereço de outro servidor DNS onde a pesquisa deve ser feita. Geralmente o servidor DNS mais próximo de você (o da sua empresa ou seu roteador ADSL) trabalha de forma recursiva, e os outros são interativos.

Então quando um servidor DNS recebe uma solicitação de endereço , ele primeiro pesquisa no seu cache para ver se já “conhece” o endereço; se não, procura no seu próprio banco de dados; se não encontrar consulta de forma interativa um dos servidores raiz (2); o servidor raiz, ao receber a consulta, verifica o pais solicitado e responde com o endereço IP do servidor de nível mais alto daquele país (3); então seu servidor DNS irá consultar esse servidor (4), e receberá o endereço do servidor DNS do seu domínio (5); ao consultar esse último (6), será finalmente retornado o endereço IP do servidor solicitado (7), que será retornado (8) para que o seu browser possa acessar a página.

Por isso dizemos que o serviço DNS é hierárquico, pois a consulta é feita varrendo o nome solicitado de trás para frente, consultando sempre o servidor retornado até chegar ao endereço final. Lembrando que em cada etapa, as respostas são guardadas em cache durante algum tempo, então na segunda consulta a um nome com o domínio “.br”, não é mais necessário consultar o servidor raiz do Brasil, pois ele já tem o endereço na memória. Este exemplo é um caso simples, pois podem existir outros servidores intermediários, dependendo do pais, mas o processo será sempre o mesmo somente com mais etapas.

Agora que entendemos como funciona a resolução de nomes, vamos lembrar como funciona o TLS/SSL: ao se conectar no servidor solicitado utilizando o protocolo HTTPS, seu browser recebe o certificado público do servidor, e cria um canal com ele utilizando criptografia assimétrica, e recebe por esse canal uma chave de criptografia simétrica, que passa a utilizar para criptografar a sessão até que você feche o browser.

Exatamente neste ponto é que entra o ataque “man in the middle” (MITM). Você digita o nome do site, e acredita que o DNS retornou para você o endereço correto, mas a única verificação que você pode fazer é olhar o nome que está no certificado digital e verificar se realmente é o da empresa/site que você queria acessar. Então se alguém que estiver monitorando a sua rede conseguir enviar para seu browser um endereço IP diferente, e nesse endereço tiver um serviço HTTPS que retorne um certificado com o nome que você está esperando, você vai acreditar que está conectado no site desejado. Por sua vez, esse serviço HTTPS falso pode receber sua solicitação e encaminhá-la para o endereço correto, e tudo o que ele retornar será encaminhado para você, funcionando como um outro serviço comum na internet, que é o “proxy transparente”. Para você, vai parecer que está tudo normal, pois você envia e recebe todas as informações como se estivesse acessando o site desejado, mas na verdade existem duas sessões de criptografia diferentes: uma do seu browser para o site do atacante, e outra do site do atacante para o site correto. Isso significa que tudo o que você enviar, incluindo senhas, números de cartão de crédito e dados pessoais, estão disponíveis para o atacante.

Essa é um ataque já bastante conhecido e utilizado por hackers explorando uma falha nos servidores DNS, que permitia que respostas de consultas não solicitadas fossem consideradas como válidas e guardadas no cache. Então um hacker preparava um certificado falso e um serviço proxy adequado em um servidor seu, e começava a mandar respostas DNS falsas para todos os endereços válidos da Internet. Ao receber a resposta, os servidores não verificavam se tinham feito a consulta, e simplesmente armazenavam o endereço no cache. Se você tentasse acessar o site alvo enquanto o endereço estivesse no cache, seria encaminhado para o site falso, habilitando o ataque. Esse ataque foi bastante reduzido simplesmente alterando os servidores para não aceitarem respostas não solicitadas, mas muitos serviços ainda rodam com versões antigas que possuem essa falha.

Uma forma de identificar esse tipo de ataque é pelo certificado, pois como o hacker não vai conseguir obter um certificado emitido por uma certificadora digital confiável, normalmente ele vai criar um certificado auto assinado (self-signed), e o seu browser vai gerar um alerta informando o problema. Porém, uma boa parte das pessoas ignora esse alerta e continua acessando. Então essa é uma recomendação expressa: empresas comerciais sempre vão possuir um certificado oficial, assinado por um entidade confiável, então NUNCA acesse um site que utilize um certificado auto assinado, a não ser que seja um site pessoal ou de uma empresa pequena e você tenha certeza absoluta de que o endereço é realmente aquele.

Mas então o que a NSA tem a ver com esse tipo de ataque? Vimos anteriormente que eles monitoram todo o tráfego dos cabos submarinos, mas assumimos a premissa de que estão somente capturando e armazenando os dados. Mas e se ao receber uma consulta de nome para um servidor (2) eles interceptarem a resposta e alterarem o endereço retornado (3) para um servidor deles? Do ponto de vista do seu servidor, a resposta é absolutamente válida, pois ele realmente fez a consulta. Então ele vai armazenar o endereço e continuar processando normalmente, devolvendo para o seu browser (4) o endereço que a NSA responder. Ao receber o endereço, seu browser vai solicitar a página que você quer (5). Nesse ponto, o servidor deles pode acessar o site original (6), criando um canal TLS/SSL, obter os dados do certificado, e emitir um certificado digital (7) com os mesmos dados porém assinado por uma entidade certificadora confiável (9) para o seu browser. A partir desse ponto, o servidor da NSA é um proxy transparente, que encaminha tudo o que você enviar (6) para o servidor original, e as respostas para você (9), e tem acesso a tudo que você enviar como se não existisse criptografia. O novo certificado digital gerado por eles pode então ser armazenado em bancos de dados (7), para ser utilizado sempre que qualquer usuário acessar aquele site pelo proxy, e a única diferença perceptível para o verdadeiro é o número de série e a cadeia de certificação do certificado. Mas quem anota esses dados dos sites que acessa para conferir depois?

Na realidade eu não faço ideia se a NSA está usando esse tipo de ataque, mas se não está, não consegui encontrar nenhum impedimento técnico para que seja executado. Eles ainda poderiam se dar ao luxo de selecionar que sites serão monitorados. O fato é que isso pode colocar abaixo toda a infraestrutura de segurança existente hoje na Internet, dependendo somente da resolução de nomes passar por território americano ou de aliados, o que não é difícil de acontecer. Porém, pesquisando os documentos publicado por Snowden, encontrei o slide abaixo, que mostra um dos programa voltados a captura de dados criptografados. Não existe nenhuma menção no documento ao serviço DNS, mas fica clara a consulta a um banco de dados de certificados para quebrar a criptografia do canal.

Outro ponto relevante com relação a esse tipo de ataque é que o site não precisa estar localizado nos EUA. Só é necessário que a resolução de nomes passe pelos cabos submarinos, para que o endereço IP possa ser alterado e qualquer site no mundo seja monitorado, mesmo utilizando os melhores padrões disponíveis de criptografia.

A única forma efetiva de evitar esse tipo de ataque é utilizar DNSSEC, que é um novo processo de resolução de nomes utilizando mensagens com assinatura digital, que permite que ao receber uma resposta um servidor DNS possa validar se foi realmente emitida pelo servidor original e que não foi alterada no caminho. Porém a implementação de DNSSEC está lenta ao redor do mundo, então ainda vai levar algum tempo até que essa vulnerabilidade seja resolvida. Outra ação paliativa eu já tomei no meu servidor DNS, que foi remover os servidores raiz que não possuem cópias no Brasil, deixando somente o F, I, J e L, reduzindo assim a possibilidade de resolução de nomes no exterior, pelo menos para sites brasileiros.

Quando comecei este artigo, tinha uma noção razoável da possibilidade de ataques ao DNS e por isso pesquisei mais na esperança de que algum especialista me dissesse que estou errado e o ataque não pode ser feito. Porém até o momento, não consegui refutar essa hipótese, e o pior de tudo é que não tenho muita experiência com essa tecnologia. Se é possível fazer e os especialistas na NSA são muito melhores do que eu, acho improvável que eles não tenham percebido e utilizado essa falha. Na área de segurança, a premissa normal é que se uma vulnerabilidade existe, ela está sendo explorada, por isso estou correndo para implementar DNSSEC em meu servidor. Tradicionalmente, o DNS é considerado pelas empresas como um serviço simples e fácil de instalar, configurar e manter, e não é visto como um risco à segurança. Essa visão precisa ser mudada, pois com a revelação do monitoramento da NSA, mesmo que isso não esteja sendo explorado agora, poderá ser no futuro, então esse serviço precisa ser melhor planejado e implementado nas empresas e principalmente nos provedores de acesso.

No próximo artigo vamos falar de sistemas operacionais, e da possibilidade de existirem “portas de acesso” neles para que a NSA acesse o seu computador. O próximo artigo vai ser bem menor e menos técnico, eu prometo.

Referências:

http://registro.br/suporte/tutoriais/dnssec.html

https://pt.wikipedia.org/wiki/Dns

http://www.infowester.com/dns.php

http://www.ptt.br/

http://news.bbc.co.uk/local/bristol/hi/people_and_places/newsid_8855000/8855460.stm

1 Comentário

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

  1. Excelente artigo! Meus

    Excelente artigo! Meus parabéns, estou acompanhando semanalmente as suas publicações e vejo uma clareza muito boa nas suas explicações. Muito bom!

Você pode fazer o Jornal GGN ser cada vez melhor.

Apoie e faça parte desta caminhada para que ele se torne um veículo cada vez mais respeitado e forte.

Seja um apoiador