250 likes | 429 Views
Inyección de LDAP: Técnicas de ataque y defensa en Aplicaciones Web. Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.com.ar www.ribadeohacklab.com.ar RibadeoHackLab. Contenido. Introducción Directory Services Ataques de Inyección Filtros en LDAP Ataques Login Bypass
E N D
Inyección de LDAP: Técnicas de ataque y defensa en Aplicaciones Web Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.com.ar www.ribadeohacklab.com.ar RibadeoHackLab
Contenido • Introducción • Directory Services • Ataques de Inyección • Filtros en LDAP • Ataques • Login Bypass • Information Disclosure • Charset Reduction • Privilege Escalation • Information Alteration • Inyección LDAP vs. Inyección SQL • Mecanismos de Prevención • Mas información
Directory Services • Un Directory Service (o Servicio de Directorio) es software que permite realizar operaciones de ABM sobre un directorio. • Es una base de datos jerárquica diseñada para maximizar la velocidad de recuperación de la información. • La información esta organizada en entries, cada una de las cuales se encuentra identificada por un Distinguished Name.
Directory Services • Diferencias con una BBDD Relacional: • La mayoría de los accesos a un directorio son de lectura, por lo que manejar operaciones de transacciones y rollback no es algo fundamental. • La información no tiene necesidad de estar almacenada de acuerdo a una Forma Normal. Incluso muchas veces se duplica información para optimizar la velocidad de recuperación.
Directory Services • Familia de Protocolos X500 (ITU) • Conjunto de protocolos que definen el manejo de las operaciones sobre el Directorio. • Define la organización del Directorio de manera jerárquica. • Uno de los principales protocolos que define es DAP – Directory Access Protocol, que especifica la forma de acceso a la información almacenada en un Directorio. • LDAP es un protocolo de aplicación que permite manipular la información almacenada en un Directorio sobre redes TCP/IP.
Ataques de Inyección • Se basa en asunciones incorrectas que hace el servidor de los datos provistos por el cliente • Se asume que los datos provistos siempre tendrán el formato esperado • Se crean datos del lado del cliente que tienen un contenido semántico del lado del servidor • El cliente mediante la manipulación de las entradas puede modificar el comportamiento de la aplicación del lado del servidor, por ejemplo, incluyendo sintaxis de algún lenguaje en particular.
Filtros en LDAP • Definidos por la RFC 2254 • Tienen la forma • Attribute Operator Value • filter = "(" filtercomp ")" • filtercomp = and / or / not / item • and = "&" filterlist • or = "|" filterlist • not = "!" filter
Filtros en LDAP • (cn=Babs Jensen) • (o=univ*of*mich*) • (!(location=NYC*)) • (&(objectClass=Person)(|(sn=Jensen)(cn=Babs J*)))
Ataques: Login Bypass • Bind Method • El ataque se basa en una incorrecta implementación de la conexión que permite el acceso anónimo <?php $ldapuser = $_GET['username']; $ldappass = $_GET['password']; $ldapconn = ldap_connect("ldap.server.com") or die("Could not connect to server"); if ($ldapconn) { $ldapbind = ldap_bind($ldapconn, $ldapuser, $ldappass); if (! $ldapbind) { $ldapbind = ldap_bind($ldapconn); } } ?>
Ataques: Login Bypass • Search Query • Esta autenticación es similar a la que se hace contra un modelo de base de datos relacional en donde se valida la correspondencia entre un usuario y una contraseña. • Consiste en manipular el input del usuario para lograr construir un filtro que modifique semánticamente la consulta a ejecutar en el servidor. • Se aprovecha de un filtro basado en un AND.
Ataques: Login Bypass • Para ello se podría utilizar un filtro como el siguiente: • (&(Username=user)(Password=passwd)) • Si en el nombre de usuario ingresáramos “user)(&))(“ se formaría el siguiente filtro (&(Username=user)(&))((Password=zz)), el cual es siempre verdadero
Ataques: Information Disclosure • Imaginemos una aplicación que consulta un servicio de directorio para listar información • (|(objectClass=device)(name=parameter1)) • Si el atacante provee como parámetro “test)(objectClass=*” se genera el siguiente filtro (|(objectClass=device)(name=test)(objectClass=*)) • Esta consulta es totalmente valida y muestra objetos de todas las clases y no solo los de tipo device
Ataques: Charset Reduction • El objetivo de este tipo de ataque es determinar caracteres validos para una propiedad de un objeto en particular • Se aprovecha de que los filtros LDAP pueden ser construidos utilizando caracteres especiales que actúan como comodines. • Se basa en un proceso iterativo de prueba y error mediante el análisis de la salida de la aplicación al realizar consultas especialmente diseñadas por el atacante
Ataques: Charset Reduction • Por ejemplo, tenemos un pagina que hace una consulta LDAP para obtener información de personas con un parámetro oculto y fijo por defecto, en nuestro caso el campo zone • Nosotros sabemos que la siguiente consulta es valida http://rhl.com.ar/people_search.aspx?name=John)(zone=public) • Asumiendo que existen mas zonas podríamos intentar la siguiente consulta para buscarlas http://rhl.com.ar/people_search.aspx?name=John)(zone=m*)
Ataques: Charset Reduction • Si no se obtienen resultados se puede continuar probando hasta descubrir una combinación de letras que nos permita darnos una idea de cual puede ser otro valor posible • Si bien es una técnica que puede ser considerada como fuerza bruta, con un poco de astucia del atacante se puede llegar a buenos resultados • También podría construirse un diccionario y automatizar el ataque
Ataques: Privilege Escalation • Se refiere a obtener información de un directorio LDAP que supere nuestro nivel de autenticación • Si tuviéramos un filtro como el siguiente: (&(category=latest)(clearance=none)) en donde solo se toma por parámetro la categoría, podríamos modificar la entrada para listar información de un nivel superior. • Ingresar category=latest)(clearance=confidential) permitirá construir un filtro que muestre mas información de la debida
Ataques: Information Alteration • Si una aplicación vulnerable a este tipo de ataques se utiliza para ABM de datos de un directorio y se cuenta con los permisos adecuados, mediante la manipulación de las entradas se podrían obtener comportamientos no esperados por la aplicación. • Si por ejemplo la aplicación recibiera el DN a modificar se podría lograr la modificación masiva de contenido
Ataques: Information Alteration <?php $attr["cn"] = "ToModify"; $dn = "uid=Ribadeo,ou=People,dc=foo"; $result = ldap_modify($ldapconn, $dn, $attr); if (TRUE === $result) { echo "Entry was modified."; } else { echo "Entry could not be modified."; } ?> • Si la aplicación recibe como parámetro de entrada $dn, y se ingresa “uid=Ribadeo,ou=People,dc=*”, entonces se modificarían todas las entradas bajo esa rama.
LDAP Injection vs. SQL Injection • En entornos Microsoft pueden utilizarse linked servers en SQL Server de tipo Active Directory Services para consultar al directorio LDAP • Mediante OPENQUERY se puede consultar a este linked server • Si esta consulta se almacena en una vista, y la aplicación cliente consulta a esta vista para realizar las validaciones, se podría lograr una inyección en la query SQL, por lo que el problema de inyección de LDAP se reduce a un problema de inyección de SQL
Mecanismos de Prevención • Como todo ataque de inyección, el principal mecanismo de prevención consiste en validar los datos de entrada provistos por el usuario. • Este tipo de validaciones deben realizarse siempre del lado del servidor. • Este proceso puede hacerse validando un formato de entrada esperado, por ejemplo, con expresiones regulares • Existen alternativas mas sofisticadas en donde se intentan adaptar los inputs del usuario para que sean inofensivos
Mecanismos de Prevención • Suponiendo que la aplicación debe recibir como parámetro un nombre de usuario <?php $user=$_GET['username']; $UsrRegex = "/(^[A-Za-z0-9_-]+$)/"; if preg_match($UsrRegex,$user){ $dn = "o=My Company, c=US"; $filter="(|(sn=$username*) (givenname=$username*))"; $sr=ldap_search($ds, $dn, $filter); } else { print "Invalid UserName"; } ?>
Mas Información Hack In The Box Ezine – Issue 1 https://www.hackinthebox.org/misc/HITB-Ezine-Issue-001.pdf
Contacto Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.com.ar www.ribadeohacklab.com.ar