RED TEAM
  • Presentación
  • Apuntes Linux
  • Apuntes Blue Team
  • Apuntes Python
  • Ricardev github
  • RECON
    • OSINT
    • DESCUBRIENDO LA RED
      • NMAP NSE
    • SNIFFING
      • TCPDUMP
  • TECHNIQUES
    • FUERZA BRUTA
      • HYDRA
      • MEDUSA
      • JOHN THE RIPPER
      • NCRACK
      • RAINBOW TABLES
      • CHEATSHEET
    • CLAVES RSA DÉBILES
  • WEB HACKING
    • FUZZING
      • GOBUSTER
      • WFUZZ
      • OTRAS HERRAMIENTAS DE RECONOCIMIENTO WEB
    • OWASP TOP 10
      • A1-2017. SQL INJECTION
        • LOGIN FORM BYPASS
        • EXTRACCIÓN DE INFORMACIÓN.
        • SQLI MODIFIED HEADERS
        • BOOLEAN BLIND SQLI
        • TIME-BASED BLIND SQLI
        • AUTOMATIC INJECTION
      • A2-2017. ATAQUES A SISTEMAS DE AUTENTICACIÓN
      • A3-2017 - EXPOSICIÓN DE DATOS SENSIBLES
      • A4-2017. XXE
      • A5-2017. CONTROL DE ACCESO VULNERABLE
      • A6-2017. SEGURIDAD MAL CONFIGURADA
      • A7-2017. XSS
      • A8-2017. DESERIALIZACIÓN INSEGURA
      • A9-2017. USO DE COMPONENTES CON VULNERABILIDADES CONOCIDAS
      • A10-2017. REGISTRO Y MONITOREO INSUFICIENTE
    • SERVICIOS WEB
      • APACHE TOMCAT (RCE)
      • PRTG NETWORK MONITOR (RCE)
  • SERVICES HACKING (BOTH)
    • 20,21 - FTP
      • FTP BOUNCE ATTACK - ESCANEO
      • FTP BOUNCE ATTACK- DESCARGA DE OTRA FTP
    • 23 - TELNET
    • 25, 465 587 - SMTP
    • 111, 2049 - RPCBIND Y NFS
    • 161,162,10161,10162/udp - SNMP
      • SNMP (RCE Linux)
    • 445 - SMB
      • ETERNALBLUE
    • 3306 - MYSQL
  • SERVICES HACKING (LINUX)
    • 3632 - DISTCCD
  • SERVICES HACKING (WINDOWS)
    • 135, 539 - MSRPC
    • 389, 636 - LDAP / LDAPS
    • 1443 - MSSQL
  • ACTIVE DIRECTORY HACKING
    • CREANDO UN LABORATORIO DE AD
      • 1. Instalación de Windows Server 2016
      • 2. ROL DE ACTIVE DIRECTORY
      • 3. MALAS PRÁCTICAS NECESARIAS
    • CONCEPTOS
      • SPN Y KERBEROS
    • ENUMERACIÓN
      • BLOODHOUND
    • ATAQUES
      • SMB RELAY
      • NTLM RELAY
      • KERBEROASTING
      • AS_REP ROASTING
  • PRIVESC
    • WINDOWS
    • LINUX
      • LXD/LXC GROUP
  • EXFILTRACIÓN
    • EXFILTRANDO INFORMACIÓN
  • SHELL AND POWERSHELL TRICKS
    • Transfiriendo datos (traducir)
    • MEJORANDO SHELL A TTY INTERACTIVA (Traducir)
  • PWN LINUX
    • CREANDO UN LABORATORIO SIN MITIGACIONES
    • TEORÍA
      • ESTRUCTURA DE UN BINARIO DE LINUX
        • HERRAMIENTAS
      • ENSAMBLADOR
      • CONVENCIÓN DE LLAMADAS
      • MITIGACIONES
      • SYSCALL Y SHELLCODE
      • FORMAT STRING
      • RETURN-ORIENTED PROGRAMMING
        • GADGETS
    • ESTRATEGIAS DE EXPLOIT
      • STACK EXPLOITS
        • ATAQUE “SMASH THE STACK” SENCILLO
        • ATAQUE RET2WIN
        • ATAQUE RET2SHELLCODE
        • ATAQUE FORMAT STRING RET2SHELLCODE 2 BYTES
        • ATAQUE FORMAT STRING RET2SHELLCODE 4 BYTES
        • CANARY BYPASS
        • ATAQUE RET2LIBC
    • PRÁCTICA
      • PHOENIX
        • SETUP
        • STACK-ZERO amd64
        • STACK-ONE amd64
        • STACK-TWO amd64
        • STACK-THREE amd64
        • STACK-FOUR amd64
        • STACK-FIVE amd64
        • STACK-SIX amd64
        • FORMAT-ZERO amd64
