Lección 7: INTRODUCCIÓN A LAS TÉCNICAS
DE INYECCIÓN SQL
Chema Alonso
[email protected]
Informática 64
Microsoft MVP en Enterprise Security
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
Incidentes de Seguridad I: Kaspersky
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
2
Incidentes de Seguridad II: NASA
Des-
cifrar
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
3
Arquitectura de una aplicación Web
Browser
WebServer
WebServer
Interfaz de Usuario
(GUI)
Lógica de la Aplicación
DCOM
WebService
Des-
cifrar
RPC
LDAP
BBDD
Almacén
De Datos
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
4
OWASP Top 10
Des-
cifrar
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
5
Inyecciones de Código
• Aplicaciones con mala comprobación de datos de entrada.
– Datos de usuario.
• Formularios
• Cookies
• ….
• Links
• Funciones Scripts
• Actions
• …
– Datos de llamadas a procedimientos.
Des-
cifrar
• Datos de usuario utilizados en consultas a base de datos.
• Mala construcción de consultas a bases de datos.
• Ataques
– SQL Injection, LDAP Injection, Xpath Injection
– ….
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
6
Inyecciones de Código: Ejemplo
– Autenticación de usuario contra base de datos.
Usuario
Clave
****************
Des-
cifrar
Select idusuario from tabla_usuarios
Where nombre_usuario=‘$usuario’
And clave=‘$clave’;
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
7
Inyecciones de Código: Ejemplo
Usuario
Administrador
Clave
‘ or ‘1’=‘1
Select idusuario from tabla_usuarios
Where nombre_usuario=‘Administrador’
And clave=‘’ or ‘1’=‘1’;
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
8
Impacto
• Permiten al atacante:
– Saltar restricciones de acceso.
– Elevación de privilegios.
– Extracción de información de la Base de Datos
– Parada de SGBDR.
– Ejecución de comandos en contexto usuario bd
dentro del servidor.
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
9
Tipos de Ataques: Inbound
• Acceso a información con procedimientos de
listado.
http://www.miweb.com/prog.asp?parametro1=hola
http://www.miweb.com/prog.asp?parametro1=‘ union select nombre,
clave,1,1,1 from tabla_usuarios; otra instrucción; xp_cmdshell(“del
c:\boot.ini”); shutdown --
o
http://www.miweb.com/prog.asp?parametro1=1
http://www.miweb.com/prog.asp?parametro1=-1 union select .....; otra
instrucción; --
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
10
Tipos de Ataques: Outbound
• El atacante vuelca datos utilizando los
mensajes de error de la aplicación y el
repositorio de datos
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
11
Ataques a ciegas
• La aplicación Web no muestra ningún mensaje
de error.
– No es posible un ataque outbound
• La aplicación no procesa comandos
– No es posible un ataque inbound
• Se inyectan condicionantes True y False.
Ejemplo:
– http://server/miphp.php?id=1 and 1=1
– http://server/miphp.php?id=1 and 1=2
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
12
Ataques a ciegas
• ¿Como reconocer diferentes comportamientos?
– Da un código de error
– Da una página de error
– Cambia el hash de la firma
– Cambia el árbol html
– Tarda más en responder
– …
• Si la página reacciona de forma diferente a inyecciones True y
False, entonces se puede extraer datos haciendo búsquedas
booleanas
– http://www.servidor.com/mostrar_noticias.php?v_id=1 and
(100=(select top 1 ascii(substring(login,1,1)) from usuarios))
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
13
Ataques basados en tiempos
• Si el contenido de la respuesta es idéntico en ambos
casos, aún es posible conseguir nuestro objetivo
variando condicionalmente el tiempo de respuesta
del servidor
– Si la condición inyectada es verdadera, la aplicación
tardará unos segundos en contestar
– Si la condición es falsa, la aplicación devolverá la misma
respuesta, pero en el tiempo habitual
• Se pueden utilizar las mismas técnicas de inyección
descritas anteriormente
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
14
Inyección SQL basada en tiempos
• ¿Cómo podemos conseguir el retardo?
– Utilizando instrucciones de retardo implementadas en el propio gestor
de bases de datos
• SQL Server: waitfor delay
• Oracle: dbms_lock.sleep
• MySQL: sleep
• Postgres: pg_sleep
– Utilizando consultas pesadas que consuman muchos recursos del
servidor (CPU o memoria)
• CROSS JOIN que involucren muchas tablas
– De cualquier otra forma (ej: xp_cmdshell 'ping…')
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
15
Contramedidas
• No confianza en medias de protección en cliente.
• Comprobación de datos de entrada.
• Construcción de sentencias SQL con componentes seguros.
• Fortificación de Servidor Web.
– Códigos de error.
– Restricción de verbos, longitudes, etc…
– Filtrado de contenido HTTP en Firewall (WAF).
• Fortificación de SGBD.
– Restricción de privilegios de motor/usuario de acceso desde web.
– Aislamiento de bases de datos.
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
16
Madrid, España, mayo 2011
Video intypedia007es © intypedia 2011 Creative Commons
Contacto:
[email protected]
Comentarios de: LECCIÓN 7: SEGURIDAD EN APLICACIONES WEB. INTRODUCCIÓN A LAS TÉCNICAS DE INYECCIÓN SQL (0)
No hay comentarios