DNSSEC (DNS Security Extensions) es un conjunto de extensiones de seguridad para el sistema de nombres de dominio (DNS) que proporciona autenticación e integridad a las respuestas DNS.

¿Qué es DNSSEC?

DNSSEC es una tecnología que protege el DNS contra ataques de suplantación y manipulación mediante firmas digitales criptográficas en los registros DNS.

Problemas que Resuelve

Ataques DNS

  • DNS Spoofing: Suplantación de DNS
  • DNS Cache Poisoning: Envenenamiento de caché
  • Man-in-the-Middle: Ataques de intermediario
  • Pharming: Redirección maliciosa

Vulnerabilidades

  • Lack of Authentication: Falta de autenticación
  • Data Integrity: Falta de integridad
  • Trust Issues: Problemas de confianza
  • Security Gaps: Brechas de seguridad

Componentes DNSSEC

Registros de Recursos

  • RRSIG: Firma de registro de recursos
  • DNSKEY: Clave pública DNS
  • DS: Delegación firmada
  • NSEC/NSEC3: Prueba de no existencia
  • NSEC3PARAM: Parámetros NSEC3

Algoritmos Criptográficos

  • RSA: Algoritmo de clave pública
  • ECDSA: Firma digital de curva elíptica
  • EdDSA: Firma digital de Edwards
  • DSA: Algoritmo de firma digital

Funcionamiento

Proceso de Firma

  1. Generar claves: Crear par de claves ZSK y KSK
  2. Firmar registros: Firmar registros DNS con ZSK
  3. Firmar ZSK: Firmar ZSK con KSK
  4. Publicar: Publicar registros firmados

Proceso de Verificación

  1. Resolver consulta: Cliente consulta DNS
  2. Obtener registros: Servidor devuelve registros firmados
  3. Verificar firma: Cliente verifica firma
  4. Validar: Validar autenticidad e integridad

Implementación

Configuración BIND

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Configuración /etc/bind/named.conf.options
options {
    directory "/var/cache/bind";
    
    # Habilitar DNSSEC
    dnssec-enable yes;
    dnssec-validation yes;
    dnssec-lookaside auto;
    
    # Archivos de claves
    key-directory "/etc/bind/keys";
    
    # Políticas de firma
    auto-dnssec maintain;
    inline-signing yes;
};

# Configuración de zona
zone "example.com" {
    type master;
    file "/etc/bind/db.example.com";
    
    # Habilitar DNSSEC
    auto-dnssec maintain;
    inline-signing yes;
    
    # Claves de firma
    key-directory "/etc/bind/keys";
};

Generación de Claves

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Generar clave de firma de zona (ZSK)
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com

# Generar clave de firma de clave (KSK)
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE -f KSK example.com

# Firmar zona
dnssec-signzone -S -o example.com db.example.com

# Verificar firma
dnssec-verify -o example.com db.example.com.signed

Configuración Unbound

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# Configuración /etc/unbound/unbound.conf
server:
    # Habilitar DNSSEC
    module-config: "validator iterator"
    
    # Validación DNSSEC
    trust-anchor-file: "/etc/unbound/root.key"
    
    # Configuración de validación
    val-clean-additional: yes
    val-permissive-mode: no
    
    # Logging
    log-queries: yes
    log-replies: yes
    log-servfail: yes

Algoritmos Soportados

RSA

  • RSA-MD5: Obsoleto, no recomendado
  • RSA-SHA1: Obsoleto, no recomendado
  • RSA-SHA256: Recomendado
  • RSA-SHA512: Para claves largas

ECDSA

  • ECDSAP256SHA256: Curva P-256
  • ECDSAP384SHA384: Curva P-384
  • Seguridad: Equivalente a RSA-3072
  • Rendimiento: Más eficiente que RSA

EdDSA

  • Ed25519: Firma de Edwards
  • Ed448: Firma de Edwards
  • Seguridad: Muy alta
  • Rendimiento: Muy eficiente

