lunes, 25 de marzo de 2013

Cross-Site Request Forgery

Contribución de Francisco Losada, asistente de la última edición del SEC-560 que impartí el pasado año y buen amigo, en la que nos va a contar con detalle en que consisten las vulnerabilidades de Cross-Site Request Forgery:

Los ataques CSRF o XSRF son uno de los principales vectores de ataque a los que se enfrentan las empresas en sus aplicaciones web según OWASP. Tanto aquellas aplicaciones que son públicamente accesibles a través de Internet como las que se encuentran en una intranet restringida a un número reservado de usuarios pueden ser vulnerables.

El objetivo de este tipo de ataques consiste en conseguir que el navegador de una víctima lleve a cabo una acción en una aplicación web en la que la víctima se encuentra autenticada. Para conseguir que el navegador realice la acción deseada se suele hacer uso de código HTML que puede ser inyectado en alguna página web a la que la víctima accede libremente o redirigida a través de algún tipo de enlace. El esquema básico de este tipo de ataques podría ser similar al siguiente.


0- En un primer momento, el atacante logra introducir el código HTML en una aplicación del servidor A.
1- La víctima establece una conexión legítima con una aplicación web del servidor B.
2- La víctima accede a la aplicación web en la que se encuentra el código introducido por el atacante.
3- El navegador de la víctima realiza una petición contra la aplicación del servidor B sin que el usuario se percate.

En este caso, A y B están representados como dos aplicaciones diferentes; en el caso que explicaremos más adelante A y B serán la misma aplicación, sin embargo, este escenario podría representar a la aplicación A como una aplicación publicada en Internet y a la aplicación B como una aplicación dentro de la intranet de una empresa. Los límites los pone la imaginación.

Las acciones que se pueden llevar a cabo a través de estos ataques dependen de la aplicación vulnerable. OWASP ofrece en su página el OWASP Broken Web Applications Project que proporciona un entorno vulnerable a la mayoría de los ataques contra aplicaciones web. En este caso mostraremos un ejemplo con una antigua versión de Yazd Discussion Forum que nos servirá para mostrar cómo llevar a cabo un ataque CSRF.

Un usuario accede de forma anónima al foro en el que se muestra la lista de hilos publicados junto con el autor del mismo. En este caso, vemos que existe un usuario "Admin".


Navegando a través de los mensajes, se puede ver cómo algunos usuarios pueden tener visible la cuenta de correo asociada a su usuario. Este dato no será de utilidad para este caso pero podría ser empleado en un caso real para llevar a cabo el ataque de una forma más elegante.


Lo primero que se necesita para llevar a cabo un ataque de tipo CSRF es conocer de qué forma se realizan las peticiones en las páginas que envían información sensible. Para conocer el entorno más en profundidad crearemos un usuario en la aplicación.


En muchas ocasiones es posible conseguir crear un usuario mediante CSRF, en este caso carece de interés ya que cualquier usuario puede registrarse libremente. Si nos vamos a la parte que nos permite gestionar nuestra cuenta, podemos probar a realizar un cambio y ver de qué forma se realiza la petición contra el servidor. En este caso actualizaremos la contraseña de nuestro usuario.


Si analizamos la petición con un proxy podemos ver los campos que se envían y comprobar que ninguno de ellos tiene pinta de generarse de forma aleatoria para cada petición. Aquí tenemos nuestra vulnerabilidad. ¿Qué ocurriría si consiguiésemos qué el usuario "Admin" enviase esa petición desde su navegador pero con los datos que nosotros quisiéramos?


Cuando existen páginas que permiten enviar contenidos al servidor como es el caso de los foros o los blogs, se suele hacer uso de etiquetas HTML ligeramente modificadas para que realicen la petición cuando un usuario las visualiza. Así, si se publica un mensaje el el foro con una etiqueta de imagen cuyo campo apunte a la URL que visualizamos en nuestro proxy lograremos que cuando el usuario la visualice, ejecute involuntariamente la petición.


A simple vista, el nuevo mensaje enviado por nuestro usuario anónimo parece una imagen cuyo enlace está roto y no puede mostrar el contenido.


Sin embargo, cuando nuestro usuario "Admin" acceda al nuevo hilo del foro y su navegador trate de cargar la imagen, lanzará una petición a http://owaspbwa/yazd/bay/account.jsp?
mode=2&doCreate=true&username=Admin&password=admin123&password2=admin123&
email=usuario%40pollo.com&name=user&URL=&signature=&nameVisible=on&emailVisible=on



