From Linux
Introduction
Aunque no es lo más común, los equipos Linux pueden conectarse a Active Directory para ofrecer una gestión centralizada de identidades e integrarse con los sistemas de la organización. Esto permite que los usuarios tengan una única identidad para autenticarse tanto en equipos Linux como Windows.
Un equipo Linux conectado a Active Directory suele utilizar Kerberos como método de autenticación. Si este es el caso y logramos comprometer una máquina Linux unida al dominio, podríamos intentar buscar tickets Kerberos para suplantar a otros usuarios y obtener más acceso dentro de la red.
Un sistema Linux puede estar configurado de diferentes maneras para almacenar tickets Kerberos, y en esta sección vamos a ver algunas de esas opciones.
Kerberos on Linux
Windows y Linux utilizan el mismo proceso para solicitar un Ticket Granting Ticket (TGT) y un Service Ticket (TGS). Sin embargo, la forma en que se almacenan los tickets puede variar según la distribución de Linux y la implementación utilizada.
En la mayoría de los casos, las máquinas Linux almacenan los tickets Kerberos como archivos ccache en el directorio /tmp. Por defecto, la ubicación del ticket Kerberos se define en la variable de entorno KRB5CCNAME. Esta variable nos puede indicar si se están utilizando tickets Kerberos o si se ha cambiado la ruta por defecto donde se almacenan. Estos archivos .ccache están protegidos por permisos de lectura y escritura, pero un usuario con privilegios elevados o root puede acceder fácilmente a ellos.
Otro uso muy común de Kerberos en Linux es a través de los archivos keytab. Un keytab es un archivo que contiene pares de principales Kerberos y claves cifradas (derivadas de la contraseña de Kerberos). Estos archivos permiten autenticarse en sistemas remotos usando Kerberos sin necesidad de introducir una contraseña. Eso sí, si el usuario cambia su contraseña, es necesario recrear los archivos keytab.
Los archivos keytab suelen usarse para que scripts puedan autenticarse automáticamente usando Kerberos, sin intervención humana ni necesidad de guardar la contraseña en texto plano. Por ejemplo, un script podría usar un keytab para acceder a archivos compartidos en un recurso de red de Windows.
Scenario
Para practicar y entender cómo podemos abusar de Kerberos desde un sistema Linux, contamos con una máquina llamada LINUX01 conectada al Domain Controller. Esta máquina solo es accesible a través de MS01.
Para acceder a LINUX01 por SSH, tenemos dos opciones:
Conectarnos primero a MS01 mediante RDP y, desde ahí, usar el comando SSH en la línea de comandos de Windows para conectar con la máquina Linux.
Usar una técnica de port forwarding para redirigir el tráfico SSH hacia LINUX01.
Linux Auth from MS01 Image