Con tecnología de GitBook
En esta página
  • SERVICE PRINCIPAL NAME
  • KERBEROS
  • Introducción
  • Como funciona
  • REFERENCIAS

¿Te fue útil?

  1. ACTIVE DIRECTORY HACKING
  2. CONCEPTOS

SPN Y KERBEROS

AnteriorCONCEPTOSSiguienteENUMERACIÓN

Última actualización hace 3 años

¿Te fue útil?

En este artículo desarrollaré dos conceptos que son relevantes para entender los próximos ataques. Si ya tiene conocimiento sobre ellos puede continuar.

Estos conceptos son:

  • Service Principal Name (SPN)

  • Kerberos

SERVICE PRINCIPAL NAME

Esta sección se va a centrar en entender como funciona y que es SPN.

Es una traducción y resumen de la siguiente .

Para entender que es el SPN primero hay que entender el concepto de servicio en entornos de Active Directory.

Un Servicio es una capacidad, un software o algo que puede ser utilizado por otros miembros del AD. Por ejemplo un servidor web, un recurso compartido a nivel de red o un servicio de impresión. Para identificar un servicio necesitamos dos cosas:

  • Un mismo servicio puede ser ejecutado por varios equipos. Por lo tanto necesitamos el Host

  • Obviamente necesitamos el nombre del Servicio.

En resumen, la combinación de estas dos cosas de manera oficial es lo que se denomina Service Principal Name y luce asÍ:

service_class/hostname_or_FQDN:PORT/Nombre_dado_por_mi

