Kerberos

  • SSO Single Sign-On
  • ticketing
  • Active Directory
  • ticketing
  • Protocolos

    Conceptos Fundamentales

  • Basado en criptografía simétrica y emisión de tickets.
  • Diseñado originalmente por el MIT.
  • Implementación predominante: Kerberos v5.
  • Es un mecanismo esencial en entornos corporativos Windows mediante Active Directory (AD).
  • Permite autenticación sólida y SSO dentro de redes internas confiables.

Componentes Principales

KDC (Key Distribution Center)

El corazón del sistema. Consta de dos servicios:

  • AS (Authentication Server): autentica al usuario y entrega el Ticket-Granting Ticket (TGT).
  • TGS (Ticket Granting Server): emite tickets de servicio basados en el TGT.

Principal

  • Identidad única dentro del sistema Kerberos.
  • Puede ser un usuario, servicio o equipo.
  • Formato típico: usuario@REALM o servicio/host@REALM.

Realm

  • Dominio lógico de administración para Kerberos.
  • Suele escribirse en mayúsculas: EMPRESA.LOCAL.

Tickets

  • TGT (Ticket-Granting Ticket): permite solicitar otros tickets sin reautenticar.
  • ST (Service Ticket): permite acceder a un servicio específico.
  • Ambos están cifrados y tienen expiración definida.

Flujo de Autenticación Kerberos

Proceso General

  1. El usuario se autentica ante el AS con su secreto (contraseña o clave derivada).
  2. El AS entrega un TGT cifrado.
  3. El usuario solicita al TGS un ticket de servicio usando el TGT.
  4. El TGS emite un Service Ticket para el servicio solicitado.
  5. El usuario presenta el Service Ticket al servicio objetivo.
  6. El servicio valida el ticket y concede acceso sin pedir contraseña nuevamente.

Integración con SSO

  • Kerberos facilita SSO en redes Windows mediante Active Directory.
  • Los usuarios autenticados en un dominio no deben volver a introducir credenciales al acceder a servicios integrados.
  • Utiliza validación mutua para evitar ataques de impersonación.

Ventajas

  • Muy seguro: basado en claves simétricas y tickets temporales.
  • Prevención contra replay: incluye timestamps y nonce.
  • SSO nativo en redes corporativas.
  • Mutual authentication entre cliente y servicio.

Desventajas

  • Requiere reloj sincronizado (tolerancia típica: ±5 minutos).
  • Dependencia crítica del KDC (punto único de fallo si no hay redundancia).
  • Complejo en entornos heterogéneos fuera de AD.
  • Difícil de integrar con aplicaciones modernas externas a la red interna.

Kerberos en Active Directory

Características

  • AD actúa como KDC.
  • Utiliza SPNs (Service Principal Names) para identificar servicios.
  • Los controladores de dominio gestionan claves, políticas y tickets.

SPN (Service Principal Name)

  • Mapea servicios a cuentas.
  • Ejemplo: HTTP/webserver.empresa.local@EMPRESA.LOCAL.

Casos de Uso

Redes Corporativas

  • Autenticación para:
    • Windows login.
    • SMB y CIFS.
    • Servicios corporativos internos.
    • Aplicaciones web integradas mediante Kerberos Delegation.

Delegación Kerberos

  • Constrained Delegation: el servicio solo puede actuar en nombre del usuario hacia servicios específicos.
  • Protocol Transition (S4U): permite crear tickets sin credenciales explícitas del usuario.

Ataques Comunes Relacionados

Kerberoasting

  • Ataque donde se solicitan Service Tickets y se crackean offline.
  • Mitigación: contraseñas robustas para cuentas de servicio; usar Managed Service Accounts.

Pass-the-Ticket

  • Reutilización de tickets capturados.
  • Mitigación: cifrado fuerte, rotación, controles de endpoint.

Golden Ticket

  • Ataque donde se genera un TGT falso si el atacante roba la clave krbtgt.
  • Mitigación: rotar periódicamente la contraseña de krbtgt.

Comparación con Otros Protocolos

Kerberos vs SAML

  • Kerberos: entorno interno, tickets simétricos.
  • SAML: federación externa, XML, firmado asimétrico.

Kerberos vs OIDC/OAuth2

  • Kerberos no se basa en tokens JWT ni JSON.
  • OIDC se orienta a aplicaciones modernas y servicios externos.
  • Kerberos se usa principalmente en AD e intranets.

Ejemplo de Configuración Básica (Linux krb5.conf)

Código

```ini [libdefaults] default_realm = EMPRESA.LOCAL

[realms] EMPRESA.LOCAL = { kdc = kdc1.empresa.local admin_server = kdc1.empresa.local }

[domain_realm] .empresa.local = EMPRESA.LOCAL empresa.local = EMPRESA.LOCAL