Linux Auth via Port Forward
Como alternativa, creamos un port forwarding para simplificar la interacción con LINUX01. Al conectarnos al puerto TCP/2222 en MS01, obtendremos acceso al puerto TCP/22 en LINUX01.
Supongamos que estamos en una nueva evaluación, y la empresa nos da acceso a LINUX01 y al usuario david@inlanefreight.htb y contraseña Password2.
Identifying Linux and Active Directory Integration
Podemos identificar si la máquina Linux está unida a un dominio utilizando realm, una herramienta utilizada para gestionar la inscripción del sistema en un dominio y establecer qué usuarios o grupos del dominio tienen permiso para acceder a los recursos del sistema local.
realm - Check If Linux Machine is Domain Joined
La salida del comando indica que la máquina está configurada como miembro de Kerberos. También nos da información sobre el nombre de dominio (inlanefreight.htb) y qué usuarios y grupos tienen permiso para iniciar sesión, que en este caso son los usuarios David y Julio y el grupo Linux Admins.
En caso de que realm no esté disponible, también podemos buscar otras herramientas utilizadas para integrar Linux con Active Directory como sssd o winbind. Buscar esos servicios ejecutándose en la máquina es otra forma de identificar si está unida a un dominio. Podemos leer esta entrada de blog para más detalles. Vamos a buscar esos servicios para confirmar si la máquina está unida a un dominio.
PS - Check if Linux Machine is Domain Joined
Finding Kerberos Tickets in Linux
Como atacante, siempre estamos buscando credenciales. En máquinas Linux unidas a un dominio, queremos encontrar tickets Kerberos para obtener más acceso. Los tickets Kerberos se pueden encontrar en diferentes lugares dependiendo de la implementación de Linux o de que el administrador cambie la configuración por defecto. Exploremos algunas formas comunes de encontrar tickets Kerberos.
Finding Keytab Files
Using Find to Search for Files with Keytab in the Name
Un método sencillo es utilizar find para buscar archivos cuyo nombre contenga la palabra keytab. Cuando un administrador comúnmente crea un ticket Kerberos para ser usado con un script, establece la extensión a .keytab. Aunque no es obligatorio, es una forma en la que los administradores suelen referirse a un archivo keytab.
Identifying Keytab Files in Cronjobs
Otra forma de encontrar archivos keytab es en scripts automatizados configurados mediante un cronjob o cualquier otro servicio Linux. Si un administrador necesita ejecutar un script para interactuar con un servicio de Windows que utiliza Kerberos, y si el fichero keytab no tiene la extensión .keytab, podemos encontrar el nombre de fichero apropiado dentro del script. Veamos este ejemplo:
En el script anterior, notamos el uso de kinit, lo que significa que Kerberos está en uso. kinit permite la interacción con Kerberos, y su función es solicitar el TGT del usuario y almacenar este ticket en la caché (archivo ccache). Podemos utilizar kinit para importar un keytab a nuestra sesión y actuar como el usuario.
En este ejemplo, encontramos un script que importa un ticket Kerberos (svc_workstations.kt) para el usuario svc_workstations@INLANEFREIGHT.HTB antes de intentar conectarse a una carpeta compartida. Más adelante veremos cómo utilizar esos tickets y suplantar usuarios.
Finding ccache Files
Un archivo de caché de credenciales o ccache almacena las credenciales Kerberos mientras siguen siendo válidas y, por lo general, mientras dura la sesión del usuario. Una vez que un usuario se autentica en el dominio, se crea un archivo ccache que almacena la información del ticket. La ruta a este archivo se coloca en la variable de entorno KRB5CCNAME. Esta variable es utilizada por las herramientas que soportan la autenticación Kerberos para encontrar los datos Kerberos.
Reviewing Environment Variables for ccache Files
Busquemos las variables de entorno e identifiquemos la ubicación de nuestra caché de credenciales Kerberos:
Searching for ccache Files in /tmp
Como se mencionó anteriormente, los archivos ccache se encuentran, por defecto, en /tmp. Podemos buscar usuarios que hayan iniciado sesión en el ordenador, y si conseguimos acceso como root o un usuario con privilegios, seríamos capaces de suplantar a un usuario utilizando su archivo ccache mientras aún sea válido.
Abusing KeyTab Files
Como atacantes, podemos darle varios usos a un archivo keytab. Lo primero que podemos hacer es suplantar a un usuario utilizando kinit. Para utilizar un archivo keytab, necesitamos saber para qué usuario fue creado.
Listing keytab File Information
klist es otra aplicación utilizada para interactuar con Kerberos en Linux. Esta aplicación lee información de un fichero keytab. Veámoslo con el siguiente comando:
El ticket corresponde al usuario Carlos. Ya podemos suplantar al usuario con kinit.
Impersonating a User with a keytab
Confirmemos qué ticket estamos usando con klist y luego importemos el ticket de Carlos a nuestra sesión con kinit.
Connecting to SMB Share as Carlos
Podemos intentar acceder a la carpeta compartida \\dc01\\carlos para confirmar nuestro acceso.
Keytab Extract
El segundo método que utilizaremos para abusar de Kerberos en Linux es extraer los secretos de un archivo keytab. Pudimos hacernos pasar por Carlos usando los tickets de la cuenta para leer una carpeta compartida en el dominio, pero si queremos acceder a su cuenta en la máquina Linux, necesitaremos su contraseña.
Extracting Keytab Hashes with KeyTabExtract
Podemos intentar descifrar la contraseña de la cuenta extrayendo los hashes del archivo keytab. Usemos KeyTabExtract, una herramienta para extraer información valiosa de archivos .keytab de tipo 502, que pueden ser usados para autenticar cajas Linux a Kerberos. El script extraerá información como el dominio, el principal del servicio, el tipo de cifrado y los hash.
Con el hash NTLM, podemos realizar un ataque Pass the Hash. Con el hash AES256 o AES128, podemos falsificar nuestros tickets usando Rubeus o intentar crackear los hashes para obtener la contraseña en texto plano.
El hash más sencillo de descifrar es el hash NTLM. Podemos utilizar herramientas como Hashcat o John the Ripper para descifrarlo. Sin embargo, una forma rápida de descifrar contraseñas es con repositorios online como https://crackstation.net/, que contiene miles de millones de contraseñas.

Como podemos ver en la imagen, la contraseña para el usuario Carlos es Password5. Ahora podemos iniciar sesión como Carlos.
Obtaining More Hashes
Carlos tiene un cronjob que utiliza un archivo keytab llamado svc_workstations.kt. Podemos repetir el proceso, descifrar la contraseña e iniciar sesión como svc_workstations.
Abusing Keytab ccache
Para abusar de un archivo ccache, todo lo que necesitamos son privilegios de lectura sobre el archivo. Estos archivos, ubicados en /tmp, sólo pueden ser leídos por el usuario que los creó, pero si obtenemos acceso de root, podríamos utilizarlos.
Privilege Escalation to Root
Una vez que nos logueamos con las credenciales del usuario svc_workstations, podemos usar sudo -l y confirmar que el usuario puede ejecutar cualquier comando como root. Podemos usar el comando sudo su para cambiar el usuario a root.
Looking for ccache Files
Como root, necesitamos identificar qué tickets están presentes en la máquina, a quién pertenecen y su tiempo de caducidad.
Identifying Group Membership with the id Command
Julio es miembro del grupo Domain Admins. Podemos intentar suplantar al usuario y obtener acceso al host Controlador de dominio DC01.
Importing the ccache File into our Current Session
Para utilizar un archivo ccache, podemos copiar el archivo ccache y asignar la ruta del archivo a la variable KRB5CCNAME.
Using Linux Attack Tools with Kerberos
La mayoría de las herramientas de ataque en Linux que interactúan con entornos Windows y Active Directory soportan autenticación Kerberos. Si las usamos desde una máquina unida al dominio, debemos asegurarnos de que la variable de entorno KRB5CCNAME esté apuntando al archivo ccache que queremos usar.
En caso de que estemos atacando desde una máquina que no es miembro del dominio, como nuestro equipo de ataque, debemos asegurarnos de que dicha máquina pueda contactar con el KDC o Domain Controller, y que la resolución de nombres del dominio funcione correctamente.
En este escenario, nuestra máquina atacante no tiene conexión directa con el KDC/Domain Controller, y no puede usarlo para resolver nombres. Para poder usar Kerberos, necesitamos redirigir el tráfico a través de MS01 usando herramientas como Chisel y Proxychains, y además editar el archivo /etc/hosts para establecer manualmente las direcciones IP del dominio y de las máquinas que queremos atacar.
Host File Modified
Proxychains Configuration File
Tenemos que modificar nuestro archivo de configuración proxychains para utilizar socks5 y el puerto 1080.
Download Chisel to our Attack Host
Connect to MS01 with xfreerdp
Execute chisel from MS01
Setting the KRB5CCNAME Environment Variable
Finalmente, necesitamos transferir el archivo ccache de Julio desde LINUX01 y crear la variable de entorno KRB5CCNAME con el valor correspondiente a la ruta del archivo ccache.
Esto permitirá que las herramientas que utilicen autenticación Kerberos en nuestra máquina atacante usen el ticket de Julio para autenticarse como él dentro del dominio.
Impacket
Para usar el ticket Kerberos, debemos especificar el nombre de la máquina objetivo (no su dirección IP) y usar la opción -k.
Si al conectarnos se nos solicita una contraseña, también podemos añadir la opción -no-pass para evitar que la herramienta intente pedir credenciales.
Esto forzará el uso del ticket Kerberos almacenado, sin requerir interacción adicional.
Using Impacket with proxychains and Kerberos Authentication
Evil-WinRM
La autenticación mediante Kerberos requiere de una serie de pasos previos para que funcione correctamente.
Sincronizar la hora de la máquina local con la del Domain Controller.
Disponer de un TGT (Ticket Granting Ticket)
Exportar el TGT en la variable KRB5CCNAME
Disponer de la instalación de
krb5-userykrb5-configen el equipo localConfigurar adecuadamente el archivo
/etc/krb5.confcon la configuración necesaria del dominio
El comando para conectarnos mediante el TGT obtenido es el siguiente:
Para configurar paso a paso esta autenticación al WinRM mediante Kerberos, realizaremos los siguientes pasos:
Deberemos de sincronizar la hora de nuestro equipo con la del DC (Domain Controller).
Instalaremos el paquete de ntpdate para ayudarnos a sincronizar la hora de nuestro reloj.
Una vez instalado, sincronizaremos nuestra hora con la del DC.
Deberemos de disponer de un TGT (Ticket Granting Ticket) del usuario con el que queramos conectarnos. Disponemos de varias maneras de haber obtenido ya un TGT, pero en este caso explicaremos solamente a solicitarlo para el usuario que disponemos sus credenciales.
A través de la herramienta de impacket-getTGT obtendremos un TGT válido para nuestro usuario.
Una vez solicitado el TGT, nos deberá proporcionar un archivo .ccache.
Una vez obtenido el TGT (.ccache), deberemos de exportar este tiquet en la variable KRB5CCNAME para poder utilizarlo correctamente.
Instalaremos el paquete de krb5-user a través del siguiente comando:
Una vez instalado, validaremos que el tiquet TGT obtenido y declarado en KRB5CCNAME funcione correctamente. Nos deberá aparecer nuestro TGT.
Instalaremos el paquete necesario para el /etc/krb5.conf a través del siguiente comando:
Una vez instalado el paquete, deberemos de configurar el archivo /etc/krb5.conf para que se adapte al dominio correspondiente.
A continuación, dejaremos un archivo /etc/krb5.conf de ejemplo.
Miscellaneous
Si queremos usar un archivo ccache en Windows o un archivo .kirbi en una máquina Linux, podemos usar la herramienta impacket-ticketConverter para convertirlos.
Para utilizarla, simplemente indicamos el archivo que queremos convertir y el nombre del archivo de salida. Por ejemplo, para convertir el archivo ccache de Julio a formato .kirbi:
Impacket Ticket Converter
También podemos hacer la operación inversa, convirtiendo un archivo .kirbi a .ccache para usarlo en Linux.
Importing Converted Ticket into Windows Session with Rubeus
Linikatz
Linikatz es una herramienta creada por el equipo de seguridad de Cisco para la extracción de credenciales en máquinas Linux integradas en Active Directory. En otras palabras, lleva el mismo concepto de Mimikatz al entorno UNIX.
Al igual que Mimikatz, para aprovechar Linikatz necesitamos tener acceso root en la máquina. Esta herramienta extrae todas las credenciales, incluidos tickets Kerberos, desde distintas implementaciones como FreeIPA, SSSD, Samba, Vintella, entre otras. Una vez extraídas, las guarda en una carpeta cuyo nombre comienza con linikatz.
Dentro de esa carpeta encontraremos las credenciales en varios formatos útiles como .ccache y .keytab, que luego podemos reutilizar según sea necesario (como se explicó anteriormente).
Al ejecutarlo, Linikatz detecta las configuraciones de distintos servicios relacionados con AD (como FreeIPA, SSSD, Samba, Kerberos, etc.) y extrae los archivos relevantes: bases de datos de caché, archivos .ccache, .keytab, configuraciones y más.
En el ejemplo mostrado:
Se detectan múltiples tickets Kerberos en
/tmp, incluyendo de usuarios comojulio@inlanefreight.htbysvc_workstations@inlanefreight.htb.También se identifican archivos de configuración como
/etc/krb5.confy/etc/sssd/sssd.conf.El sistema está utilizando
SSSDy se observan archivos.ldby.ccachedentro de/var/lib/sss/db/.
Última actualización
¿Te fue útil?