Malware PoC: cómo hacer un troyano

Todos los conocemos. Asolan nuestros ordenadores. Pero, ¿cómo se hacen los virus?

En general, hablar sobre la creación de malware es algo poco común en el área de la ciberseguridad, porque a no ser que te dediques a detenerlo, no hay ningún motivo ético por el que se deba conocer cómo desarrollar software malicioso.

¿O sí?  Al fin y al cabo, un hacker busca llevar al límite aquello que tiene entre manos. Pues bien, hoy tenemos un troyano. Veamos como se hacen con una pequeña PoC.

Pero antes repasemos algunos términos importantes de la jerga, para que no nos perdamos antes de empezar.

Terminología

Troyano: software malicioso que parece un programa inofensivo.

Modding: modificar partes específicas del malware para hacerlo indetectable. Hay dos tipos: el modding binario, que consiste en modificar un archivo ejecutable ya compilado, y el modding source, que consiste en modificar el código fuente.

Moddear es sacar firmas de los antivirus en los propios troyanos para hacerlos indetectables. En un troyano tenemos la parte del malware y la parte del stub (parte que se encarga de descifrar el malware cifrado, que viaja junto al mismo). 

Por último con un crypter cifraremos el troyano. Hay muchos crypters, y lo más recomendable es utilizar los más actualizados. Podemos encontrar crypters en páginas y foros como www.indetectables.net o www.underc0de.org.

Dado que para obtener un troyano indetectable hay que hacer mucha prueba y error, estar infectando un equipo cada vez que queramos probar si el troyano funciona es una pérdida de tiempo. Así que lo que normalmente se hace es realizar el cifrado primero en un anotador (un programa que al ejecutarse correctamente simplemente lance un popup con un texto), y una vez terminemos de eliminar las firmas, entonces si que ciframos el troyano. Esto funciona porque cuando eliminamos las firmas estamos modificando el stub, y no el propio malware.

 

Metodología

Hexing: se utiliza para quitar las firmas más típicas que los antivirus detectan rápido. Es un método manual y pesado, y requiere experiencia en malware. Sin embargo, es lo más seguro que hay para hacerlo indetectable.

AvFucker: Herramienta automatizada y sencilla. Creamos un server, lo ciframos, lo escaneamos, y cuando los antivirus no lo detecten, sacamos las firmas.

Dsplit: en caso de que AvFucker nos detecte los archivos como infectados, usamos este programa para sacar firmas que con el AvFucker no conseguimos (esto suele ocurrir cuando empleamos crypters viejos).

Dsplit alternativo: solo recurriremos a él si fallan los dos anteriores. Sin embargo, es mejor usar un crypter más actualizado.

Offset no funcional a funcional: si tras pasar todos los anteriores seguimos sin conseguirlo o si los offsets están limpios pero no funcionan a la hora de usarlos.

Cambiar el stub: una vez tengamos la firma sacada,, debemos cambiar el stub del crypter para que cada vez que lo usemos no limpie esa firma.

Estos términos y herramientas pueden parecer muy enrevesados, pero lo entenderás mucho mejor en la PoC que veremos a continuación.

Todo lo necesario para trabajar (excepto los crypters) lo podemos encontrar en el Mooding Tools – MEGA PACK. Basta con googlearlo y descargarlo.

PoC: Troyano paso a paso

Un troyano está compuesto por un cliente (que va a estar en nuestro ordenador a la escucha) y un servidor, que es lo que vamos a meterle al equipo víctima. Para configurarlos, y crear una comunicación entre la víctima y nuestro equipo, vamos a utilizar el programa CyberGate

El primer paso es autoinfectarnos, para saber que realmente funciona. Por ello debemos utilizar una máquina virtual con el sistema operativo de la víctima. Para esta PoC voy a simular que quiero infectar un Windows 7.

Abrimos CyberGate, creamos un nuevo servidor, y ponemos en el DNS localhost (127.0.0.1) ya que para empezar queremos infectarnos a nosotros mismos. Escogemos un puerto aleatorio. Es importante que no sea un puerto común. Por ejemplo, el 9876 servirá.

 

Hay algunas configuraciones que debemos hacer en este programa. Activando la persistencia y seleccionando las HKEY, creamos un backdoor, y cada vez que se conecte nuestro equipo víctima lo podremos ver.

En “Message” podemos mostrar algún mensaje cuando el troyano se ejecute. Esto solo lo debemos hacer para pruebas, porque lo interesante es que la víctima no se entere de que tiene un troyano. También podemos activar “Keylogger” para ver todo lo que teclea la víctima.

Una vez creado el servidor (se nos creará un .exe con el nombre que hayamos puesto, en mi caso server-copia.exe)  debemos ir al router y abrir el puerto 9876 (o el que hayas escogido antes). 

Si lo introdujésemos en la víctima ahora mismo, la mayoría de los antivirus lo detectarían. Esto podemos comprobarlo con alguna página que escanee archivos en busca de virus. Importante: no lo hagas en virustotal, puesto que esta página en caso de encontrar malware lo comunica a los antivirus (y añadiría la firma a los mismos, anulando nuestro virus).

Ahora vamos a cifrar el archivo. Entramos en algún hilo de crypters en foros de seguridad, escogemos uno que no sea muy antiguo y ciframos el .exe. Volvemos a pasarlo, a ver si el número de antivirus que los detectan ha bajado.

Como podemos observar, el crypter tan sólo ha reducido el número de antivirus que detectan nuestro virus en uno. Aún no es suficiente. Es la hora del Hexing. Abrimos un editor hexadecimal (da igual cuál, puede ser IDA, Hex Editor, Hex Workshop… cualquiera) y  procedemos a borrar cualquier rastro. Para borrar, cambiamos los valores por 0. ¿Qué valores borrar? No hay una receta exacta,  hay que borrar todo tipo de tips del estilo “this program cannot be run in DOS mode”, “MSVBVM60.DLL”, etc. 

La idea es ir quitando poco a poco e ir comprobando si sigue funcionando el troyano. Sin embargo, dado que esta tarea ya es tediosa de por sí, podemos agilizarla si en vez de estar infectándonos cada vez que queramos probarlo, usamos anotadores. Cifra el anotador y haz el hexing sobre él en vez de sobre el troyano. Comprueba cuantos antivirus lo detectan. Y repite. Si el anotador se crashea, has borrado algo que no debías, vuelve a la versión anterior y prueba otra cosa. Y repite. El límite lo pone tu paciencia.

Tras este proceso, el número de antivirus que detectan nuestro troyano ha pasado a ser 10:

Siguen siendo demasiados antivirus. Utilizaremos AvFucker para eliminar las firmas que quedan.

A grandes rasgos, AvFucker modifica el ejecutable creando miles de variaciones muy pequeñas (a nivel de byte), con lo que crea miles de  ejecutables con offsets distintos. Lo que debemos hacer es lanzar  AvFucker modificando los bytes de 1.000 en 1.000. La herramienta detectará el Offset Final (el inicial es 1.000). Lo que hará será llenarlo todo con 90 (o con lo que elijamos), para que no coincida con las firmas que tienen registradas los antivirus.

Descargamos Avast, o cualquier antivirus que ofrezca el servicio de analizar offsets, y borramos los que están infectados.  De esa forma,  solo nos quedarán los ejecutables con offsets que se han transformado lo suficiente como para no parecer un virus. En este  caso me quedaron los offsets de 6.000 a 7.000 , y los de 9.000 a 10.000. 

Volvemos a usar AvFucker, pero ahora en vez de ir offset 1.000 a 437.760, vamos a ir desde el offset 6.000 al 10.000, y en vez de ir de 1000 bytes en 1000 bytes, vamos de 100 en 100. Generamos los offsets, pasamos avast, y eliminamos los infectados. Repetimos con el rango que haya quedado, de 1 en 1. Y finalmente, los ejecutables que nos hayan quedado tienen offsets funcionales libres de firmas para avast. 

Es posible que al alterar los offsets se haya alterado el programa y no se ejecute bien. Por ello de entre los que nos han quedado debemos ir probando hasta que uno se ejecute, y ya tendremos un troyano con un offset funcional que evade todos los antivirus (menos uno, Panda se me ha resistido):

Podríamos apurar más con el hexing o con algún otro método de los comentados al inicio de este post, pero para esta primera PoC sobre malware creo que bastará.

Ahora solo faltaría conseguir introducir el ejecutable en el ordenador de la víctima, cosa que generalmente se hace mediante ingeniería social, y cuando la víctima lo ejecute obtendríamos toda la información de la víctima, incluyendo un escritorio remoto, un keylogger, usuarios y contraseñas

Para acabar,  te recuerdo que utilizar esta información con fines impíos es algo peor que ilegal: no es del Lethani. Si te sientes tentado, revisa tu moralidad.

 

Lethani.

Deja una respuesta