sábado, 5 de mayo de 2012

Infiltrados. Write-Up Fase 1

Hace ya casi un año que escribí este post. Existen diferentes motivos por los que no lo publiqué antes pero ahí está tal cual lo escribí:


Durante esta semana he estado participando en el reto hacking Infiltrados organizado por informatica64. Se trata de un reto un tanto atípico ya que las pruebas son client-side, por lo que para superar las diferentes pruebas tienes que esperar a que un administrador las revise y apruebe, en caso de ser correctas.
Además, al estilo browser school del año pasado, cada administrador utilizará un navegador diferente para revisar las incidencias. Esto nos obliga a pelearnos con las diferentes opciones de seguridad que tiene cada uno de los tres navegadores involucrados Internet Explorer, Chrome y Firefox. Así que voy a ir describiendo el proceso que seguí en cada navegador.
Lo primero de todo, antes de meternos con los navegadores, fue descubrir la página vulnerable a la inyección. Esto resultó sencillo y en unos segundos estaba claro que estaba aquí:
http://rhinfiltrados.informatica64.com/inicioReto.aspx?idUsuario=<ID>
Y todo lo que pusiéramos a partir de idUsuario= acabaría reflejándose en la página web, permitiéndonos de este modo ejecutar javascript, o cualquier otra cosa.

Firefox


El primer navegador que utilicé fue el de Mozilla principalmente porque al saber que carece de filtro XSS pensé que sería el más sencillo.
Lo primero que se me ocurrió fue intentar robar la cookie de sesión del administrador pero tras consultar múltiples fuentes por el mundo de internet llegué a la conclusión de que, al ser la cookie httpOnly, no iba  a haber manera de atacar por ahí, por lo menos en navegadores modernos.
El siguiente paso fue analizar un poco más en profundidad que hacía el formulario de envío. En este existía un campo oculto que enviaba el ID del usuario. Este campo no se modificaba al cambiar la URL por lo que parecía que la clave estaba en conseguir, mediante javascript, modificar este valor y hacer un submit del formulario. Así que nada, me puse manos a la obra con ello y acabé con el siguiente código, poco elegante y muy "de prueba" pero aun así decidí mandarlo.
//esto va donde hemos dicho antes que estaba la inyección


El único problema que tenía esto es que cada segundo hacia el submit, pero aún así decidí mandarlo... y funciono!

Chrome

Aquí ya vinieron los problemas con el maldito filtro XSS, estuve buscando un rato como saltarlo pero no encontré nada útil, así que imaginé que debía de existir algún modo "sencillo".
La pregunta en este momento fue ¿Como lo hago en html? así que tras pensar un ratillo decidí que podía crear otro formulario con los mismos datos, y poner la imagen encima. El código resultante fue este



El resultado no era perfecto, y se notaba que había dos imágenes sobre todo cuando se cambiaba la resolución y eso. Así que decidí poner un mensaje en la incidencia en plan usuario despistado a ver si colaba.
Hola, tengo un problema con esta web http://bit.ly/... me salen más imágenes de las que deberían y al darle a la de Chrome hace cosas raras. Puedes ver que pasa? Gracias.
Total que al final también funcionó así que fui a por IE.

Internet Explorer

