17 abril 2014

Análisis de Acierta las preguntas (Parte I de II)

Acierta las preguntas es un juego online de preguntas y respuestas de diferentes categorías que te permitirá ejercitar tu cerebro en los momentos más estresantes del día.



Y como a algunos nos gusta encontrar retos diferentes dentro de los retos propuestos, vamos a ver qué podemos encontrar si observamos el comportamiento de la aplicación.

Las preguntas


Es la pieza sobre la que gira todo el juego, así que empecemos por aquí. Tenemos a nuestra disposición la base de datos del juego en la siguiente ruta:


Si descargamos y abrimos esta base de datos encontraremos tablas autoexplicativas:

Preguntas:


Respuestas:



Podemos ver entonces que una serie de preguntas vienen por defecto con la instalación de la aplicación, pero si observamos las comunicaciones que realiza el juego nada más arrancarse veremos la siguiente petición/respuesta HTTP realizada con el servidor del juego:


Como podéis observar se hace una petición en la que se envía como parámetro maxid el valor del pregunta_id más elevado existente en la base de datos, y la respuesta del servidor es todas las nuevas preguntas incluidas desde entonces, pero esta respuesta puede ser alterada para incorporar nuestras propias preguntas/respuestas:


Si observamos ahora la base de datos de la aplicación veremos como hemos incorporado nuestra propia pregunta:


Para concluir sobre este apartado podemos decir que:

  • Si nos preocupa proteger la base de datos podemos utilizar SEE (SQLite Encryption Extension)
  • Si queremos tener un sistema que se actualice en cada nueva ejecución y queremos evitar que nos inyecten valores no autorizados podemos recurrir a algún mecanismo de firma de los datos entregados


La tienda


El juego dispone de una tienda donde podremos comprar comodines para saltarnos preguntas que no sepamos responder, además de avatares que asociar a nuestra cuenta:


Si analizamos las comunicaciones realizadas por la aplicación comprobaremos que al arrancar el juego se intercambia la siguiente petición/respuesta HTTP que puede ser fácilmente alterada:


El resultado de hacer este cambio tendrá la respuesta que imaginamos:


Este problema se podría haber evitado con el mecanismo de firma comentado como conclusión del apartado anterior.


Subida de nivel


Si entramos en el modo de juego y respondemos las preguntas de forma correcta veremos que cuando subimos de nivel se ejecuta la siguiente petición:


Que la aplicación tenga este comportamiento nos permite alterar el nivel de cualquier usuario con sólo modificar la entrada del parámetro user, de modo que podemos subir niveles sin control tanto a nosotros mismos como a otros usuarios.

Si queremos evitar problemas como este podemos implementar las siguiente soluciones:

  • Para controlar que un usuario no altere a otro usuario se puede introducir un mecanismo de gestión de sesión de modo que queden expuestos los datos de forma explícita en ningún parámetro
  • Para controlar la subida de nivel se debe delegar la responsabilidad al servidor: esto se reduce a que el dispositivo Android envíe la respuesta seleccionada al servidor para que sea él quien determine si se ha acertado o no, de este modo el servidor podrá determinar si tiene o no que subir de nivel.


Espero que os haya entretenido y no os perdáis el siguiente artículo, en él entraremos a ver las funciones online del juego, que tampoco han quedado libres de problemas de seguridad.

Artículo cortesía de Miguel Ángel García
Twitter: @nodoraiz

6 comments :

Sr. XX-Terror dijo...

jajaja menudo coladero. Los programadores se quedaron descansando, ni una validación en servidor, ni una encriptación, ya les vale.

José Fernando Buitrago Arboled dijo...

¿Cómo se capturaron las peticiones desde el dispositivo Android?

Miguel Ángel García dijo...

Configurando en el dispositivo Android la aplicación ProxyDroid para que dirija el tráfico HTTP a una máquina donde tenía en ejecución un WebProxy (en este caso las capturas son de Burp)

Guillem Llompart dijo...

Alguna alternativa free a Burp? No puedo costearme una licencia,
Muchas gracias por los articulos, estoy trabajando en una aplicacion y andaba preocupado por la seguridad y sin duda alguna me han servido como punto de partida.

Saludos

Alejandro Ramos dijo...

Burp tiene versión gratuita. Otra opción es Zap proxy.

Guillem Llompart dijo...

Vaya, di por hecho que no habia version gratuital porque no habia comparativa de versiones en la seccion de compra.

Muchas gracias