martes, febrero 16, 2010

Semi-Trues

Matando unos minutos por ahí en el twittel de otros, un link, en plan caja de bombones, me llevó a un proyecto llamado "No more And 1=1". El proyecto es una herramienta que han creado para intentar no tener que teclear una tras otra vez las mismas pruebas en los ataques de SQLI, XSS, etc... La diferencia con respecto a un scanner automatizado es que aquí eliges tú cuando lo quieres probar. No tiene mala pinta. Funciona en Java y se integra con WebScarab, con lo que si eres aficionado a esa herramienta te completará sus funciones.

Pero no venía a hablaros de ella, sino de un concepto que me hizo pensar por lo interesante de la aproximación y lo aplicable que puede ser a otros entornos que lei en un post que me paso Pedro Laguna y que tiene que ver con el And 1=1. Es el concepto de las Quasi-tautologías.

En muchas ocasiones, cuando se está produciendo un ataque de SQL Injection, se usan las tautologías, es decir, comparaciones que siempre dan True. Los ejemplos más típicos los tenemos en los OR 1=1 en los procesos de login o los AND 1=1 en los ataques de Blind SQL Injection. Existen Sistemas de Detección de Intrusiones y Firewalls a nivel de Applicación que buscan estas tautologías y funcionan. Son capaces de detectar estos ataques. Pero.... ¿qué sucede si se utiliza algo que es semi-true?


Pongamos por ejemplo estas dos fotos. En ellas salen dos buenos mozos };D. Si pusieramos a elegir a las mujeres de este blog sobre que rapaz es mejor mozo, lo más probable es que casi todas seleccionaran al chico rubio con mucha pasta y guapetón, pero... seguro que algún alma perdida prefiere al que sabe arreglar ordenadores, tal y como se vio claramente en el vídeo de "I fell great".

Sin embargo, se podría construir la lógica de AND Rubio is selected casi como si fuera una tautología que saltaría todas las detecciones de IDS y WAF basadas en flujos de comandos. La explotación de un ataque basado en esta quasi-tautología daría los errores basados en la probabilidad de fallo. Así, si se utilizan sistemas con quasi-tautologías como RAND() > 0.01, estaríamos hablando de una probabilidad de error menor del 1 %.Lógicamente, si se usa RAND() > 0.01 y si se repite el test dos veces, estaríamos hablando de una probabilidad de que no funcione la prueba como una tautología de 1 por 10.000.

Por supuesto, si el IDS o el WAF se basan en sistemas de entrenamiento y aprendizaje, este sistema de ataque sería bloqueado, pero el concepto de "quasi-tautología" abre posibilidades. Esto solventa un problema: las protecciones basadas en tautologías, ahora ha que pensar dónde se usan....

Saludos Malignos!

9 comentarios:

  1. Una gran idea! me recuerda a la tinta "casi invisible" de los spammers :P

    Saludos Chema.

    ResponderEliminar
  2. Tienes un cierto parecido a brad pitt o eres el jipi-vendepulseras ese de la izquierda?? seguro que no, por las cosas que nos cuentas tienes pintas de ser un tipo inteligente...no puedes ser el otro...verdad?? se ha caido un mito...

    Por cierto, muy interesante el articulo de hace un par de dias de Inyección de código en ensamblados .NET...

    ResponderEliminar
  3. Chema, siento decirte que no he entendido tu post! Quizá es que el rubio me ha despistado un poco :D


    En fin, que me he leido la fuente en inglés y lo he acabado entendiendo.

    La idea es muy buena i más difícil de detectar.

    Saludos i gracias por la info!

    Newlog

    ResponderEliminar
  4. Esto huele a reto :)

    ResponderEliminar
  5. Congratulations you're now a member of Microsoft MVP.


    :D

    ResponderEliminar
  6. solo para avisar que dice "el test mas de 2 veves"

    abrazo chema

    de "k campion" =P

    ResponderEliminar
  7. Asi que para hablar de Quasi-tautologías te quieres comparar a Brad Pitt....en fin....él no está en el lado del mal......

    ResponderEliminar
  8. Vaya Chema, se ve que el autor de xkcd sigue tu blog :P

    ResponderEliminar
  9. mmmmm me quedo con el rubito, y el ordenador se lo arregló yo xD

    ResponderEliminar