Esta es una vista previa del archivo. Inicie sesión para ver el archivo original
Vulnerabilidades web Índice 3 3 4 5 6 7 8 9 10 10 11 1 | Concepto 2 | Tipos de vulnerabilidades 2.1 | XSS: Cross-Site Scripting 2.2 | Autenticación y gestión de sesiones 2.3 | Referencia directa insegura a objetos 2.4 | CSRF: Cross-Site Request Forgery 2.5 | Inyección 2.6 | Local & Remote File Inclusion 2.7 | Configuraciones inseguras 2.8 | Almacenamiento Criptográfico Inseguro 2.9 | Uso de Proxy (Burp, ZAP…) Vulnerabilidades web | TELEFÓNICA // 3 Las vulnerabilidades web pueden definirse como un error en la programación o gestión de datos. En otros ámbitos también se indica que es una debilidad en: • Una aplicación web hecha a medida. • La arquitectura. • En el diseño. • En la configuración de la aplicación. • En el propio código como se indica al comenzar el párrafo. Las vulnerabilidades web tienen especial importancia debido al numeroso uso y lo extendidas que están en todos los ámbitos. A continuación, se irán estudiando los principales tipos de vulnerabilidades según OWASP. Se puede ver una comparativa del top 10 de OWASP entre el del año 2010 y 2013 en la siguiente imagen: 1. Concepto 2. Tipos de vulnerabilidades Imagen 109 Comparativa OWASP Top 10 2010-2013 OWASP Top 10-2010 (Previo) OWASP Top 10-2013 (Nuevo) A1- Inyección A3- Perdida de Autenticación y Gestión de Sesiones A2- Secuencia de Comandos en Sitios Cruzados (XSS) A4- Referencia Directa Insegura a Objetos A6- Defectuosa Configuración de Seguridad A7- Almacenamiento Crisptográfico Inseguro - Fusionada A9→ A8- Falla de Restricción de Acceso a URL - Ampliada en → A5-Falsificación de Peticiones en Sitios Cruzados (CSRF) <dentro de A6: - Defectuosa Configuración de Seguridad> A10- Redirecciones y reenvíos no validados A9- Protección insuficiente en la Capa de Transporte A1- Inyección A2- Perdida de Autenticación y Gestión de Sesiones A3- Secuencia de Comandos en Sitios Cruzados (XSS) A4- Referencia Directa Insegura a Objetos A5- Configuración de Seguridad Incorrecta A6- Exposición de Datos Sensibles A7- Ausencia de Control de Acceso a las Funciones A8-Falsificación de Peticiones en Sitios Cruzados (CSRF) A9- Uso de Componentes con Vulnerabilidades Conocidas A10- Redirecciones y reenvíos no validados Fusionada con 2010-A7 en la nueva 2013-A6 Vulnerabilidades web | TELEFÓNICA // 4 Este tipo de ataques es muy común y es conocido como de tipo Client-Side, ya que se produce en el navegador del usuario. Un atacante consigue introducir un código Javascript en un parámetro web, por ejemplo, y consigue a través de un enlace o la visita a un sitio web que dicho código sea ejecutado por el navegador de la víctima, aprovechando un fallo en la aplicación web. Esto sucede cuando la aplicación no valida, ni la entrada ni la salida de los datos de la aplicación web. Se puede utilizar para robar sesiones o cookies, realizar un deface, …Existen diferentes tipos de XSS, los cuales se describen a continuación: • No persistente o reflejado. Los ataques llegan a la víctima a través de, por ejemplo, un enlace. En uno de los parámetros se inyecta el código Javascript y cuando la víctima accede al link su navegador ejecuta dicho código. • Persistente. El código Javascript queda almacenado de forma persistente en una base de datos, por ejemplo, cuando un usuario introduce un comentario en un sistema y éste no valida la entrada, puede quedar almacenado en la base de datos el código malicioso. Entonces cuando otros usuarios accedan al comentario, los navegadores de estos podrán ejecutar el código malicioso. Es el XSS más potente. • DOM. El código inyectado manipula el código Javascript de los objetos HTML. 2.1 | XSS: Cross-Site Scripting Vulnerabilidades web | TELEFÓNICA // 5 En muchos casos las credenciales y tokens de sesión de una aplicación no están correctamente separadas ni protegidas. Los atacantes pueden obtener contraseñas, claves o tokens de autenticación que les permitan robar la identidad a otro usuario. Esto es debido a que el protocolo HTTP no tiene estado y necesita utilizar sesiones, cookies, para “acordarse” del estado de la comunicación. El identificador de sesión se incluye en cada petición. En muchos casos es visible en la red, en el navegador, en los logs, ... En muchos casos los fabricantes de frameworks de desarrollo de aplicaciones web ya ofrecen un sistema de gestión de sesiones que suele ser seguro si se utiliza de manera correcta. Crear un sistema de gestión de sesiones propio puede ser peligroso. Un identificador de sesión debe ser: • Único a cada usuario. • Válido únicamente para una sesión. • Generado por el servidor. • Enviado al cliente como: − Una cookie HTTP (http only). − Con el flag secure para que solo se envíe por conexiones HTTPS. • El usuario ha de mandar de vuelta la misma ID en la siguiente petición. El robo de sesión se conoce como Session Hijacking. Cuando un atacante tiene la cookie de sesión de otro usuario puede hacerse pasar por él, lo cual es altamente peligroso. 2.2 | Autenticación y gestión de sesiones Vulnerabilidades web | TELEFÓNICA // 6 Esta es una de las vulnerabilidades que más arriba se encuentra en el top de OWASP. Está ligada a la autenticación y gestión de sesiones y sucede cuando el desarrollador deja referencias a objetos implementados de manera interna en una dirección URL o como un parámetro en un formulario. Los atacantes pueden manipular estas referencias para acceder a otros objetos sin autorización. En otras palabras, y para simplificar la explicación, en un sitio web tenemos un parámetro llamado “id”, cuando accedemos a nuestra cuenta marca “id=55”. Nosotros cambiamos ese identificador por 56, y como hay una mala gestión y desarrollo, de repente se acceden a los datos del usuario con “id=56”. Un objeto vulnerable podría ser: • Un fichero o un directorio. • Una dirección URL. • Una clave en base de datos. • Otros objetos de una base de datos como, por ejemplo, el nombre de una tabla. Para evitar este tipo de vulnerabilidad se debe validar siempre la referencia directa al objeto. Verificar que el valor del parámetro está correctamente formado y verificar si el usuario tiene permiso para acceder al objeto. El control de permisos sobre a qué datos e información se puede acceder aquí es fundamental. 2.3 | Referencia directa insegura a objetos Vulnerabilidades web | TELEFÓNICA // 7 Un ataque CSRF consiste en “obligar” a un usuario ya autenticado en un sistema a enviar una petición, con su sesión, al sistema para realizar una acción ventajosa para el atacante. Un ejemplo sencillo sería el siguiente: • El usuario “normal” inicia sesión en su red social favorita llamada “Facebool”. • La aplicación web de Facebool es vulnerable a CSRF, es decir, no tiene un token anticsrf, el cual se explicará más adelante. • Un atacante envía a “normal” como el siguiente https://facebool. XXX/mensajes?id=1034&accion=eliminar_todo • Si pepito accede a ese enlace, como ya está logado en el sistema de Facebool, enviará su cookie y solicitará al sistema la acción eliminar todos los mensajes que tenga en su cuenta. • El sistema de Facebool en ningún momento controla que la acción la realice el usuario conscientemente. Esto se puede solucionar con los llamados tokens anti-csrf. La solución para evitar este tipo de ataques es que siempre que se vaya a realizar una acción sobre un sistema como, por ejemplo, eliminar mensajes, modificar datos, ... el sistema deba darnos un token. En el momento que navegamos a la vista de mensajes el sistema nos daría un token anti-csrf, el cual debería enviado por nuestro navegador cuando realicemos la acción de eliminar, en el caso descrito anteriormente. De esta forma, se evita que un atacante conozca ese token, el cual debe ser unívoco, grande, complejo, ... 2.4 | CSRF: Cross-Site Request Forgery Vulnerabilidades web | TELEFÓNICA // 8 La inyección fue la vulnerabilidad más encontrada, además de una de las más críticas, y consiste en manipular las entradas de una aplicación para enviar comandos al intérprete de órdenes y que éste los ejecute. Lógicamente no es algo sencillo, ya que primero se debe detectar dicha vulnerabilidad. Los intérpretes recogen cadenas de texto o strings que se pasan a través de parámetros web. Por ejemplo, son interpretados por un motor de base de datos SQL, el propio sistema operativo, LDAP, XPath, ... La inyección más común es la SQL, pero cada día hay más bases de datos NoSQL, las cuales empiezan a proporcionar un gran riesgo ante este tipo de vulnerabilidades. La causa más común de esta vulnerabilidad es la falta de saneamiento en las entradas, es decir, la validación de las entradas y la comprobación de que el parámetro obtenido es seguro. Las inyecciones son sencillas de evitar. El impacto que tienen es severo, ya que: • Puede permitir a un atacante leer una base de datos entera y en algunos casos modificarla. • Puede permitir acceso al esquema de la base de datos, sus cuentas y, en algunas ocasiones, al mismo sistema operativo. Algunas recomendaciones son: • Evitar utilizar un intérprete en los casos que sea posible. • Utilizar una interfaz que implemente variables vinculadas. − Sentencias preparadas. − Procedimientos almacenados. − Las variables vinculadas permiten al intérprete distinguir entre código y datos. La validación de todas las entradas que provengan de un usuario mediante una lista blanca puede ser una buena solución cuando sea posible. La idea es denegar todo por defecto y definir los casos en que son válidas las entradas. La depuración de los privilegios del usuario con el que se accede a la base de datos también es importante. Solamente permitir lectura de las tablas necesarias. Desactivar escritura dónde sea posible y deshabilitar la conexión remota a la base de datos o filtrarla mediante dirección IP para que un atacante no pueda conectarse de forma remota. • http://banco.com/cuentas?auth=687965fdaew87agrde 2.5 | Inyección http://banco.com/cuentas?auth=687965fdaew87agrde Vulnerabilidades web | TELEFÓNICA // 9 Estas dos vulnerabilidades son propias de páginas PHP dinámicas que permiten enlazar archivos locales o remotos situados en otros servidores. Si se echa un vistazo al código fuente de la aplicación PHP programada la vulnerabilidad se debe a una mala programación o uso de la función include() y require(). Esta vulnerabilidad se da en sitios web programados en un lenguaje que permita inclusión de ficheros. La vulnerabilidad es producida por un código semejante a este: $Page = $_GET[‘page’]; Include($page); En páginas de este tipo se puede incluir ficheros que estén en nuestro servidor: http://victima.com/pagvuln.php?page=http:// [misitio]/miFichero. Existen herramientas que permiten explorar un sitio web en busca de este tipo de vulnerabilidades, como por ejemplo rpvs. A continuación, se puede visualizar una imagen. Imagen 110 Rpvs Mediante las webshell o shell PHP se pueden ejecutar comandos en una página web. Usando RFI se puede incluir un fichero que ejecute comando, tales como listar directorios, obtener y colocar ficheros,... El inconveniente es que la mayoría de servidor web en PHP tiene deshabilitadas las funciones exec, system o passthru, de modo que no se puede ejecutar comandos del sistema operativo. Sin embargo, existen funciones como show_source(‘archivo’) que permiten la visualización del código fuente de una página. A su vez, existen otra serie de funciones que permiten listar el contenido de un directorio. El uso de estas funciones no puede ser limitado y no depende del sistema operativo sobre el que se encuentra instalado el servidor web. 2.6 | Local & Remote File Inclusion http://victima.com/pagvuln.php?page=http Vulnerabilidades web | TELEFÓNICA // 10 Los fallos de configuración pueden estar presentes en cualquier punto de una plataforma en Internet o en nuestras redes internas. No solo afectan a los equipos de producción, que quizá sea el punto más crítico, afectan a cualquier sistema y pueden ser el punto de entrada a un robo de información en una organización. Una mala configuración puede tener todo tipo de consecuencias como, por ejemplo, revelar directorios, datos de una conexión a base de datos, credenciales de usuarios o, incluso, modificación de datos e información. Es importante tener en cuenta si el código fuente de una aplicación es público o no, y si es el caso estar muy atentos a cualquier actualización de seguridad que exista. Independientemente del caso en el que nos encontremos, el código fuente sea privado o no, no debería afectar a la seguridad del sistema. Al pasar un sistema en desarrollo y pre-producción a producción se deberían cambiar todas las credenciales. En muchas aplicaciones, servidores web, instancias de bases de datos se almacenan datos sensibles como contraseñas o números de tarjeta de crédito. Estos datos son críticos y su almacenamiento está sujeto a legislación. Los atacantes pueden aprovechar la falta de protección para conseguir acceso no autorizado a cuentas, datos,... Cifrar los datos es sencillo para los desarrolladores ya que la mayoría de frameworks de trabajo proporcionan herramientas y librerías que permiten hacerlo. Además, se debe cumplir con las leyes actuales, como por ejemplo LOPD. Aun así, es común ver fallos de implementación como los siguientes: • Almacenamiento inseguro o incorrecto de contraseñas, certificados, datos sensibles o bajo tratamiento de ley. • Uso de un algoritmo de cifrado inadecuado. • Utilización de una semilla insuficientemente aleatoria para los vectores de inicialización. Relacionado con el cifrado. • o Sistemas de cifrado propio. Esto es un error, ya que los estándares que se conocen y son robustos están lo suficientemente probados como para confiar en ellos. A día de hoy se conoce perfectamente que cifrado es robusto y cual no. 2.7 | Configuraciones inseguras 2.8 | Almacenamiento Criptográfico Inseguro Vulnerabilidades web | TELEFÓNICA // 11 Un proxy es un servidor que hace de mediador en las peticiones de recursos que efectúa un cliente a un servidor. Esto tiene como consecuencia que se tenga un control de acceso, registro del tráfico generado, prohibición a determinadas URL’s, anonimato en las comunicaciones, caché web, ... 2.9 | Uso de Proxy (Burp, ZAP…) Imagen 111 Esquema Proxy - Fuentes: Wikipedia SCHOOL PC PROXY- SERVER INTERNET FACEBOOK SERVER FIREWALL Allowed session via proxi server Blocked Facebook Request Vulnerabilidades web | TELEFÓNICA // 12 Según la política del proxy podemos encontrar dos tipos de proxys: • Proxy local: es el propio cliente quien implementa la política de proxy, ya que es él el que hace las peticiones, por eso se le suele llamar local. Permite controlar el tráfico y establecer diversas reglas de filtrado sobre todo para temas de privacidad. • Proxy de red o proxy externo: es una entidad externa quien implemente la política del proxy. Normalmente se utiliza para bloquear ciertos contenidos, controlar el tráfico generado, … En general, permiten obtener una seria de ventajas como: • Control: se pueden limitar los derechos de los clientes, y dar permisos únicamente al proxy que es el que hace el trabajo efectivo. • Ahorro: el proxy es el único que utiliza los recursos necesarios. • Velocidad: el proxy puede almacenar información (caché) por si varios clientes realizan la petición de un mismo recurso. • Filtrado: se puede filtrar cierta información denegando acceso a determinadas peticiones. • Modificación: El proxy puede falsificar cierta información o modificarla al vuelo, al estar en medio de la comunicación. Además, también se tienen algunas desventajas como son: • Anonimato: es difícil determinar quién realizó verdaderamente la petición de la información. • Carga: realiza mucha carga de peticiones ya que son diversos clientes los que utilizan el mismo proxy. • Mediación: el proxy al estar en medio de la comunicación puede controlar toda la información que viaja entre el origen y destino. • Incoherencia: el proxy al almacenar información como caché puede responder con cierta información poco actualizada. Cada vez menos habitual. Vulnerabilidades web | TELEFÓNICA // 13 Tipos de proxys Podemos encontrar distintos tipos de proxys según su función principal. Entre ellas destacamos las siguientes: • Proxy Caché: permite almacenar la información solicitada para permitir una respuesta rápida a peticiones iguales posteriores. • Proxy Web: permite proporcionar especial atención a las páginas web, mediante el cacheo de información para optimizar tiempos de acceso y acelerar la carga de los enlaces. Se utilizan en los protocoles web y ftp principalmente. • Proxies transparentes: este tipo de proxy permite interceptar las peticiones y desviarlas hacia el proxy sin que el cliente conozca su coexistencia. Se combinan con firewalls. • Proxy inverso (Reverse Proxy): este tipo de servidor proxy permite redirigir todo el tráfico a algún servidor web que permite gestionar las peticiones. • Proxy NAT (Network Address Translation) / Enmascaramiento: permite que las peticiones sean redirigidas al proxy mediante NAT restringiendo el acceso desde el exterior. Se puede configurar desde el propio firewall siendo muy fácil su implementación. • Proxy abierto: permite las peticiones desde cualquier ordenador de una red. Normalmente se utilizan para la redirección de las peticiones de los servidores de DNS. Existen diversas aplicaciones proxy, entre ellas Burp Suite, Paros, Vega, WebScarab y Owasp Zap. Todas estas herramientas incluyen diversas funcionalidades interesantes. OWASP ZAP OWASP Zed Attack Proxy (ZAP) es una herramienta de código libre desarrollada en Java dentro del proyecto OWASP (Open Application Security Project) utilizada en auditorías de aplicaciones web para la búsqueda de vulnerabilidades web. Aunque inicialmente se creó como proxy Web HTTP/HTTPS, actualmente posee una serie de herramientas automáticas que permiten realizar determinadas tareas dentro de un pentesting. Primeramente, dada su arquitectura de proxy que permite interceptar las peticiones HTTP y HTTPS, se tendrá de configurar el navegador web para que envíe las peticiones web a ZAP, éste las reenvíe al servidor web y pueda obtener las respuestas para enviárselas al cliente. Imagen 112 Configuración Proxy ZAP, usa el puerto 8080 TCP por defecto para la captura de las peticiones, aunque es fácilmente configurable desde la propia aplicación. Vulnerabilidades web | TELEFÓNICA // 14 Una vez configurado el navegador ZAP ya está listo para interceptar todas las peticiones que se envíen desde el navegador y las respuestas del servidor web. Para empezar, se realizará un Spider a la URL que se quiera atacar obteniendo gran cantidad de direcciones a analizar al recorrer todas las URL del sitio objetivo. A estas URL’s se les realizará un análisis en busca de vulnerabilidades determinando si se tiene algún tipo de riesgo o no, mostrando información relativa a dicho riesgo. Es lo que llamaríamos un escaneo pasivo. Imagen 114 Owasp ZAP – Escaneo pasivo Imagen 113 Owasp ZAP Vulnerabilidades web | TELEFÓNICA // 15 Una vez efectuado el escaneo pasivo se procederá a un escaneo activo, en el que se realizará una serie de pruebas o ataques a las direcciones encontradas. Los ataques típicos que pueden realizarse son SQL Injection, XSS Cross Site Scripting, LFI Local File Include, RFI Remote File Include, … La forma de trabajar de ZAP es probar este tipo de ataques sin concluirlos realmente, simulando dichos ataques. Si tiene éxito esta simulación se tendrá una vulnerabilidad del tipo correspondiente mostrando una alerta por cada vulnerabilidad encontrada y clasificada (banderitas con colores) según su riesgo alto, medio o bajo. Imagen 116 Owasp ZAP - Alertas vulnerabilidades Imagen 115 Owasp ZAP - Alertas Vulnerabilidades web | TELEFÓNICA // 16 ZAP permite generar un informe, tanto en HTML como en XML para su posterior análisis, en el que podemos comprobar las vulnerabilidades obtenidas, mostrando la descripción, dirección URL y el ataque tipo que se puede ejecutar, así como las posibles soluciones. Imagen 117 Owasp ZAP - Generar informe Imagen 118 Owasp ZAP - Informe generado
Compartir