Enumeración LDAP

Mauricio Velazco de Open-Sec nos remite esta vez un interesante artículo que nos enseñará cómo enumerar los usuarios de un Directorio Activo a través de consultas LDAP, sin duda la fase previa a un password cracking. Como siempre, estamos encantados de redifundir el post:

En esta oportunidad quiero enfocarme en un tema que no siempre aparece en un proyecto de Ethical Hacking, tal es el caso del password cracking. Voy a tocar algo de teoría (bibliografía: www.google.com), definir un probable escenario y dar algunos tips para obtener usuarios válidos dentro de un dominio o un servidor LDAP.
Primero vamos a definir el término "password cracking", según wikipedia:



El password cracking es un proceso informático que consiste en descifrar la contraseña de determinadas aplicaciones elegidas por el usuario. Se trata del rompimiento o desciframiento de claves (passwords).

Un concepto bastante conocido, sin embargo, muchos se preguntarán para qué sirve en un proyecto de Ethical Hacking. Pues para auditar la robustez (o la falta) de políticas de passwords utilizadas en una organización.

Como toda etapa del EH, busca tomar evidencias para emitir una recomendación de mejora. En este caso, por ejemplo, si nos encontramos con el password "123456" en un servicio importante la recomendación es implementar una política de passwords que tenga en cuenta entre otras cosas la longitud, el tiempo de expiración, no utilizar palabras de diccionario, no usar cumpleaños, etc. Un buen recurso aquí:
www.sans.org/security-resources/policies/Password_Policy.pdf
También pueden realizar una búsqueda con los términos: "password policy", "password policy standard" en nuestro amigo google, seguro dará buenos resultados.

Ahora el escenario. Estamos realizando un EH interno y llegamos a la etapa de password cracking. El cliente ya eligió a qué servicios se hará el test, tenemos un servidor de correos y un servicio de intranet. Tenemos a nuestra disposición varios diccionarios de passwords de varios temas y en distintos idiomas. El problema surge: Si queremos que el test tenga los resultados esperados, ¿qué diccionario de usuarios utilizar?.


Es aqui donde nos aprovechamos de un recurso muy utilizado en redes basadas en Windows, el Active Directory. El directorio activo es la implementación de Windows de LDAP (Lightweight Directory Access Protocol) que contiene un árbol jerarquizado de objetos categorizados. Permite a los administradores de red realizar tareas como establecer políticas, desplegar programas en muchos ordenadores y aplicar actualizaciones críticas a toda la organización.

Para nuestros fines, nos centraremos en sólo un tipo de objeto contenido en el árbol: los usuarios.
En resumen, para crear el diccionario vamos a enumerar los usuarios del directorio activo o del servidor LDAP haciendo consultas al árbol y de esta forma armar una base de datos con los nombres de usuario registrados para lanzar el test de password cracking.

Tenemos diferentes estrategias para lograr el objetivo de acuerdo al tipo de evaluación:


Black Box.

  • En este caso intentamos una conexión anónima al servidor LDAP, para el caso de controladores de dominio en Microsoft Windows 2000 lo más probable es que podamos realizar esta enumeración anónima sin problemas.
  • Otra estrategia es escuchar el tráfico en la red para poder obtener un usuario y contraseña válidos y con estas credenciales realizar la enumeración LDAP.
  • Además es posible extraer credenciales válidas de diversas formas, como por ejemplo mediante las credenciales de un sistema transaccional a la base de datos, y otras más.
Gray Box y White Box.
  • Podemos utilizar las credenciales de un usuario del dominio, o de una cuenta de correo.
  • En el 90% de organizaciones en las que he participado en un EH interno la salida a internet es filtrada por medio de un proxy a manera de aumentar la velocidad (a traves de la cache) y restringir a los usuarios según sus privilegios (utilizando el directorio activo). Así que también se puede utilizar estas credenciales.
Pasos a Seguir. Primero es necesario identificar al DA:
nmap -p389 --open 10.0.0.0/24
En el caso del controlador de dominio el servidor LDAP suele estar en el servidor que utilizamos como DNS. Una vez identificado el servicio necesitamos hacerle las consultas, pero cómo?? En este caso utilizaremos la herramienta ldapsearch que viene con el paquete ldap-utils. Ok, aprendamos a usar ldapsearch:
man ldapsearch
Luego de leer la pagina del man, buscar ejemplos en google y preguntarle al colega :P, obtenemos el comando.
ldapsearch "objectclass=user" -h 10.0.0.43 -b "dc=organizacion,dc=com,dc=pe" -D "usuario@organizacion.com.pe" -w "passw0rd" > ldapdump.txt
"objectclass=user" Para determinar que solo queremos consultar a objetos del tipo "user" -h La ip del Directorio Activo -b La base del directorio LDAP -D El usuario con el que nos conectamos al servidor -w El password del usuario > Dumpeamos todo en un fichero de nombre ldapdump.txt

Wow tenemos un archivo con 64903 lineas! Que buscamos??. En la imagen observamos la entrada de un usuario (alguna información fue cambiada y otra escondida por obvias razones). Ldapsearch nos retorna mucha información sobre el usuario como grupos a los cuales pertenece, la última vez que se logueó en el dominio, quota de la cuenta del correo, etc, etc. Pero a nosotros sólo nos interesa el nombre de usuario. Ese dato se encuentra en la variable "sAMAccountName". Ese es el usuario con el que se loguea a los servicios.


Aprovechamos el poder de nuestra shell bash para cortar el archivo y sólo sacar los usuarios del archivo de texto utilizando los comandos grep, cut y sort.

cat ldapdump.txt | grep 'sAMAccountName' | cut -d' ' -f2 | sort > usersDominio.txt
En la imagen se puede ver el resultado.

El resultado, un fichero de 888 lineas donde cada linea es un usuario.
Done, contamos con una base de datos de todos los usuarios registrados en el dominio.

Ahora es momento de utilizar la herramientas de password cracking con la que se sientan más cómodos. Recomiendo Hydra.
Esto es todo, espero les haya gustado, y no duden en dar comentarios/dudas/críticas/quejas.

Gracias a CCuadra por la revisión,

saludos


MVelazco .

6 comentarios :

  1. Muchas gracias por compatirlo! Muy interesante, de verdad.

    ResponderEliminar
  2. Hola buen dia,

    Excelente articulo. Solo una pregunta. Para poder lanzar la consulta al servidor ldap con la herramienta que mencionas no es necesario tener privilegios administrativos?.. o cualquier cuenta la puede hacer con solo tener una credencial en el dominio?

    ResponderEliminar
  3. En Microsoft Windows 2000 lo más probable es que podamos realizar esta enumeración anónima sin problemas.

    En el resto de los casos, normalmente podemos utilizar las credenciales de un usuario del dominio, o de una cuenta de correo.

    Saludos

    ResponderEliminar
  4. Hola buenas. Queria sacar la ip o nombre de equipo en el que esta logado un usuario del DA. No soy admin, tengo varios datos ya del usuario que vi buscandole en el directorio desde compartir, pero no vi el nombre del equipo o algo que me sirva para localizarlo. De momento estoy con wmic computersystem get username y cosas parecidas pero no tengo suerte contra esos equipos, (o el rpc no esta disponible o acceso denegado cuando en el resto de la organizacion me vale un admin semi-avanzado que tengo por ahi. Alguna idea??

    Gracias por el articulo.

    ResponderEliminar
  5. conseguido!

    vi el nmobre del server en el que validaba y le hize un snmpwalk con bastante exito xD
    encontre al usuario rebuscando por ahi y luego relacione la ip en otro lugar de la megalista que saque del snmp. en mi caso fue contar 22 lineas desde que empezaban los usuarios, y 22 mas arriba donde empezaban las ip's. Luego un regedit remoto para asegurarme que ese era el equipo... y bingo!

    Por si sirve a alquien.

    ResponderEliminar
  6. No me diste tiempo ni a mirarlo @anonimo.

    Enhorabuena y muchas gracias por compartir la información!!

    ResponderEliminar