Puesto que el usuario no recibe ningún tipo de mensaje de confirmación ni debe realizar ningún tipo de validación, no sabrá que sus datos han sido modificados. En este ejemplo podría ver lo sucedido accediendo a la página de configuración de su cuenta y vería que su dirección de correo ha cambiado, pero si hubiéramos puesto la dirección real -que obtuvimos situando el ratón sobre su nombre- no sería consciente de lo sucedido hasta tratase de volver a identificarse tras cerrar la sesión.


Además del cambio de contraseña, y en función del tipo de aplicación, podría llevarse a cabo la creación de usuarios, la compra de artículos e, incluso, se podrían llegar a realizar transferencias bancarias -como ocurrió en el pasado- si no se dispone de los mecanismos adecuados que validen operaciones del tipo:

https://www.banco-xx.com/transferencia.php?cuenta=692&importe=1000

Como se puede ver en este último supuesto, este tipo de ataque también funcionaría a través de conexiones HTTPS. Dado que el usuario debe estar autenticado con anterioridad en la aplicación vulnerable, el navegador hará uso de la cookie creada previamente, cuando se estableció la conexión.

Existen varios métodos para evitar este tipo de problemática. Los captchas y la doble autenticación del usuario son dos opciones válidas pero que repercuten en la usabilidad de la aplicación y obligan a que el usuario tenga que introducir los caracteres para validar el captcha o introducir sus credenciales. El método preferido es usar un token aleatorio y único para cada petición. Este token se crea y se valida automáticamente sin la intervención del usuario. Si nos fijamos en el formulario para la creación de una cuenta en Facebook podemos ver que existe un campo oculto que envía este token en la petición:



En el caso de Linkedin podemos ver que también se utiliza un token único para cada petición y, en este caso, el campo tiene incluso un nombre mucho más descriptivo:



Al analizar una petición de cambio de contraseña en Gmail, vemos que también utiliza también los token para evitar los cambios de contraseña a través de CSRF:



Otras posibles recomendaciones a nivel de usuario para evitar estos ataques son:

  • Cerrar la sesión cuando ya no se vaya a hacer uso de la aplicación.
  • No permitir al navegador que recuerde usuarios y contraseñas.
  • No utilizar la funcionalidad de las aplicaciones web que permiten mantener la sesión abierta.
  • Utilizar diferentes navegadores, uno para aquellas aplicaciones que traten información sensible y otro para navegación en general.
  • Utilizar complementos que bloqueen la ejecución de scripts. De esta forma los formularios que se envíen por POST no podrán ser enviados automáticamente sin el consentimiento del usuario.

miércoles, 20 de marzo de 2013

Crónicas BlackHat Europe 2013

Contribución de Antonio Esteban, que ha sido tan amable de servir de "corresponsal" de Pentester.Es en las BlackHat Europe que tuvieron lugar en Amsterdam la pasada semana:

Durante los pasados días 12 al 15 de Marzo, se ha celebrado en Amsterdam una de las convenciones de seguridad más importantes del mundo: Blackhat Europe.  En estas conferencias se han tratado los temas de mayor actualidad en materia de seguridad informática, se han liberado exploits y presentado herramientas. Se ha hablado de agujeros de seguridad muy actuales, como los encontrados en varias plataformas de juego online y no debemos olvidarnos de que es un excelente lugar donde hacer contactos o retomar los ya establecidos y conocer las distintas soluciones y tecnologías que las grandes compañías tienen en el mercado. Se trata de una oportunidad única de charlar cara a cara y en un ambiente distendido con la flor y nata de los gurús de la seguridad informática.

Comenzamos el día 14 en la sala principal de conferencias “Grand Ballroom”, con el Keynote dirigido por Rick Falkvinge, fundador y líder del Partido Pirata Sueco con su charla titulada “Shelters or Windmills: The Struggle For Power and Information Advantage”. En ella Rick desarrolla la importancia de la libertad en la distribución de la información en la sociedad a lo largo de la historia y de los conflictos ocasionados por la pérdida de información y poder de las clases gobernantes. Rick Falkvinge hace un recorrido histórico por los momentos más importantes de la historia en los cuales se ha distribuido información a la sociedad en general, como la creación de la imprenta, la radio, la televisión o Internet y las distintas represiones sufridas por la sociedad para evitar la difusión de la misma. Concluyendo con las actuales medidas que están tomando los distintos gobiernos para frenar la difusión de información por medio de Internet y haciendo mención a la muerte de Aaron Swartz, cofundador de Reddit y del que se especula que su suicidio pudo tener relación con presiones procedentes del departamento de justicia de Estados Unidos. 

