jueves, enero 31, 2008

Control Parental

Cuando de pequeño he cometido alguna trastada mis papis me han castigado. Sniff. No ha sucedido muchas veces porque yo de joven he sido muy bueno, bueno, bueno. Lo de Maligno vino ya más tardíamente.

Uno de los peores castigos que podía tener era que me dejaran sin Internet. En esa edad en la que los hombres descubrimos, como dice House, a nuestro amigo el señor zanahoria y aún no tenemos edad para comprar porno, ni existía el plus y en casa no se coge más que la 1 y la cadena esa de los animales, Internet era una fuente inagotable de … conocimiento.

Hoy en día, ya no se usa eso de cortar Internet, ya que en mi época bastaba con no dejarme poner le modem enchufado a la línea de teléfono. Hoy se usan cosas más modernas como por ejemplo… el control parental.

El control parental es un gran invento pues agudiza el ingenio de futuros hackers, que buscan la forma de conseguir acceso total al…conocimiento, para poder jugar con el señor Zanahoria.

Para muestra un botón, nuestro amigo concretamente es un joven adolescente en busca de novia que para poder ver porno tiene que enviar un mail a un demonio que lanza wget se baja la web, quita el texto y las metas del html y manda las fotos por mail. Es un buen sistema pues ayuda a filtrar y proporciona…conocimiento, que mientras que no tenga novia le vendrá bien al señor Zanahoria.

Ayudemos todos a nuestro joven amigo, que pueda por fin acceder libremente al…conocimiento!!!

Saludos Malignos!

Riesgos de Seguridad y Medidas de
Protección en Windows Live Messenger (III/IV)

***************************************************************************************

