Active Directory: 4 herramientas gratuitas y eficaces para auditar contraseñas
Table of Contents
I. Presentación
¿Qué herramientas se pueden utilizar para auditar las contraseñas de Active Directory? Esa es la pregunta que vamos a responder en este artículo.
En un entorno Active Directory, la gestión de contraseñas es esencial, ya que las contraseñas débiles o comprometidas pueden dar lugar a cuentas comprometidas. Las cuentas en cuestión, difíciles de identificar sin una auditoría, abren la puerta a diversos ataques, incluidos los ataques de diccionario (fuerza bruta, relleno de credenciales).
Sólo mencionaremos herramientas gratuitas, algunas de las cuales son accesibles desde la línea de comandos, en particular las basadas en PowerShell, y una herramienta más completa con una interfaz gráfica capaz de generar un informe listo para usar.
Si te interesa el tema de las contraseñas AD, te recomiendo que leas el siguiente artículo además de éste:
II. Specops Password Auditor
La primera herramienta de la que vamos a hablar es un referente en la auditoría de contraseñas de Active Directory. Desarrollada por Specops Software hace varios años, Specops Password Auditor es una herramienta sencilla y eficaz. Más allá del análisis, que en muchos aspectos es similar al de las herramientas de las que hablaremos más adelante, su gran baza es el informe listo para usar que es capaz de generar.
Este software gratuito es capaz de detectar contraseñas comprometidas utilizadas por sus usuarios de Active Directory. Para ello, utiliza una base de datos de contraseñas descargada localmente: la versión actual contiene más de 1.000 millones de contraseñas. También utiliza hashes de contraseñas para hacer comparaciones, como otras herramientas de este tipo.
Puede descargar la herramienta aquí:
Sólo se tarda unos minutos en generar el informe que se muestra a continuación. Este informe en francés (o en otro idioma) está listo para ser presentado a la dirección del sistema de información (SI) o al responsable de seguridad del SI. Se trata de un verdadero ahorro de tiempo en comparación con las otras 3 herramientas presentadas en este artículo, ya que no tienen esta dimensión de "informe".

Specops Password Auditor analiza los siguientes puntos de seguridad:
- Cumplimiento de las políticas de contraseñas (ANSSI, CNIL, NIST, BSI, etc.)
- Cuentas con contraseñas vacías
- Cuentas con contraseñas filtradas (contraseñas comprometidas)
- Cuentas con contraseñas idénticas
- Cuentas de administrador de dominio
- Cuentas de administrador no protegidas contra la delegación
- Cuentas de administrador y de usuario inactivas
- Cuentas que no requieren contraseña
- Cuentas cuya contraseña no caduca nunca
- Cuentas cuya contraseña caduca
- Cuentas cuya contraseña ha caducado
- La antigüedad de la contraseña para cada cuenta de usuario/administrador
- Lista de políticas de contraseñas con características clave (incluida la entropía)
- Uso / asignación de políticas de contraseñas
Además del informe completo, puede exportar cada lista de usuarios como un archivo de texto en formato CSV. Esto puede permitirle aplicar un tratamiento posterior a las cuentas afectadas por un problema de seguridad específico.

