Primeras Jornadas de Seguridad WebOWASP DAY ARGENTINA 2010
“La seguridad como ventaja competitiva”
Ing. Hernán Segismundo [email protected]
www.ribadeohacklab.com.ar
RibadeoHackLab
Inyección de LDAP: Técnicas de ataque y defensa en
Aplicaciones Web
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
2
Contenido
IntroducciónDirectory ServicesAtaques de InyecciónFiltros en LDAP
AtaquesLogin BypassInformation DisclosureCharset ReductionPrivilege EscalationInformation Alteration
Inyección LDAP vs. Inyección SQLMecanismos de PrevenciónMás información
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
3
Directory Services
Un Servicio de Directorio (Directory Service) 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.
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
4
Directory Services
Diferencias con una BBDD Relacional:
Predominan los accesos de lectura
Las transacciones y el rollback no son fundamentales
No es necesario normalizar el modelo
A veces por motivos de performance se duplica
información
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
5
Directory Services
Familia de Protocolos X500 (ITU)
Definen el manejo del Directorio.
El Directorio se organiza de manera jerárquica.
Protocolo DAP: Directory Access Protocol
Especifica la forma de acceso a la información
LDAP es un protocolo de aplicación que permite
manipular la información almacenada en un Directorio
sobre redes TCP/IP.
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
6
Ataques de Inyección
Se dan en entornos donde hay una interacción insegura entre cliente y servidor
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
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
7
Ataques de Inyección
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.
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
8
Filtros en LDAP
Definidos por la RFC 2254Tienen la forma
Attribute Operator Value
filter = "(" filtercomp ")"filtercomp = and / or / not / itemand = "&" filterlistor = "|" filterlistnot = "!" filter
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
9
Filtros en LDAP
(cn=Babs Jensen)
(o=univ*of*mich*)
(!(location=NYC*))
(&(objectClass=Person)(|(sn=Jensen)(cn=Babs J*)))
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
10
Ataques: Login Bypass
Bind MethodEl 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);
}
}
?>
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
11
Ataques: Login Bypass
Search QueryAutenticación similar a la que se hace con un
RDBMS
Se valida la correspondencia entre usuario y 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.
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
12
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
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
13
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
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
14
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
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
15
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 validahttp://rhl.com.ar/people_search.aspx?name=John)(zone=public)
Asumiendo que existen más zonas podríamos intentar la siguiente consulta para buscarlas
http://rhl.com.ar/people_search.aspx?name=John)(zone=m*)
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
16
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
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
17
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 más información de la debida
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
18
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
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
19
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.
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
20
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
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
21
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 más sofisticadas en donde se intentan adaptar los inputs del usuario para que sean inofensivos
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
22
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";
}
?>
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
23
Más Información
Hack In The Box Ezine – Issue 1
https://www.hackinthebox.org/misc/HITB-Ezine-Issue-001.pdf
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
24
Preguntas
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
OWASP
25
Contacto
Ing. Hernán Segismundo Abbamonte
www.ribadeohacklab.com.ar
Top Related