Internet
CarlosUm estudante quer fazer uma pesquisa na Internet. A maneira mais fácil é acessar algum
site de buscas e realizar sua pesquisa. Então, o estudante digita o nome do site em seu navegador,
por exemplo http://www.google.com.br, e assim chega até o site de buscas. Este mesmo estudante está
acessando a Internet através de uma rede de uma universidade, e deseja trocar arquivos com seu
colega que está em um outro PC. Basta digitar o nome do PC com o qual ele deseja se conectar,
através de um serviço de FTP (File Transfer Protocol), por exemplo, e iniciar a transferência do
arquivo.
É bem simples assim acessar algum site ou máquina remota a partir de uma máquina local. Basta
digitar o nome do destino, como algum site da Web ou um host em alguma rede para realizar
conexões entre dois computadores. Mas o que acontece por trás dessa facilidade é um processo
bem mais complexo, que será explicado ao longo deste trabalho.
“Em uma rede baseada no protocolo TCP/IP, cada host é identificado por um endereço numérico
de 32 bits, que são separados em quatro octetos e cada octeto é representado normalmente em
números decimais. Os quatro números são separados por um caractere ponto (“.”). Quatro
números decimais são bem mais fáceis de lembrar do que trinta e dois zeros e uns, como números
de telefones, e fica muito difícil para uma pessoa lembrar de muitos endereços IP´s sem precisar
de algum diretório de assistência. Esse diretório nomeia nomes de hosts em endereços IP [1]”.
Na verdade, ao acessar uma página na Internet ou um sistema remoto,a aplicação que fez a
conexão inicial precisa conhecer o endereço IP da página na Internet ou do sistema de destino,
pois as informações serão enviadas em pacotes IP, que tem um campo de origem e destino que
devem ser números IP e não "nomes". Acontece que a aplicação que faz essa requisição utiliza
um sistema que associa o endereço IP a um nome, tornando o acesso à página na Internet possível
através do nome dela e não do endereço IP. Este processo chama-se resolução de nomes, e é
realizado por um sistema chamado Domain Name System (Sistema de Nomes de Domínio), ou
DNS.
“O DNS, ou Sistema de Nomes de Domínio, é uma das bases de sustentação da teia que compõe
a Internet moderna. Ele realiza uma função simples e direta: mapear nomes para endereços IP e
vice-versa. Quando o sistema não está funcionando, as conseqüências são graves e generalizadas
Alguns dos problemas causados pelas falhas do DNS podem levar à poluição do cache do
servidor DNS, redirecionando as consultas feitas ao servidor DNS (cache poisoning), à
indisponibilidade do servidor DNS, causadas por várias consultas recursivas (server
compromising) e à falsificação do IP na resolução de nomes DNS (DNS spoofing) .
Estes problemas podem ser causados por intrusos, que se aproveitam das falhas e
vulnerabilidades do sistema para enganar as pessoas ou para parar o funcionamento do sistema.
Os problemas do DNS
O sistema de nomes de domínio é responsável por traduzir diversos nomes de domínios
existentes para seus respectivos endereços IP, atendendo a requisições de clientes DNS
(resolvers) na porta 53, utilizando, para estas comunicações, tanto o protocolo UDP (User
Datagram Protocol) quanto o TCP (Transmission Control Protocol). As pesquisas DNS são
manipuladas sobre o protocolo UDP, enquanto as transferências de zonas utilizam o protocolo
TCP, ambos na porta 53.
Por seu uso ser amplamente utilizado e necessário na Internet, os administradores de rede não
podem bloquear, em seus mecanismos de defesa, como Firewalls, a passagem de pacotes com
destino a porta 53.
A classificação dos problemas do DNS não é uniforme, pois é divergente entre vários autores
quanto à classificação e terminologia. A seguir será feita uma compilação da literatura,
abordando alguns dos principais problemas do DNS.
O problema do protocolo UDP
Uma das principais razões que causam a insegurança do DNS é o uso do protocolo UDP
como protocolo de transporte[38]. Ao realizar uma consulta, utilizando o protocolo UDP, o
cliente escolhe um número de porta aleatório e envia um pacote destinado à porta 53 do servidor
DNS. O servidor, ao receber a requisição, responde com um ou mais pacotes para a porta de
origem da máquina do cliente. São características do protocolo UDP:
não orientado à conexão, ou seja, não garante a entrega do pacote ao destino e não
necessita estabelecer, gerenciar e fechar conexões, tendo apenas que transmitir os dados;
não utiliza mecanismos de reconhecimento para assegurar que as mensagens transmitidas
cheguem ao seu destino;
não ordena as mensagens que chegam;
não provê meios para controlar a taxa com que as informações fluem entre as máquinas.
Todas estas características do protocolo UDP na pesquisa DNS significam que o cliente não pode
garantir que a resposta enviada pelo servidor à sua consulta seja necessariamente respondida pelo
servidor ao qual foi enviada a consulta.
Interceptação de pacotes
Por todos os métodos existentes de captura de pacotes, este tipo de ataque é um dos mais
comuns contra o DNS. Capturando um pacote, o atacante pode simplesmente modificar os dados
da resposta de uma consulta a um servidor DNS e redirecionar o tráfego para um local à sua
escolha.
Este tipo de ataque torna-se relativamente simples pelo próprio comportamento do DNS e seu
protocolo UDP: o comportamento do DNS ao ser consultado é enviar respostas às consultas ou
encaminhá-las, utilizando um pacote UDP não assinado e não criptografado. Se um atacante
conseguir capturar uma consulta a um servidor DNS e injetar uma resposta do tipo referral2, pode
fazer com que o cliente que originou a consulta acredite que o atacante possui o servidor que tem
autoridade para responder à sua consulta, já que o protocolo UDP não realiza nenhum tipo de
verificação na resposta enviada pelo servidor.
Um exemplo deste tipo de ataque é o chamado Man-in-the-Middle, onde um atacante tenta
interceptar uma comunicação entre duas partes. Um usuário tenta acessar um site de e-commerce
para realizar uma compra. Ao clicar em um link onde seja necessário inserir dados financeiros, o
usuário é redirecionado para um outro site onde o atacante captura as informações fornecidas
pelo usuário. Após isso, o usuário é redirecionado novamente para o site original e o atacante
consegue os dados desejados.
Outro tipo de ataque que pode ser aplicado utilizando a interceptação de pacotes é quando o
atacante utiliza um servidor DNS e faz com que ele se passe por um servidor confiável (Trusted
Server), no qual os clientes enviarão consultas e receberão respostas falsas.
Este tipo de vulnerabilidade aplica-se à comunicação entre cliente-servidor, levando a ataques
do tipo Cache Poisoning, DoS e DNS Spoofing.
Transferência de zonas e atualizações dinâmicas
O DNS armazena suas informações em uma tabela, contendo dados que relacionam
nomes de máquinas e endereços (registros do tipo A), apelidos para essas máquinas (registros do
tipo CNAME), máquinas responsáveis por receber e-mails do domínio (registros do tipo MX),
entre outros dados que podem revelar informações sobre a rede ou domínio para qual o servidor é
autoridade. Esta tabela é chamada de arquivo de zona.
A transferência de zonas entre servidores ocorre quando um servidor consultado não tem
autoridade para responder a esta consulta e a encaminha para outro servidor DNS, e tem por
objetivo a replicação das informações de um servidor DNS primário para um ou mais servidores
DNS secundários.
Em uma transferência de zonas, um invasor pode ter acesso não autorizado às informações
contidas na troca dos dados entre os servidores, e até seqüestrar uma zona inteira, redirecionando
todo o tráfego enviado ao servidor do domínio seqüestrado e respondendo ao cliente com
respostas falsas. Este ataque é conhecido como DNS Hijacking, e a vulnerabilidade acontece na
atualização entre servidores.
Uma atualização dinâmica permite que clientes DNS registrem e atualizem dinamicamente seus
registros de recursos em um servidor DNS sempre que ocorrerem alterações. Isso reduz a
necessidade de administração manual de registros de zona, especialmente para clientes que se
movem ou alteram suas localizações com freqüência e usam DHCP para obter um endereço
IP.
O protocolo de atualização dinâmica do DNS provê mecanismos para controlar quais sistemas
são permitidos para atualizar dinamicamente o servidor primário. Segundo a RFC 2136, um
ataque do tipo DoS pode ser enviado por um remetente de uma atualização com o envio de seções
TCP simultâneas contendo atualizações que o servidor master primário irá recusar devido a
problemas de permissões. Os mecanismos de gerenciamento de conexões podem prevenir danos
maiores devido ao ataque, mas não previnem que algumas consultas sejam enviadas sem resposta
durante o ataque.
Cache Poisoning
Sempre que o servidor DNS não tem a resposta para a pesquisa em cache, passa a
pesquisa para outro servidor DNS em nome do cliente. Se o servidor passa a pesquisa para outro
servidor DNS que contém uma informação errada, então o envenenamento3 do cache (Cache
Poisoning) pode acontecer.
Significa fazer com que um servidor armazene em cache uma informação falsa sobre a resolução de um
determinado nome de domínio.
O envenenamento do cache envolve o envio de uma informação de mapeamento incorreto por um
servidor DNS com um TTL alto. Quando o servidor DNS for solicitado novamente, ele irá
responder com a informação errada. A informação errada é armazenada em cache por outro
servidor DNS, que torna a informação errada disponível para programas que requisitam a
informação do servidor DNS através de uma interface de um cliente.
O servidor DNS com o cache poluído responde à pesquisa, mas não necessariamente com a
resposta correta; ele preenche a seção “registros adicionais” da mensagem de resposta do DNS
com uma informação que não necessariamente se relaciona com a resposta. O servidor que
realizou a requisição aceita a resposta e não realiza nenhum tipo de checagem para assegurar-se
de que a resposta está correta ou se relaciona com a pesquisa. O servidor aceita a informação e a
adiciona em seu cache.
Com as informações armazenadas em cache alteradas de acordo com sua vontade, um atacante
pode redirecionar o tráfego intencionalmente de um site verdadeiro para um que esteja sob seu
controle. Dois métodos são mais conhecidos para este tipo de ataque:
O objetivo do redirecionamento do tráfego é encaminhar a vítima para um local falso sem que a
mesma desconfie da falsidade do destino para onde foi indicado. Este ataque é geralmente
utilizado para redirecionar sites de bancos para ganhar acesso às contas dos usuários ou
redirecionar sites de notícias para manipular as informações e publicar falsas histórias.
O envenenamento do cache também pode ter como objetivo lançar um ataque do tipo DoS –
Denial of Service. Um dos mais perigosos ataques consiste em negar a disponibilidade do serviço
de DNS congestionando um ou mais servidores de DNS com consultas recursivas. À medida que
o servidor é sobrecarregado com consultas, a CPU atingirá o nível máximo de processamento e o
servidor DNS ficará indisponível. Assim, quando um usuário solicitar uma pesquisa verdadeira
ao servidor, o serviço de resolução de nomes estará indisponível.
Uma maneira de realizar o DoS em um servidor é inserir um registro do tipo CNAME no cache
do servidor referindo-se a ele mesmo no nome canônico.
exemplo.sitecnet.com.br IN CNAME exemplo.sitecnet.com.br
Após inserir este registro de recurso no cache do servidor, o atacante pode causar uma falha no
DNS por uma simples transferência de zona.
Comprometimento do Servidor
Um atacante que conseguir acesso não autorizado ao servidor DNS com privilégios
administrativos pode comprometer totalmente o serviço DNS, modificando informações que são
servidas aos clientes. Uma vez com o controle do servidor, o invasor tem o controle de todas as
informações referentes à pesquisa de nomes da rede Este tipo de ataque é utilizado
principalmente para realizar outros tipos de ataques, como DoS e cache poisoning.
Outro objetivo desse tipo de ataque é a obtenção de informações referente ao domínio à qual o
servidor é autoridade. De posse dos dados da zona para o qual o servidor é autoridade, o atacante
tem acesso aos nomes dos hosts, domínios e endereços IP de recursos da rede. Muitas vezes,
nomes de máquinas e de domínios representam serviços vitais da rede, como servidores de email,
firewall, arquivos e FTP, por exemplo, revelando informações que o atacante pode tirar
proveito até para realizar outros tipos de ataque.
DNS Spoofing
Basicamente, a técnica do DNS spoofing (falsificação de respostas DNS) consiste em
responder com informações falsas consultas recursivas feitas a servidores DNS, resultando no
envenenamento do cache do servidor que originou a requisição, entre outros tipos de
conseqüências citadas mais adiante.
Quando um servidor DNS envia uma consulta em busca de o endereço IP de um determinado
nome de domínio, envia na consulta informações como o IP da estação de origem, porta UDP de
origem e o transaction ID, que é um número de identificação utilizado em todas as requisições de
resolução de nomes. Se o servidor consultado não tiver autoridade sobre o domínio enviado na
consulta, o mesmo fará consultas recursivas até chegar ao servidor do domínio consultado. Este
servidor irá responder à consulta em uma das informações verificadas pelo servidor que originou
a consulta o campo ID do cabeçalho do pacote DNS, além das seguintes verificações:
Se o campo ID e o campo “nome a ser resolvido” do pacote DNS são iguais aos enviados
na consulta;
Se a porta de origem é igual à porta de destino do pacote UDP enviado a consulta;
Se o endereço de IP de origem é igual ao endereço de IP de destino enviado na consulta.
Se um atacante conseguir interceptar o pacote UDP enviado na resposta e injetar informações
falsas nele, o servidor que gerou a consulta irá armazenar esta resposta e assim terá seu cache
poluído. Quando o cliente consultar este servidor, terá como resposta uma informação falsa e
poderá ser direcionado para outro local que não o verdadeiro destino desejado pelo cliente em sua
consulta original.
Este ataque visa enviar uma resposta falsa ao servidor DNS vítima antes que a resposta
verdadeira enviada pelo servidor DNS questionado chegue à vítima. Esta resposta verdadeira irá
chegar até o servidor vítima, mas será descartada, pois este já recebeu uma resposta, mesmo que
falsa, com as informações desejadas.
O dnsspoofing pode ser realizado através de interceptação de pacotes e predição de transactions
ID, por exemplo. Quando bem sucedido, o cache do servidor vítima permanece poluído por um
determinado tempo, armazenando informações falsas sobre um determinado nome de domínio,
podendo levar a sérias conseqüências, tais como:
>Redirecionar de tráfego;
>Driblar mecanismos de defesa, baseados em softwares de filtragem de pacotes que
utilizam nomes para verificar a autenticidade entre eles;
>Ataques a todas as aplicações que necessitam do serviço de DNS para resolução de
nomes;
>Ataques DoS;
>Ataques de buffer overflow em resoluções reversas.