4 mar 2016

Retromalware: Jugando con Netbus (Parte I de II)

En el año 98 el mundo de la informática conoció el troyano NetBus. Esta pequeña aplicación fue lanzada como una herramienta de administración remota de máquinas, aunque existían algunas versiones más oscuras que eran utilizadas por atacantes para troyanizar máquinas. Yo dediqué tiempo a jugar con NetBus cuando iba al instituto, allá por el año 2001, pero eso es otra historia.

En verano me dio por trastear y sacar del baúl de los recuerdos a software que hoy en día tienen poca aplicación, ya que son desbordados por otras herramientas con mucho más poder, pero apareció de nuevo el NetBus. Decidí echarle un ojo, y ver como los creadores de malware de la época hacían para transmitir la información y las órdenes desde un cliente a un servidor. Hay que recordar que el malware de aquella época seguía una arquitectura cliente-servidor clásica. Cuando mandaban el fichero patch.exe (servidor de NetBus) a una víctima ésta disponía de una dirección IP, la cual era una dirección pública. Esto hacía que cualquier usuario pudiera tener conectividad directa con dicha máquina. Después aparecieron los routers y la idea tuvo que cambiarse y ser el “bicho.exe” el que haga la conexión al atacante.

Echando un ojo con un Wireshark a la interacción entre el cliente y servidor en una red me llamó la atención la facilidad con la que NetBus se identificaba.


En la imagen se ve como el cliente (versión 1.60) realiza la conexión con el servidor (three-way handshake) y el servidor “escupe” un segmento con datos. Parece que el servidor muestra el baner, como si de otro servicio normal se tratase. Con Wireshark podemos ver que nos dice la versión a la que nos hemos conectado.


Al ver esto, y viendo que el verano por el norte no ha sido muy productivo a lo que horas de sol se refiere, me puse a trastear con Ruby. Muchos saben que desde el libro de Metasploit para pentesters un servidor anda con ganas de ir haciendo más y más cosas para el framework, aunque no todo lo que me gustaría debido al poco tiempo libre. Para pasar el rato decidí codificar un script en Ruby para dándole una dirección IP detectar un NetBus y su versión.


En el código, muy sencillo, se puede ver como se abre un socket contra una dirección IP y un Puerto que, en la version 1.60 de NetBus es el 6000, es por el que se gestiona. Tras abrir el socket esperamos a recibir un “\r” que es el delimitador que utiliza NetBus, y lo cual también se puede obtener del mensaje mostrado con Wireshark anteriormente. Se puede ver que cada commando, o información enviada acaba con un “\r”, en hexadecimal 0d.

Si lo que recibimos por el socket encaja con la expresión regular definida para localizar un baner de NetBus se imprime por pantalla la versión. Como se puede imaginar esto es algo bastante rápido de montar, y el sol seguía sin salir por el norte así que decidí ir un poco más allá.

El cliente de NetBus tiene diversos botones que permitían al atacante hacer maldades sobre sus víctimas. Pero, como ya hemos visto antes, la comunicación era trivial, el texto plano es la clave. Al probar el botón de Get Info, el cliente obtiene algo de información de la máquina remota, por ejemplo el Usuario con el que se está logueado, la ruta dónde se encuentra el patch.exe o el número de clientes conectados. Si observamos la trama en Wireshark veremos que el comando no puede ser más sencillo “Get Info”, escrito a través del socket, eso sí que no se nos olvidé el 0d al final, o lo que es lo mismo “\r”.


Tras ver esto quise interactuar con el bicho a través del script, era como meterle mano al juguete que tenía de pequeño. El código al final era algo así:


Es sencillo, si el socket está abierto se manda por el socket el texto GetInfo con el delimitador 0d al final y esperamos a que patch.exe nos proporcione la infomación. Una vez recibida, la damos un poco de format sustituyendo los ; y | por saltos de línea y se muestra.

Seguí investigando y jugando un poco con el troyano e implementé también la posibilidad de enviar texto a la víctima, recopilar información sobre el disco duro, por ejemplo listar todos los archivos y carpetas, y la posibilidad de ejecutar un message box en remoto. Justo en este punto el sol empezó a salir por el norte y decidí que las vacaciones eran para coger algo de color…

Os dejo un screenshot de la ejecución del script, el cual lo podéis descargar desde mi github.


¿Segundo día y también llueve? En efecto, llover y mucho llover por el norte, por lo que decidí llevar mi pequeño script al mundo Metasploit.

No hay comentarios:

Publicar un comentario