Había varios motivos por los que decidí ponerme con Internet Explorer el último de todos los navegadores. El primero de ellos es que tiene el mejor filtro Anti-XSS de los tres. Otro de los grandes motivos fue que no tenía, ni iba a tener, acceso a ninguna máquina con IE 9 por lo que en ningún momento pensé que fuera a resolverlo, pero como era el último pues intenté hacer las pruebas con IE8.
En primer lugar probé con el mismo sistema que en Chrome pero el filtro modificaba las etiquetas form e img por lo que no parecía que fuera a funcionar de ningún modo. Pero como no se me ocurría ninguna otra idea me puse a simplificar el ataque de Chrome todo lo posible, así que quite la parte del formulario y dejé solo la imagen y el id oculto. El comportamiento era extraño porque en primer lugar no cargaba la imagen, si no que mostraba una x roja, pero si se pinchaba en ella parece que al llamarse a si misma entonces si que cargaba la imagen y funcionaba correctamente. El problema venía de que esto es un comportamiento demasiado extraño, pero bueno les escribí un mensaje en la incidencia a ver que pasaba:
Hola, no se que le pasa a vuestra página http://bit.ly/... pero aparece una X cerca de la puerta de IE, si le das ya funciona bien, bueno aparecen dos imagenes pero no se porque, ¿puedes mirarlo? Muchas gracias
Total que casi cuela, pero no coló. Aunque el administrador si que me respondió diciendo que estaba cerca pero que IE le informaba de la presencia de un script.
En ese momento se me ocurrió pasar completamente de la imagen y meter solo el id oculto, porque, ¿Qué pasará con el servidor cuando reciba dos campos iguales? Pues parece que el servidor coge uno de ellos, probablemente el primero que le llega, que en este caso era el mío. Así que conseguido!. El script quedaría así:

Y bueno de este modo quedan resueltos los tres problemas y tenemos acceso a la fase 2. Pero sobre eso ya escribiré otro día.

Sí que me gustaría destacar que fue un reto muy interesante ya que es de los pocos donde tenemos la oportunidad de probar los ataques client-side. Y comentar que después de este concurso aquella conferencia que dió Raúl Siles en la RootedCon donde propuso el cambio de nombre de XSS a WCI (Web Content Injection) cobra mucho sentido, ya que como hemos visto en los ataques a Chrome e IE, ni hay cross-domain, ni hay javascript, sino simplemente etiquetas html.

domingo, 15 de noviembre de 2009

Instalación del DNIe: LINUX

Durante esta mañana he estado intentando instalar el DNI en Ubuntu (9.10) pero, tras seguir todos los pasos descritos en la guía de instalación, no he sido capaz de conseguirlo. Así que he decidido buscar información en esa gran fuente de sabiduría que es google y he acabado en esta guía donde se explica perfectamente como hacerlo. Solo destacar que los comandos están escritos para 64bits y hay un paso (el 3.4) donde si vuestro sistema es de 32bits debéis modificar la última parte del comando cambiando amd64 por i386:

sudo dpkg -i libopensc2_0.11.7-7_amd64.deb opensc_0.11.7-7_amd64.deb opensc-dnie_1.4.6-2_amd64.deb

al cambiarlo quedaría así:

sudo dpkg -i libopensc2_0.11.7-7_i386.deb opensc_0.11.7-7_i386.deb opensc-dnie_1.4.6-2_i386.deb

Así que, a partir de este momento, ya podemos utilizar nuestro lector de DNIe en los tres Sistemas Operativos más importantes y hacer uso de los servicios que nos ofrecen las distintas administraciones.

sábado, 14 de noviembre de 2009

Instalación del DNIe: MAC OSX

Hoy voy a hablar de como instalar todo lo necesario para poder trabajar con el dni desde el sistema de Apple. Recordando lo visto para Windows una de las cosas que necesitamos es el lector de tarjetas, yo hoy voy a trabajar con el lector que el gobierno repartió hace unas semanas, tema del que hablaré otro día.
Como siempre el primer paso es irnos a la sección de descargas del Portal Oficial sobre el DNI electrónico, y una vez ahí encontramos dos secciones que nos van a interesar. Por un lado en "Documentos con recomendaciones de instalación" encontramos la guía de instalación, en la cual se basa esta entrada. Y por otro tenemos, dentro de la sección "Software para Sistemas MacOS X 32/64 bits", se encuentra disponible el driver del DNIe. Cabe destacar que, aunque no se encuentra directamente disponible para la descarga dentro del portal, en la guía se nos indica que debemos descargar el software SCA (Smart Card for Apple Mac OS X), del que existen dos versiones, para Tiger 10.4.X y para Leopard 10.5.X.

