Inyección de LDAP

Download Report

Transcript Inyección de LDAP

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
 Mas información
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
2
OWASP
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.
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
3
OWASP
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.
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
4
OWASP
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.
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
5
OWASP
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.
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
6
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
7
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
8
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
9
OWASP
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.
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
10
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
11
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 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
12
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
13
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?nam
e=John)(zone=public)
 Asumiendo que existen mas zonas podríamos
intentar la siguiente consulta para buscarlas
http://rhl.com.ar/people_search.aspx?nam
e=John)(zone=m*)
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
14
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 un diccionario y
automatizar el ataque
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
15
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 mas
información de la debida
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
16
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
17
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
18
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
19
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 mas sofisticadas en donde
se intentan adaptar los inputs del usuario para
que sean inofensivos
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
20
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
21
OWASP
Mas 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
22
OWASP
Preguntas
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
23
OWASP
Contacto
Ing. Hernán Segismundo Abbamonte
[email protected]
www.ribadeohacklab.com.ar
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
24
OWASP
Primeras Jornadas de Seguridad Web – Owasp DAY 2010
25