Primeras Jornadas de Seguridad Web
OWASP DAY ARGENTINA 2010
“La seguridad como ventaja competitiva”
Inyección de LDAP:
Técnicas de ataque y defensa en
Aplicaciones Web
Ing. Hernán Segismundo Abbamonte
[email protected]
www.ribadeohacklab.com.ar
RibadeoHackLab
OWASP
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
 Más información
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
2
OWASP
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
3
OWASP
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
4
OWASP
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
5
OWASP
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
6
OWASP
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
7
OWASP
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
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
8
OWASP
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
9
OWASP
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);
}
}
?>
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
10
OWASP
Ataques: Login Bypass
Search Query
Autenticació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
11
OWASP
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
12
OWASP
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
“test)(objectClass=*”
como
parámetro
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
13
OWASP
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
14
OWASP
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 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
15
OWASP
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
automatizar el ataque
un
diccionario
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
y
16
OWASP
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
17
OWASP
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
18
OWASP
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
19
OWASP
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
20
OWASP
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
21
OWASP
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
22
OWASP
Más Información
Hack In The Box Ezine – Issue 1
https://www.hackinthebox.org/misc/HITB-EzineIssue-001.pdf
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
23
OWASP
Preguntas
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
24
OWASP
Contacto
Ing. Hernán Segismundo Abbamonte
[email protected]
www.ribadeohacklab.com.ar
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
25
Descargar

filtros LDAP