Una vez disponemos de todo el Software necesario vamos a pasar a describir el proceso de instalación, yo voy a describirlo para Leopard:
  1. En primer lugar, empezaremos instalando el soporte SCA, para ello abrimos el archivo sca-0.2.3pre2.dmg, y ejecutamos el instalador y seguimos los pasos en pantalla hasta completar el proceso.
  2. En segundo lugar instalaremos el driver del DNIe, buscamos el fichero opensc.dnie-1.4.4.4.dmg y volvemos a seguir los pasos indicados por el instalador.
Ahora que ya tenemos los drivers instalados falta configurarlo, para ello vamos a hablar primero de Firefox. El proceso a seguir es el mismo que en Windows, aquí lo pongo:
  1. Dentro de Firefox nos vamos a "herramientas" > "opciones"
  2. Seleccionamos "Avanzado" y ahí vamos a la última pestaña "cifrado"
  3. Ahora tenemos que pinchar sobre "Dispositivos de Seguridad" (abajo derecha)
  4. Presionamos "cargar" y le damos un nombre, ej. "DNIe"
  5. y en archivo del módulo tenemos que darle a examinar y buscar este:
    /Library/OpenSC/lib/opensc-pkcs11.so
Una vez seguidos estos pasos ya podemos pasar a utilizar el DNIe con Firefox.

Ahora hablemos de Safari, en Mac el navegador de Apple hace uso de los llaveros del sistema, los cuales podemos ver en la aplicación "Acceso a Llaveros", y si nos vamos a esta herramienta vemos como el llavero del DNI aparece bloqueado, pero si intentamos desbloquearlo y poner la contraseña vemos como no nos muestra ningún certificado. Esto nos dice que vamos a ser incapaces de utilizar el DNIe en todas las aplicaciones que hagan uso de los llaveros de nuestro Mac, es decir, no podremos utilizarlos ni con Mail, ni con Safari, ni con muchas otras aplicaciones que utilizan el almacen del sistema. En este punto habría que preguntarse si se han hecho las cosas bien por parte de la Administración, ya que no es lógico que para dar soporte a este sistema dependan de una herramienta que no está integrada en el mismo y de la cual además se olvidan a la hora de proporcionar soporte a las nuevas versiones.

Como conclusión destacar que si queremos utilizar el DNIe en el sistema de Apple deberemos limitarnos a hacerlo con Firefox, y habrá que esperar a ver que pasa en un futuro con la integración en el sistema. Tampoco se sabe mucho ahora mismo de cómo utilizarlo en Snow Leopard, la nueva versión del sistema que ya lleva dos meses entre nosotros, tiempo suficiente para que se haya proporcionado soporte de forma oficial.

sábado, 7 de noviembre de 2009

Instalación del DNIe: WINDOWS

La primera serie de entradas que tengo pensado escribir van sobre las aventuras y desventuras de instalar todo lo necesario para utlizar el DNIe, voy a empezar por Windows y en posteriores entradas os hablaré de OS X y de Linux.

El primer lugar donde debemos buscar para saber "todo" lo necesario para empezar a utilizar el DNI es http://www.dnielectronico.es/ y si navegamos un poco por la página vemos que lo primero que necesitamos es... un lector para el DNIe! además nos también nos dice que debemos de descargar unas herramientas diferentes dependiendo de nuestro sistema, que como hemos dicho en esta entrada vamos a hablar de Windows así que nos vamos a la sección de descargas y buscamos todo lo que necesitamos para nuestro sistema.

Lo primero que vemos en la sección de descargas es un enlace a una guía de instalación donde nos explica de forma bastante precisa los pasos a seguir para la instalación en IE, por lo que no voy a comentarla. Luego tenemos que entrar en la parte de instalación para sistemas Windows y ahí bajamos los Drivers CSP, que es un archivo ejecutable, pues doble click sobre él y seguimos las instrucciones en pantalla. Al finalizar la instalación nos pedirá reiniciar y durante el arranque del sistema nos preguntará para instalar los certificados (todo esto está en la guía de instalación).

