Problema crítico de segurança do DNS e a falta de resposta da Apple

Colaboração especial por Ricardo Rocha.

Há duas semanas, foi divulgada uma falha crítica de segurança no serviço de DNS que, sem ser alarmista, tem o potencial de colocar em risco cada usuário da internet. Desta vez, a falha não foi descoberta nesse ou naquele produto ou sistema operacional: é o próprio protocolo de DNS que possui uma falha e que afeta todo cliente e servidor de DNS, em qualquer sistema operacional.

A solução temporária para o problema foi modificar softwares de maneira a tornar a exploração da falha mais difícil. Para entender o problema, é necessário entender o que é e como funciona o serviço de DNS. Se você já sabe o que é o DNS, pule os primeiros parágrafos deste artigo.

O DNS (Domain Name Server) é um serviço que converte (ou resolve) nomes de máquinas em endereços IP. Por exemplo, quando digitamos no navegador o endereço http://www.macmagazine.com.br, a primeira tarefa que ele executa é solicitar a conversão deste nome para o respectivo endereço IP (no caso, 72.47.239.48). Sem este endereço IP, o navegador ou qualquer software que acessa a internet não pode fazer nada.

A conversão é solicitada ao cliente de DNS local da máquina, que repassa o pedido ao servidor de DNS para o qual a máquina está configurada. O endereço do servidor de DNS é configurado na máquina no mesmo momento em que a estação obtém um endereço IP (além de outras informações) do provedor, considerando um acesso residencial tradicional. Para saber o servidor de DNS no Mac OS X, basta vá nas Preferências do Sistema » Rede » Avançado e clique na aba DNS.

A internet mantém servidores de DNS distribuídos, responsáveis por fazer esses mapeamentos de nomes em endereços. Cada domínio ou sub-domínio na internet mantém o seu próprio servidor e ela mantém um conjunto de servidores-raízes, responsáveis por fazer a primeira resolução de domínios. Uma resolução deve passar por todos os servidores, desde o de nível mais alto, até o mais específico.

Para simplificar a discussão: quando um servidor recebe a resposta de uma resolução de nome, para manter as próximas resoluções mais eficientes, ele mantém por um tempo na memória (cache) o endereço IP obtido. Assim, na próxima resolução basta acessar a memória, ao invés de repassar novamente o pedido aos vários servidores de DNS. O servidor de DNS do provedor de acesso para o qual nossa máquina está configurada mantém na memória cache os IP de todas as resoluções solicitadas pelos clientes do provedor.

A própria máquina cliente mantém um cache local das resoluções efetuadas, de maneira a solicitar ao servidor apenas quando precisa resolver um nome diferente. No Mac OS X, você pode verificar as entradas que estão no cache local digitando o seguinte comando no Terminal:

dscacheutil -cachedump -entries host

Não é difícil perceber que o funcionamento do DNS é crítico para a internet. Só para você ter uma idéia, no recente apagão da Telefônica, houve relatos de usuários que conseguiram acessar a internet normalmente apenas modificando o endereço do servidor de DNS para um servidor externo à rede da Telefônica.

Há uma técnica conhecida há anos para enganar servidores de DNS conhecida por “envenenamento de cache”. Nesta técnica, um usuário mal intencionado envia uma resposta a um pedido de resolução de nome para um servidor de DNS antes do servidor correto, enganando quem fez o pedido que coloca a resposta no seu cache. Por exemplo, o usuário mal intencionado poderia colocar o endereço de uma máquina que ele controla como resultado da resolução do endereço de um banco. Neste caso, quem está acessando o banco não teria idéia de que está acessando uma outra máquina. Não é difícil perceber o tamanho do estrago que isso pode causar!

O que há de novidade nisso tudo é que um pesquisador chamado Dan Kaminsky descobriu que, devido a uma falha no protocolo de DNS, é possível realizar o envenenamento de cache em poucos segundos em virtualmente qualquer servidor de DNS, como o BIND (usado no Mac OS X).

Essa descoberta foi alarmante, sendo discutida secretamente entre as várias empresas que produziam servidores e clientes de DNS. Depois de seis meses, essas empresas lançaram patches ao mesmo tempo para todos os seus produtos, em uma iniciativa conjunta inédita, até então. Só foi aí que o problema se tornou público, embora ninguém tivesse revelado como explorar a falha (e enganar os servidores). O segredo durou 13 dias: a informação apareceu em um blog e na última quinta (dia 24) já havia pelo menos duas ferramentas cracker prontas para explorar a falha.

E qual a relação disso tudo com a Apple?, você me pergunta.

Apesar dos seis meses em que as empresas — incluindo a Apple — conheciam a falha, do lançamento no dia 08 de julho de uma correção em conjunto de todos as empresas e de já existirem, desde o último dia 24, ferramentas prontas para explorá-la, até agora a Apple não lançou uma correção para o Mac OS X! E o pior de tudo: o BIND já foi corrigido desde o dia 08, também. Todas as versões do Mac OS X estão vulneráveis, embora os alvos mais interessantes para os crackers sejam os servidores baseados em Mac OS X.

Enquanto a Apple não solta uma atualização, não há muito o que fazer nas máquinas clientes Mac OS X. Entretanto, é necessário garantir que o servidor de DNS para o qual a máquina está configurada não é um servidor Mac OS X Server. Se for este o caso, pode-se configurar a máquina para utilizar outro servidor de DNS primário, sendo uma opção segura os servidores do OpenDNS. Os IPs do OpenDNS são 208.67.222.222 e 208.67.220.220.

Para quem possui máquinas Mac OS X Server e que atuam como servidores de DNS de algum domínio, então é necessário urgentemente instalar uma versão mais recente do BIND (9.0.5-P1). Este processo terá que ser manual, talvez envolva a compilação do código fonte do BIND e irá sobrescrever a configuração padrão do SO. Portanto, cuidado! Para quem usa o Mac Ports, a instalação se torna bem mais fácil e a versão mais recente do BIND já está disponível.

Agora, nem tudo são flores para quem não usa Mac OS X. De nada adianta ter o SO atualizado e com o problema corrigido se o servidor de DNS do seu provedor de acesso ou domínio não instalou a atualização. E, pelos comentários recentes, a taxa de atualização dos servidores tem sido mais lenta do que esperado. Em caso de dúvida, pode-se utilizar também o OpenDNS.

Uma discussão aprofundada sobre este problema e a falta de resposta da Apple pode ser encontrada aqui. Minha última recomendação é torcer para que a Apple faça o dever de casa e lance uma atualização ainda nesta semana! Run, Forrest, run!

Posts relacionados

Comentários