25
Primeras Jornadas de Seguridad Web OWASP DAY ARGENTINA 2010 “La seguridad como ventaja competitiva” Ing. Hernán Segismundo Abbamonte [email protected] www.ribadeohacklab.com.ar RibadeoHackLab Inyección de LDAP: Técnicas de ataque y defensa en Aplicaciones Web

Ing. Hernán Segismundo Abbamonte [email protected] ribadeohacklab.ar

  • Upload
    aderes

  • View
    50

  • Download
    0

Embed Size (px)

DESCRIPTION

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. Contenido. Introducción Directory Services Ataques de Inyección Filtros en LDAP Ataques Login Bypass - PowerPoint PPT Presentation

Citation preview

Page 1: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

Primeras Jornadas de Seguridad WebOWASP DAY ARGENTINA 2010

“La seguridad como ventaja competitiva”

Ing. Hernán Segismundo Abbamontehabbamonte@ribadeohacklab.com.arwww.ribadeohacklab.com.arRibadeoHackLab

Inyección de LDAP: Técnicas de ataque y defensa en

Aplicaciones Web

Page 2: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

Primeras Jornadas de Seguridad Web – Owasp DAY 2010

OWASP

2

ContenidoIntroducción

Directory 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

Page 3: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

Primeras Jornadas de Seguridad Web – Owasp DAY 2010

OWASP

3

Directory ServicesUn 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.

Page 4: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

Primeras Jornadas de Seguridad Web – Owasp DAY 2010

OWASP

4

Directory ServicesDiferencias 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

Page 5: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

Primeras Jornadas de Seguridad Web – Owasp DAY 2010

OWASP

5

Directory ServicesFamilia 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.

Page 6: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

Primeras Jornadas de Seguridad Web – Owasp DAY 2010

OWASP

6

Ataques de InyecciónSe 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

Page 7: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

Primeras Jornadas de Seguridad Web – Owasp DAY 2010

OWASP

7

Ataques de InyecciónSe 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.

Page 8: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

Primeras Jornadas de Seguridad Web – Owasp DAY 2010

OWASP

8

Filtros en LDAPDefinidos por la RFC 2254Tienen la forma

Attribute Operator Value

filter = "(" filtercomp ")"filtercomp = and / or / not / itemand = "&" filterlistor = "|" filterlistnot = "!" filter

Page 9: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

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*)))

Page 10: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

Primeras Jornadas de Seguridad Web – Owasp DAY 2010

OWASP

10

Ataques: Login BypassBind 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);

}}?>

Page 11: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

Primeras Jornadas de Seguridad Web – Owasp DAY 2010

OWASP

11

Ataques: Login BypassSearch 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.

Page 12: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

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

Page 13: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

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

Page 14: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

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

Page 15: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

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*)

Page 16: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

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

Page 17: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

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

Page 18: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

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

Page 19: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

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.

Page 20: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

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

Page 21: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

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

Page 22: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

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";}

?>

Page 23: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

Primeras Jornadas de Seguridad Web – Owasp DAY 2010

OWASP

23

Más Información

Hack In The Box Ezine – Issue 1https://www.hackinthebox.org/misc/HITB-Ezine-

Issue-001.pdf

Page 24: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

Primeras Jornadas de Seguridad Web – Owasp DAY 2010

OWASP

24

Preguntas

Page 25: Ing. Hernán Segismundo Abbamonte habbamonte@ribadeohacklab.ar ribadeohacklab.ar

Primeras Jornadas de Seguridad Web – Owasp DAY 2010

OWASP

25

Contacto

Ing. Hernán Segismundo Abbamontehabbamonte@ribadeohacklab.com.arwww.ribadeohacklab.com.ar