Sugerencia: para mejor comprensión, lea las anteriores entregas sobre botnets: primera entrega acá y segunda entrega acá.
Bajo esta arquitectura los bots se conectan a un canal a través del Internet Relay Chat e inician una conversación con el servidor de comando y control, indicándole que están a la espera de instrucciones; las órdenes son impartidas por el botmaster usando el mecanismo «push», lo que le permite tener control en tiempo real de todas las máquinas infectadas. Que el estilo de comunicación del C&C server hacia los bots sea push quiere decir que los bots reciben las instrucciones sólo por estar conectados al canal de IRC correspondiente, sin que deban buscarlas o solicitarlas; las instrucciones llegan a los bots vía mensaje privado (IRC PRIVMSG) o mensajes TOPIC (dos formas de enviar mensajes a través del IRC) y los bots las reciben, entienden la tarea que deben ejecutar, la ejecutan y luego reportan el proceso y el resultado al botmaster (1).
Como parte de sus medidas de seguridad, el botmaster define generalmente tres claves de acceso que los bots deben aportar con el fin de recibir las instrucciones que deben cumplir, evitando así el botmaster que su botnet sea infiltrada y eliminada; esas claves permiten a los bots (i) conectarse al servidor de IRC, (ii) conectarse al canal de chat sobre el que se construyó la botnet y (iii) recibir las órdenes del botmaster (2). Una vez el bot se ha autenticado en la botnet, el botmaster empieza a impartirle órdenes, ejemplos de las que están «.bot.execute» (que ordena al bot ejecutar un archivo específico), «.bot.nick» (que cambia el nombre con el que el bot ingresó al canal de chat sobre el que opera la botnet), o «do_avkill» (que ordena al bot activar sus funciones de eliminación del antivirus de la máquina infectada) (3).
En general, los botmasters usan en las IRC botnets el lenguaje de comando y los protocolos de control propios del IRC, para ordenar a los bots la realización de actividades como denegar servicios, enviar correo basura, cometer fraudes, capturar y enviar información de los usuarios de las máquinas infectadas, junto con su información financiera, e infectar nuevas máquinas para expandirse. De esta manera, conociendo ese lenguaje y esos protocolos, que son comunes a todos los usuarios del IRC, mediante la captura del tráfico los operadores de los servidores del IRC pueden detectar órdenes específicas dadas por un botmaster a sus bots, identificar máquinas infectadas que hagan parte de una botnet y tumbar canales usados por ellos (4).
Para Wang, Sparks y Zou, los servidores de C&C en las IRC botnets son para un botmaster el punto más débil en toda su arquitectura (central point of failure). Esto, indican ellos, por las siguientes razones:
– El botmaster perderá control de su botnet una vez los servidores de C&C sean eliminados por los usuarios legítimos de las máquinas infectadas mediante el uso de antivirus u otras técnicas de defensa.
– Los usuarios legítimos de las máquinas infectadas pueden fácilmente obtener las direcciones IP de todos los servidores de C&C que hagan parte de la botnet, mediante el análisis del tráfico o del estudio del código de un bot que logren capturar.
– Los usuarios legítimos de las máquinas infectadas pueden eventualmente tomar control de toda la botnet si logran capturar un servidor de C&C: no todas las IRC botnets usan comunicaciones cifradas entre los servidores de comando y control y los bots, por lo que al hacer un monitoreo del tráfico de una red en la que esté presente un bot es posible encontrar las claves usadas por los bots para autenticarse en la botnet y lograr así, con algo más de información, suplantar al botmaster e impartir a toda la botnet una instrucción como «bot.die», con la que todos los bots se autoeliminan.
Ejemplos de bots que han usado IRC son Agobot, Spybot, SdBot, Rbot/Rxbot y GTBot; Agobot, también llamado Gaobot, Phatbot, ForBot, UrxBot, RxBot y RBot, en sus diferentes versiones, fue inicialmente desarrollado por Alex Ago Gembe y fue liberado en octubre de 2002 (de ahí su nombre inicial: Ago + Bot). Hay quienes dicen que es uno de los virus que más se han propagado en toda la historia, habiendo alcanzado a existir varios miles de versiones del mismo gracias a que su desarrollador publicó el código fuente y lo licenció dentro de un esquema abierto (segunda versión de la GNU General Public License (5)), permitiendo desarrollos posteriores.
Agobot ha sido también considerado un kit para desarrollar virus (virus kit) porque, al estar publicado su código fuente, era un «hágalo usted mismo», en el sentido de que cualquier persona podría descargar ese código fuente y diseñar su propia versión del virus. Sin embargo, los virus kits tienen una característica particular que consiste en que cada uno usa sus propias tácticas y vectores de ataque, por lo que tan pronto los antivirus detectan el comportamiento de los virus desarrollados a partir de un kit particular, todos los virus que sean desarrollados con ese mismo kit serán seguramente detectados y eliminados.
Uno de los primeros virus kits de los que se tiene registro fue el Virus Creation Laboratory (VCL), que fue el primero orientado a PCs y que fue liberado en julio de 1992; y uno de los más reconocidos es VBSWG.J (Visual Basic Script Worm Generator o Generador de Gusanos en Programación en Visual Basic) por haber sido usado para desarrollar el tristemente célebre virus Anna Kournikova (6).
Agobot incluyó algo particularmente nuevo, al haber sido diseñado en una estructura modular que permitía la inclusión de cualquier cantidad de exploits (7) y la creación de un shell (8). Incluía también una especie de manual, bajo la forma de «preguntas comunes» en un archivo HTML, los requerimientos técnicos que debía cumplir la máquina de quien quisiera hacer sus propios desarrollos, en fin, una pieza de museo, tal vez, que, sin embargo, fue estudiada y analizada y respecto de la que se concluyó que era fácilmente detectable por cuanto (i) su código era muy complejo y era un archivo pesado para ser un gusano (entre 100 y 300 KB),(ii) podía ser «muy ruidoso» por la enorme agresividad que desplegaba buscando infectar sus máquinas víctimas, lo que lo hacía fácilmente detectable a, por ejemplo, sistemas de detección de intrusos (9).
La interfaz gráfica del kit VBSWG.J era la siguiente (10):
Hasta ahora, la mayoría de las botnets ha tenido una estructura centralizada de comando y control en las que los bots se comunican a través de los canales del Internet Relay Chat directamente con los equipos que actúan como servidores de C&C. Sin embargo, comoe está visto ya, si bien a través del IRC los botmasters disponen de una enorme facilidad de comunicación con sus bots, esa misma disponibilidad se convirtió en su mayor debilidad: el riesgo que representa la botnet puede ser mitigado o eliminado al eliminar los servidores de C&C.
Carlos S. Álvarez
blogladooscuro @ gmail.com
@isitreallysafe
Espere: botnets basadas en http.
Notas:
(1) Gu, Guofei; Perdisci, Roberto y otros; «Botminer: Clustering Analysis of Network Traffic for Protocol- and Structure-Independent Botnet Detection» (Botminer: análisis grupal de tráfico de redes para una detección de botnets basada en protocolos o con estructura independiente). College of Computing, Georgia Institute of Technology. Conferencia presentada en el 17th Usenix Security Simposium, San José, California, 2008. En: http://www.usenix.org/events/sec08/tech/ .
(2) Ramsbrock, Daniel; «Mitigating the botnet problem: from victim to botmaster» (Mitigando el problema de las botnets: de víctima a botmaster). Tesis de grado presentada para aplicar al grado de Master of Science in Information Security and Assurance, George Mason University. Primer semestre, 2008; en: http://mars.gmu.edu:8080/dspace/bitstream/1920/3136/1/Ramsbrock_Daniel.pdf .
(3) Barford, Paul; y, Yegneswaran, Vinod; «An inside look at botnets» (Una mirada interior hacia las botnets). Computer Sciences Department, University of Wisconsin, Madison. En: http://pages.cs.wisc.edu/~pb/botnets_final.pdf .
(4) Barford, op. cit.
(5) http://www.gnu.org/copyleft/gpl.html .
(6) «Know the worm. Stop the outbreak» («Conozca el gusano. Detenga la epidemia»); infectionvectos.com, verano de 2004. En: http://www.infectionvectors.com/vectors/kitchensink.htm .
(7) No existe una traducción de este término al español que sea acertada; un exploit es código de programación desarrollado de manera específica para «explotar» una o algunas vulnerabilidad(es) encontrada(s) en un programa de software o una herramienta de hardware.
(8) Con un shell es posible acceder a un servidor remoto y darle instrucciones; ver: http://www.red-pill.eu/freeunix.shtml .
(9) infectionvectors.com, vínculo citado.
(10) Imagen tomada de infectionvectors.com, vínculo citado.