Password Spraying - Making a Target User List
Last updated
Last updated
Para ejecutar un ataque de rociado de contraseñas con éxito, primero necesitamos una lista de usuarios válidos del dominio con los que intentar autenticarnos. Hay varias maneras de obtener una lista objetivo de usuarios válidos:
Aprovechando una sesión SMB NULL para recuperar una lista completa de usuarios del dominio desde el controlador de dominio
Utilizar un enlace anónimo LDAP para consultar LDAP de forma anónima y extraer la lista de usuarios del dominio
Usar una herramienta como, por ejemplo, Kerbrute
validar usuarios utilizando una lista de palabras de una fuente como el repositorio de GitHub , o recopiladas mediante una herramienta como para crear una lista de usuarios potencialmente válidos
Utilizando un conjunto de credenciales de un sistema de ataque Linux o Windows proporcionado por nuestro cliente u obtenido a través de otros medios, como el envenenamiento de respuesta LLMNR/NBT-NS Responder
o incluso una pulverización de contraseñas exitosa utilizando una lista de palabras más pequeña
Independientemente del método que elijamos, también es fundamental considerar la política de contraseñas del dominio. Si tenemos una sesión SMB nula, un enlace anónimo LDAP o un conjunto de credenciales válidas, podemos enumerar la política de contraseñas. Tener esta política a mano es muy útil, ya que la longitud mínima de la contraseña y la habilitación de la complejidad de la contraseña nos ayudan a definir la lista de contraseñas que probaremos en nuestros intentos de rociado. Conocer el umbral de bloqueo de cuentas y el temporizador de contraseñas incorrectas nos indicará cuántos intentos de rociado podemos realizar simultáneamente sin bloquear ninguna cuenta y cuántos minutos debemos esperar entre intentos.
De nuevo, si desconocemos la política de contraseñas, siempre podemos preguntarle a nuestro cliente y, si no nos la proporciona, podemos intentar un rociado de contraseñas muy selectivo como medida de salvaguardia si se han agotado todas las demás opciones. También podríamos intentar un rociado cada pocas horas para intentar no bloquear ninguna cuenta. Independientemente del método que elijamos, y tengamos o no la política de contraseñas, siempre debemos mantener un registro de nuestras actividades, incluyendo, entre otras:
Las cuentas atacadas
Controlador de dominio utilizado en el ataque
Hora del spray
Fecha de la pulverización
Contraseña(s) intentadas
Esto nos ayudará a garantizar que no dupliquemos esfuerzos. Si se produce un bloqueo de cuenta o nuestro cliente detecta intentos de inicio de sesión sospechosos, podemos proporcionarle nuestras notas para que las compare con sus sistemas de registro y se asegure de que no haya actividad maliciosa en la red.
Si está en una máquina interna pero no tiene credenciales de dominio válidas, puede buscar sesiones SMB nulas o enlaces LDAP anónimos en los controladores de dominio. Cualquiera de estas opciones le permitirá obtener una lista precisa de todos los usuarios de Active Directory y la política de contraseñas. Si ya tiene credenciales para un usuario de dominio o SYSTEM
acceso en un host Windows, puede consultar fácilmente Active Directory para obtener esta información.
Es posible hacerlo usando la cuenta SYSTEM, ya que puede acceder impersonate
al equipo. Un objeto de equipo se trata como una cuenta de usuario de dominio (con algunas diferencias, como la autenticación entre confianzas de bosque). Si no tiene una cuenta de dominio válida y no son posibles las sesiones SMB nulas ni los enlaces anónimos LDAP, puede crear una lista de usuarios utilizando recursos externos como la recopilación de correo electrónico y LinkedIn. Esta lista de usuarios no será tan completa, pero podría ser suficiente para proporcionarle acceso a Active Directory.
Podemos utilizar el enumdomusers
comando después de conectarnos anónimamente usando rpcclient
.
Finalmente, podemos usar CrackMapExec
la --users
bandera. Esta herramienta útil también muestra los badpwdcount
intentos de inicio de sesión no válidos, lo que nos permite eliminar cualquier cuenta de nuestra lista que esté cerca del umbral de bloqueo. También muestra la baddpwdtime
fecha y hora del último intento de contraseña incorrecta, lo que nos permite ver cuánto falta para que se restablezca una cuenta badpwdcount
. En un entorno con varios controladores de dominio, este valor se mantiene por separado para cada uno. Para obtener un total preciso de los intentos de contraseña incorrecta de la cuenta, tendríamos que consultar cada controlador de dominio y usar la suma de los valores, o consultar el controlador de dominio con el rol FSMO del emulador PDC.
Herramientas como windapsearch
estas facilitan esto (aunque aún debemos entender cómo crear nuestros propios filtros de búsqueda LDAP). Aquí podemos especificar el acceso anónimo proporcionando un nombre de usuario en blanco con la -u
bandera y la -U
bandera para indicarle a la herramienta que solo recupere usuarios.
Como se menciona en la Initial Enumeration of The Domain
sección, si no tenemos ningún acceso desde nuestra posición en la red interna, podemos utilizar Kerbrute
para enumerar cuentas de AD válidas y para rociar contraseñas.
Con credenciales válidas, podemos usar cualquiera de las herramientas mencionadas anteriormente para crear una lista de usuarios. Una forma rápida y sencilla es usar CrackMapExec.
Algunas herramientas que pueden aprovechar las sesiones SMB NULL y los enlaces anónimos LDAP incluyen , y , entre otras. Independientemente de la herramienta, tendremos que aplicar un poco de filtrado para limpiar la salida y obtener una lista que incluya solo nombres de usuario, uno en cada línea. Podemos hacerlo con enum4linux
la -U
bandera.
Podemos usar varias herramientas para recopilar usuarios al encontrar un enlace LDAP anónimo. Algunos ejemplos son y . Si optamos por usarlas, ldapsearch
necesitaremos especificar un filtro de búsqueda LDAP válido. Podemos obtener más información sobre estos filtros de búsqueda en el módulo .
Esta herramienta utiliza , una forma mucho más rápida y potencialmente más discreta de rociar contraseñas. Este método no genera el ID de evento de Windows (Error al iniciar sesión en una cuenta) ni un error de inicio de sesión, que suele monitorizarse. La herramienta envía solicitudes TGT al controlador de dominio sin autenticación previa Kerberos para enumerar el nombre de usuario. Si el KDC responde con el error PRINCIPAL UNKNOWN
, el nombre de usuario no es válido. Siempre que el KDC solicita la autenticación previa Kerberos, indica que el nombre de usuario existe y la herramienta lo marca como válido. Este método de enumeración de nombre de usuario no causa errores de inicio de sesión ni bloquea las cuentas. Sin embargo, una vez que tengamos una lista de usuarios válidos y empecemos a usar esta herramienta para rociar contraseñas, los intentos fallidos de autenticación previa Kerberos se contabilizarán en las cuentas con inicio de sesión fallido y pueden provocar el bloqueo de la cuenta, por lo que debemos ser precavidos independientemente del método elegido.
Probemos este método usando la lista de palabras con 48,705 posibles nombres de usuario comunes en el formato flast
. El repositorio de GitHub es un excelente recurso para este tipo de ataque y contiene diversas listas de nombres de usuario que podemos usar para enumerar nombres de usuario válidos usando Kerbrute
.
Hemos revisado más de 48.000 nombres de usuario en poco más de 12 segundos y hemos descubierto más de 50 válidos. El uso de Kerbrute para la enumeración de nombres de usuario generará el ID de evento . Esto solo se activará si está habilitado mediante la directiva de grupo. Los defensores pueden ajustar sus herramientas SIEM para detectar una afluencia de este ID de evento, lo que podría indicar un ataque. Si tenemos éxito con este método durante una prueba de penetración, esta puede ser una excelente recomendación para añadir a nuestro informe.
Si no podemos crear una lista de nombres de usuario válida utilizando ninguno de los métodos destacados anteriormente, podríamos recurrir a la recopilación de información externa y buscar direcciones de correo electrónico de la empresa o utilizar una herramienta como para combinar posibles nombres de usuario de la página de LinkedIn de una empresa.