0x01 Introducción

Lo primero que quiero aclarar en esta introducción es que no voy a extenderme en cómo funciona LDAP, ni en los estándares en que basa su estructura. Con ello quiero decir que es más que recomendable que amplieis información, puesto que este manual se va a centrar en las vulnerabilidad y en la denfesa. Una vez dejado claro esto, paso a copipastear la definición de wikipedia:

Cita de: Wikipedia

LDAP son las siglas de Lightweight Directory Access Protocol (en español Protocolo Ligero de Acceso a Directorios) que hacen referencia a un protocolo a nivel de aplicación el cual permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red. LDAP también es considerado una base de datos (aunque su sistema de almacenamiento puede ser diferente) a la que pueden realizarse consultas.

Un directorio es un conjunto de objetos con atributos organizados en una manera lógica y jerárquica. El ejemplo más común es el directorio telefónico, que consiste en una serie de nombres (personas u organizaciones) que están ordenados alfabéticamente, con cada nombre teniendo una dirección y un número de teléfono adjuntos.

Un árbol de directorio LDAP a veces refleja varios límites políticos, geográficos u organizacionales, dependiendo del modelo elegido. Los despliegues actuales de LDAP tienden a usar nombres de Sistema de Nombres de Dominio (DNS por sus siglas en inglés) para estructurar los niveles más altos de la jerarquía. Conforme se desciende en el directorio pueden aparecer entradas que representan personas, unidades organizacionales, impresoras, documentos, grupos de personas o cualquier cosa que representa una entrada dada en el árbol (o múltiples entradas).

Habitualmente, almacena la información de autenticación (usuario y contraseña) y es utilizado para autenticarse aunque es posible almacenar otra información (datos de contacto del usuario, ubicación de diversos recursos de la red, permisos, certificados, etc). A manera de síntesis, LDAP es un protocolo de acceso unificado a un conjunto de información sobre una red.

La versión actual es LDAPv3, la cual es especificada en una serie de Internet Engineering Task Force (IETF) Standard Track Request for Comments (RFCs) como se detalla en el documento RFC 4510.

En resumidas cuentas podemos decir que se trata de un protocolo que permite acceder a un servicio de directorios donde se almacena la información, para ser usada posteriormente, dentro de la red de una corporación. Podemos imaginar que es como una llave a las páginas amarillas: dependiendo de cómo esté constituido el árbol LDAP podríamos encontrar desde nombres, correos, direcciones, nombres de usuarios, puesto de trabajo, ordenador asignado, etc. es decir un conjunto de información muy interesante para un posible atacante. Por otro lado, LDAP tiene otra vertiente muy importante desde el punto de vista de la seguridad porque en algunas ocasiones es utilizada a modo de base de datos, llegando en algunos casos a usarse como método de autenticación.

Los ataques utilizados hasta ahora contra LDAP son muy diferentes, siendo los más populares las conexiones anónimas a los directorios para recoger información (véase el caso de la NASA) y las inyecciones a través de aplicaciones webs. Este segundo tipo de ataque (existen muchos más, pero he comentado los más habituales) será sobre el que centraremos este taller.

El formato típico con el que vamos a trabajar es LDIF. En este formato las entradas estarán constituidas en su inicio por el dn (distingused name) que está compuesto por el nombre de la entrada (CN) y por los árboles padre (DC). Posteriormente se colocan los atributos que serán quienes contengan los campos con información. Un ejemplo de entrada podría ser:

Código: Text
  1. dn: cn=Testcell,dc=pruebas,dc=com
  2. cn: Testcell
  3. givenName: X-C3LL
  4. sn: Celula
  5. telephoneNumber: 696969696
  6. telephoneNumber: 7878787878
  7. objectClass: inetOrgPerson
  8. objectClass: organizationalPerson
  9. objectClass: person
  10. objectClass: top

Se puede observar al inicio como el nombre de la entrada es “Testcell”, y que los árboles padre son pruebas y com, por lo que la estructura sería similar a :

WORLD
|
|_ com                                           DIRECTORIOS (ARBOLES)
|_pruebas                                          ENTRADAS
|_Testcell