Equilibrio Inestable

2009/02/10

¿Preguntas seguras?

Filed under: Humor, Seguridad Informatica — Tags: , — Pedro Laguna @ 9:30 AM

Con mi nuevo Zune (ya hablare de el algun dia) me he suscrito a una serie de podcast en ingles sobre tecnologia para ir cogiendo un poco de oido en el ingles ademas de ver las peliculas y las series sin doblar. Uno de esos podcasts a los que me he suscrito es Security Now! donde desvarian en mayor o menor medida sobre temas relacionados con la seguridad.

La semana pasada iba escuchando en el metro el capitulo numero 179 y comentaron una cosa que me hizo mucha gracia: Preguntas secretas realmente complicadas de responder (incluso si eres tu el que quieres proteger tu cuenta!). Os dejo aqui la lista original, recogida por Joel Gunz:

  • What is your mother’s maiden name?
  • What is your older sister’s favorite Monopoly game piece?
  • Who did your paternal grandfather vote for in the 1956 presidential election?
  • Why did you choose a liberal-arts degree when your entire family urged you to go into finance?
  • In what year did you begin working on your novel?
  • How many weeks away was graduation when you dropped out of college?
  • What was your score on the civil-service employment exam?
  • Where were you sitting when your girlfriend told you she was pregnant?
  • Where did you never end up going for your honeymoon?
  • In what year did you begin working for the post office?
  • What is the name of the hedge-fund manager your ex-wife married?
  • How many hours did it take you to drink that bottle of Jack Daniel’s yesterday?
  • What time was it when, in a drunken rage, you threw your novel into the fire?
  • If you could do it all over again, what would you do differently?

Mi respuesta para todas ellas seria la misma: asdj3oij34oij,mnwn55435″$·4eve o algo parecido. La verdad es que nunca he creido en las preguntas secretas para recuperar claves, casos ha habido muchos de famosos que han perdido su privacidad por poner datos reales en la respuesta. La creacion de un link temporal para recuperar las claves es mucho mas complicado a la hora de programar pero nos garantiza una mayor seguridad. Sin embargo tampoco es la panacea pues si es un enlace facilmente predecible un atacante podria generar un enlace para recuperar la clave del usuario que desee, pero esto sera materia de otra entrada con mas tiempo…

2009/01/28

la importancia de reportar un fallo

Filed under: General, Seguridad Informatica, Software Libre, XSS — Tags: , , , — Pedro Laguna @ 9:01 AM

Cuando uno se encuentra “sin querer” fallos en algun tipo de software lo primero que piensa y hace es reportar el fallo al creador o responsable, pero cuando uno ya ha reportado muuuuuuuuuuuuuuuuuuchos fallos y la respuesta siempre ha sido la indiferencia, el pasotismo y la falta de agradecimientos (con honrosas excepciones) pues empieza a dejar de preocuparse por avisar.

Por eso cuando descubri un fallo en el plugin de WordPress WP-Forum 1.7.4 decidi que pasaba de avisar al creador (mas que nada porque llevaba sin actualizar el plugin desde tiempos inmemoriales y encima jugaba al WoW :P ). Sin embargo hace un par de dias leyendo un blog sobre seguridad en blogs, valga la rebundancia, publicaron exactamente el mismo fallo que yo habia descubierto pero asociandolo a la version 1.7.8.

Esto me molesto, no porque los creditos se los llevase otro, un tal [[seomafia]] que parece que esta empezando en esto, si no porque lo asocian a una version mucho mayor que la que yo descubri. ¿Que significa esto? Pues que el tio si que estuvo desarrollando WP-Forum despues de todo (incluso parece que hay una version 2.2 de WP-Forum) y que de haberlo avisado yo ahora mismo no estariamos hablando de una vulnerabilidad en su software.

Sirva esto como un escarnio publico que aplico sobre mi mismo a modo de autoflagelamiento para concienciar a todos sobre la importancia de reportar todos los fallos que encontremos, por muy insignificantes que nos parezcan o por muy abandonado que consideremos el proyecto.

P.D. Esta mañana he probado un poco YouAre, una evolucion de twitter pero con sabor andaluz, y ya tienen reportada una vulnerabilidad, a ver como responden a ella ;) ACTUALIZACION: Ya han contactado conmigo, ademas mediante GTalk, ¡que modernos!

2009/01/23

Ponte a prueba…

