Muy buenas a todos!
Esta semana os traigo algo que hacía mucho tiempo que quería publicar. Concretamente, una característica en los clientes de IRC que descubrí hace 20 años, y que, a día de hoy, continúa funcionando. Gracias a esta feature, podremos ejecutar código en nuestra víctima de forma totalmente indetectable, como si de un Command & Control se tratase.
Antes de comenzar, me gustaría dedicar este post a Óscar Alfonso Díaz y a Luis Vacas de Santos, ya que fueron ellos y su charla «Retro Hacking (Mundo Viejuno)» en h-c0n, los que prendieron la mecha para hacer posible este post. Un abrazo si alguno de ellos me está leyendo 🙂
Hace mucho tiempo.. casi cuando los dinosaurios poblaban la tierra, los hackers nos comunicábamos a través de unos clientes de chat en texto plano, que se conectaban a unos servidores en internet. Este protocolo de comunicación recibe el nombre de «Internet Relay Chat» o IRC para los amigos.
Durante la época dorada de estos clientes de mensajería (entre 1990 y los 2000), existieron todo tipo de programas, scripts y bots y que nos permitían hacer todo tipo de cosas. Desde realizar ataques de denegación de servicio con nukes, o defendernos ante un kick, en un canal en el que teníamos permisos de operador.
Si no llegaste a vivir esta época, es probable que muchos de estos conceptos sean nuevos para ti. En cualquier caso, te recomiendo que te quedes hasta el final y decidas por ti mismo si esta herramienta puede servirte en un futuro.
Independientemente del programa que utilizases, todos usaban por debajo el archiconocido mIRC. En mi caso, el que más llegué a utilizar fue X-CRiPt 5.1:
Fue entonces, cuando empecé mis travesuras a conocer a otros hackers en los servidores de Terra, Freenode o IRC-Hispano, por poner algunos ejemplos. En aquel entonces, la ciberseguridad brillaba totalmente por su ausencia y existía un gran desconocimiento sobre la misma, por parte de la gran mayoría de usuarios que frecuentaban estos chats.
Con el tiempo, aprendí a programar mis propios scripts en lenguaje Perl y descubrí «como funcionaban las tripas» de los clientes de IRC. Concretamente, a realizar todo tipo de acciones maliciosas.
Pese a que todas las acciones que realicé anteriormente puedan haber prescrito, no daré detalles sobre mi nick, en que servidores conseguí acceder, ni a qué personas pude comprometer de alguna forma en el pasado.
Por dar algo de contexto, en aquellos años era extremadamente sencillo divulgar malware de cualquier forma. De hecho, podías subir tu propio script (con troyano incluido) a cualquier página, y la gente lo terminaría descargando e instalando sin ningún tipo de problema. Básicamente, casi nadie utilizaba antivirus y la tecnología existente no permitía mucho más que realizar análisis estáticos.
De esta forma, conseguí crear mi propio backdoor, que terminó infectando miles de usuarios. Entre ellos, había operadores de los servidores de IRC (IRCops para los amigos), por lo que podía hacer cosas como banear a cualquier usuario de forma permanente con un «G-Line».
Además, podía hacer todo tipo de cosas, como escribir un privado a otro usuario -sin que el primero lo supiera- o incluso, ejecutar cualquier comando en el sistema operativo sin ser detectado. Por desgracia, el script original se perdió en internet hace más de una década.
En cualquier caso, como os adelantaba al principio de este artículo, llevaba ya mucho tiempo planteándome volver a escribir algo bastante parecido, utilizando los clientes de IRC actuales. Continuaría funcionando esta característica 20 años después? 😋
Así que me puse manos a la obra y escribí la herramienta que hoy os traigo al blog. A continuación, os dejo el enlace del proyecto en GitHub: Evil-IRC: Old School IRC Backdoor
Antes de comenzar, y con el fin de evitar el uso de redes de terceros para realizar esta prueba, levantaré mi propio servidor IRC a través de Docker. Concretamente, utilizando InspIRCd de la siguiente forma:
docker run --rm -it --name inspircd -p 6667:6667 -p 6697:6697 -e "INSP_OPER_PASSWORD_HASH=cNkbWRWn\$MhSTITMbrCxp0neoDqL66/MSI2C+oxIa4Ux6DXb5R4Q" inspircd/inspircd-docker
Ahora que ya tenemos nuestro servidor de IRC ejecutándose, nos conectaremos utilizando nuestro cliente preferido. En mi caso, voy a reproducir el siguiente escenario:
• Atacante 1: HexChat en Kali Linux
• Atacante 2: X-CRiPt 5.1 en Windows 11
• Víctima 1: HexChat en Windows 11
• Víctima 2: HexChat en Kali Linux
En primer lugar, conectaremos la primera víctima y el primer atacante al mismo servidor IRC y haremos que entren en el canal #welcome de mi servidor:
A continuación, cargaremos el script malicioso en la víctima. Aquí podemos hacer uso de la ingeniería social, o cualquier otro método con el fin de instalar el script en el cliente de IRC. Una vez instalado, éste siempre cargará al inicio y no mostrará ningún tipo de mensaje ni alerta. Aun así, siempre podremos verlo en la lista de plugins instalados:
Es importante tener en cuenta que el único script que publicaré por ahora solo es compatible con X-Chat y cualquiera de sus forks, como HexChat.
En la versión original del script, la víctima te enviaba un mensaje para avisarte de que estaba conectada y disponible para ejecutar cualquier orden. Actualmente, esta funcionalidad no está disponible, aunque no descarto implementarla en el futuro.
En un caso real, no sabremos si la víctima está infectada o no, pero para este ejemplo no tendremos problema alguno. El siguiente paso, será escribir un mensaje privado con el comando !help tal y como podemos ver a continuación:
Lo interesante aquí, aunque no se pueda apreciar (ya que es necesario verlo en vivo), es que la víctima nunca llega a recibir ningún mensaje privado. Es decir, el script «intercepta» los mensajes del atacante para no mostrarlos nunca en el cliente, por lo que la víctima no sabe que le están enviando comandos por mensaje privado y mucho menos, que está enviando la salida de los mismos.
A partir de aquí, podemos hacer muchísimas cosas:
– !hi = Saludar al atacante
– !help = Mostrar este mensaje de ayuda
– !cmd = Ejecutar un comando y enviar la salida
– !msg = Enviar msg en un canal o privmsg a otro usuario
– !join = Unirse a un canal específico
– !leave = Abandonar un canal específico
– !op = Otorgar permisos de operador en el canal actual
– !deop = Quitar permisos de operador en el canal actual
– !ban = Ban nick en canal actual
– !kick = Kick nick en el canal actual
– !send = Enviar archivo específico al atacante
– !clear = Limpiar ventana actual
– !close = Cerrar ventana actual
– !custom = Ejecutar un comando de IRC personalizado
– !quit = Salir del programa
Por no alargar mucho el post, solo veremos un par de ejemplos y el resto, os lo dejo a vosotros para que lo probéis 😜
En este ejemplo, ejecutaremos algunos comandos en una consola de PowerShell y devolveremos la salida a través del chat privado que ya teníamos con la víctima. En ningún momento aparecerá ningún mensaje de error ni saltará el antivirus, tal y como podemos ver a continuación:
Una de las cosas que más me gustan de este script, es que la salida de los comandos es exactamente idéntica a como era hace 20 años, línea a línea. No es demasiado eficiente, pero tiene un toque nostálgico que hace a esta herramienta un poco más especial.
Ahora que hemos visto como ejecutar comandos en Windows, vamos a realizar lo mismo a la inversa. En este caso, la máquina atacante (Kali Linux), ahora será la víctima número 2. Como atacante, utilizaremos X-CRiPt 5.1 desde Windows 11.
De nuevo, nos aseguraremos que el script está cargado en el cliente IRC de la víctima:
Si todo ha ido bien, solo tendremos que abrir de nuevo un mensaje privado con nuestra «víctima 2» y probar que el script está funcionando correctamente:
En este nuevo ejemplo, lo que haremos será aprovecharnos de los permisos de operador de la víctima para otorgarnos los máximos permisos posibles, expulsar a «víctima 1» del canal y enviar un mensaje al canal:
Por último, ejecutaremos algunos comandos personalizados, que enviarán la salida de los mismos al canal #welcome, en vez de enviarlos a través de mensaje privado al atacante:
Como podéis ver, tenemos muchísimas opciones y posibilidades de ejecución de comandos, tanto dentro como fuera del cliente de IRC. Desde aquí, podríamos cargar una shell remota, una sesión de Cobalt Strike o cualquier otra cosa que se nos ocurra.
Antes de terminar el post, me gustaría recordar que esta herramienta ha sido concebida para fines educativos y que en ningún caso me hago responsable de su mal uso. Por otra parte, es interesante saber que esta herramienta pueda utilizarse como cualquier otro Command & Control, ejecutando el cliente de IRC en una víctima que esté bajo nuestro control, con el fin de utilizar el protocolo IRC como canal de comunicación, ya que éste podría estar permitido en el tráfico saliente.
Como conclusión final, la herramienta se encuentra en fase «beta» y es probable que se produzcan fallos en algunos sistemas y configuraciones específicas. Si encuentras alguno, no dudes en hacérmelo saber 🙂
Espero que os haya gustado y os resulte útil en vuestras próximas auditorías.
Nos vemos en la próxima!