Hasta aquí todo bien, de hecho lo más probable es que si utilizamos IE ya tengamos todo funcionando perfecto, pero ¿Y si utilizamos Firefox?. Pues en este caso la cosa se complica un poco ya que el instalador automático no funciona bien. Para instalarlo correctamente puedes seguir los siguientes pasos:
  1. Dentro de Firefox nos vamos a "herramientas" > "opciones"
  2. Seleccionamos "Avanzado" y ahí vamos a la última pestaña "cifrado"
  3. Ahora tenemos que pinchar sobre "Dispositivos de Seguridad" (abajo derecha)
  4. Presionamos "cargar" y le damos un nombre, ej. "DNIe"
  5. y en archivo del módulo tenemos que darle a examinar y buscar este:
    c:\windows\system32\UsrPkcs11.dll
A partir de este momento ya tenemos Firefox preparado para utilizar el DNIe, para probar que funciona bien, dentro de la misma pestaña de antes, la de "cifrado", si seleccionamos "Ver certificados" con el DNI introducido en el lector, nos preguntará la contraseña y podremos ver nuestros certificados personales

¿Y si utilizamos Google Chrome? Pues parece que Chrome utiliza el mismo almacén de certificados que IE  y por lo tanto no tenemos que hacer nada. Bien por Google!

¿Y que pasa con Apple Safari? Pues que Apple sigue en su linea... no hay opciones para configurar nada de certificados, ni verlos, ni importar, ni nada...y es que realmente a quien leches le importan todas esas cosas? con Safari simplemente funciona! Genial por Apple! Simplemente comentar que al igual que Chrome parece que utiliza el mismo almacen que IE aunque en las opciones no encontramos nada.

Y por último, ¿y Opera? pues utiliza un almacén propio, al igual que Firefox, pero a diferencia de este no ofrece ninguna opción para instalar el módulo necesario para acceder al DNI por lo que, hasta donde yo se, no se puede utilizar. Si alguien sabe como que me lo diga en los comentarios y edito la entrada.

Bueno como veis empezar a utilizar el DNIe no tiene porque ser difícil, otro día os hablaré del tema de la usabilidad que eso ya es otra historia... y recordaros que si utilizáis servicios que requieran el del DNIe para identificaros, como la CAM, debéis seleccionar el certificado de "Autenticación"

Buenos dias!

Antes de nada voy a presentarme y luego pasaré a explicaros el porqué de este blog. Mi nombre es Alejandro Iniesta, tengo 24 años,  y estoy estudiando Ingeniería Informática, de hecho estoy terminando lo que quiere decir que me quedan dos optativas y el proyecto. Hace un par de años ya terminé la Ingeniería Técnica en Informática de Sistemas (ITIS) y además hice el año pasado un Experto Universitario en Administración de Redes de Computadores y en verano me saqué la certificación de Cisco CCNA. Y por si todo esto fuera poco este año he empezado un Master en Seguridad Informática por la UOC.

Como podéis ver hay mucha cosa académica, bueno pues no se como pero también he tenido tiempo para trabajar bastante estos años, en el mundo informático empecé hace unos años colaborando en la creación de un programita en VB para una cristalería. Luego hice una aplicación web para gestionar reservas en otra empresa, y estuve trabajando durante 3 años como técnico de informática en otro lugar peleandome con bastantes PCs y ahora mismo es el segundo año que estoy trabajando, también como técnico(becario más bien...), en la Biblioteca de la Universidad de Alicante.
Además de trabajos en el mundo de la informática, durante los veranos me he dedicado a trabajar de Socorrista en las playas de Elche y Santa Pola, donde durante 6 años he pasado muy buenos momentos con grandes compañeros.

Y después de aburriros un poco con mi vida voy a contaros cual es la motivación para escribir este blog. Como ya os he dicho estoy haciendo el proyecto de SI (Sistemas Informáticos), el cual va sobre firma de documentos con el DNIe, y aunque todavía estoy empezando ya me he encontrado con cosas que me parece interesante compartir con la gente, cosas como los problemas que me he encontrado al instalar en DNIe o lo desesperante que es utilizarlo, pero es posible que también escriba sobre más temas, pero eso ya dependerá del tiempo que pueda dedicarle esto.

Sin más me despido de vosotros y voy a ver si escribo un post para "entrar en materia"
Saludos!