Herramientas de Gestión

BIND

1
2
3
4
5
6
7
8
9
# Verificar estado DNSSEC
dnssec-verify -o example.com db.example.com.signed

# Verificar claves
dnssec-keygen -T example.com

# Rotar claves
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com
dnssec-signzone -S -o example.com db.example.com

OpenDNSSEC

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Configuración OpenDNSSEC
# /etc/opendnssec/conf.xml
<OpenDNSSEC>
    <Common>
        <Datastore>sqlite3:///var/lib/opendnssec/database.sqlite</Datastore>
        <LogLevel>INFO</LogLevel>
    </Common>
    
    <ZoneList>
        <Zone>
            <Name>example.com</Name>
            <Policy>default</Policy>
            <Input>file:///etc/bind/db.example.com</Input>
            <Output>file:///etc/bind/db.example.com.signed</Output>
        </Zone>
    </ZoneList>
</OpenDNSSEC>

Herramientas de Verificación

1
2
3
4
5
6
7
8
9
# Verificar DNSSEC
dig +dnssec example.com
dig +sigchase example.com

# Verificar cadena de confianza
dig +sigchase +trusted-key=/etc/bind/root.key example.com

# Verificar delegación
dig +sigchase +trusted-key=/etc/bind/root.key example.com DS

Aplicaciones

Seguridad Web

  • HTTPS: Validación de certificados
  • HSTS: HTTP Strict Transport Security
  • Certificate Pinning: Fijación de certificados
  • DANE: DNS-based Authentication

Email Security

  • SPF: Sender Policy Framework
  • DKIM: DomainKeys Identified Mail
  • DMARC: Domain-based Message Authentication
  • MTA-STS: SMTP MTA Strict Transport Security

Comunicaciones

  • VoIP: Voz sobre IP
  • SIP: Session Initiation Protocol
  • XMPP: Extensible Messaging and Presence Protocol
  • Matrix: Protocolo de mensajería

Ventajas y Desventajas

Ventajas

  • Authentication: Autenticación de respuestas
  • Integrity: Integridad de datos
  • Standard: Estándar ampliamente adoptado
  • Transparent: Transparente para usuarios

Desventajas

  • Complexity: Complejidad de implementación
  • Performance: Overhead de rendimiento
  • Key Management: Gestión compleja de claves
  • Adoption: Adopción limitada

Mejores Prácticas

Configuración

  • Strong Algorithms: Usar algoritmos fuertes
  • Key Rotation: Rotación regular de claves
  • Monitoring: Monitoreo continuo
  • Backup: Respaldos de claves

Seguridad

  • Key Security: Proteger claves privadas
  • Access Control: Control de acceso
  • Audit Logging: Registro de auditoría
  • Incident Response: Respuesta a incidentes

Rendimiento

  • Caching: Configurar caché adecuado
  • Load Balancing: Balanceo de carga
  • Monitoring: Monitoreo de rendimiento
  • Optimization: Optimización de consultas

Monitoreo y Troubleshooting

Herramientas de Monitoreo

1
2
3
4
5
6
7
8
9
# Verificar estado DNSSEC
dig +dnssec example.com
dig +sigchase example.com

# Verificar claves
dnssec-keygen -T example.com

# Verificar delegación
dig +sigchase +trusted-key=/etc/bind/root.key example.com DS

Problemas Comunes

  • Key Rollover: Problemas de rotación de claves
  • Delegation: Problemas de delegación
  • Validation: Problemas de validación
  • Performance: Problemas de rendimiento

Logs y Debugging

1
2
3
4
5
6
7
8
9
# Ver logs de BIND
tail -f /var/log/bind/bind.log

# Ver logs de Unbound
tail -f /var/log/unbound/unbound.log

# Debug DNSSEC
dig +dnssec +cd example.com
dig +sigchase +trusted-key=/etc/bind/root.key example.com

Conceptos Relacionados

Referencias