Serviceclass no es más que una denominación genérica para el servicio (por ejemplo, los servidores web tienen la service_class www y los servicios SQL tienen la SqlServer.

Un SPN se ve de la siguiente manera:

KERBEROS

Introducción

Kerberos es un protocolo que permite a los usuarios autenticarse en la red y acceder a servicios una vez autenticados.

Kerberos es utilizado cada vez que un usuario quiere acceder a un servicio en la red. Gracias a Kerberos el usuario no necesita escribir su contraseña cada vez que quiera autenticarse y el servidor tampoco necesita conocer todas las contraseñas. Es un protocolo de autenticación centralizada.

Para conseguir lo anterior, hacen falta 3 entidades:

  • Un cliente.

  • Un servicio.

  • Un Key Distribution Center (KDC) que es un Domain Controler (DC).

La idea es que cuando un usuario quiera acceder a un servicio, la contreseña no viaje por la red para evitar comprometer la misma.

Para esto, el proceso es un poco engorroso pero se puede dividir en tres pasos:

  1. Authentication Service (AS): El usuario se autentica ante el KDC.

  2. Ticket-Granting Ticket (TGT): El usuario debe pedir un ticket para acceder al servicio elegido.

  3. Application Request (AP): Finalmente puede utilizar el servicio entregando un Ticket-Granting Service (TGS).

Un buen ejemplo es una fiesta con barra libre en la que tu entras con tu DNI que prueba que tu eres quien dice ser (TGT). Si quieres beber algo, vas al cajero con tu DNI para demostrar que eres tu y éste te suministra un ticket de bebida (TGS). Este ticket de bebida está sellado y es personalizado, incluye hasta tu edad. Por último, vas a la barra a que te sirvan una cerveza y entregas tu ticket de bebida (TGS). En la barra comprueban que el ticket es válido (está sellado) y que eres mayor de edad (tiene privilegios de acceso) y si es así te dan acceso a la cerveza.

Es importante en el ejemplo la parte que dice que el ticket de bebida tiene la edad escrita y que es en la barra donde se comprueba que eres mayor de edad. No está puesto al azar.

KERBEROS ES UN PROTOCOLO DE AUTENTICACIÓN NO DE AUTORIZACIÓN.

Esto significa que el TGS lo puedo obtener aunque yo no tenga autorización para utilizar el servicio, eso lo decide el servicio en el último paso.

Sin especificar, el proceso es el siguiente:

Como funciona

En el contexto de un Directorio Activo, el KDC siempre será un Domain Controler. El KDC contiene, por tanto, toda la información del dominio, incluyendo los secretos de cada servicio, equipo y usuario.

Tomamos el usuario strelock como ejemplo. El usuario strelock quiere utilizar un servicio. Para ello, debe autenticarse frente al KDC y enviar una solicitud para utilizar el servicio. Esta es la fase de Authentication Service (AS).

Authentication Service (AS)

  • KRB_AS_REQ

strelock enviará en primer lugar una solicitud de Ticket Granting Ticket (TGT) al Domain Controler (DC). Esta solicitud se llama KRB_AS_REQ (Kerberos Authentication Service Request). El TGT es una pequeña cantidad de información encriptada que incluye entre otras cosas una Session Key e información de usuario (SID, nombre, grupos, ...).

Para solicitar el TGT el usuario envia al KDC: su nombre en texto plano y la hora exacta (timestamp) de la solicitud encriptado con una versión hasheada de las contraseña del usuario strelock (Recordemos que el KDC posee este hash con el que hemos encriptado la información de antemano).

El KDC recibe el nombre de usuario y lo comprueba con la base de datos. Como en esta base de datos tiene el hash de la contraseña del usuario strelock procede a desencriptar el timestamp con este hash. Pueden darse dos escenarios:

El timestamp no se desencripta correctamente (por lo tanto la contraseña suministrada por el usuario es incorrecta).

El timestamp se desencripta lo que asegura que el usuario es quien dice ser. El KDC genera una session key unica para este usuario y con una duración limitada.

  • KRB_AS_REP

La respuesta del KDC incluye lo siguiente:

  • Session key encriptada con el Hash del usuario

  • TGT encriptado con el secreto del KDC (solo el KDC puede desencriptarlo):

    • Nombre de usuario (strelock).

    • Periodo de validez.

    • La Session Key generada.

    • El Privilege Attribute Certificate (PAC) que contiene mucha información relevante del usuario como su SID y los grupos a los que pertenece.

El TGT es información pública por lo que es facilmente interceptable en la fase de autenticación. Por eso es muy importante la Session Key que lo acompaña.

El cliente recibe el TGT y desencripta la Session Key que necesitará pronto.

Ticket-Granting Service (TGS)

Ahora que el usuario está autenticado nos encontramos en el escenario en el que el cliente posee su propio secreto, la Session Key desencriptada y el TGT encriptado por el KDC que contiene entre otras cosas la misma Session Key. Esto se ilustra en la siguiente imagen.

  • KRB_TGS_REQ

Si el usuario quiere utilizar un servicio, como por ejemplo CIFS en el SERVER01, Tendrá que enviar varias cosas al KDC para solicitar el TGS.

  • El TGT.

  • El servicio al que se quiere conectar, con el formato SPN CIFS/SERVER01.

  • Un autenticador parecido al que mandó en el KRB_AS_REQ. Es decir su nombre de usuario y timestamp solo que esta vez encriptados con la Session Key.

Una vez recibida la solicitud, el KDC desencripta el TGT y con la información que contiene (nombre de usuario y Session Key) desencripta el Autenticador y comprueba los datos que contiene. Si los datos son correctos, el usuario es quien dice ser. En el siguiente diagrama se ve claro:

  • KRB_TGS_REP

Ahora que está verificado que el usuario strelock es quien dice ser, el KDC envía la información al usuario que le permitirá realizar la solicitud al servicio, esta información es la siguiente:

  • Un TGS (encriptado con el secreto del servicio solicitado) que contiene:

    • El nombre de usuario.

    • El servicio solicitado.

    • El PAC.

    • Una nueva Session Key solo valida para comunicarse entre el usuario y el servicio solicitado.

  • Una nueva Session Key.

Todo el paquete viene encriptado a su vez con la primera Session Key.

El usuario en este momento desencripta la primera capa de cifrado con la primera Session Key obteniendo acceso así a la segunda Session Key y al TGS encriptado por el servicio.

Application Request (AP)

  • KRB_AP_REQ

En este momento, el usuario strelock genera un nuevo autenticador que encripta con la nueva Session Key.

El servicio CIFS recibe el TGS y lo desencripta con su propio secreto. Este TGS contiene la Session Key que utiliza para desencriptar el autenticador. Así comprobamos la autenticidad del usuario.

Si todo sale bien, el Servicio procede a dar acceso al usuario.

Resumen

En esta última imagen vemos todo el proceso de manera esquematizada:

REFERENCIAS

Es una traducción y resumen de la siguiente .

web
https://en.hackndo.com/service-principal-name-spn/
https://en.hackndo.com/kerberos/
web
SPN de un servicio en un Ticket de Kerberos.
Las tres entidades.
Proceso resumido sin especificar conceptos.
Representación gráfica de que el KDC tiene todos los secretos del domino.
Contenido del KRB_AS_REQ
Sessión Key
Contenido del KRB_AS_REP
Situación al inicio de esta fase.
Contenido del KRB_TGS_REQ
Diagrama de autenticación en la fase de TGS.
Contenido del KRB_TGS_REP
Desencriptado de la primera capa y acceso al 2º Session Key y al TGS encriptado.
Encriptado del nuevo autenticador con la 2ª Session Key.
Proceso de autenticación frente al Servicio.
Esquema de resumen.