Filed under: General, Seguridad Informatica — Tags: , , — Pedro Laguna @ 9:00 PM

Os dejo aqui el examen que he puesto esta tarde a los alumnos del curso FTSAI, en la parte del 3er modulo, el de seguridad web. Las respuestas son bastante abiertas en algunos casos y aqui pongo la respuesta que escribiria si el examinado fuese yo.

  1. Explica las diferencias entre Remote File Inclusion y Local File Inclusion (1 punto)
    Ambos fallos ocurren cuando se recibe un parametro por la URL que se usa para abrir un fichero, ya sea como nombre de fichero, ruta completa o parte de la ruta. En el Remote File Inclusion permite la inclusion de un fichero externo que sera interpretado como codigo ejecutable en el servidor afectado. Para que funcione en PHP debe de estar activada la opcion allow_url_fopen en el fichero de configuracion php.ini. Para el Local File Inclusion debemos de conocer la ruta en la que se esta ejecutando el script para poder usar rutas relativas y subir tantos directorios como necesitemos mediante ../ o, si el script lo permite, usar rutas directas como /etc/shadow.
  2. ¿Cómo saltarías un filtro que estuviese eliminando las comillas simples y los espacios a la hora de insertar un SQL Injection? (1 punto)
    Por partes. La restriccion de las comillas se saltaria de las funciones CHAR() de los distintos motores de base de datos, que permiten generar cadenas de texto sin necesidad de usar las comillas simples. El problema de los espacios se solventaria usando el comentario multilinea (/**/) entre cada comando y parametro de la sentencia SQL; el motor de base de datos lo interpreta como una separacion entre cadenas y no necesitamos escribir el espacio.
  3. Describe todos los tipos de SQL Injection que conozcas. (2 puntos)
    • SQL Injection – El SQL “normal”, usando la funcion UNION y seleccionando los campos deseados de la tabla objetivo
    • SQL Injection en base a errores – Provocando errores en el motor de base de datos para poder sacar informacion referente a su estructura
    • Blind SQL Injection – Generando sentencias verdaderas o falsas y que provocan cambios visibles en la pagina de respuesta.
    • SQL Injection en base a tiempos – Igual que el Blind SQL Injection pero usando funciones propias de los motores de bases de datos para detectar cuando una sentencia es verdadera o falsa.
    • SQL Injection con consultas pesadas – Igual que el SQL Injection en base a tiempos pero generando consultas muy complejas que le tomen mucho tiempo de calculo al motor de base de datos.
  4. Crea dos listas, la de los caracteres que consideras importantes en SQL Injection y otra para LDAP Injection (1 punto)
    SQL Injection: ‘ ” (espacio) ; / * + – # %
    LDAP Injection: ( ) & | = *
  5. Define, con tus propias palabras, que significa la reducción del juego de caracteres en SQL Injection y LDAP Injection. Pon ejemplos de cada uno. (1 punto)
    La reduccion del juego de caracteres consiste en usar los caracteres de comodin de cada uno de los lenguajes anteriormente mencionados (% para SQL Injection y * para LDAP Injection) para comprobar la presencia de un caracter concreto en alguna posicion del campo seleccionado. Si la respuesta es falsa podemos eliminar ese caracter del resto de peticiones que hagamos, pues nunca va a aparecer.
    SQL Injection: AND SELECT clave FROM usuarios WHERE usuario = ‘%h%’
    LDAP Injection: *)(uid=*b*)
  6. Explica como asegurarías la infraestructura de tu aplicación web de red social en base a la configuración de las sesiones.(2 puntos)
    Para asegurar la configuracion de las sesiones de mi aplicacion web recurriria a varios metodos. Para empezar haria uso de las configuraciones de las cookies de sesion, estableciendolas como seguras y marcandolas como httpOnly. Tambien tendria en cuenta el host y el path, limitando la accion de las cookies a las zonas necesarias (como en una zona privada, por ejemplo).
    Para evitar el tema de CSRF me preocuparia de establecer la comprobacion de que las peticiones importantes (como las dese realizasen por POST y se comprobasen las cabeceras Referer. Sim embargo, y para que fuese imposible realizar un ataque de este tipo, generaria un Id unico de operacion por sesion de usuario que comprobaria al recibir las peticiones del usuario para determinar si son legitimas o no.
  7. Imagina que al introducir la cadena ‘asdf’ en un buscador en la página de resultado nos encontramos el siguiente código:
    <body title=”Search result asdf”>
    ¿Cómo ejecutarías una ventana de alerta sabiendo que el servidor ejecuta PHP, tiene las magic_quotes activadas y no permite la inserción de los caracteres < y >? Explícalo con tus palabras y escribe como quedaría exactamente el código resultante de la inyección de XSS. (1 punto)
    La sentencia que introduciria en el buscado seria: ” onload=alert(document.domain); asdf= lo cual generaria un alert con el nombre del dominio. El codigo que se generaria al final en la pagina seria: <body title=”Search result \” onload=alert(document.domain); asdf=”>
  8. Cuéntame cual es la prueba de Bright-Shadows.net que más te ha gustado y como la has superado. (Nota: No valen, evidentemente, ninguna de las explicadas en clase) (1 punto)
    Esta, evidentemente, es una respuesta personal. A mi, una de las que mas me gusto, una vez superadas, fue la prueba RHC 5. La manera de superarla tampoco la voy a poner, infringiria las normas de la pagina y la etica personal.

¿Dificil? ¿Facil? ¿Ni idea? ¿Que nota crees que sacarias? Bueno, espero que al menos al leer las preguntas y las respuestas algo aprenda la gente. Y si quieres examinarte de verdad la proxima edicion del FTSAI sera en Zaragoza ;-)

2009/01/19

porque el gcc lo vale…

Filed under: General — Tags: , , — Pedro Laguna @ 11:51 AM

Andando como ando liado estudiando los buffer overflows, integer overflows y demas hierbas (que diria Rafa Vargas) era inevitable que acabase en alguna parte del codigo del gcc, compilador que estoy utilizando para los ejemplos.

Leyendo el articulo Big Loop Integer Protection del numero 60 de la Phrack me he encontrado con que el autor menciona la existencia de una funcion, rest_of_compilation. Sin creermelo mucho he tenido que ir al svn de gcc y comprobarlo por mi mismo.

¡Y ahi esta! En el fichero toplev.c, en una linea indeterminada, con un comentario antes de la funcion que dice que a rest_of_compilation la llama finish_function. Con dos……….. Me se de mas de uno que ahora mismo debe de estar revolviendose en su silla o corriendo al cuarto de baño a lavarse los ojos con abundante agua.

/* This is called from finish_function (within langhooks.parse_file)
   after each top-level definition is parsed.
   It is supposed to compile that function or variable
   and output the assembler code for it.
   After we return, the tree storage is freed.  */

void
rest_of_compilation (tree decl)

En fin, cosas estas del S.L., como la cancion de Guadalinfo, todo un ejemplo de ritmo, mensaje y gusto musical.

P.D. Esto para nota, unas lineas mas abajo hay una llamada a goto…

2008/03/28

¿Seguridad? Si claro…

Filed under: Humor, Seguridad Informatica — Tags: , , — Pedro Laguna @ 9:07 PM

Texto encontrado en una guia que explica la infraestructura de seguridad de una aplicacion bancaria:

Todos los comandos de peticiones y respuesta entre la aplicación cliente ClienteBanco y los programas ubicados en el ServidorBanco viajan encriptados; es decir, viajan a través de TCP/IP por HTTP tipo POST pero no son comandos estándar, sino propietarios.

¿Hace falta que comente algo?

2008/03/25

Certificados, confianza y Firefox

Filed under: Firefox, Internet Explorer, Linux, Seguridad Informatica — Tags: , , , — Pedro Laguna @ 11:13 AM

Una de las cosas mas importantes cuando navegamos por internet es el poder navegar de manera segura y confiable por paginas en las que podamos depositar nuestra confianza. ¿Y como se hace esto? Mediante certificados firmados por entidades raices de confianza, o lo que es lo mismo, gente en la que confiamos para confiar en gente.

Ayer mientras navegaba desde Windows Vista/IE7 por una pagina del Gobierno de España estuve pasando de pagina cifrada a pagina sin cifrar sin que el navegador me diese ninguna alerta acerca del certificado digital que se estaba usando para cifrar las conexiones. Sin embargo, esta mañana, desde Ubuntu/Firefox si que he recibido una alerta acerca de que no se confiaba en el certificado. ¡Alerta! ¿Que ocurre aqui? Revisando el certificado me encuentro con esto:

pantallazo-add-security-exception.png

A ver quien ha firmado este certificado…

pantallazo-certificate-viewer.png

¡Anda! Si es la Fabrica Nacional de Moneda y Timbre… Oh… wait! ¿Firefox en Ubuntu no confia por defecto en la entidad certificadora mas importante de España? ¿Y si alguien quiere, no se, entrar en CUALQUIER pagina de la administracion publica y no sabe como añadir un certificado raiz? Veamos en quien confia el Firefox…

pantallazo-certificate-manager.png

Como se puede observar en la barra de desplazamiento vertical, hay muchas mas de las que aqui se muestran, incluyendo a las populares y mundialmente conocidas como Verisign, Thawte, Swisscom o… ¡Informatica64CA! Si amigos, mi Firefox confía mas en Informática 64 que en la Fabrica Nacional de Moneda y Timbre.

Para hacer mas pruebas arranco de nuevo el ordenador, esta vez en Windows Vista y me dirijo a la pagina cifrada con Firefox para volver a encontrarme el mismo mensaje de error! “No se confia en la entidad certificadora raiz”. Vaya, parece que no va a ser solo problema de GNU/Linux, si no que tambien va a tener su parte de culpa Firefox, con lo bien que me caia…

Al final solo nos quedan dos soluciones:

  • Establecer una excepcion para cada sitio que visitemos con Firefox, confiando en el certificado que se nos presenta y esperando que no sea una falsificacion colocada ahi por algun programa de Man In The Middle
  • Abrir nuestro IE, ir a la lista de certificados (Herramientas/Opciones de Internet/Contenido/Certificados), comprobar que existe la confianza en la FNMT y exportar el certificado. Posteriormente importarlo en Firefox para que nuestros dos navegadores confien en la entidad certificadora de la Fabrica Nacional de Moneda y Timbre.
iefnmt.png

Hay una tercera opcion, pero quizas sea algo mas tediosa y complicada, que es la de solicitar este mismo certificado a la FNMT e instalarlo en nuestro equipo, aunque con las recomendaciones de seguridad para instalar los certificados en Windows Vista/IE 7 que dan no se si hacerlo…

En fin… Que bien que estoy con mi DNI de plastico y sin chips, sin lios de certificados ni nada… ¿verdad?

2008/03/24

La cancion del Javascript

Filed under: Seguridad Informatica — Tags: , — Pedro Laguna @ 10:46 PM

En blogs encuentro la cancion del javascript versionando al chikiliquatre:

EL JAVASCRIPY

¡¡¡Teclea, teclea!!!

El javascripy mola mogollón,

funciona en explorer y también en firefox.

Ponle javascripy a esa paginita,

que el javascripy la deja muy bonita.

Abre ventanas,

muestra mensajes,

valida formularios,

mi amol ya tu sabes!

Programan los seniors,

Programan los juniors,

Programa mi jefe con acentos en el function!

Y el javascripy se programa asi:

1-El tag

2-el function vars

3-el alert-confirm

4-el return trú

Programa el javascripy,

Programa el javascripy,

programan los heavys también los frikis

Programan en la offis, programan en la uni,

Programan los fruittis y también los lunnis.

Programa Maradona esnifando una raya,

y Juan Carlos le dice: ¿Porque no usas ajax?

En el formulario de un triste portal,

pusieron javascripy y ya pudo validar

¡¡¡Validar!! ¡¡Validar, validarr, validarrr!!!

Y el javascripy se programa asi:

1-El tag

2-el function vars

3-el alert-confirm

4-el return trú

¿Validar? ¿Validar con javascript? Eso ni en broma!! Pero a ver… ¿A quien en su sano juicio se le ocurre actualmente validar/autenticar mediante Javascript? Enojado me encuentro… Y hay gente que aun protege sus aplicaciones con Javascript!

A ver, nociones basicas de validacion:

  • Validar en cliente mediante Javascript (hacer esto unicamente para campos que se puedan limitar de alguna forma: numericos, DNIs, fechas…)
  • Validar en servidor TODOS los datos recibidos. Es mas lento porque la informacion tiene que viajar hasta nosotros pero es mas seguro.
  • Volver a validar cualquier informacion contenida en la base de datos. Nunca se sabe quien va a llegar a insertar algo en nuestras tablas

Bueno, creo que ya se me va desinchando la vena del cuello…

Theme: Shocking Blue Green. Blog at WordPress.com.

Follow

Get every new post delivered to your Inbox.