Esta aplicación ya ha sido objeto de una presentación completa en IT-Connect, así como de un vídeo. Aquí está el contenido correspondiente:
Para obtener análisis exhaustivos, automáticos y proactivos, debe actualizarse a la solución de pago por uso denominada Specops Password Policy. También está asociada a una base de datos mayor que contiene más de 4.000 millones de contraseñas.
III. DSInternals
A partir de ahora, cambiaremos a la línea de comandos PowerShell. Daremos prioridad al módulo PowerShell DSInternals
que tiene muy buena reputación y ha sido probado durante años. Es un módulo versátil que es particularmente relevante para todo lo relacionado con la seguridad de contraseñas de Active Directory. En particular, hay un cmdlet llamado Test-PasswordQuality
capaz de realizar una prueba de calidad de las contraseñas de Active Directory.
Esta herramienta analiza los siguientes puntos:
- Contraseñas almacenadas con cifrado reversible
- Presencia de hash de contraseña LM (LanMan)
- Cuentas sin contraseña definida (contraseña vacía)
- Contraseñas encontradas en un diccionario (contraseñas débiles o comprometidas)
- Cuentas que utilizan la misma contraseña
- Cuentas de usuario con SamAccountName como contraseña
- Cuentas de ordenador con contraseñas por defecto
- Falta de claves Kerberos AES para determinadas cuentas
- Cuentas que no requieren autenticación Kerberos previa (Kerberos preautenticación)
- Cuentas sólo autorizadas a utilizar el cifrado DES
- Cuentas vulnerables al ataque Kerberoasting
- Cuentas administrativas (actuales o anteriores) autorizadas para delegación
- Cuentas cuya contraseña no caduca nunca
- Cuentas para las que no se requiere contraseña
- Cuentas que requieren autenticación mediante tarjeta inteligente, pero que siguen teniendo contraseña
Podemos ver que el análisis es exhaustivo y cubre una multitud de debilidades potenciales. El análisis de Active Directory puede realizarse en línea o fuera de línea a partir de un archivo base. ntds.dit
.
Sin más preámbulos, instale el programa PowerShell :
Install-Module DSInternals -Force
Luego, para utilizar el módulo DSInternals, tienes dos opciones:
- Utilice un diccionario de contraseñas para ver si determinados usuarios utilizan una contraseña del diccionario.
- No utilice un diccionario
La primera opción abre la puerta a la detección de contraseñas comprometidas utilizando una lista de contraseñas. Puede tratarse de una base de datos de contraseñas que usted mismo haya compilado, o de un diccionario correspondiente a una filtración de datos. Un buen ejemplo es la base de datos de contraseñas RockYou, cuya versión 2024 contiene más de 10.000 millones de contraseñas... Pero cuidado con la potencia de cálculo necesaria para realizar el análisis.
En este caso, utilizaremos simplemente un archivo llamado passwords.txt
avec ces valeurs :
IT-Connect
TutorielInformatique
P@ssword!
azertyuiop
azerty1234!
ActiveDirectory@Audit
Por tanto, hay que definir tres variables:
# La ruta al archivo que representa el diccionario de contraseñas
$DictionaryFile = "C:\TEMP\passwords.txt"
# El nombre del controlador de dominio que se va a consultar
$DC = "SRV-ADDS-01.it-connect.local"
# La zona en la que se encuentran los objetos a buscar
$Domain = "DC=it-connect,DC=local"
Vamos a utilizar el cmdlet de PowerShell Get-ADReplAccount
para leer el contenido de la base de datos del directorio AD y recuperar la lista de objetos y sus atributos secretos. Para cada usuario, incluidos los usuarios deshabilitados, evaluaremos la contraseña.
Aquí está el comando:
Get-ADReplAccount -All -Server $DC -NamingContext $Domain | ` Test-PasswordQuality -WeakPasswordsFile $DictionaryFile -IncludeDisabledAccounts
Este comando devolverá un informe en la consola con el resultado de cada punto.

Podemos ver que nuestro diccionario contiene las contraseñas de tres cuentas:
IT-CONNECT\Administrateur
IT-CONNECT\florian.burnel
IT-CONNECT\template_rh
Además, dos grupos de usuarios tienen la misma contraseña:
Group 1:
IT-CONNECT\Administrateur
IT-CONNECT\florian.burnel
IT-CONNECT\template_rh
Group 2:
IT-CONNECT\chris.tal
IT-CONNECT\gerard.mensoif
IT-CONNECT\guy.mauve
IT-CONNECT\tech.t2
Puede realizar el mismo análisis sin diccionario de contraseñas: se llevarán a cabo todas las pruebas, excepto la búsqueda de contraseñas.
Nota: Las contraseñas no se pueden recuperar en texto claro directamente (a menos que se definan usando encriptación reversible), pero comparando hashes podemos identificar algunas de ellas usando un diccionario. Esto es posible porque no hay salting para el cifrado de contraseñas.
IV. PassTester
Publicada en 2024, la herramienta PassTester, escrita íntegramente en PowerShell, sirve para identificar las cuentas de usuario de AD más vulnerables a un ataque de fuerza bruta (o de diccionario en general). Para realizar este análisis, la herramienta utiliza la API del servicio I Have Been Pwned para identificar las contraseñas comprometidas.
Para evitar exponer los hash de las contraseñas de sus usuarios, PassTester realiza una consulta basada en los 5 primeros caracteres del hash de la contraseña. Basándose en esta coincidencia inicial, la herramienta recupera una lista de hashes que tienen estos 5 caracteres en común y los compara localmente con el hash de AD. Si hay una coincidencia, la contraseña puede considerarse comprometida.
Puede descargar el script PassTester.ps1
del GitHub oficial del proyecto. Necesitas una cuenta de administrador de dominio para ejecutar el análisis, ya que la herramienta funciona con un volcado de base de datos. ntds.dit
. La ventaja es que puede exportarse a una infraestructura y luego analizarse en otra máquina desconectada del SI del cliente (si la herramienta se utiliza como parte de un servicio).
En primer lugar, debe ejecutar el script y elegir la opción 1
para exportar la base de datos AD.
.\PassTester.ps1

A continuación, vuelva a ejecutar el script para seleccionar la opción 2
. En esta ocasión, la herramienta utilizará la exportación realizada previamente, que recupera del Escritorio del usuario en el origen de la ejecución, para analizar las contraseñas.
.\PassTester.ps1
La respuesta en la consola indica, para cada usuario, si la contraseña es vulnerable o no. Además, si varios usuarios tienen la misma contraseña, también se devuelve la información, sin que haya un grupo como con DSInternals. Aquí podemos ver que 3 usuarios tienen una contraseña vulnerable.

V. Lithnet Password Protection para AD
La solución gratuita Lithnet Password Protection para AD incorpora una serie de funciones y no se limita a la auditoría de contraseñas. Por ejemplo, puede utilizarla para bloquear determinadas contraseñas (gracias a un diccionario personalizado).
Al igual que PassTester, la herramienta Lithnet compara los hash de las contraseñas con la base de datos I Have Been Pwn, con la diferencia de que esta herramienta descarga la base de datos localmente. Este paso es un poco complicado porque lleva su tiempo: a pesar de tener una buena conexión a Internet, tardé casi 2 horas en descargar los datos.
Puede descargar la herramienta aquí:
Para auditar sólo las contraseñas, instale únicamente el "módulo PowerShell" durante la instalación. Así:

A continuación, debe crear un almacén para alojar la base de datos de contraseñas HIBP. Puede ser un directorio local o un directorio compartido sincronizado entre varios servidores mediante DFS-R.
Desde una consola PowerShell ejecutada como administrador, puede crear el almacén de la siguiente manera:
New-Item -Path "C:\LithnetStore" -ItemType Directory
Import-Module LithnetPasswordProtection
Set-PasswordFilterConfig -StorePath "C:\LithnetStore"
Aquí, creamos la persiana en la siguiente ubicación : C:LithnetStore
. Una vez hecho esto, abra el almacén mediante PowerShell :
Open-Store -Path "C:\LithnetStore"
A continuación, ejecute la sincronización del hash de la contraseña. Espera.... Se impone una larga pausa. Hay alrededor de 17 GB de datos para descargar.
Sync-HashesFromHibp
Cuando la operación se haya completado, habrá una salida como esta:
OperationStart : 02/04/2025 15:23:10
OperationFinish : 02/04/2025 17:14:36
Duration : 01:51:26.7203447
PagesRetrieved : 1048576
PagesWithChanges : 1048576
PagesUnchanged : 0
NewHashesImported : 1286782039
ExistingHashesDiscarded : 0
TotalHashesProcessed : 1286782039
A continuación, puede utilizar el siguiente script, extraído de la documentación de Lithnet, para analizar su AD. Se basa en el script Test-IsADUserPasswordCompromised
módulo LithnetPasswordProtection
. Aquí se generará un archivo de salida con los usuarios cuyas contraseñas han sido comprometidas : C:TEMPget-pwned-users.csv
.
Import-Module LithnetPasswordProtection
$file = "C:\TEMP\get-pwned-users.csv"
"accountName,UPN,pwdLastSet,lastLogin,accountDisabled" | out-file $file
$Searcher = New-Object System.DirectoryServices.DirectorySearcher
$Searcher.PageSize = 200
$Searcher.SearchScope = "subtree"
$Searcher.Filter = "(&(objectCategory=person)(objectClass=user))"
$Attributes = @("PwdLastSet","lastLogonTimeStamp", "userAccountControl", "userPrincipalName", "name")
ForEach($Attribute In $Attributes)
{
$Searcher.PropertiesToLoad.Add($Attribute) > $Null
}
$Results = $null
$Total = 0
$NumChanged = 0
$Searcher.FindAll() | % {
$user = $_.Properties["UserPrincipalName"][0]
if ($user -eq $null)
{
write-warning "User $($_.Properties["Name"][0]) has a null UPN";
return;
}
$result = Test-IsADUserPasswordCompromised -UPN $user -server localhost
$pwdLastSet = $null
$lastLogin = $null
$disabled = $false;
if ($_.Properties["PwdLastSet"][0] -gt 0)
{
$pwdLastSet = [DateTime]::FromFileTimeUtc($_.Properties["pwdLastSet"][0]).ToLocalTime()
}
if ($_.Properties["lastLogonTimeStamp"][0] -gt 0)
{
$lastLogin = [DateTime]::FromFileTimeUtc($_.Properties["lastLogonTimeStamp"][0]).ToLocalTime()
}
if (($_.Properties["userAccountControl"][0] -band 2) -eq 2)
{
$disabled = $true;
}
if ($result -ne $true)
{
return;
}
$message = "$($_.Properties["Name"][0]),$user,$pwdLastSet,$lastLogin,$disabled"
Write-Output $message
$message | out-file $file -Append
}
El archivo CSV generado como salida contiene una serie de información: nombre de la cuenta, UserPrincipalName (UPN), fecha de la última modificación de la contraseña, fecha de la última conexión y si la cuenta ha sido desactivada (verdadero o falso). He aquí un ejemplo:
accountName,UPN,pwdLastSet,lastLogin,accountDisabled
Florian Burnel,[email protected],09/16/2024 18:43:59,11/29/2024 13:51:38,False
La herramienta Lithnet tiene la ventaja de realizar todo el procesamiento localmente. Este análisis, que puede integrarse en scripts PowerShell, puede automatizarse y ejecutarse con regularidad, lo que supone una ventaja. Por otro lado, esta solución se centra únicamente en la detección de contraseñas comprometidas, mientras que las otras herramientas mencionadas anteriormente realizan un análisis más amplio de los problemas relacionados con las contraseñas.
VI. Conclusión
Existen otras herramientas gratuitas para auditar las contraseñas de Active Directory, pero estas 4 herramientas gratuitas ya cubren muy bien el tema. Con diferentes grados de ligereza y exhaustividad, satisfarán diferentes necesidades, desde los que quieren un script ligero hasta los que quieren una solución completa capaz de generar un informe. De ti depende elegir la herramienta que mejor se adapte a tus necesidades.
Si buscas una herramienta sencilla que no requiera conocimientos técnicos particulares, echa un vistazo a Specops Password Auditor. Es la herramienta más accesible de esta selección y, además, es la única que genera un informe en formato PDF.