Artículo Publicado en la revista PCWorld Ene'08
- Riesgos y Medidas de Protección en Windows Live Messenger (I/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (II/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (III/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (IV/IV)
***************************************************************************************
¿Cómo Cifrar los mensajes y la transmisión de ficheros?

Las versiones empresariales de Windows Messenger permiten el uso de transmisiones cifradas, pero por defecto, en nuestras comunicaciones con Windows Live Messenger debemos tomar medidas adicionales para proteger la privacidad de nuestras comunicaciones cuando nos encontremos en redes no seguras.

La opción más extendida es la utilización de sistemas de cifrado externos. Este tipo de aplicaciones funcionan utilizando sistemas criptográficos para las comunicaciones. Una de las soluciones más extendidas es Simp (Secway Instant Messenger Privacy). Dispone de dos versiones, la primera la versión Simp-Lite es gratuita y permite la autenticación de la persona y el cifrado de mensajes de texto. La versión profesional Simp-Pro permite además el cifrado de ficheros transmitidos. Nada más instalar el software en nuestro ordenador el sistema nos va a pedir que generemos nuestras claves con un sencillo Asistente de Configuración. El proceso completo es el siguiente:

Paso 1: Explicación del Proceso

Paso 2: Generamos tantas claves como sistemas queramos utilizar con ellas. Elegimos la longitud y el algoritmo de generación de claves y para que servicios queremos utilizarlo [MSN, Yahoo, etc… o todos]

Paso 3: Elegimos una contraseña para proteger nuestra clave.

Paso 4: Proceso de generación aleatoria de clave. Se realiza mediante el movimiento del ratón.

Paso 5: Generación de la clave

Paso 6: Claves listas para ser utilizadas

Una vez creada nuestra claves podemos comunicarnos de forma segura con todos los que tengan implantada una solución similar. Una vez creadas las claves el sistema permite tres tipos de comunicaciones:

- Comunicación No Cifrada: El sistema detecta y alerta de que se está produciendo una conversación No Cifrada. Lógicamente esto permite que se siga pudiendo comunicar con personas que no tienen instalado ningún software de cifrado tranquilamente, pero además nos advierte del riesgo.

- Comunicación Cifrada: Se negocia una clave aleatoria para el cifrado AES-128 pero no se ha podido comprobar que el destinatario es quien dice que es. En este caso nos encontramos con una conversación en la que ambos soportan el sistema criptográfico pero no se ha realizado el intercambio de claves. En la negociación de la clave, al no haber podido comprobar al participante de la comunicación es posible perpetrar un ataque de Man In The Middle en este sistema dónde el hombre en medio negocia claves de sesión distintas con los participantes de la comunicación y puede acceder a los datos de la conversación.

- Comunicación Cifrada y Autenticada: En este tipo de comunicaciones se utiliza el sistema Diffie-Hellman para trabajar. Es decir, utilizando las claves públicas se negocia una clave aleatoria para cifrar la conversación con AES-128 (Advanced Encryption System). Para ello es necesario haber intercambiando la clave pública con los participantes de la comunicación. De esta manera, cuando se genera la clave que va a ser utilizar para esta conversación en el protocolo AES-128 se va a enviar cifrada con la clave pública del destinatario para garantizar que sólo el poseedor de la clave privada puede acceder a ella.

En la imagen 6 podemos ver como en la herramienta contamos con dos claves públicas de dos usuarios que nos permitirán autenticarlos, y como estamos teniendo dos conversaciones en este momento, una cifrada pero no autenticada, en color azul, y otra sin cifrar ni autenticar en color rojo.

Imagen 6: Estatus de cifrado y autenticado de conversaciones

El usuario de la conversación cifrada y no autenticada podemos autenticarlo si realizamos el intercambio de claves públicas. En este caso vemos como el mismo programa dispone de un sistema de intercambio de claves públicas. Como se puede ver la clave es comprobable con lo que bastaría con realizar otra comprobación con el dueño de la clave para garantizar que es la clave auténtica y aceptarla.

Imagen 7: Intercambio de claves públicas

Una vez autenticado el usuario la conversación pasaría a un nivel de seguridad superior de cifrado y autenticado como se puede ver en la Imagen 8:

Imagen 8: Conversación cifrada y autenticada.


***************************************************************************************
Artículo Publicado en la revista PCWorld Ene'08
- Riesgos y Medidas de Protección en Windows Live Messenger (I/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (II/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (III/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (IV/IV)
***************************************************************************************

miércoles, enero 30, 2008

Estoy perdiendo mi Mojo!

Con esto de las alertas de Google te enteras de muchas cosas que dicen sobre tí. Una de las últimas que me ha llegado dice que estoy perdiendo Mojo... o algo así.


Mojo Luser

El caso es que me he hecho cuenta y he ido a catalogar el dominio y... no he sabido catalogarlo, ¿me ayudáis a ver si subo mi mojo?

¿De que va la movida?

Saludos malignos!

Spectra: The Band!. Confesiones


La otra cara del éxito ya sabéis que no es tan bonita. Uno llega del barrio, se sube a un escenario a cantar y tocar música de rock y se convierte en una superestrella. A partir de ese momento todo es una espiral de LSD. Fiestas, drogas, mujeres, alcohol, somniferos, más mujeres, más fiestas, más mujeres, más mujeres.... Es dificil abstraerse de todo lo que te envuleve y no dejarte arrastrar.

En mi caso, tras llenar Wembley y tener a los Metallica de teloneros no supe bajar de ese estado de embriaguez continua que da el estar bebiendo Dyc con hielo todo el día y no supe gestionar mi fortuna. Después de haber ganado más de 10 garrupitos de millones de dolares, parte de ellos vendiendo mi cuerpo, parte de ellos con la lotería y parte de ellos con el éxito de los temas de nuestro famoso grupo de Rock Garage "Spectra: The Band!" decidimos retirarnos.


Actuación en Wembley

Yo, que ya sabéis todos que utilizaba el nombre artístico de "Nasty", hace tiempo que había decidido continuar mi carrera en solitario e incluso realicé alguna actuación compartiendo escenario con "Caramelito". Muchos de mis fans me acusaron de dejar el duro metal e irme con "Caramelito" que, cómo todos sabéis, es un cantante de Glam.


Nasty & Caramelito

El abuelo, al que todos conoceréis por como "Asesino" optó por cortarse el pelo, ponerse los nauticos, dejar las drogas y dedicarse a una vida de contemplanción junto al mar disfrutando de los deportes naúticos. Fue un cambio radical para alguien cómo él, que se había criado en las más duras condiciones de los barrios suburbiales de la gran ciudad.

"Hammer" Cervigón se quitó los piercings y se borró los tatuajes y despareció en una vida tranquila en la que su única preoucpación fue convertise en el "Home Support Engineer" para tranquilidad y sosiego de su familia y cuya única preocupación fue la de seguir con su dieta vegetariana.


"Hammer" y su dieta vegetariana

Pero algo se rompió en mi, mis colegas de la India me llevarón con aquél Gurú de las montañas, no se que fue exactamente lo que cambió en mi, pero tras "juguetear" con unas hierbas "medicinales" decidí apostar toda mi pasta a un proyecto de software. ¿Toda? Sí, toda la pasta, hasta el último garrupito de dinero me jugué... y perdí. La imagen de mi caida fue la foto que todos habéis visto en los medios de comunicación y que me llevó a todos los programas de televisión del corazón y arruinó mi carrera en la política.


Foto paparazzi en la India

Una malevola compañía, de cuyo nombre no quiero acordarme, con viles artes monopolísticas me hundió. Utilizó un maléfico programa que no se podía desinstalar de los ordenadores para conseguir arruinarme. Vendí mi coche, me quedé sin el malignomovil azul y tuve que ir a suplicar a "Hammer" ayuda. Sabía que si iba directamente a por "Asesino" éste me iba a rechazar. Públicas son las disputas que siempre hemos tenido por el liderazgo de la banda.

Al final "Hammer" decidió ayudarme y concertó una reunión con "Asesino" para debatir los pormenores de lo que iba a ser la gira de nuestro retorno. Este es el vídeo de la reunión:


Como se puede apreciar, el cariño que siempre me profesó "Asesino" hizo que nuestra reunión fuera cómoda para todos. Por lo que fue facil retomar el grupo justo dónde lo habíamos dejado. Así que, de ahí, fuimos directamente al estudio, a preparar los temas de nuestra repertorio y hacer vibrar una vez más a todos nuestros fans:



Todo iba bien, pero en Bilbao... sucedió algo. Es una historia delicada, que deberá ser contada en otro momento, y que me llevó a abandonar el grupo. Como sabéis en el último evento de la gira, en Sevilla, fui sustituido por "un guitarrista de segunda", un esquirol, alguien que no lleva el rock en el cuerpo... "un vendido!!!".

No obstante, tras el "fracaso" del último concierto en Sevilla, "Asesino" ha venido a pedirme perdón y estamos arreglando nuestras diferencias para poder hacer dos galas especiales, como cabeza de cartel, en dos festivales, uno de ellos "indy". Los mismos tendrán lugar, uno en Madrid y otro en Amsterdam...¿Será nuestra última vez?

Saludos Malignos!

No Lusers - Nº 3: Preparación al Reto VI



martes, enero 29, 2008

Reto Hacking VI - Apuestas

Bueno, bueno, bueno... la que se nos viene encima!! El reto ya está aquí y RoMaNSoFt está poniendo excusas, Pedro Laguna tiene examen la semana que viene de la universidad, Kachakil está perdido bajo una montaña de curro y yo estoy en casa de Palako en Londres mientras Mandingo está en "herido". "Bambú" (si prefieres que te sigamos llamando así) estará por aquí según parece, kabracity y TheSur no piensan dejar pasar la oportunidad de ganar y SealTeam seguro que da guerra, pero... ¿Quién ganará?

Las apuestas están como siguen N a 1. Por cada comic de segunda mano que apostéis (recordad que en este reto se apuestan comics de segunda mano) yo entrego N si acertáis.

Yo, viendo como está el patio, casi creo que sería capaz de ganaros yo con la mano izquierda, enganchado a un ratón de mac con un solo botón y desde un Windows 3.11 :P Pero en fin, esto de no poder participar porque conozco la solución me lo impide, así que... ahí van las apuestas de la casa. Los "No Lusers" están 2 a 1, los "wanabis" están 3 a 1 y 4 a 1, los "Peleones" están 8 a 1 y los "Total Lusers" están 10 a 1. Si alguien quiere añadir a otro player al game, puede hacerlo y apostar por él, lo cubriré 15 a 1.

Players Board

Ale, señorit@s...¡abran sus apuestas!

Riesgos de Seguridad y Medidas de
Protección en Windows Live Messenger (II/IV)

***************************************************************************************

Artículo Publicado en la revista PCWorld Ene'08
- Riesgos y Medidas de Protección en Windows Live Messenger (I/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (II/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (III/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (IV/IV)
***************************************************************************************
Captura de archivos transmitidos

La transmisión de ficheros entre clientes es algo muy común. Algunas se realizan de forma automática, como las imágenes de pre-visualización de contactos, si se ha configurado de esta forma el cliente, y otras, de forma explícita, como la transmisión de documentos, fotos o mensajes de voz. El protocolo que se utiliza para chatear con mensajes de texto está totalmente documentado por la comunidad de Internet, por lo que hay herramientas como Pidgin, antes conocido como GAIM [http://sourceforge.net/projects/pidgin/] que permiten conversar perfectamente con clientes Live.

La transmisión de ficheros con Windows Live Messenger entre dos clientes tiene un funcionamiento adaptativo, es decir, los ficheros se pueden transmitir utilizando el protocolo TCP o UDP y esta transmisión puede ser realizada mediante una conexión directa o a través de los servidores Windows Live de Microsoft en función de la carga de la red. No es público cual es el algoritmo actual de decisión utilizado a la hora de configurar las opciones que se usarán para transferir un determinado fichero, pero sí hay cierto trabajo realizado ya en ingeniería inversa en la web de hypothetic [http://www.hypothetic.org/docs/msn/general/overview.php] que muestra como se comunican los clientes para la transmisión de ficheros y permite hacer un análisis de los datos que se puedan capturar.

En cualquiera de los medios de transmisión que se utilice el nombre del fichero codificado en base64 es lo primero que se envía y, en el caso de que sea un archivo gráfico, un thumbnail de pre-visualización. Una vez es aceptada la transmisión por parte del destinatario se parte el fichero en segmentos y se va enviando en paquetes de red hasta que este es completamente transmitido.

Un atacante podría acceder a los paquetes de red que componen la transmisión de un fichero si esta transmisión se realiza, tanto en el envío o en la recepción, por una red insegura en la que, por ejemplo, alguien pueda hacer un envenenamiento entre los dos clientes o entre un cliente y su puerta de enlace, o en la que pueda capturar el tráfico generado por el emisor o el receptor ya sea porque la red está cableada con concentradores en la que se puede sniffar el tráfico o bien porque sea una red wireless no securizada.

Con los paquetes capturados con el sniffer se puede recrear el fichero manualmente utilizando un editor hexadecimal y copiando las tramas. Esto es bastante sencillo si la transmisión se ha realizado usando el protocolo TCP pues es muy fácil seguir el flujo de la conversación con los números de secuencia TCP aunque funciona perfectamente igual con el protocolo UDP. Realizadas unas capturas en bruto se puede apreciar como los datos del fichero son reconocibles en la red. En la imagen siguiente se ve un trozo de la captura enviada de un fichero de audio.

Imagen 3: Captura de trama por UDP de parte de un fichero enviado

Al final, como prueba de concepto, tras comprobar que manualmente se podía recomponer el fichero, decidimos hacer, a finales del año pasado, una pequeña herramienta que, como prueba de concepto capturara todos los ficheros que eran transmitidos vía Windows Messenger. Esta herramienta ordena todo el tráfico que se captura en conversaciones, después busca los mensajes de Windows Live Messenger y por último construye el fichero.

Imagen 4: Captura de una trama con datos de un fichero de texto transmitido

Windows Live Messenger implementa un protocolo P2P para la transmisión de los ficheros y este se utiliza no sólo para aquellas transmisiones explicitas de ficheros, sino también, por ejemplo, para la transmisión de los emoticones extras o para la transmisión de mensajes de voz enviados utilizando la tecla F2 o para la transmisión de las fotos de perfil que cada participante se configura. Al ponerse alguien a capturar ficheros transmitidos puede obtener todos esos mensajes si no van cifrados. En la Imagen 5 se puede ver que la se ha podido construir un par de archivos en formato “wav”, pertenecientes a un mensaje de voz enviado con el F2, tras haber sido capturados con un sniffer.

Imagen 5: Captura y reconstrucción de mensajes de Voz

Webmessenger

En la versión web de Windows Live Messenger el funcionamiento es similar. La fase de autenticación en el servicio va cifrada mediante conexiones http-s, con lo que la vulneración de estos servicios es equivalente a la que se podría realizar en un ataque Man In The Middle con certificados digitales falsos. Sin embargo, una vez iniciada la sesión, el resto de transmisiones van en texto claro utilizando el protocolo http. Es suficiente con realizar un pequeño análisis de las tramas para poder acceder a las conversaciones que se están produciendo.

***************************************************************************************
Artículo Publicado en la revista PCWorld Ene'08
- Riesgos y Medidas de Protección en Windows Live Messenger (I/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (II/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (III/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (IV/IV)
***************************************************************************************

No Lusers - Nº 2: Chess Injection



lunes, enero 28, 2008

Riesgos de Seguridad y Medidas de
Protección en Windows Live Messenger (I/IV)

***************************************************************************************

Artículo Publicado en la revista PCWorld Ene'08
- Riesgos y Medidas de Protección en Windows Live Messenger (I/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (II/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (III/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (IV/IV)
***************************************************************************************
Hay ideas que triunfan a la primera, y otras no, solo hay que echar la mirada hacia atrás para recordar la moda del walkman, dónde “los jóvenes” de mi generación llevábamos siempre las orejas tapadas con los cascos de esponjilla naranja (al menos hasta que aparecieron los de cabeza de oro) e incluso una cinta pinchada en un bolígrafo BIC para poder rebobinar la cinta sin tener que consumir pila de esas que, cuando aparecieron las recargables, cuidábamos más que los “tamagotchis” la generación siguiente y a la familia SIMS la posterior. Por el contrario, están las que no triunfan nada, como el monedero electrónico o la motocicleta con cenicero.

Una de las ideas que nos ha revolucionado ha sido la mensajería instantánea, eso de poder charlar con los compañeros, los familiares, los amigos que no ves mucho, los novietas y novietas y cómo no, los compañeros de trabajo. Al final, los programas tipo Windows Live Messenger se han convertido en parte fundamental de la forma de trabajar de muchas compañías.

Sin embargo, el uso de los sistemas de mensajería instantánea, tienen sus riesgos de seguridad y hay que intentar protegerlos, o al menos, realizar un uso responsable de los mismos. Este artículo se centra en la protección de los sistemas que utilizan Windows Live Messenger y por tanto se van a mostrar los principales riesgos de seguridad que tiene la plataforma.

Versiones de Messenger

Los clientes de mensajería instantánea de Microsoft hoy en día son dos: Windows Messenger y Windows Live Messenger. La diferencia entre ambos es mucha.

El primero, la versión Windows Messenger es el cliente de mensajería empresarial, es decir, para aquellas empresas que utilizan los sistemas de mensajería como forma habitual de trabajo y necesitan opciones avanzadas de seguridad. Este cliente va asociado a los servidores de Microsoft Office System y permite opciones de cifrado en la transferencia de mensajes y ficheros así como en las comunicaciones de voz, permite configurar las opciones de los clientes para fortificar las configuraciones, filtrar el lenguaje utilizado, los tipos de documentos que se pueden enviar e incluso, añadir filtrado de antimalware para evitar que los sistemas de mensajería instantánea sean un coladero de virus, troyanos y malware general en tu empresa.

El segundo cliente, Windows Live Messenger es la versión de consumo y de uso general, totalmente gratuito y descargable por cualquiera desde Internet. Lógicamente las opciones que permite este cliente son menores en cuanto a seguridad, a saber: No realiza cifrado de conversaciones, no realiza cifrado de la transmisión de ficheros, tampoco utiliza ninguna solución de cifrado en las conversaciones de voz, no filtra los ficheros con ningún antimalware los ficheros enviados y recibidos y por supuesto, la configuración de las opciones para fortificar el cliente deben ser configuradas por parte del usuario. Como os podéis imaginar, caldo de cultivo para que existan problemas de seguridad….

Redes Inseguras

Antes de comenzar a ver nada sobre el producto me gustaría hacer una pequeña disertación sobre lo que se consideran redes inseguras. Esta recomendación debe ser tenida en cuenta no sólo para este servicio sino para todos los servicios de que supongan un riesgo.

- Redes Wifi: Las redes inalámbricas tienen la peculiaridad de estar al alcance cualquiera que esté cerca. Si la red inalámbrica no tiene autenticación o cifrado, o si el cifrado y autenticación que usa es WEP o si se está usando WPA-PSK y la contraseña es fácil, es decir, de longitud corta, poca complejidad y no es cambiada cada cierto tiempo, entonces … esa red Wireless es potencialmente insegura.

- Redes Cableadas: Si la red utiliza un concentrador de conexiones (hub) o usa switches sin IPSec y sin detectores de Sniffers y sin detectores de envenenamiento (ARP-Poisoning) entonces esa red es potencialmente insegura

Riesgos de las redes Inseguras

¿Y qué me puede pasar en una red de “esas”? Pues puede suceder que un atacante acceda a la lista de contactos que tienes, ver lo que hablas con ellos y que te dicen, ver la foto que tienes puesta y la que tienen tus contactos, acceder a los ficheros que envías y recibes, grabar los mensajes de voz enviados y las conversaciones en tiempo real de voz sobre IP y… ¿Te parece poco?

Captura de conversaciones

En este caso el objetivo del atacante es conseguir que el tráfico pase por su máquina. En cualquiera de los entornos descritos como Redes Inseguras esto se puede conseguir. Una vez que se ha conseguido que el tráfico pase por el equipo solo hay que activar un sniffer para realizar una captura del tráfico. Cualquier Sniffer valdría, Iris, Wireshark, SnifferPro, etc… y podemos buscar los mensajes transmitidos. En el caso del Messenger nos encontramos con un protocolo que a priori no es pública la última versión y que además ha tenido variaciones a lo largo de las diferentes versiones del producto, pero que en el caso de los mensajes de texto está bastante documentado y la mayoría de los sniffers detectan los paquetes y se pueden leer.

Imagen 1: Captura de mensaje enviado por Windows Live Messenger con Wireshark

Como se puede ver, encontrar el mensaje no es muy difícil, pero además existen herramientas especializadas en la mensajería instantánea para buscar los mensajes que circulan por la red y permitir a un atacante el poder disponer de un interfaz más cómodo. Una de esas herramientas es Shadow Instant Message Sniffer de la empresa Safety-lab.com. Como se puede ver en la captura esta herramienta no está solo pensada para Windows Live Messenger sino que detecta también otros protocolos de mensajería instantánea. No tiene soporte para capturar ficheros transmitidos.

Esta utilidad funciona con las librerías y el driver Winpcap, esto le permite a un atacante el poder realizar una ataque de Man In The Middle utilizando la herramienta CAIN entre el equipo al que se quiere espiar la conversación y su puerta de enlace y después arrancar SIMS para ir simplemente leyendo los mensajes.

Imagen 2: Captura de mensaje enviado por Windows Live Messenger con Shadow Instant Message Sniffer

***************************************************************************************
Artículo Publicado en la revista PCWorld Ene'08
- Riesgos y Medidas de Protección en Windows Live Messenger (I/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (II/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (III/IV)
- Riesgos y Medidas de Protección en Windows Live Messenger (IV/IV)
***************************************************************************************

sábado, enero 26, 2008

Agenda de Blackhat

Ya salió la agenda de Blackhat. Habla un tal José Parada Gimeno, un tal David Litchfield y algún otro... que bonito.... Ya me he guardado la web y estoy limpiando las lagrimas de portátil.


Agenda BH Europe 2008

Perdón por el ataque de "amor propio" (que no masturbación pero casi...).

Saludos Malignos!

Ready? Los Premios del Reto VI sí.

El día se acerca, y las excusas se disparan. “Yo no voy a ganar porque ese día me pilla muy mal”, “tengo mucho trabajo”, “no sé si ese día tengo una reunión”. Excusas, excusas, excusitas, todo son excusitas. A la hora de la verdad, todos, de forma oculta, estarán allí. Tanto “lusers” como no “lusers” se sentarán delante del cabezón, con la siesta echada, merendados, irán al baño unos minutos antes para dejar la vejiga vacía y dispuesta a llenarse de café y/o otras cosas y se pondrán allí con los ojos abiertos como búhos.

Algunos estarán pensando “tengo que verlo, tengo que verlo, no te dejes engañar, vas a verlo claro desde el primer vistazo”. Otros buscarán la tranquilidad para estar libres de otros pensamientos. Se pondrán cómodos en la silla y buscarán ponerse buena música para mantener el cerebro al ralentí. Alguno que yo me sé repasará mentalmente las últimas conversaciones que ha tenido conmigo, releerá los últimos artículos que he publicado o las últimas cosas que he hecho para poder bosquejar una pista. Algún indicio que le de unas decimas de segundo por vuelta más que el resto de los competidores…

Y todo, para intentar ganar este año los mejores premios. Este año el Reto VI comienza con unos premios espectaculares ya que vamos a tener comics para los ganadores.

El primer premio, amén de llevarse 10 puntazos, el reconocimiento de sus compañeros y la posibilidad de reírse de todos los demás se va a llevar la obra de arte de Watchmen de Alan Moore. “Who Watch the Watchmen?”. Si no has leído este comic sobre el mundo de los superhéroes entonces… no has leído nada….

Watchmen

El segundo premio va a ser algo sólo para adictos. Es el último número de la Colección Prestigio de Forum Volumen I, el número 75, dedicado al Iron Man 2020. Este comic es bastante curioso pues el personaje del Iron Man del 2020, Arno Stark, se creó como villano para la miniserie del hombre máquina que salió en la colección Extra Superhéroes y en este One-Shot se le intenta redimir. No cuenta con muchas apariciones en el mundo del comic. Además, el segundo premio se va a llevar 8 puntos.

Iron Man 2020

El tercer y último premio va a ser un tomo recopilatorio de Forum con los 5 primeros números de la Serie “Caballero Luna: Fist of Khonsu”. Estos cinco números en España recogen los 6 números que fueron la serie Americana. Este SuperHeroe, el Batman del Marvel, es uno de los que peor suerte ha contado con los equipos de trabajo y solamente Jeph Loeb y Bill Sienkiewicz han demostrado las autenticas posibilidades de este héroe (que es uno de mis preferidos en secreto). Además de 6 puntos.


Caballero Luna en España

El resto de los clasificados se llevará sólo puntos. Y estos serán: 5 puntos para el cuarto, 4º puntos para el 5º, 3 puntos para 6º, 2 puntos para el 7º y un 1 punto para el 8º. A partir de ahí tendrán 0.5 puntos cada uno de los que consigan superarlo antes de que acabe este mes de Febrero.

Además, hay 1 punto extra para todos aquellos que lo saquen antes de las 23:59 horas del día 1 de Febrero, es decir, para los que lo saquen en 4 horas. ¿Sólo 4 horas? Sí, sólo 4 horas porque se puede sacar en sólo 4 horas…No hay que hacer ningún programa hipercomplejo y ninguna ejecución debe tardar tanto como la ejecución de la segunda fase del Reto V. Así que nada, a ponersus las pilas.

Saludos Malignos!

viernes, enero 25, 2008

Te borro tu buzón por 50 $

En el último evento del Live Technology Tour que dimos en Bilbao aproveché para pedirle a un compañero del metal y de profesión en esto del enseñar, el amigo de Torrelavega Javi Terán, que me recogiera una "jartá" de papel viejo con dibujitos. Eso que los amantes de la tinta y el papel llamamos Comics o Tebeos.

Cuando los recibí, momento romantico que ocurrió en mitad de las charlas, me puse más contento que unas castañuelas, por lo que me fui feliz de la charla hacia el aerpouerto cargando una nada desdeñable cantidad de unos 80 nuevos comics para mi colección.

Cuando llegó el momento de entrar en el aeropuerto y pasar por el control de seguridad tocó desnudarse. Ya sabéis, gorro, cazadora, cartera, pendrives, teléfono móvil, cinturón, abrigo, maleta, drogas, puñales, portátil fuera de la mochila, dinero (toda la pasta que había ganado con mi último trabajito para Spectra) y bolsas de comics (3). Pasé por el arco de seguridad, y nada... luz verde. Después a vestirse y recoger todo, y sobre todo ... no olvidarse los comics.

Cansado y esperando para embarcar vi que tenía 10 minutos libres, así que pensé: "¿Anoto los comics en la base de datos?" Porque, para mantener la colección de comics que tengo, no pensaréis que la puedo gestionar de otra forma que no sea con una base de datos. "Naaaaa... si quedan 10 minutos". Pero.... el vício me pudo y me repliqué: "Venga va, aunque sean sólo unos pocos". Así que abrí la mochila buscando mi portátil y... no estaba allí.

HORROR, PÁNICO, MUERTE, DESTRUCCIÓN

Mi vida pasó por delante de mis ojos en unos pocos segundos y fui capaz de recordar cada una de las veces que había tocado ese portátil, que a partir de ese momento se me antojó más cool que un i-jam y más potente que un servidor de 64 procesadores, en los últimos 3 días...¿Dónde estaba mi vida? Mis datos, mis mails, mis presentaciones, ¡¡¡MI BASE DE DATOS DE COMICS!!!! ¡Dios!... ¡EN EL CONTROL DE POLÍCIA DEL AEROPUERTO!.

Como os podéis imaginar, presa del terror, atenazado por el PÁNICO, perdiendo años de vida cada segundo que ese portátil no estaba en mis manos me cargué todos mis "archiperres" en menos que pía Pitíkli y salí corriendo.

El aeropuerto pudo disfrutar en aquel momento de lo que es ver a un hombre sin afeitar y con melenas demostrando que el record mundial de los 100 metros lisos será para aquel que tenga más motivación de correr, y que, en caso de haber estado allí un juez de esos de los de la cerveza, quiero decir, de los Guiness, hoy por hoy tendría plaza para los juegos olímpicos de Londres.

Para más complejidad había tráfico, pero las personas que me vieron venir, con los ojos inyectados en sangre, los dientes apretados y la piel del color de un enfermo terminal de difteria supieron valorar la situación y saltaron a la cuneta apartandose de mi camino.

El suelo estaba resbalazido, pero en aquellos momentos mis pies se movian a tal velocidad que si me hubieran puesto un mar por medio habría pasado por encima de él cuál profeta que flota en el agua.

Al llegar al pasillo que da acceso al puesto de control tuve que tomar la curva de contrameta. Reduje a quinta y ataqué bien los pianos para traccionar con fuerza a la salida de la misma. Debido a regulaciones de última hora me había sido suprimdio el control de tracción automático, así que, levantando el peso equivalente a 30 comics en una de las bolsas conseguí equilibrar la dirección para meter sexta y llevar en 0.7 segundos en frente del control y decir, con toda la tranquilidad del mundo:

"mehedejadounportitilenelcontrolhacemenosdequinceminutosporfavordiganmedondeesta"

El polícia, mirando el cuadro que se había plantado en frente de él, sudando, gritando, blanco y con cara de asesino, se recostó en la silla y me hizo una pregunta doble con intención de pillarme:

"¿De qué marca y de que Color es?"

A lo que yo respondí como si hubiera un pulsador cual concurso de la tele y otro pudiera meterse de por medio en mi turno de respuesta:

"esundellplateadoylefaltadospatadegomapordebajoysimedicequelotieneledoydosnuevossiustedmedaesemio"

El tipo me miró, miró a su compañero, sonrió y metió la mano debajo de la mesa. De allí salió, por arte de magia, el Paraiso, el sol, las mieles del triunfo, el Valhala, el Monte Olimpo y el plató de una película porno grabando la más maravillosa de las orgías donde mujeres desnudas te traían dispositivos usb para disfrutar al máximo con los gadgets.

Le besé, le abracé, le acaricié, le limpié la pantalla con amor, prometí no teclear fuerte sobre sus teclas y arreglar tecla que un día le rompí y la llevo pegada con celo. Supe lo que es tener una segunda oportunidad en la vida que no voy a desperdiciar.

Al llegar a casa le mimé, le puse el bitlocker, cifré los datos importantes con EFS y me hice 2 backups que guardé en ubicaciones distintas.

No se si alguna habéis sentido lo que es la pasión y el amor por tus datos, pero yo sí lo sentí en esa carrera por la supervivencia.

Y ¿por qué os cuento esto? La verdad es que había desestimado narrar este drama en mi vida, pero hoy he visto una noticia en la que un proveedor de servicios de Internete le ha borrado, sin posibilidad de recuperación ninguna, a 14.000 personas, por un errorcillo de cálculo, el buzón de correo con todo su contenido y para compensarles les da 50 $ a sus clientes.

Cable Co. empties 14,000 e-mail accounts

Tal vez sean buzones de usuarios de casa, tal vez hubiera hosting de empresas o tal vez no, pero si a mi borras mi buzón y me das 50 $... ¡Mueres!

Saludos malignos!

jueves, enero 24, 2008

Yahoo contrataca

Hace ya un tiempo el Chico Maravillas cambió de aires y entró a trabajar a Yahoo. Ahora, el próximo día 4 de Febrero comienza también en Yahoo el gran Palako, flamante cuarto clasificado en los Retos Hacking del 2007 (o como diría nuestro peleon RoMaNSoFt, el primer "luser"). La noticia me ha pillado estando con él aquí en Londres, pues me está haciendo de anfitrión para que mi aterrizaje en esta tierra fuera lo menos problematica posible (Mil gracias Palako, no se como agradecertelo).

Da gusto ver a la gente que vale siendo reconocida. Supongo que muchos no sabréis lo dificil que es conseguir pasar los duros procesos de recruitment en estas compañías, pero para que os hagáis una ligera idea Palako ha tenido que pasar la nada desdeñable cantidad de 11 entrevistas. Sí, once, ha pasado por un equipo (de futbol) completo de entrevistadores que han evaluado todas sus capacidades. Os juro que verle explicando por teléfono como se intersectan dos arrays no ordenados y cual es la complejidad del algoritmo elegido a una guiri en California mientras te tomas un café a su costa es algo que no tiene desperdicio como documento.

Para celebrarlo cenamos un buen filetaco a la salsa de roquefort con una botellita de un Rioja Gran Reserva y después, como buenos enfermos que somos, nos juntamos con Raúl (otro de la tierra del sol, las playas y la siesta) que está currando para Google aquí en Londres, para hablar de IPSec, SSH y la madre que parió al portknocking.

En fin, que ya es hora de que nos pongamos todos las pilas, y sigamos generando buena matería prima en el área de la informática. Así que a estudiar duro, a competir fuerte y a ser referentes en el tema de la ese de darle a la teclita.

Enhorabuena Palako, mil gracias por todo... y con tu primer sueldo pagas las gambas.

Saludos Malignos!

La Justificación del Técnicoless

Es de noche, ayer te acostarte tarde, no has dormido muchas horas, tienes más legañas que un perro pulgoso, enciendes el portátil, abres el RSS y sale esta maravilla que me recuerda a cierta situación con cierto asesor:

Dilbert 24 de Enero 2008

Viñeta 1:

- El nuevo Software es un desastre.
- Entonces ¿Por qué lo recomendaste?


Viñeta 2:

- Este software es idea tuya. Mi recomendación fue en contra de él.

Viñeta 3:

- ¿De quien es el fallo?
- De la persona con recomendaciones menos persuasivas.


Vamos a por un café que hay que pelear el día.

Saludos Malignos!

miércoles, enero 23, 2008

Time-Based Blind SQL Injection using Heavy Queries (Parte II de II)

***************************************************************************************
Artículo Publicado en la revista Hackin9 en Ene'08

- Time-Based Blind SQL Injection using Heavy Queries (I de II)
- Time-Based Blind SQL Injection using Heavy Queries (II de II)

***************************************************************************************

Time-Based Blind SQL Injection using heavy Queries

Sea como fuere, si en un ataque a ciegas se quiere saber si el valor ASCII de una determinada letra de un campo es mayor que un número estamos hablando de una condición no excesivamente pesada y se va a poder generar siempre una consulta más pesada que ella con facilidad. El objetivo del ataque es generar una consulta pesada que provoque un retardo de tiempos en la respuesta del motor de la base de datos que solo se ejecute sí y solo sí la condición que nos interesa vale TRUE. Esto implicaría que un retardo de tiempo es equivalente a un valor TRUE en la consulta ligera.

¿Cómo generar consultas pesadas?

La forma más sencilla de generar consultas pesadas es usar lo que más hace trabajar a las bases de datos, los productos cartesianos de tablas, es decir, unir una tabla con otra y con otra hasta generar una cantidad de registros tan grande que obliguen al servidor a consumir un tiempo medible en procesarlo. Para ello basta con conocer o averiguar o adivinar una tabla del sistema de bases de datos, que tenga algún registro, y unirla consigo misma hasta generar un tiempo medible. Vamos a ver algunos ejemplos.

Oracle

La siguente consulta, lanzada contra un servidor de pruebas, muestra en color azul la consulta pesada y en color roja la consulta de la que deseamos averiguar la respuesta. Lógicamente, en este caso, la respuesta ha de ser TRUE pues hemos utilizado el valor 300 que es mayor que cualquier valor ASCII:

http://blind.elladodelmal.com/oracle/pista.aspx?id_pista=1 and (select count(*) from all_users t1, all_users t2, all_users t3, all_users t4, all_users t5)>0 and 300>ascii(SUBSTR((select username from all_users where rownum = 1),1,1))

Lanzando esta consulta con la utilidad wget podemos ver una medición de tiempos:

Imagen: La consulta dura 22 segundos, luego la respuesta es VERDADERO.

Si forzamos que la segunda condición, la ligera, valga FALSO, en este caso preguntando si 0 es mayor que el valor ASCII de la primera letra, podremos comprobar cómo la consulta pesada no se ejecuta y el tiempo de respuesta es menor.

Imagen: La consulta dura 1 segundo, luego la respuesta es FALSO.

Como se puede ver en la consulta generada se ha utilizado 5 veces la vista all_users, pero esto no quiere decir que sea el número de tablas que deban utilizarse para todas las bases de datos Oracle, ya que el retardo de tiempo dependerá de la configuración del servidor y el número de registros que tenga la tabla. Lo que es absolutamente cierto es que se puede medir un retardo de tiempo y puede automatizarse este sistema.

Microsoft Access

Los motores Microsoft Access no tienen funciones de retardo de tiempo, pero las bases de datos Access tienen un pequeño diccionario de datos compuesto por una serie de tablas. En las versiones de Microsoft Access 97 y 2000 es posible acceder a la tabla MSysAccessObjects y las versiones 2003 y 2007 a la tabla MSysAccessStorage y generar, mediante uniones de estas tablas consultas pesadas que generen retardos de tiempos medibles. Por ejmplo, para una base de datos con Access 2003, podríamos ejecutar la siguiente consulta:

http://blind.access2007.foo/Blind3/pista.aspx?id_pista=1 and (SELECT count(*) from MSysAccessStorage t1, MSysAccessStorage t2, MSysAccessStorage t3, MSysAccessStorage t4, MSysAccessStorage t5, MSysAccessStorage t6) > 0 and exists (select * from contrasena)

En azul la consulta pesada y en rojo la consulta de la que queremos respuesta, es decir, si existe la tabla llamada “contrasena”. Como se puede ver en la captura realizada con la utilidad wget la consulta dura 39 segundos, luego, la consulta pesada, en este caso muy pesada para este entorno, se ha ejecutado por lo que el valor es VERDADERO, la tabla “contrasena” existe y tiene registros.

Imagen: La consulta dura 39 segundos, luego la respuesta es VERDADERO.

Para comprobarlo realizados la negación de la consulta ligera y medimos el tiempo de respuesta:

Imagen: La consulta dura menos de 1 segundo, luego la respuesta es FALSO.

MySQL

En las versiones 5.x de los motores MySQL es posible conocer a priori un montón de tablas de acceso, de la misma forma que sucede en todos los sistemas que tienen diccionarios de datos. En el caso de MySQL se pueden generar consultas pesadas utilizando cualquiera de las tablas de Information_schema, como por ejemplo la tabla columns.

http://blind.mysql5.foo/pista.aspx?id_pista=1 and exists (select * from contrasena) and 300 > (select count(*) from information_schema.columns, information_schema.columns T1, information_schema T2)

En azul la consulta pesada y en rojo la consulta de la que se desea una respuesta VERDADERA o FASLA.

En las versiones 4.x y anteriores la elección de la tabla debe ser conocida o adivinada ya que no comparten un catálogo que por defecto sea accesible desde fuera.

Microsoft SQL Server

Con los motores de bases de datos Microsoft SQL Server se cuenta con un diccionario de datos por cada base de datos y además un diccionario global del servidor mantenido en la base de datos master. Para generar una consulta pesada se puede intentar utilizar cualquier tabla de esas, como por ejemplo las tablas sysusers, sysobjects o syscolumns. El ejemplo siguiente muestra una consulta pesada para un motor Microsoft SQL Server 2000. De nuevo en azul la consulta pesada y en rojo la que buscamos respuesta:

http://blind.sqlserver2k.foo/blind2/pista.aspx?id_pista=1 and (SELECT count(*) FROM sysusers AS sys1, sysusers as sys2, sysusers as sys3, sysusers AS sys4, sysusers AS sys5, sysusers AS sys6, sysusers AS sys7, sysusers AS sys8)>0 and 100>(select top 1 ascii(substring(name,1,1)) from sysusers)

Otros motores de bases de datos

El método funciona de igual forma en otros motores de bases de datos. Al final la idea es sencilla, hacer trabajar el motor de base de datos usando técnicas de anti optimización. Como la explotación depende del entorno es necesario un proceso de ajuste de la consulta pesada para cada entorno y además, al ser basado en tiempos, hay que tener en cuenta las características del medio de transmisión. Siempre es recomendable realizar varias pruebas para comprobar que los resultados son correctos.

Contramedidas

Evitar estas técnicas es lo mismo que evitar las vulnerabilidades de SQL Injection. Para evitar que una aplicación sea vulnerable a ellas se han escrito y es fácil encontrar guías de precauciones a seguir y como hacerlo en cada lenguaje de programación en concreto. Sin embargo no me gustaría terminar sin recomendar el uso de las herramientas de Análisis Estático de Código. Estas herramientas son una ayuda más al ojo del programador a la hora de evitar vulnerabilidades en el código.

Lógicamente no son perfectas y se necesita de un programador experimentado y preparado para el desarrollo seguro de aplicaciones, pero sí son un apoyo más. Herramientas como Fxcop ayudan a detectar las vulnerabilidades mediante el análisis del código. Existen múltiples herramientas de este tipo y especializadas en distintos lenguajes.


Referencias

- OWASP Top 10. The Ten Most Critical Web Applications Security Vulnerabilities
- NT Web Technology Vulnerabilities
- Advanced SQL Injection
- (more) Advanced SQL Injection
- Blind SQL Injection Automation Techniques
- Blind XPath Injection
- Protección contra Blind SQL Injection
- Time-Based Blind SQL Injection using Heavy Queries

Herramientas

- SQLBftools
- SQLNinja
- Absinthee
- SQL PowerInjector

***************************************************************************************
Artículo Publicado en la revista Hackin9 en Ene'08

- Time-Based Blind SQL Injection using Heavy Queries (I de II)
- Time-Based Blind SQL Injection using Heavy Queries (II de II)

***************************************************************************************

martes, enero 22, 2008

Conversaciones de Borrachos

Esto de estar en Londres con amigos es un problema, porque al final acabas hablando de frikitonterías. La de hoy ha sido de idiotas integrales. En plena conversación sobre mujeres,... vale para que os voy a engañar, estabamos hablando de ordenadores... hemos lleado al punto de comparación metafórica.

"Mira tronco, el interfaz de Windows es genial, lo que necesitas está ahí, en botón derecho. Te vas a la cama con una tía (en el supuesto de que los informáticos ligaramos) y buscas el preservativo y está... en el bolsillo derecho. Con Linux también está y tú sabes dónde, está ....en la farmacia de la esquina"

"Naa, eso es una mierda tío. Con MacOS X es cómo si antes de intentar ir a buscar el preservativo, es decir, antes de que sepas que vas a "triunfar" porque ya sabes, en España puedes estar en la cama con una mujer en pelotas y aún no tener asegurado que vayas a triunfar, y justo antes ella te saca un preservativo y te dice: Mira lo que tengo!"

"Naaa, mejor con Vista, que cuando estas en la cama te dice : "y tú pa que quieres un preservativo? tú dale pa dentro que ya veremos..."

Y a los nueve meses.. WOW!!!

En fin.. .conversaciones de borrachos...

Saludos de Palako, Ivan Castro y Maligno!

How to be a Security Machine for Free!
by Palako

Bueno, como somos unos enfermos, vamos a jugarnos el tipo y vamos a enseñaros como aprender de esto de Seguridad gratis:

Paso 1: Cómprate un libro de Seguridad de la Editorial Syngress en una librería. En caso de que no te lo compres vete a Paso 5. Por Ejemplo:"Penetration Tester's Open Source Toolkit: 2"

Penetration Tester's Open Source Toolkit: 2

Paso 2: Ábrete una cuenta en la web de Syngress y registra el libro con los códigos que aparecen en la primera página del libro (página del copyright) para poder bajarte el PDF con el libro:


(por si se lo dejas a tu primo y no te lo devuelve)

Paso 3: Léete el libro y haz los ejercicios.

Paso 4: Si no eres aún una máquina de matar en seguridad ir a paso 1 else Go to Paso FIN.

Paso 5: Vete a la librería, escoge un libro y anota el código 004 que aparece en la página del copyright del libro. Una vez hecho ir a Paso 2. Si eres muy vago vete a Paso 6.

Paso 6: Como anotar es un coñazo, tírale una foto con el móvil a los números que aparecen en la página del copyright y vete a Paso 2. Si eres muy vago y hace frio en la calle vete a Paso 7.

Foto de mierda tirada con pulso de borracho

Paso 7: Busca el libro que quieres en Amazon, dale al link de “Search Inside”, que te muestre las primeras páginas del libro y vete a ver la página del “copyright”. Anota los números y vete al Paso 2.

¡Qué bonito Copyright!

Paso FIN: Si no eres una máquina de seguridad ya, déjalo, lo tuyo es … otra cosa.

Extra Step for Dummies: Si no tienes claro tu "plan de formación" revisa todos libros de Syngress en Amazon.

No te agobies, sólo son 218 libros

Saludos Malignos!

Time-Based Blind SQL Injection using Heavy Queries (Parte I de II)

***************************************************************************************
Artículo Publicado en la revista Hackin9 en Ene'08

- Time-Based Blind SQL Injection using Heavy Queries (I de II)
- Time-Based Blind SQL Injection using Heavy Queries (II de II)

***************************************************************************************

SQL Injection

OWASP (The Open Web Application Security Project) ha publicado recientemente un documento en el que recoge las 10 vulnerabilidades se seguridad más críticas en Aplicaciones Web. En él, se recogen las vulnerabilidades que más siguen afectando y que siguen siendo “viejas conocidas” para el gran público. En primer lugar se encuentran los ataques Cross-Site Scripting, con todas sus variantes de ataques persistentes y no persistentes mientras que en segundo lugar quedan las inyecciones de código malicioso y especialmente las vulnerabilidades de SQL Injection. Sí, parece que fue ayer cuando se publicó en el año 1998 el primer documento que hablaba de la posibilidad de inyectar código SQL en consultas firmado, por el ya famoso, rain.forest.pupy y titulado “NT Web Technology Vulnerabilities”, pues bien, ya casi 8años se cumplen desde que se habló de esa posibilidad y a día de hoy sigue siendo una de las vulnerabilidades más peligrosas.

Blind SQL Injection

Es cierto que las formas de explotarlas han ido cambiando, en parte, por la fortificación de sistemas, que, aunque no evita la vulnerabilidad si dificulta su explotación. En el año 2002 Chrish Anley hace referencia en su documento “(more) Advanced SQL Injection” a la posibilidad de realizar ataques de inyección de código a ciegas y utilizando métodos tan curiosos, en aquel entonces, como forzar una parada de tiempos en las bases de datos SQL Server si se cumple una condición llamando a un procedimiento almacenado para ejecutar un Ping a localhost o llamando a la función waitfor de Microsoft SQL Server. Fue en ese momento cuando se puede decir que ven la luz las técnicas de explotación de vulnerabilidades de inyección de comandos SQL a ciegas. Es decir, Blind SQL Injection.

En el año 2004, Cameron Hotchkies, en las Blackhat Conferences, presentando la herramienta SQueal, que más tarde se convertiría en Absinthe, hablaba de los métodos de automatizar la extracción de información mediante ataques Blind SQL Injection. El documento publicado “Blind SQL Injeciton Automation Techniques” mostraba las diferentes posibilidades a la hora de conocer cuando una respuesta significa un valor positivo o negativo. Se echa de menos en el documento y también en la herramienta la posibilidad mostrada por Chrish Anley de usar retardos de tiempo en la automatización.

Imagen: Extracción de datos con Absinthe

Time-Based Blind SQL Injection

A las técnicas que automatizan la extracción de información a ciegas usando retardos de tiempo se las conoce como Time-Based Blind SQL Injection y han ido especializándose en diferentes tecnologías de bases de datos para generar retardos de tiempo. Así, por ejemplo, la herramienta SQL Ninja, utiliza el sistema de tiempos descrito por Chrish Anley en aplicaciones web que utilizan motores de base de datos Microsoft SQL Server. Otras herramientas como SQL Power Injector utilizan el sistema de inyectar funciones Benchmark que generan retardos en motores de bases de datos MySQL o inyectar la llamada a la función PL/SQL DBMS_LOCK.SLEEP(time) en sistemas con motores Oracle. Para otros sistemas de bases de datos como Access o DB2 no existe forma similar de generar retardos de tiempo. Los métodos de generar estos retardos de tiempo quedan por tanto restringidos bastante. En primer lugar para Access, DB2 y otros motores de bases de datos no se conoce ninguna forma; en segundo lugar, para hacerlo en motores Oracle se necesita acceso a una inyección PL/SQL que no es común encontrarse con un entorno que lo permita y, por último los sistemas de fortificación suelen tener en cuenta la restricción del uso de funciones Benchmark en entornos MySQL y waitfor en entornos Microsoft SQL Server.

En el presente artículo vamos a ver como poder realizar un ataque a ciegas usando inyecciones de código que generan retardos de tiempo utilizando consultas pesadas, es decir, Time-Based Blind SQL Injection with Heavy Queries.

“Booleanización”

El término “Booleanización” no es mío, la primera vez que lo leí fue en el documento “Blind XPath Injection” de Amit Klein y que desconozco si existía previamente o no, pero en el caso de que no existiera hay que crearlo. La idea consiste en como extraer un dato mediante una secuencia de condiciones booleanas que devuelve True o False. Por ejemplo, supongamos queremos extraer el valor del campo username de la vista all_users en un motor Oracle y este valor es “sys”. El proceso de “booleanización” sería el siguiente:

255>(Select ASCII(Substr(username,1,1)) from all_users where rownum<=1
-> True [255 > ASCII(‘s’)=115]

122>(Select ASCII(Substr(username,1,1)) from all_users where rownum<=1
-> True [122 > ASCII(‘s’)=115]

61>(Select ASCII(Substr(username,1,1)) from all_users where rownum<=1
-> False [61 < ASCII(‘s’)=115]

92>(Select ASCII(Substr(username,1,1)) from all_users where rownum<=1
-> False [92 < ASCII(‘s’)=115]

107>(Select ASCII(Substr(username,1,1)) from all_users where rownum<=1
-> False [107 < ASCII(‘s’)=115]

115>(Select ASCII(Substr(username,1,1)) from all_users where rownum<=1
-> False [115 = ASCII(‘s’)=115]

119>(Select ASCII(Substr(username,1,1)) from all_users where rownum<=1
-> True [119 < ASCII(‘s’)=115]

117>(Select ASCII(Substr(username,1,1)) from all_users where rownum<=1
-> True [117 < ASCII(‘s’)=115]

116>(Select ASCII(Substr(username,1,1)) from all_users where rownum<=1
-> True [116 < ASCII(‘s’)=115]

En este punto se ha averiguado que el valor ASCII de la primera letra del nombre es 115 ya que no es mayor que 115 y es menor que 116. Y se pasaría a realizar el mismo proceso con la segunda letra. Como se puede ver el proceso va a exigir una serie de repetición de peticiones para cada valor, pero al final se obtiene el resultado. El problema, como se explica al principio de este artículo, es determinar cuando la respuesta es True y cuando es False.

Time-Based Blind SQL Injection

Hasta el momento, lo sistemas que se conocían para extraer información estaban basados en las funciones que ofrecía cada motor de bases de datos, así, por ejemplo, en una aplicación web que utilice Microsoft SQL Server podría realizarse una inyección como la siguiente:

http://servidor/prog.cod?id=1; if (exists(select * from contrasena)) waitfor delay ‘0:0:5’--

Esta consulta, en el caso de existir la tabla “contrasena” y tener algún registro va a pausar la respuesta de la página web un tiempo de 5 segundos. Si la respuesta se obtiene en un periodo inferior podemos inferir que la tabla “contrasena” existe y tiene algún registro. La misma idea puede ser utilizada para una aplicación con Oracle:

http://servidor/prog.cod?id=1; begin if (condicion) then dbms_lock.sleep(5); end if; end;

Y con MySQL, usando por ejemplo la función Benchmark del ejemplo, que suele tardar unos 6 segundos en procesarse o la función Sleep(), que ya viene en las versiones 5 de MySQL.

http://servidor/prog.cod?id=1 and exists(select * from contrasena) and benchmark(5000000,md5(rand()))=0

http://servidor/prog.cod?id=1 and exists(select * from contrasena) and sleep(5)

Heavy Queries

Las consultas pesadas han sido y siguen siendo un quebradero de cabeza en la optimización de sistemas de bases de datos. Un motor puede almacenar cantidades de información tan grandes y con tal cantidad de usuarios que si no se optimizaran las bases de datos dejarían de ser útiles. Los ajustes de rendimiento son constantes en los grandes sistemas de bases de datos para conseguir mejorar los tiempos de respuesta. Con los años los motores de bases de datos se han ido evolucionando para que sean ellos los que optimicen las consultas que generan los programadores y no al revés como se hacía antaño, aunque hay algunos motores que siguen requiriendo del programador para optimizar una consulta. Es decir, supongamos una consulta Select como la siguiente:

Select campos from tablas where condición_1 and condición_2;

¿Con que orden evaluar las condiciones para que se ejecute esta consulta y el sistema lo más rápido posible? En este ejemplo, al utilizar una condición AND, si la primera condición que evaluamos da como resultado un valor FALSO el motor ya no tiene que evaluar la otra. Si hubiera sido un operador OR el funcionamiento hubiera sido al revés, es decir, si la primera da VERDADERO ya no hay que evaluar la segunda condición. La conclusión varía en cada motor de bases de datos. En algunos se establece una precedencia y se hace recaer la optimización sobre el programador. Es decir, se evalúan las condiciones de izquierda a derecha o de derecha a izquierda y es responsabilidad del programador elegir el orden de evaluación en función de la probabilidad de obtener el resultado en menos tiempo. Si por ejemplo se estima que en evaluar la condición_1 el motor tarda 6 segundos y en evaluar la condición_2 unos 2 segundos y el motor utiliza precedencia por la izquierda entonces habrá que situar a la izquierda la condición de menos tiempo. Para entenderlo vamos a ver la tabla de tiempos posibles:

Tabla con la condición_1 (la pesada) a la izquierda
Tabla con la condición_2 (la ligera) a la izquierda

Como se puede ver, en una probabilidad similarmente distribuida de que cada condición pueda tomar valores TRUE o FALSE, es más optimo evaluar siempre primero la consulta ligera. Esto puede cambiar en función de las densidades. Es decir, en una clausula Where con operador AND en la que la condición ligera tenga una probabilidad del 99 % de ser TRUE y la pesada una probabilidad del 5 % de ser TRUE puede ser más eficiente utilizar una precedencia distinta.

Motores como Microsoft SQL Server u Oracle implementan optimización de consultas en tiempo de ejecución. Es decir, analizar las condiciones que pone el programador y eligen el orden de ejecución “correcto” según su estimación. Para ello utilizar reglas básicas, avanzadas e incluso datos estadísticos de las tablas de la base de datos en concreto.

***************************************************************************************
Artículo Publicado en la revista Hackin9 en Ene'08

- Time-Based Blind SQL Injection using Heavy Queries (I de II)
- Time-Based Blind SQL Injection using Heavy Queries (II de II)

***************************************************************************************

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares