MalQR, testeando la seguridad de los escáneres

Después de tanto tiempo me decido a escribir algo porque entre clases y exámenes no he tenido tiempo ni de pensar en un post. Volviendo al tema que nos concierne, la inseguridad informática, seguramente todos hemos paseado por un centro comercial, por poner un ejemplo, y hemos escaneado en cajas de autoservicio o mismamente, hemos escaneado el producto que nos interesaba para ver sus precio y no llevarnos la sorpresa cuando vayamos a pagar.

Todos estos escáneres de los que estamos hablando deben estar vinculados a un clase de base de datos donde se pueda contrastar el nombre de dicho producto, su precio e incluso algunas de sus características. Esto te para pensar... ¿puede un escáner ser un vector de ataque? Resolveré tu cuestión, pero antes vamos a ver como nos podemos "comunicar" con ellos.

Los escáneres más comunes en comercios, los de código de barras de toda la vida, usan un código especifico llamado "Code 128", este código es capaz de codificar caracteres alfanuméricos o solo numéricos. Con este código es posible representar todos los caracteres de la tabla ASCII, incluyendo los caracteres de control, teniendo en cuenta que cada ASCII se codifica mediante 11 barras. Algunos facilitan una numeración cerca de ellos pero es algo relevante que simplemente sirve cuando no se puede leer correctamente el código.


Otro de los métodos de codificación más utilizados es la matriz de datos, comúnmente llamado "Data Matrix", compuesto de módulos de celdas cuadradas definidas dentro de un perímetro marcado en la que es posible codificar hasta 3116 caracteres ASCII.


También cabe recordar la codificación azteca, también llamada "Aztec codes", en la que se pueden codificar todos los valores de 8 bits, la codificación del 0 al 127 es interpretada por este método siguiendo el ASCII y del 128 al 255 es intepretado siguiendo el ISO 8859-1.
 
Y como no recordar nuestro querido código QR, llamado "QR code", siendo una evolución del código de barras convencional, que almacena la información gracias a una matriz de puntos o en un código de barras bidimensional.


Después de todo esto, como observamos gracias estas clases de codificación podemos comunicarnos con un escáner, ya sea para ver cuanto cuesta la leche o para pagarla. Gracias a esta comunicación se permite una consulta con una base de datos de supermercado, ¿por qué no ir más allá e intentar realizar una iSQL o explotar un XSS? Gracias a que nosotros podremos codificar lo que queramos y a su vez podríamos probar a mandar una consulta "or 1=1/*" o un <script>alert(1)</script> y probar si gracias a un escáner podremos obtener información sensible o vulnerar un sistema convirtiéndolo en un vector de ataque.

Gracias a MalQR tenemos un repositorio muy completo de payloads que lanzar contra un escaner capaz de leer las codificaciones mencionadas anteriormente, contiene los payloads más comunes para explotar inyecciones SQL, XSS, ejecución de código e incluso fuzzear con ellos. Por ejemplo:

Así que os animo a "salir a la calle" a probar... siempre con el permiso del dueño de la tienda por supuesto... y comentad ;)

Web: http://malqr.shielder.it/
Github: https://github.com/MalQR/MalQR.github.io

Nos vemos en la h-c0n. ;)

1 comentarios :

  1. Chulísimo. Esto va genial con los módulos de e-ink "baratos" que circulan por ahí para RPi o Arduino. Valen sobre 40e, pero si comparamos con el precio de la tinta de impresora 40e por impresiones cuasi infinitas es un chiste.
    A ver si hace saltar algo que de para artículo!

    ResponderEliminar