Tras el KeyNote inicial nos encontramos ante la difícil decisión de elegir a que charlas vamos a asistir, ya que este año había la posibilidad de elegir entre cuatro salas diferentes, las cuales exponían temas muy interesantes de forma simultánea. Aunque siempre nos quedará la alternativa de poder ver los videos y presentaciones de las charlas a las que no podamos asistir una vez las cuelguen en la página oficial de Blackhat Europe.

Esta fue, mejor o peor, nuestra elección, que pasamos a comentar de forma resumida por no hacer de este un post interminable:

  1. Practical Attacks Against MDM Solutions  (Daniel Brodie y Michael Shaulov): En esta charla Daniel Brodie y Michael Shaulov, comienzan indicándonos que los dispositivos móviles pueden ser utilizados de forma sencilla para realizar tareas de espionaje. Debido a su amplia implantación y a que son usados de forma indiferente en entornos personales y laborales, además de que a día de hoy la gran mayoría de ellos disponen de todos los instrumentos necesarios para llevar a cabo el espionaje (micrófono, cámara, geolocalización, transmisión de datos como correos, SMS, etc…). Durante la charla nos mostraron la herramienta Spyphone desarrollada por ellos, la cual permite instalar software en los dispositivos de forma subrepticia para realizar tareas de espionaje. Durante la charla realizaron una serie de demostraciones sobre dispositivos Android e iOS y en la que demostraron cómo obtener datos de clientes infectados, como obtener grabaciones de sonidos, lectura de correos electrónicos, etc… y la forma de evitar las medidas tradicionales utilizadas por los móviles para la detección de malware o incluso eludir Mobile Device Management (MDM), tales como el cifrado.

  1. Practical Exploitation Using A Malicious Service Set Identifier (SSID) (Deral Heiland)Una charla muy interesante en la que Deral Heiland ponente en conferencias como ShmooCon, Defcon, Securitybyte India, Hackcon Olso Norway, nos demostró cómo es posible explotar diferentes vulnerabilidades de XSS, CSRF e inyección de comandos sobre el SSID de diferentes puntos de acceso inalámbricos. Por medio del SSID es posible atacar distintos tipos de dispositivos móviles y consolas de administración de los multitud de puntos de acceso. En la charla también comentó las distintas limitaciones que existente en este tipo de ataques  como el número de caracteres máximo que se pueden inyectar en los distintos dispositivos (Cisco, Linksys, Sonic Wall, Aruba). Por último mostró las capturas de pantalla de varios ataques de XSS y CSRF sobre un dispositivo Aruba consiguiendo crear un nuevo id de administrador, cambiar la clave de acceso al portal de administración o cambiar el tipo de cifrado WEP, WPA2, entre otras cosas. Como conclusión indicó que el 50% de los puntos de acceso que él ha podido analizar hasta la fecha son vulnerables a este tipo de ataques.


  1. Building a Defensive Framework for Medical Device Security (Jay Radcliffe): Jay Radcliffe nos muestra en su charla  la importancia de una correcta defensa y análisis de los dispositivos  médicos. Ya que los mismos cada vez más a menudo utilizan conexiones de red, tanto cableada como inalámbrica para transmitir sus datos. Jay comenta que en la actualidad existe una gran confusión en cuanto a la categorización de los distintos dispositivos médicos, por ello lo divide en tres grandes grupos; los que utilizan sistemas operativos comerciales (Windows, Linux,etc…), dispositivos con sistemas operativos no comerciales con código propietario y hardware embebido (ARM, PIC,etc…) y dispositivos con sistemas de comunicación inalámbricos (WiFi, bluetooth). Comenta los distintos problemas de seguridad que tienen cada uno de ellos, que generalmente pasa por la falta de actualización de los mismos y la falta de pruebas. También habla sobre informe que el GAO ha publicado en el Congreso de los EE.UU, lo cual va a impulsar la acción de diversos organismos reguladores sobre la cuestión de la seguridad en estos dispositivos y el problema que va a suponer que las agencias que van a realizar las distintas acciones no están preparados para evaluar la seguridad de los dispositivos, los que puede causar más problemas que soluciones. Por último indica una serie de recomendaciones realistas sobre los pasos y acciones que deben tomar  los distintos organismos reguladores para reforzar la defensa de los dispositivos médicos y las investigaciones que se deben seguir para la correcta evolución de las pruebas a realizar sobre los futuros dispositivos.

  1. Huawei - From China with Love (Nikita Tarakanov): La verdad es que íbamos a esta charla con muchas expectativas y lamentablemente no cumplió del todo nuestras expectativas: tan sólo duró treinta minutos y a Nikita le fallaron las demos, con lo que nos quedamos con las ganas de verle en acción. Es cierto que nos puso en situación de todas las vulnerabilidades que existen para atacar diferentes modem 3G y 4G (que son bastantes) sean de la compañía que sean y del peligro que ellas conllevan al tratarse de dispositivos altamente difundidos por las compañías de telecomunicaciones. Dentro de las vulnerabilidades que Nikita ha podido explotar según nos indicó en su presentación, es posible la ejecución remota de código con privilegios locales, que en algunos casos son de administración, permitiendo el control total del dispositivo. También nos indicó las distintas maneras de infectar los dispositivos las cuales son muy variadas (USB, tarjeta SD, vía MBR, autoupdate XML, conexiones WiFI,etc…). Por último nos comentó que el objetivo de esta charla era concienciar de que con el gran número de dispositivos modem 3G y 4G que se encuentran en el mercado que son vulnerables se podría crear una gran botnet de dispositivos Huawei para realizar otro tipo de ataques en el futuro.


  1. To dock or not to dock, that is the question: Using laptop docking stations as hardware-based attack platforms (Andy Davis): Una muy interesante charla de cómo es posible ser espiados con un dispositivos tan simple y altamente extendido en  empresas como puede ser una estación de trabajo (dockstation). En este caso Andy Davis nos informa del uso de este tipo de dispositivos principalmente en oficinas en las que existente puestos de trabajo móviles, lo que hace de este tipo de dispositivos un componente idóneo para realizar ataques a distintos equipos clientes que trabajan en las distintas delegaciones de una empresa. Andy se centra en un modelo de DELL concreto que es el utilizado por su empresa. Durante la charla nos muestra como modificar una de las estaciones de trabajo para poder esnifar el tráfico de red, instalar un keyloger, captura screenshots periódicamente del equipo víctima, capturar el sonido procedente de las inmediaciones del dispositivo, capturar datos de la webcam (si el cliente dispone de ella), etc… Y todo ello de una forma difícilmente detectable. Para ello ha utilizado un Raspberry Pi (que hará de cerebro del dispositivo), un modem USB 3G/HSPA (para transmitir la información capturada) y un adaptador USB para instalar una tarjeta de sonido analógica. Todo ello ensamblado cabe dentro de la estación de trabajo y es difícilmente identificable por un usuario. Para finalizar la charla nos enseña distintas maneras que ha probado que pueden identificar que la estación de trabajo se encuentra modificada (una menor velocidad de transferencia de datos en la red, hay una nueva MAC en la red, desprende algo más de calor, emite radiofrecuencias por el uso del modem 3G/HSPA y un mayor consumo eléctrico), aunque son muy difíciles de detectar, ya que necesita un análisis exhaustivo de los dispositivos.  También nos indica una forma de mitigar este tipo de de ataques dentro de una red corporativa.


Entre conferencia y conferencia, y cambio de salas, tuvimos la oportunidad de cruzarnos con personas conocidas del mundo de la seguridad, algunos de ellos Españoles, como es el caso de Yago F.Hansen fundador de blog Diario de un Hacker.


El segundo día de conferencias se presentaba muy entretenido, ya que teníamos por delante charlas sobre sistemas SCADA, hacking a sistemas de videoconferencias o una charla sobre la explotación de vulnerabilidades en sistemas multijugador online, entre otras.

  1. Hacking Video Conferencing Systems (Moritz Jodeit): La charla comienza describiendo los lugares típicos donde se utilizan los sistemas de videoconferencias de alta gama (salas de reuniones corporativas o salas de juntas de grandes empresas) y los temas que se tratan que en algunos casos pueden tener un alto contenido de información confidencial o interna de las compañías. Por último indica que todos estos sistemas se encuentran conectados a Internet para poder dar servicio, lo que les hace susceptible de ataques remotos y vulnerables ya que suelen instalarse con los parámetros por defecto. Durante la charla se muestran una serie de estadísticas de los modelos más utilizados (Cisco y Polycom con más de un 75% del mercado). En concreto el estudio que ha realizado Moritz se ha basado en sistemas Polycom HDX. Sobre dicho modelo realiza muestra el resultado de la explotación de varias vulnerabilidades, las cuales pueden llevarse acabo al actualizar los sistemas, al configurar los dispositivos en modo desarrollo. Por último realiza una demo con la que nos muestra la manera de explotar una vulnerabilidad que afecta a la última versión del firmware mediante un exploit basado en la pila H.323 y que permite hacerse con el control del dispositivo. A través de la explotación de dicha vulnerabilidad realiza unas conclusiones sobre la post-explotación y las distintas formas de controlar los dispositivos periféricos conectados, como la cámara de vídeo o el micrófono, los cuales podrán utilizarse para construir un rootkit vigilancia.


  1. Who's Really Attacking Your ICS Devices? (Kyle Wilhoit): En esta conferencia Kyle Wilhoit comienza haciendo una breve exposición de lo que son sistemas SCADA y donde se encuentran implementados. También nos indica que en los últimos años se ha difundido mucha información en Internet de este tipo de sistemas y de la seguridad y vulnerabilidades que se han encontrado en los mismos. Puso como ejemplo el incidente sufrido en una torre de agua situada en Estados Unidos, la cual controlaba de forma remota y por Internet la presión del agua de la misma y tras ser atacada dejó sin suministro de agua a unas dieciséis mil  personas. La segunda parte de la charla cubrió la red trampa creada con el fin de investigar los tipos de ataques sufridos por sistemas de ICS a lo largo 28 días. Esta red estaba constituida por varios Honeypots sobre un servidor Windows server 2008 y 2 servidores Ubuntu 12.04, los cuales imitan dispositivos ICS / SCADA conectados a Internet. Durante la charla mostro los resultados de los ataques, los cuales eran bastante sorprendentes, siendo China el país del cual provenían el mayor número de ataques, seguido de Estados Unidos y Laos. También identificó los tipos de ataques sufridos entre los que se encontraban Ip Spoofing, intentos de acceso a servicios FTP, Telnet con usuarios de administración, pruebas sobre los métodos de cifrado, intentos de lectura y escritura sobre SNMP y denegaciones de servicio. Por último indicó una serie de medidas o técnicas de seguridad que se pueden utilizar para proteger sistemas ICS/SCADA (Mantener actualizados los sistemas, desactivar las conexiones a Internet si nos son necesarias, utilizar dobles factores de autenticación, usar SSLT/TLS en las comunicaciones, etc…).


  1. Using D-Space to Open Doors (Brad Antoniewicz): Brad Antoniewicz realizó de una forma muy amena y dinámica su charla sobre el uso de sistemas RFID y su uso en la vida cotidiana. Comenzó la charla explicando los diferentes dispositivos que componen el sistema, desde las tarjetas RFID pasando por los  controladores y hasta los sistemas de back-end que los gestionan. Después de explicarnos las diferentes partes del sistema RFID Brad nos identifica las vulnerabilidades existentes para cada uno de los componentes que la forman y las herramientas utilizadas para la explotación de las mismas, las cuales se encuentran publicadas en Internet y pueden ser utilizadas tanto en sistemas Windows como Unix.

  1. Multiplayer Online Games Insecurity (Donato Ferrante y Luigi Auriemma): Esta fue la última charla a la que asistí, la cual nos dejó un muy buen sabor de boca, ya que se expusieron algunas de las vulnerabilidades que afectan a dos de las mayores empresas de distribución de  Juegos multijugador online (STEAM y EA Games). Dando a conocer un mundo donde no se ha tenido muy en cuenta la seguridad y que puede comprometer a un elevado número de clientes confiados (entre estas dos compañías se estima que tienen más de 94 millones de usuarios y potenciales víctimas). Durante la charla se describieron algunos problemas específicos de las plataformas de juego online y la forma de encontrar vulnerabilidades en alguno de los juegos más actuales (Crysis 3, FIFA 2013, etc…). Por último, durante la charla liberaron una nueva vulnerabilidad 0-day la cual podía afectar a varios jugadores de forma simultánea que fueran a comenzar una partida online, en este caso sobre el videojuego Crysis 3, el cual lleva en el mercado menos de un mes. También llegaron a la conclusión de que la mayoría de vulnerabilidades no eran exclusivas de cada videojuego, sino que afectaban normalmente al motor de dicho videojuego, lo que lo hacía extrapolable a todos los videojuegos que utilizasen dicho motor de juego. También indicaron que otras vulnerabilidades directamente radicaban sobre los interfaces web que se utilizan para descargar juegos, actualizarlos o comenzar partidas online.

Con estas charlas se acabó nuestro tiempo en la tierra de los tulipanes. Os animo a todos a estar pendiente del Archive de las conferencias y a descargar las presentaciones y videos de las mismas y, si podéis, a asistir en una próxima edición.