🔑Atacando Active Directory
Última actualización
Última actualización
Active Directory
( AD
) es un servicio de directorio común y crítico en las redes empresariales modernas. AD es algo que encontraremos repetidamente, por lo que debemos estar familiarizados con varios métodos que podemos usar para atacar y defender estos entornos AD. Es seguro concluir que si la organización usa Windows, entonces se usa AD para administrar esos sistemas Windows. Atacar AD es un tema tan extenso y significativo que tenemos varios módulos que cubren AD.
En esta sección, nos centraremos principalmente en cómo podemos extraer credenciales mediante el uso de un ataque de diccionario contra cuentas AD
y dumpear hashes
del archivo NTDS.dit
.
Como muchos de los ataques que hemos cubierto hasta ahora, nuestro objetivo debe ser accesible a través de la red. Esto significa que es muy probable que necesitemos tener un punto de apoyo o foothold
establecido en la red interna a la que está conectado el objetivo. Dicho esto, hay situaciones en las que una organización puede estar utilizando el reenvío de puertos para reenviar el protocolo de escritorio remoto ( 3389
) u otros protocolos utilizados para el acceso remoto en su enrutador perimetral a un sistema en su red interna. Tenga en cuenta que la mayoría de los métodos cubiertos en este módulo simulan los pasos posteriores a un compromiso inicial y se establece un punto de apoyo en una red interna. Antes de ponernos manos a la obra con los métodos de ataque, consideremos el proceso de autenticación una vez que un sistema Windows se ha unido al dominio. Este enfoque nos ayudará a comprender mejor la importancia de Active Directory y los ataques a contraseñas a los que puede ser susceptible.
Una vez que un sistema Windows se une a un dominio, ya no se hace referencia predeterminada a la base de datos SAM para validar las solicitudes de inicio de sesión
. Ese sistema unido a un dominio ahora enviará todas las solicitudes de autenticación para que el controlador de dominio las valide antes de permitir que un usuario inicie sesión. Esto no significa que la base de datos SAM ya no pueda utilizarse.
Alguien que quiera iniciar sesión usando una cuenta local en la base de datos SAM aún puede hacerlo especificando el dispositivo hostname
seguido por Username
(Ejemplo:) WS01/nameofuser
o con acceso directo al dispositivo y luego escribiendo ./
en la interfaz de usuario de inicio de sesión en el campo Username
. Esto es digno de consideración porque debemos tener en cuenta qué componentes del sistema se ven afectados por los ataques que realizamos.
También puede brindarnos vías de ataque adicionales a considerar cuando apuntamos a sistemas operativos de escritorio de Windows o sistemas operativos de servidores de Windows con acceso físico directo o a través de una red. Hay que tener en cuenta que también podemos estudiar los ataques NTDS haciendo un seguimiento de esta técnica .
Tenga en cuenta que un ataque de diccionario consiste esencialmente en utilizar la potencia de una computadora para adivinar un nombre de usuario y/o contraseña utilizando una lista personalizada de posibles nombres de usuario y contraseñas. Puede ser bastante noisy
(fácil de detectar) llevar a cabo estos ataques a través de una red porque pueden generar una gran cantidad de tráfico de red y alertas en el sistema de destino, así como eventualmente ser rechazados debido a restricciones de intento de inicio de sesión que pueden aplicarse mediante el uso de Política de grupo .
Cuando nos encontramos en un escenario en el que un ataque de diccionario es el siguiente paso viable, podemos beneficiarnos al intentar nuestro ataque tanto como sea posible. En este caso, podemos considerar la organización con la que estamos trabajando para realizar la interacción y utilizar búsquedas en varios sitios web de redes sociales y buscar un directorio de empleados en el sitio web de la empresa. Hacer esto puede resultar en que obtengamos los nombres de los empleados que trabajan en la organización. Una de las primeras cosas que obtendrá un nuevo empleado es un nombre de usuario. Muchas organizaciones siguen una convención de nomenclatura al crear nombres de usuarios de empleados. Aquí hay algunas convenciones comunes a considerar:
Muchas veces, la estructura de una dirección de correo electrónico nos dará el nombre de usuario del empleado (estructura: nombre de usuario@dominio). Por ejemplo, de la dirección de correo electrónico jdoe@inlanefreight.com
, vemos que jdoe
es el nombre de usuario.
Un consejo de MrB3n: a menudo podemos encontrar la estructura del correo electrónico buscando en Google el nombre de dominio, es decir, "@inlanefreight.com" y obtener algunos correos electrónicos válidos. A partir de ahí, podemos utilizar un script para extraer varios sitios de redes sociales y combinar posibles nombres de usuario válidos. Algunas organizaciones intentan ofuscar sus nombres de usuario para evitar el password spraying, por lo que pueden asignarles un alias como a907 (o algo similar) a joe.smith. De esa manera, los mensajes de correo electrónico pueden llegar, pero el nombre de usuario interno real no se revela, lo que dificulta la difusión de contraseñas. A veces puedes usar Google Dorks para buscar “tipo de archivo inlanefreight.com: pdf” y encontrar algunos nombres de usuario válidos en las propiedades del PDF si se generaron usando un editor de gráficos. A partir de ahí, es posible que pueda discernir la estructura del nombre de usuario y potencialmente escribir un pequeño script para crear muchas combinaciones posibles y luego rociar para ver si alguna resulta válida.
Digamos que hemos investigado y recopilado una lista de nombres basada en información disponible públicamente. Mantendremos la lista relativamente corta para esta lección porque las organizaciones pueden tener una gran cantidad de empleados. Lista de ejemplo de nombres:
Ben Williamson
Bob Burgerstien
Jim Stevenson
Jill Johnson
fulano de tal
Podemos crear una lista personalizada en nuestro host de ataque usando los nombres anteriores. Podemos usar un editor de texto basado en línea de comandos como nano o gedit
o un editor de texto gráfico para crear nuestra lista. Nuestra lista puede verse así:
Por supuesto, esto es solo un ejemplo y no incluye todos los nombres, pero observe cómo podemos incluir una convención de nomenclatura diferente para cada nombre si aún no conocemos la convención de nomenclatura utilizada por la organización de destino.
Podemos crear manualmente nuestra(s) lista(s) o utilizar una herramienta de generación automática de usernames
como Username Anarchy para convertir una lista de nombres reales en formatos de nombre de usuario comunes. Una vez que la herramienta se haya clonado en nuestro host de ataque local usando Git
, podemos ejecutarla con una lista de nombres reales como se muestra en el siguiente ejemplo:
El uso de herramientas automatizadas puede ahorrarnos tiempo al elaborar listas. Aún así, nos beneficiará dedicar todo el tiempo que podamos a intentar descubrir la convención de nomenclatura que utiliza una organización con los nombres de usuario porque esto reducirá la necesidad de adivinar la convención de nomenclatura.
Es ideal para limitar al máximo la necesidad de adivinar al realizar ataques a contraseñas.
Una vez que tengamos nuestra lista preparada o descubramos la convención de nomenclatura y algunos nombres de empleados, podemos lanzar nuestro ataque contra el controlador de dominio objetivo utilizando una herramienta como CrackMapExec. Podemos usarlo junto con el protocolo SMB para enviar solicitudes de inicio de sesión al controlador de dominio de destino. Aquí está el comando para hacerlo:
En este ejemplo, CrackMapExec utiliza SMB para intentar iniciar sesión como usuario ( -u
) bwilliamson
usando una lista de contraseñas ( -p
) que contiene una lista de contraseñas de uso común ( /usr/share/wordlists/fasttrack.txt
). Si los administradores configuraron una política de bloqueo de cuenta, este ataque podría bloquear la cuenta a la que nos dirigimos. En el momento de escribir este artículo (enero de 2022), no se aplica una política de bloqueo de cuenta de forma predeterminada con las políticas de grupo predeterminadas que se aplican a un dominio de Windows, lo que significa que es posible que nos encontremos con entornos vulnerables a este ataque exacto que estamos practicando. .
Puede resultar útil saber qué pudo haber quedado tras un ataque. Saber esto puede hacer que nuestras recomendaciones de reparación sean más impactantes y valiosas para el cliente con el que trabajamos. En cualquier sistema operativo Windows, un administrador puede navegar a Event Viewer
y ver los eventos de seguridad para ver las acciones exactas que se registraron. Esto puede informar las decisiones para implementar controles de seguridad más estrictos y ayudar en cualquier posible investigación que pueda estar involucrada después de una infracción.
Una vez que hayamos descubierto algunas credenciales, podríamos proceder a intentar obtener acceso remoto al controlador de dominio de destino y capturar el archivo NTDS.dit.
NT Directory Services
( NTDS
) es el servicio de directorio utilizado con AD para buscar y organizar recursos de red. El archivo NTDS.dit
se almacena en %systemroot%/ntds
en los controladores de dominio en un bosque . El .dit
significa directory information tree. Este es el archivo de base de datos principal asociado con AD y almacena todos los nombres de usuario del dominio, hashes de contraseñas y otra información crítica del esquema. Si se puede capturar este archivo, podríamos potencialmente comprometer todas las cuentas del dominio de forma similar a la técnica que cubrimos en la sección Atacando a SAM
de este módulo. Mientras practicamos esta técnica, considere la importancia de proteger AD y piense en algunas formas de evitar que ocurra este ataque.
Podemos conectarnos a un Domain Controller utilizando las credenciales que capturamos.
Evil-WinRM se conecta a un objetivo mediante el servicio de administración remota de Windows combinado con el protocolo de comunicación remota de PowerShell para establecer una sesión de PowerShell con el objetivo.
Una vez conectados, podemos comprobar qué privilegios tiene bwilliamson
. Podemos comenzar mirando la membresía del grupo local usando el comando:
Estamos comprobando si la cuenta tiene derechos de administrador local. Para hacer una copia del archivo NTDS.dit, necesitamos derechos de administrador local ( Administrators group
) o administrador de dominio ( Domain Admins group
) o equivalente. También querremos comprobar qué privilegios de dominio tenemos.
Esta cuenta tiene derechos de Administrador y de Administrador de dominio, lo que significa que podemos hacer casi cualquier cosa que queramos, incluida hacer una copia del archivo NTDS.dit.
Podemos usar vssadmin
para crear una Volume Shadow Copy (VSS
) de la unidad C: o cualquier volumen que el administrador eligió al instalar AD inicialmente. Es muy probable que NTDS se almacene en C: ya que esa es la ubicación predeterminada seleccionada durante la instalación, pero es posible cambiar la ubicación. Usamos VSS para esto porque está diseñado para hacer copias de volúmenes que se pueden leer y escribir activamente sin necesidad de desactivar una aplicación o sistema en particular. VSS es utilizado por muchos programas diferentes de respaldo y recuperación ante desastres para realizar operaciones.
Luego podemos copiar el archivo NTDS.dit de la instantánea del volumen de C: a otra ubicación en la unidad para prepararnos para mover NTDS.dit a nuestro host de ataque.
Antes de copiar NTDS.dit a nuestro host de ataque, es posible que deseemos utilizar la técnica que aprendimos anteriormente para crear un recurso compartido SMB en nuestro host de ataque. No dude en volver a la sección Atacando a SAM
para revisar ese método si es necesario.
Ahora se puede utilizar cmd.exe /c move
para mover el archivo desde el DC de destino al recurso compartido en nuestro host de ataque.
Alternativamente, podemos beneficiarnos del uso de CrackMapExec para realizar los mismos pasos que se muestran arriba, todo con un solo comando. Este comando nos permite utilizar VSS para capturar y volcar rápidamente el contenido del archivo NTDS.dit cómodamente dentro de nuestra sesión de terminal.
Podemos continuar con la creación de un archivo de texto que contenga todos los hashes NT, o podemos copiar y pegar individualmente un hash específico en una sesión de terminal y usar Hashcat para intentar descifrar el hash y una contraseña en texto sin cifrar.
En muchas de las técnicas que hemos cubierto hasta ahora, hemos tenido éxito en descifrar los hashes que hemos obtenido.
¿Qué pasa si no logramos descifrar un hash?
Todavía podemos usar hashes para intentar autenticarnos en un sistema mediante un tipo de ataque llamado Pass-the-Hash
( PtH
). Un ataque PtH aprovecha el protocolo de autenticación NTLM para autenticar a un usuario mediante un hash de contraseña. En lugar de username
: clear-text password
como formato para iniciar sesión, podemos usar username
: password-hash
. A continuación se muestra un ejemplo de cómo funcionaría esto:
Podemos intentar utilizar este ataque cuando necesitemos movernos lateralmente a través de una red después del compromiso inicial de un objetivo.
En un compromiso, visitó varios sitios de redes sociales y encontró los nombres de los empleados de Inlanefreight: John Marston IT Director, Carol Johnson Financial Controller y Jennifer Stapleton Logistics Manager. Decide utilizar estos nombres para realizar sus ataques de contraseña contra el controlador de dominio de destino. Envíe las credenciales de
John Marston
como respuesta. (Formato: nombre de usuario:contraseña, distingue entre mayúsculas y minúsculas).
Vamos a crear un archivo de texto names.txt
con esos usuarios y los cargos separados:
Luego con username anarchy vamos a mutar esas palabras:
Nos interesan solo las del usuario John Marston, asi que nos crearemos un documento solo con las palabras asociadas a el.
Entonces vamos a atacar al DC con CrackMapExec para encontrar el password utilizando la lista de nombres de usuario:
Encontramos las credenciales para el usuario jmarston:
Capture el archivo NTDS.dit y descargue los hashes. Utilice las técnicas que se enseñan en esta sección para descifrar la contraseña de Jennifer Stapleton. Envíe su contraseña en texto claro como respuesta.
De igual manera que el anterior usuario, cogemos los nombres de usuario generados por Username Anarchy pero para Jennifer Stapleton:
Y usamos esta wordlist para atacar el DC con CrackMapExec:
Tenemos las credenciales, jstapleton:Winter2008
, pero igualmente vamos a capturar el ntds.dit con Evil-WinRM:
Con estas credenciales no nos podemos conectar por Evil-WinRM, nos da un error, asi que nos conectamos con las credenciales de John:
Nos conectamos correctamente, y enumeramos info del usuario jstapleton
:
Como vemos Jennifer no tiene permisos en el sistema, por lo que tendremos que acceder al ntds.dit
con el usuario John, que si tiene permisos de administrador en el sistema :
Creamos una Shadow Copy de C y copiamos el NTDS.dit en C:
Ahora nos transferimos el archivo NTDS.dit
a nuestro equipo de atacante de la siguiente manera:
Ya tenemos el archivo en home/kali/Descargas
, y podríamos crackear los hashes con hashcat para obtener las contraseñas en plano.
Convención de nombre de usuario
Ejemplo práctico para Jane Jill Doe
firstinitiallastname
jdoe
firstinitialmiddleinitiallastname
jjdoe
firstnamelastname
fulano de tal
firstname.lastname
fulano de tal
lastname.firstname
doe.jane
nickname
doedoehacksstuff