O DNS (Domain Name System) e o DHCP (Dynamic Host Configuration Protocol) são serviços fundamentais para o funcionamento de redes IP. O DNS traduz nomes de domínio em endereços IP, enquanto o DHCP atribui configurações de rede automaticamente aos dispositivos. Ambos são alvos frequentes de ataques, pois comprometê-los pode redirecionar tráfego, interceptar dados ou causar indisponibilidade. Nesta aula, exploraremos as principais ameaças a esses serviços, as técnicas de proteção e as boas práticas de configuração.

Entender como proteger o DNS e o DHCP é essencial para qualquer profissional de segurança. Veremos como o spoofing pode enganar usuários e sistemas, como o DNSSEC adiciona autenticação às respostas DNS, como o DHCP snooping filtra mensagens maliciosas e como o arquivo resolv.conf influencia a resolução de nomes em sistemas Linux.

Spoofing

Spoofing é uma técnica de ataque em que um agente malicioso falsifica informações para se passar por outra entidade. No contexto de DNS e DHCP, o spoofing pode ocorrer de várias formas, como o envenenamento de cache DNS ou a falsificação de servidores DHCP. O objetivo é redirecionar o tráfego para servidores controlados pelo atacante, permitindo a interceptação de dados, a injeção de conteúdo malicioso ou a negação de serviço.

No DNS, o atacante pode enviar respostas falsas a consultas legítimas, fazendo com que o cliente acesse um site falso. Isso é conhecido como DNS cache poisoning. No DHCP, um atacante pode responder a solicitações de clientes com informações falsas, como um gateway padrão malicioso, direcionando o tráfego para uma máquina controlada. Para mitigar esses riscos, é crucial implementar autenticação e validação, como veremos com DNSSEC e DHCP snooping.

Um exemplo de spoofing de DNS em Python, usando a biblioteca Scapy para enviar uma resposta falsa:

from scapy.all import *

def spoof_dns(pkt):
    if pkt.haslayer(DNS) and pkt[DNS].qr == 0:  # Consulta DNS
        # Resposta falsa para www.exemplo.com
        spoofed = IP(dst=pkt[IP].src, src=pkt[IP].dst)/UDP(dport=pkt[UDP].sport, sport=53)/DNS(
            id=pkt[DNS].id, qr=1, aa=1, qd=pkt[DNS].qd,
            an=DNSRR(rrname=pkt[DNS].qd.qname, rdata="6.6.6.6")  # IP malicioso
        )
        send(spoofed, verbose=0)

sniff(filter="udp port 53", prn=spoof_dns)

Esse código escuta consultas DNS e responde com um endereço IP falso. Em uma rede real, isso redirecionaria o tráfego para um servidor controlado pelo atacante. Para se proteger, é necessário usar DNSSEC, que valida a autenticidade das respostas, e monitorar a rede para detectar respostas anômalas.

DNSSEC

DNSSEC (Domain Name System Security Extensions) é um conjunto de extensões do DNS que adiciona autenticação e integridade às respostas. Ele usa criptografia de chave pública para assinar digitalmente os registros DNS, permitindo que os resolvedores verifiquem se as respostas são autênticas e não foram modificadas. Com DNSSEC, um atacante não pode forjar respostas sem a chave privada do domínio, o que dificulta o envenenamento de cache.

O DNSSEC introduz novos tipos de registros DNS, como RRSIG (assinatura de registro), DNSKEY (chave pública), DS (Delegation Signer) e NSEC/NSEC3 (para negação autenticada). Quando um resolvedor recebe uma resposta, ele valida a assinatura usando a chave pública do domínio, garantindo que os dados são legítimos. Isso protege contra spoofing e ataques de MITM (man-in-the-middle).

Para implementar DNSSEC, é necessário configurar o servidor DNS para assinar as zonas e publicar as chaves. No BIND, por exemplo, é possível gerar chaves e assinar a zona. Veja um exemplo de configuração no arquivo de zona:

$TTL 3600
@ IN SOA ns1.exemplo.com. admin.exemplo.com. (
      2024010101 ; Serial
      7200       ; Refresh
      3600       ; Retry
      1209600    ; Expire
      3600 )     ; Minimum
@ IN NS ns1.exemplo.com.
@ IN A 192.168.1.1
ns1 IN A 192.168.1.1
www IN A 192.168.1.10
; Registros DNSSEC
@ IN DNSKEY 257 3 8 AwEAA... (chave pública)
www IN RRSIG A 8 3 3600 20240102000000 20240101000000 12345 exemplo.com. (assinatura)

Esses registros são gerados por ferramentas como dnssec-keygen e dnssec-signzone. A implantação de DNSSEC requer planejamento, pois todos os resolvedores precisam validar as assinaturas, o que pode aumentar a latência. No entanto, os benefícios de segurança superam os custos em redes críticas.

DHCP snooping

DHCP snooping é um recurso de segurança implementado em switches de rede que filtra mensagens DHCP não confiáveis. Ele cria uma tabela de confiança (trust) que define quais portas podem enviar respostas DHCP (como a porta conectada ao servidor DHCP legítimo) e quais não podem. Quando um dispositivo envia uma mensagem DHCP, o switch verifica a porta de origem e, se não for confiável, descarta a mensagem. Isso impede ataques de DHCP spoofing, onde um atacante envia respostas falsas para os clientes.

Além de filtrar, o DHCP snooping também pode limitar a taxa de mensagens DHCP por porta (rate limiting), evitando ataques de negação de serviço (DoS). Ele também pode ser usado para rastrear o endereço IP atribuído a cada porta, auxiliando na segurança geral da rede.

Exemplo de configuração de DHCP snooping em um switch Cisco:

! Habilitar DHCP snooping globalmente
ip dhcp snooping
! Habilitar para VLAN 10
ip dhcp snooping vlan 10
! Marcar a interface Gi1/0/1 como confiável (conectada ao servidor DHCP)
interface GigabitEthernet1/0/1
 ip dhcp snooping trust
! Definir taxa máxima de mensagens na interface Gi1/0/2
interface GigabitEthernet1/0/2
 ip dhcp snooping limit rate 10

Essa configuração protege a rede contra servidores DHCP rogue. É importante configurar corretamente as portas confiáveis, pois uma porta marcada como confiável pode aceitar respostas de qualquer fonte, o que pode ser explorado se conectada a um dispositivo não autorizado.

Resolv.conf

O arquivo resolv.conf é usado em sistemas Linux e Unix para configurar a resolução de nomes DNS. Ele define os servidores DNS a serem consultados, a ordem de busca de domínios e opções de resolução. Uma configuração inadequada pode causar falhas de resolução ou redirecionamento para servidores maliciosos, por isso é um ponto de atenção em segurança.

O formato básico do arquivo inclui a diretiva nameserver para especificar o endereço IP de um servidor DNS, e a diretiva search para listar domínios de busca. Também é possível definir opções como timeout e attempts. Veja um exemplo:

# /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
search exemplo.com
options timeout:2 attempts:2

Em sistemas com systemd, o arquivo pode ser gerenciado pelo systemd-resolved, que usa um arquivo simbólico para resolv.conf. Para segurança, é importante garantir que os servidores DNS configurados sejam confiáveis e que o arquivo não seja modificado por processos não autorizados. Também é possível usar DNSSEC no resolvedor, configurando opções como dnssec=yes no resolv.conf (se o resolvedor suportar).

Um exemplo de configuração com validação DNSSEC no systemd-resolved:

# /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8
DNSSEC=yes
FallbackDNS=8.8.4.4

Após alterar, reinicie o serviço: sudo systemctl restart systemd-resolved. Isso garante que as respostas DNS sejam validadas, protegendo contra spoofing.

Boas Práticas e Observações Finais

Para proteger DNS e DHCP, adote uma abordagem em camadas: use DNSSEC para autenticar respostas DNS, DHCP snooping para filtrar mensagens DHCP, e configure corretamente o resolv.conf para usar servidores confiáveis e validar respostas. Monitore a rede para detectar atividades suspeitas, como respostas DNS de fontes não autorizadas ou padrões de tráfego anômalos. Mantenha os sistemas atualizados e utilize firewalls para bloquear tráfego não necessário.

Além disso, considere segmentar a rede para isolar serviços críticos e limitar o impacto de um ataque. Documente as configurações e revise-as periodicamente para garantir que estejam alinhadas com as políticas de segurança da organização.

Referências

Exercícios

  1. Explique o que é o envenenamento de cache DNS e como o DNSSEC ajuda a preveni-lo.

    ✓ Resposta: O envenenamento de cache DNS ocorre quando um atacante insere respostas falsas no cache de um resolvedor DNS, fazendo com que os usuários sejam direcionados a sites maliciosos. O DNSSEC ajuda prevenindo isso, pois cada resposta é assinada digitalmente; o resolvedor pode verificar a assinatura usando a chave pública do domínio e rejeitar respostas não autênticas.
  2. Descreva como o DHCP snooping impede ataques de DHCP spoofing.

    ✓ Resposta: O DHCP snooping configura portas confiáveis (trust) e não confiáveis (untrust). Mensagens DHCP recebidas em portas não confiáveis são filtradas, descartando respostas DHCP que não venham de um servidor autorizado. Isso impede que um atacante envie respostas falsas aos clientes, pois o switch bloqueia essas mensagens.
  3. Qual é a função da diretiva nameserver no arquivo resolv.conf? Dê um exemplo de configuração com dois servidores.

    ✓ Resposta: A diretiva nameserver especifica o endereço IP de um servidor DNS que o sistema usará para resolver nomes. Exemplo:
    nameserver 8.8.8.8
    nameserver 8.8.4.4
    O sistema tentará o primeiro servidor e, se não responder, usará o segundo.
  4. Quais são os novos tipos de registro introduzidos pelo DNSSEC e qual a função de cada um?

    ✓ Resposta: Os principais registros DNSSEC são: RRSIG (contém a assinatura digital de um conjunto de registros), DNSKEY (contém a chave pública usada para verificar as assinaturas), DS (Delegation Signer, usado para estabelecer uma cadeia de confiança entre zonas) e NSEC/NSEC3 (para autenticar a não existência de um nome).
  5. Como você configuraria o DHCP snooping em um switch Cisco para proteger a VLAN 20, considerando que o servidor DHCP está conectado na porta Gi1/0/1?

    ✓ Resposta: A configuração seria:
    ip dhcp snooping
    ip dhcp snooping vlan 20
    interface GigabitEthernet1/0/1
     ip dhcp snooping trust
    Isso habilita o snooping global, ativa para a VLAN 20 e marca a porta do servidor como confiável.