lunes, 7 de diciembre de 2009

Enumeracion LDAP

Hola a todos. Lamentablemente el trabajo hace algo difícil el postear nuevo contenido en este blog, sin embargo, y después de un buen tiempo, me siento a escribir un nuevo post para las personas que de cuando en vez sintonizan este canal.

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.