Enumerating & Retrieving Password Policies
Last updated
Last updated
Como se mencionó en la sección anterior, podemos obtener la política de contraseñas del dominio de varias maneras, dependiendo de la configuración del dominio y de si contamos con credenciales de dominio válidas. Con credenciales de dominio válidas, la política de contraseñas también puede obtenerse remotamente mediante herramientas como o rpcclient
.
Sin credenciales, podríamos obtener la política de contraseñas mediante una sesión SMB NULL o un enlace anónimo LDAP. El primero es mediante una sesión SMB NULL. Las sesiones SMB NULL permiten a un atacante no autenticado obtener información del dominio, como una lista completa de usuarios, grupos, equipos, atributos de cuenta de usuario y la política de contraseñas del dominio. Las configuraciones incorrectas de las sesiones SMB NULL suelen deberse a actualizaciones de controladores de dominio heredados, lo que conlleva configuraciones inseguras, que existían por defecto en versiones anteriores de Windows Server.
Al crear un dominio en versiones anteriores de Windows Server, se concedía acceso anónimo a ciertos recursos compartidos, lo que permitía la enumeración del dominio. Una sesión SMB nula se puede enumerar fácilmente. Para la enumeración, podemos usar herramientas como enum4linux
, CrackMapExec
, rpcclient
, etc.
Podemos utilizar para verificar un controlador de dominio en busca de acceso a sesión SMB NULL.
Una vez conectado, podemos emitir un comando RPC para querydominfo
obtener información sobre el dominio y confirmar el acceso a la sesión NULL.
También podemos obtener la política de contraseñas. Vemos que es relativamente débil, permitiendo una contraseña mínima de 8 caracteres.
Probemos esto con . enum4linux
Es una herramienta basada en el nmblookup
, net
y rpcclient
que smbclient
se utiliza para la enumeración de hosts y dominios de Windows. Está preinstalada en muchas distribuciones de pruebas de penetración, incluyendo Parrot Security Linux. A continuación, se muestra un ejemplo de salida que muestra la información que puede proporcionar enum4linux
. A continuación, se muestran algunas herramientas de enumeración comunes y los puertos que utilizan:
nmblookup
137/UDP
nbtstat
137/UDP
net
139/TCP, 135/TCP, TCP and UDP 135 and 49152-65535
rpcclient
135/TCP
smbclient
445/TCP
Enum4linux-ng nos proporcionó una salida un poco más clara y una salida JSON y YAML útil usando la -oA
bandera.
Es menos común realizar este tipo de ataque de sesión nula desde Windows, pero podríamos usar el comando net use \\host\ipc$ "" /u:""
para establecer una sesión nula desde una máquina Windows y confirmar si podemos realizar más de este tipo de ataques.
También podemos usar una combinación de nombre de usuario y contraseña para intentar conectarnos. Veamos algunos errores comunes al intentar autenticarse:
Aquí podemos ver que la longitud mínima de la contraseña es 8, el umbral de bloqueo es 5 y la complejidad de la contraseña está establecida ( pwdProperties
establecida en 1
).
Si podemos autenticarnos en el dominio desde un host Windows, podemos usar los binarios integrados de Windows, por ejemplo, net.exe
para recuperar la política de contraseñas. También podemos usar diversas herramientas como PowerView, CrackMapExec adaptado a Windows, SharpMapExec, SharpView, etc.
Usar comandos integrados es útil si accedemos a un sistema Windows y no podemos transferirle herramientas, o si el cliente nos asigna un sistema Windows, pero no tenemos forma de transferirle herramientas. Un ejemplo con el binario net.exe integrado es:
Aquí podemos obtener la siguiente información:
Las contraseñas nunca caducan (la edad máxima de la contraseña se establece en Ilimitada)
La longitud mínima de la contraseña es de 8, por lo que es probable que se utilicen contraseñas débiles.
El umbral de bloqueo es de 5 contraseñas incorrectas
Las cuentas permanecieron bloqueadas durante 30 minutos
Esta política de contraseñas es excelente para la pulverización de contraseñas. El mínimo de ocho caracteres permite probar contraseñas débiles comunes como [nombre del Welcome1
usuario]. El límite de bloqueo de 5 caracteres permite de 2 a 3 intentos (por seguridad) cada 31 minutos sin riesgo de bloquear ninguna cuenta. Si una cuenta ha sido bloqueada, se desbloqueará automáticamente (sin intervención manual del administrador) después de 30 minutos, pero debemos evitar bloquear ANY
cuentas a toda costa.
PowerView también es bastante útil para esto:
PowerView nos dio el mismo resultado que nuestro net accounts
comando, solo que en un formato diferente, pero también reveló que la complejidad de la contraseña está habilitada ( PasswordComplexity=1
).
Al igual que con Linux, disponemos de numerosas herramientas para recuperar la política de contraseñas en un sistema Windows, ya sea nuestro sistema de ataque o uno proporcionado por el cliente. PowerView/SharpView son siempre una buena opción, al igual que CrackMapExec, SharpMapExec y otras. La elección de las herramientas depende del objetivo de la evaluación, las consideraciones de sigilo, cualquier antivirus o EDR instalado y otras posibles restricciones en el host objetivo. Veamos algunos ejemplos.
Hemos revisado la política de contraseñas de varias maneras. Analicemos la política del dominio INLANEFREIGHT.LOCAL paso a paso.
La longitud mínima de la contraseña es de 8 (8 es muy común, pero hoy en día, vemos que cada vez más organizaciones exigen una contraseña de 10 a 14 caracteres, lo que puede eliminar algunas opciones de contraseña para nosotros, pero no mitiga por completo el vector de pulverización de contraseñas)
El umbral de bloqueo de la cuenta es 5 (no es raro ver un umbral inferior, como 3, o incluso ningún umbral de bloqueo establecido)
La duración del bloqueo es de 30 minutos (puede ser mayor o menor dependiendo de la organización), por lo que si bloqueamos accidentalmente (¡evitemos!) una cuenta, se desbloqueará después de que pase la ventana de 30 minutos.
Las cuentas se desbloquean automáticamente (en algunas organizaciones, el administrador debe desbloquear la cuenta manualmente). Nunca queremos bloquear cuentas mientras se rocía contraseñas, pero sobre todo queremos evitar bloquear cuentas en una organización donde un administrador tendría que intervenir y desbloquear cientos (o miles) de cuentas manualmente o mediante un script.
La complejidad de la contraseña está habilitada, lo que significa que un usuario debe elegir una contraseña con 3/4 de los siguientes: una letra mayúscula, una letra minúscula, un número, un carácter especial ( Password1
o Welcome1
que satisfaga el requisito de "complejidad" aquí, pero que aún sean contraseñas claramente débiles).
La política de contraseña predeterminada cuando se crea un nuevo dominio es la siguiente, y ha habido muchas organizaciones que nunca cambiaron esta política:
Política
Valor predeterminado
Hacer cumplir el historial de contraseñas
24 días
Edad máxima de la contraseña
42 días
Edad mínima de la contraseña
1 día
Longitud mínima de la contraseña
7
La contraseña debe cumplir con los requisitos de complejidad
Activado
Almacenar contraseñas usando cifrado reversible
Desactivado
Duración del bloqueo de la cuenta
No establecido
Umbral de bloqueo de cuenta
0
Restablecer el contador de bloqueo de cuenta después
No establecido
Ahora que tenemos la política de contraseñas en la mano, necesitamos crear una lista de usuarios objetivo para nuestro ataque de rociado de contraseñas. Recuerde que, en ocasiones, no podremos obtener la política de contraseñas si realizamos un rociado de contraseñas externo (o si estamos en una evaluación interna y no podemos recuperarla mediante ninguno de los métodos que se muestran aquí). En estos casos, MUST
extremamos la precaución para no bloquear las cuentas. Siempre podemos solicitar a nuestro cliente su política de contraseñas si el objetivo es una evaluación lo más completa posible. Si solicitar la política no se ajusta a las expectativas de la evaluación o el cliente no desea proporcionarla, deberíamos realizar uno o dos intentos de rociado de contraseñas (independientemente de si somos internos o externos) y esperar más de una hora entre intentos si decidimos intentar dos. Si bien la mayoría de las organizaciones tienen un umbral de bloqueo de 5 intentos de contraseña incorrectos, una duración de bloqueo de 30 minutos y las cuentas se desbloquean automáticamente, no siempre podemos dar por sentado que esto sea normal. He visto muchas organizaciones con un umbral de bloqueo de 3, que requieren la intervención de un administrador para desbloquear las cuentas manualmente.
La herramienta es una reescritura de enum4linux
Python, pero ofrece funciones adicionales, como la posibilidad de exportar datos como archivos YAML o JSON, que posteriormente pueden utilizarse para procesarlos o alimentarlos a otras herramientas. También admite salida en color, entre otras funciones.
permiten a atacantes no autenticados obtener información del dominio, como una lista completa de usuarios, grupos, equipos, atributos de cuentas de usuario y la política de contraseñas del dominio. Esta configuración es heredada y, a partir de Windows Server 2003, solo los usuarios autenticados pueden iniciar solicitudes LDAP. Esta configuración aún se observa ocasionalmente, ya que un administrador puede haber tenido que configurar una aplicación específica para permitir enlaces anónimos y haber otorgado más acceso del previsto, otorgando así a los usuarios no autenticados acceso a todos los objetos de AD.
Con un enlace anónimo de LDAP, podemos usar herramientas de enumeración específicas de LDAP, como windapsearch.py
, ldapsearch
, ad-ldapdomaindump.py
, etc., para extraer la política de contraseñas. Con , puede ser un poco engorroso, pero factible. Un ejemplo de comando para obtener la política de contraseñas es el siguiente: