martes, 9 de abril de 2013

Covert Channels over Social Networks (III)

Como os comentábamos en el anterior post, desarrollamos una prueba de concepto llamada FaceCat en la que pretendimos demostrar que podíamos introducir un canal encubierto a través de FaceBook.

Una de las primeras complicaciones que nos encontramos fue los continuos cambios y mejoras que se aplican sobre el interface de FaceBook, y la cantidad de Javascript/Ajax que este contiene. Esto puede hacer el uso de canales encubiertos una pesadilla, ya que cada cambio podría inutilizar el canal. La solución que se nos ocurrió es usar la aplicación para móviles de FaceBook, por tratarse de una aplicación basada en un HTML sencillo, y que presumiblemente sufrirá muchos menos cambios que su "hermano" para equipos de escritorio.


El siguiente paso fue ver como podíamos autenticar contra FaceBook para poder acceder a los muros que queríamos. En este caso, buscámos entre las cookies almacenadas por los navegadores más comunes una sesión autenticada de FaceBook, y empleamos esta misma sesión para la comunicación.

En una primera versión de FaceCat, este mismo usuario era utilizado para todo el proceso, pero durante su desarrollo se produjo un cambio en el sistema de permisos de FaceBook que impedía a un usuario dar permiso a cualquier otro usuario para escribir en su muro, aún sin ser contactos, y como no quería levantar las sospechas por añadir a este usuario como amigo de un usuario desconocido, optamos por realizar un "pass-the-cookie" a través de este muro, de tal forma que el usuario de esta cookie sea contacto del propietario del muro y, por lo tanto, pueda escribir en este:


Para introducir la información, como podéis apreciar, utilizamos Base64, ya que los comentarios en los muros de FaceBook deben ser texto, y el contenido de una comunicación es binario y podría contener caracteres no permitidos por FaceBook. En la idea original, pensamos en separar el código base64 en grupos de caracteres y mezclarlo con palabras comunes entre signos de puntuación para evitar su detección, de la siguiente forma:


R0VU  IC8gSFR UUC, as I just said, 8xLjAK SG9z dDogd3, when he started to, d3 Lmdv b2dsZ S5jb20, then he came back home and, KVXN lc i1BZ2Vud DogT W9 6aWxsY, and so on, Q oKZm9v PX Rlc 3Q., and thats all


Sin embargo, no fue necesario llegar hasta este punto, ya que FaceBook no bloqueaba la publicación de gran cantidad de comentarios en Base64 sin ningún tipo de modificación.

Lo siguiente que introdujimos fue un control de flujo, ya que en el mismo muro se juntan los mensajes en ambos sentidos de la comunicación, además de que cada uno de los lados debe poder saber hasta que mensaje ha leido, para poder leer el siguiente y no leer varias veces el mismo. Para ello empleamos una aproximación similar a la de TCP/IP, ya que empleamos un número de secuencia y una marca (M o S) que establece quien es el originario del mensaje.


Con todo esto, programado en Python, ya tenemos una prueba de concepto de canales encubiertos sobre FaceBook. En el próximo post veremos el resultado final y algunos ejemplos prácticos con un troyano real.

1 comentario :

Gabriel Pozo dijo...

Esperando el próximo post, con ansias ;)