jueves, 12 de julio de 2012

Anonymous LDAP Authentication

Para quién no sabe mucho de que van los servidores LDAP, solo imaginen que son una especie de base de datos. Sin embargo a diferencia de las bases de datos relacionales (donde las relaciones pueden ser de todos contra todos formando una red) en los directorios LDAP (así se les llama) las relaciones son jerárquicas, es decir en forma de árbol. Por esta característica son ideales para almacenar información con una estructura jerárquica bien definida, como por ejemplo la estructura organizativa de una empresa.
Fig. 1 - Arbol LDAP de una organización.
LDAP es en realidad el protocolo (o conjunto de protocolos) que se emplean para acceder a la información contenida en un servicio de directorio. Su significado es Lightweight Directory Access Protocol (Protocolo Ligero de Acceso a Directorios).

Otra característica importante de los directorios LDAP es que están optimizados para operaciones de consulta, es decir, responden rápidamente cualquier solicitud de los registros que almacenan. Sin embargo son deficientes cuando se trata de crear nuevos registros o modificar los ya existentes. Por ello su utilidad está en almacenar información que varíe muy poco con el tiempo. Por ejemplo números de teléfono, direcciones, nombres, usuarios, contraseñas, etc.

Para tener una idea de qué información es conveniente almacenar en un directorio LDAP podemos hacernos dos preguntas: ¿Cuantas veces durante el día es requerida esa información? y ¿Cuantas veces durante el día es modificada o se crea una nueva instancia de esa información? Si la respuesta a la primera pregunta es "muchas" y a la segunda "unas pocas o a veces ninguna", entonces un directorio LDAP es conveniente.

La información contenida en un directorio LDAP se emplea comúnmente en los módulos de autenticación de diversos servicios como pueden ser servidores de correo, controladores de dominio u otros sistemas. Es común que una organización emplee un directorio LDAP para "integrar" la autenticación de los diferentes sistemas que utiliza. Así pues los empleados de una empresa podrían iniciar sesión en su PC con el mismo usuario y contraseña que utilizan para su correo corporativo o para la intranet de la organización.

Bien luego de esta introducción estarás de acuerdo conmigo en que la información de un directorio LDAP puede ser de mucha utilidad durante una "auditoría" ¿Verdad? Así que en lo que resta del post explicaré como explotar un vector que puede llevarnos a conseguir esa información.

Como ya lo habrás deducido por el título del post, el vector se trata de autenticarnos en el servidor LDAP como usuario anónimo y es que en muchos casos esta forma de autenticación está habilitada por defecto y/o el administrador la deja habilitada por que sí. Cabe mencionar también que pueden existir otros vectores para obtener dicha información como por ejemplo las inyecciones LDAP.

Lo primero que haremos será buscar servidores LDAP. Este servicio emplea normalmente los puertos 389 y 636. Este último se usa para LDAP sobre SSL. Así que solo debemos lanzar un nmap buscando esos puertos abiertos en el rango de IPs de la organización.

$ nmap -T3 -sT -Pn -sV -oG scan.txt -p 389,636 -v -n xxx.yyy.zzz.0/24

Revisamos los resultados:

$ grep "open" scan.txt

Y si ves una linea como esta, has tenido suerte.

Host: www.xxx.yyy.abc (nombre.dominio.com)    Ports: 389/open/tcp//ldap//(Anonymous bind OK)/, 636/filtered/tcp//ldapssl///

Es importante notar el "Anonymous bind OK", eso significa que el servicio acepta autenticación como usuario anónimo. Si no, aún puedes intentar un ataque por diccionario con el script ldap-brute.nse de nmap.

$ nmap --script=ldap-brute -p 389 xxx.yyy.zzz.abc

Luego podemos utilizar algún cliente LDAP, como por ejemplo Apache Directory Studio para conectar con el servicio. Es muy fácil de configurar, simplemente hay que darle al boton "New Connection" y completar el formulario como se ve en la imagen:

Fig. 2 - Configurando IP y puerto.

Fig. 3 - Conectar como "anonymous".

Luego de darle clic a "Finish" se cargará en la pestaña "LDAP Browser" el arbol de directorios LDAP. El resto es hacer clics y buscar información interesante. Como se dijo anteriormente, la información que podemos encontrar es variada y depende del uso que se le esté dando al directorio LDAP. Particularmente comentaré un par de casos con los que me he topado.

Caso 1: El correo de la empresa

Nada el típico caso de un servicio de email propio de la empresa que autentica a sus usuarios usando un directorio LDAP. En estos casos lo normal es que al conectar como "anonymous" no tengas permisos para ver los passwords. Pero si los tuvieras sería la leche ¿No crees? xD

Fig. 4 - Usuarios del correo corporativo.
En todo caso ya tenemos una lista bastante completa de los nombres y correos de todos los empleados de la organización y muchas veces clasificados por áreas o por tipos de usuario. Esa información nos sirve si planeamos hacer un ataque de ingeniería social vía email o si somos spammers para hacer crecer nuestra lista de correos.

Caso 2: El servidor de integración

En este caso tendremos un servidor LDAP con abundante y variada información puesto que su función es la de integrar muchos otros sistemas de la organización.

Así que nada... que con unas capturas se entiende mejor.

Fig. 5 - Información del servidor LDAP.
Podemos ver que hay información sobre las Aplicaciones que utiliza la organización. Quizá esa información se use en algún sistema de inventario o similar. Como se puede observar incluso se puede ver la versión de las aplicaciones, esta información es bastante útil si planeamos lanzar un exploit que aproveche vulnerabilidades en versiones específicas del software.

Fig. 6 - Aplicaciones de la organización.

Támbien podemos ver abundante información sobre las estaciones de trabajo. Entre los datos destacan el nombre del equipo, el tipo de procesador, el sistema operativo, la dirección IP, la MAC y el usuario del equipo. En este caso vemos un "Windows XP SP2" ¿Estará parcheado?

Fig. 7 - Estaciones de trabajo.
Y claro, también tenemos información de los usuarios. En este caso vemos que hay un usuario "admin" que tiene shell (/bin/bash). Podemos hacer busquedas sobre el arbol LDAP de todos los usuarios con shell y ya tendremos con que empezar a planear un ataque por diccionario al servicio SSH o en general a cualquier servicio puesto que seguramente estará integrado con el directorio LDAP.

Fig. 8 - Información de los usuarios.
En fin...


Conclusiones:
  • Los directorios LDAP pueden contener información interesante como la organización, infraestructura, empleados/usuarios, etc. de una empresa.
  • Muchos administradores olvidan deshabilitar el acceso sin autenticación ("anonymous") al servicio de directorio.
  • Revisar los puertos 389 y 636 en busca de LDAPs mal configurados puede ayudar bastante durante la etapa de "Information Gathering" en una auditoría.

Es todo por hoy, espero les haya gustado el post :)

Saludos.

2 comentarios:

  1. Buena herramienta, ese apache directory studio, cuando las credenciales se almacenan dentro de un ldap, se puede ver por esta herramienta los passwords? o por seguridad nunca se mostraran?

    Gracias por tu respuesta

    ResponderEliminar
  2. Depende de como esté configurado el servidor LDAP, en algunas ocaciones si se puede ver los passwords conectando como Anonymous, pero por lo general no se puede.

    Si es que tienes permiso para ver los passwords, lo usual es que NO estén en texto plano sino encriptados con algún algoritmo: MD5, SHA, CRYPT, etc. y se muestre el hash codificado en Base64.

    Un saludo.

    ResponderEliminar