Twittor: Controla tus bots utilizando Twitter como servidor C&C
En este artículo vamos a ver una herramienta llamada Twittor que permite, de una forma especial y sencilla, el despliegue de una botnet utilizando Twitter como servidor C&C. Por una parte veremos una introducción a Twittor y finalizaremos con una demo del funcionamiento de la herramienta.
¿Qué es Twittor?
Aunque Twittor como tal fue un servicio oculto que estuvo funcionando en la red Tor hasta que fue hackeado, nada tiene que ver con la herramienta que lanzó Paul A. (@PaulWebSec) el pasado 9 de septiembre.
Twittor se trata de una herramienta escrita en Python que permite (a partir de un par de scripts y una aplicación en Twitter que habrá que crear) montar una botnet de una forma muy sencilla, donde Twitter adopta el rol de servidor C&C proporcionando un canal de comunicación (aparentemente legítimo) entre el atacante y los bots.
Dada la naturaleza de Twitter, es difícil encontrar organizaciones (salvo entornos muy restrictivos) que bloqueen el acceso a este servicio. Y es ahí donde Twittor realmente se aprovecha de esta situación, ya que aunque se esté monitorizando el tráfico, las comunicaciones con el servidor C&C podrían ser igual de legítimas que las comunicaciones producidas por un usuario normal al conectarse a su cuenta de Twitter.
Durante su desarrollo el autor se inspiró en Gcat, una herramienta cuya finalidad es idéntica a la de Twittor salvo que esta utiliza Gmail como servidor C&C y ofrece distintos comandos a ejecutar entre los bots.
Respecto a los comandos que Twittor permite ejecutar, a través de la ayuda se pueden observar los siguientes:
A lo largo del vídeo se explicarán cada uno de estos comandos.
¿Pero cómo funciona?
Como se ha visto antes, Twittor está compuesto únicamente por dos scripts:
- Por una parte implant.py, el backdoor que habrá que desplegar en cada uno de los bots.
- Y por otra parte twittor.py, el cliente que utilizará el atacante para conectarse al servidor C&C y controlar los bots mediante la ejecución de comandos.
La única dependencia que existe en ambos scripts es tweepy, una librería en Python muy sencilla de utilizar para acceder a la API de Twitter.
Además, estos scripts tienen unos parámetros de configuración para especificar los tokens generados por la aplicación de Twitter, y el nombre de usuario asociado a la cuenta de Twitter de dicha aplicación. Nótese que esta configuración tiene que quedar reflejada en todos los scripts de forma idéntica.
De esta forma todas las máquinas, tanto el atacante como los bots, estarán conectadas a la misma cuenta de Twitter y se comunicarán en Base64 a través de mensajes directos.
El atacante enviará a través de Twittor los comandos en forma de mensajes directos, y los bots, que estarán escuchando constantemente en la misma cuenta, ejecutarán los comandos (que vayan dirigidos a ellos) y enviarán la salida de las ejecuciones también en forma de mensajes. El atacante solo tendrá que preguntar por la tarea solicitada (!retrieve <jobid>) para recuperar la salida del comando enviado.
Demo
Antes que nada mencionar que, aunque en el vídeo se haga referencia a la máquina del atacante como panel de control, realmente no es así, sino que Twitter es quien actúa como servidor C&C y el atacante como cliente de este servidor.
Dada la duración del vídeo, a continuación se muestra un índice con los puntos que se tratan a lo largo del mismo junto a unas marcas de tiempo (corregidas respecto a las que aparecen en el vídeo) en caso de que se quiera saltar a algún punto en concreto:
- Introducción a Twittor [1:50]
- Escenario de pruebas [2:59]
- Twittor en funcionamiento
- Prerrequisitos y configuración de scripts [4:33]
- Ejecución de comandos [8:24]
- Explotación de la vulnerabilidad MS15-100 (CVE-2015-2509) mediante Twittor [21:07]
Imagen del artículo: This Algorithm Tells You If A Twitter Account Is a Spam Bot
- Despliegue de honeypots de forma ágil y económica con SmartHive - 3 febrero, 2016
- Crónica del Hackathon en CyberCamp 2015 - 23 diciembre, 2015
- I2P: Una red anónima que deberías conocer - 18 noviembre, 2015
Buenas tardes, querido amigo. Mi nombre es Daniel. Soy de Rusia. Inmediatamente disculpas por mis errores, yo uso el traductor de Google. Miré el video sobre twitter. Me gustaría pedirle que haga un video, que ha demostrado cómo utilizar payinstaller. Desde cero. Descargar, instalar, compilar en el eco. El hecho es que casi no puedo compilar en el archivo de eco.
Buenas tardes, querido amigo. Mi nombre es Daniel. Soy de Rusia. Inmediatamente disculpas por mis errores, yo uso el traductor de Google. Miré el video sobre twitter. Me gustaría pedirle que haga un video, que ha demostrado cómo utilizar pyinstaller. Desde cero. Descargar, instalar, compilar en el exe. El hecho es que casi no puedo compilar en el archivo .py de .exe.
Hola Daniel, no te preocupes que te he entendido perfectamente 🙂 Desde la máquina Windows, solo necesitas tener Python e instalar el paquete pyinstaller, por ejemplo con pip (> pip install pyinstaller). Una vez instalado, solo tienes que ejecutarlo indicándole el .py (> pyinstaller –onefile implant.py), y el .exe resultante lo encontrarás en el directorio dist que se habrá creado.
Gracias Pedro. Tengo todo salió bien. Pero me encontré con otro problema. Tuve un error en la codificación Unicode: UnikodeDekoderError: ‘utf-8b. ¿Cómo lidiar con este problema?
Hola de nuevo Daniel, puede que el problema lo tengas cuando se muestra en el terminal el resultado de la ejecución de un comando. Concretamente en la clase CommandOutput, cuando se intenta construir el JSON. En mi caso pude solucionarlo decodificando el resultado antes de la generación del JSON con el juego de caracteres utilizado en el terminal (7:25 en el vídeo).
Gracias Pedro. Ustedes son fresco 😉
hola Pedro disculpa yo tengo este error no se si puedas ayudarme
2 meses y nada
Hola Jesús, antes de nada discúlpanos por no haberte contestado antes, pero se nos traspapeló con el resto de comentarios. Si no llegaste a dar con una solución, por lo que he estado investigando, yo comprobaría que la aplicación efectivamente cuenta con permisos de lectura, escritura y acceso sobre los mensajes directos, y si fuera así, probaría a generar de nuevo los tokens actualizando luego los scripts. De todas formas puedes echarle un vistazo a este foro donde comentan este mismo problema: https://twittercommunity.com/t/code-93-this-application-is-not-allowed-to-access-or-delete-your-direct-messages/7062/8
¡Muchas gracias Alexis! Los scripts están disponibles en la página del proyecto en GitHub: https://github.com/PaulSec/twittor
La única modificación que hice, aparte de los parámetros donde se definen los tokens y el nombre de usuario, fue en la línea 85 del script implant.py únicamente para la máquina Windows, ya que tenía un problema con la codificación. Puse lo siguiente:
self.output = output.decode(sys.stdout.encoding)
Aunque también puedes verlo en el minuto 7:25 del vídeo. ¡Saludos!
Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?