Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: ErOzE en 3 Marzo 2011, 16:02 pm



Título: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: ErOzE en 3 Marzo 2011, 16:02 pm
Primero de todo presentarme, me he dedicado a la programación desde 1981, habiendo programado en multiples lenguajes a lo largo del tiempo, empezando con ensamblador como primer lenguaje en aquella epoca, en la actualidad me dedico a la programacion en visual basic de aplicaciones de gestion.

Quisiera plantear el desarrollo de un encriptador de ejecutables con las siguientes consideraciones.

Los encriptadores actuales utilizan de base técnicas de cifrado y desencriptacion basadas en operaciones booleanas como XOR, imagino que además sumaran muchas más medidas, lo que sí es cierto es que veo que la mayoría de los ejecutables (troyanos) son detectados por los antivirus, aunque los encriptemos con cualquiera de los programas actuales y son detectados incluso estando cifrados.

Posibles causas:
El comportamiento casi por norma es modificar el ejecutable con una cabecera (rutina de desencriptacion) que es la primera porción de código que se ejecuta, descifrando en memoria la zona de código del (troyano) para pasar a continuación a su ejecución, de tal forma que cuando el troyano es descifrado en memoria, los antivirus detectan los patrones del troyano con facilidad, siendo detectados sin remedio.

Es ilógico crear un archivo ejecutable cifrado, que no sea detectable mientras está inactivo, y sea detectable en cuanto se ejecuta, ya que los antivirus podrían utilizar no solo la búsqueda de patrones sobre los datos sin ejecutar del ejecutable,  sino que podrían autoejecutarlos para comprobar cualquier mutación de una porción de la memoria donde está ubicado el archivo ejecutable para la búsqueda de patrones de troyanos, siempre siendo detectables.

Es por esto que se podría utilizar una técnica diferente en la ejecución de un troyano cifrado para hacerlo indetectable.

Primero no utilizar técnicas de cifrado XOR para cifrar o descifrar con un byte aunque sean muy rápidas, es preferible sacrificar un poco de velocidad para aumentar la efectividad.

Si el código del troyano, no la zona de datos, solo el código ejecutable mide 1500 bytes por ejemplo, podríamos invertir el orden y ponerlos en el archivo ejecutable al revés de tal forma que el primer byte sea el ultimo y el siguiente sea el antepenúltimo y así sucesivamente ó incluso utilizar un sistema de ordenación basado en una semilla aleatoria para enrevesar mas el asunto, además de que el byte en cuestión lo xoreemos con 3 números diferentes en vez de con un solo numero, (posteriormente lo tendríamos que desxorear con el 3er numero, después con el 2º numero y por ultimo con el 1er numero para obtener el byte correcto) ó utilizar otra técnica de cifrado o desencriptacion posible, aunque esto ultimo realmente no es lo importante, lo importante es la desordenacion cifrada del codigo del troyano para hacerlo mas indetectable.

Lo realmente importante sería lo siguiente, el código ejecutable del troyano está compuesto de instrucciones cada una de ellas de una longitud en bytes diferente, las habrá de diferentes longitudes, por esto podríamos buscar la instrucción más larga de todo el código ejecutable y tomarla como patrón de tal forma que podríamos modificar el código ejecutable para ajustar todas las instrucciones a la longitud máxima que hemos determinado, que quiero decir con esto, si hay una longitud máxima de una instrucción de pongamos 9 bytes, rehacer todas las instrucciones a 9 bytes de longitud con NOP (no operacionales) aumentando la longitud del código ejecutable del troyano de 1500 a por ejemplo 2900 después de ajustar todas las instrucciones, ¡para que hacemos esto!, por un lado para desvirtuar los patrones que buscan los antivirus y por otro lado para utilizar una técnica de ejecución del troyano diferente a la utilizada en la actualidad, haciendo lo siguiente  la cabecera de nuestro ejecutable contendría una rutina de desencriptacion y ejecución del código del troyano por partes, o sea se descifra solamente una instrucción que como habíamos dicho era de 9 bytes por ejemplo y se ejecuta la misma, después se descifra la siguiente instrucción y se ejecuta, siguiendo el orden según hayamos establecido por ejemplo seudoaleatorio, hasta el final de tal forma que nunca revelamos la totalidad del código del troyano en ningún momento, solo desciframos cada instrucción una a una para ser ejecutada, para hacer esto hay que tener en cuenta que no interactuemos con la pila ni con el contenido de los registros del microprocesador (haciendo copias de respaldo), de tal forma que cuando desencriptemos una instrucción y la ejecutemos, los registros y la pila estén en el mismo estado para la siguiente instrucción y así la ejecución del troyano sea limpia y sin errores.

Es normal que este proceso provoque una perdida sustancial de la velocidad de ejecución del troyano pero será a costa de que la ejecución del troyano no sea detectada.

Es de lógica que la detección por parte de los antivirus no solamente sea del código que se está ejecutando sino también del comportamiento de los ejecutables al nivel de que hacen en el sistema, por lo que podríamos decir que la detección del troyano podría existir, aunque esto habría que dejarlo para hacer pruebas sobre los diferentes antivirus y comprobar que es lo que detectan si detectan algo y la efectividad de la técnica utilizada.

Inconvenientes de la rutina:
Debido a que la ejecución de código no siempre es lineal, por lo que se realizan saltos condicionales o relativos (etc.), no siempre sería posible la ejecución así a la ligera de instrucción por instrucción, por lo que sería necesario tener en consideración cual es la instrucción a ejecutar para poder evaluar si es o no posible ejecutarla, o habría que descifrar por adelantado otras partes del código cifrado, no sé en la actualidad cuantos opcodes habría que tener en cuenta para poder determinar la ejecución de la instrucción o tomar otras medidas para poder seguir con la ejecución del código, aquí es donde radica la complejidad de esta rutina de ejecución, todo esto que digo siempre debeis tener en cuenta que hace mucho tiempo que no programo en ensamblador y seguramente hay temas actuales que no tomo en consideracion, pido perdon por adelantado.

A tener en cuenta:
La cabecera encriptadora/desencriptadora/ejecutadora debería ser polimórfica, dividiendo la misma en minimodulos(subrutinas independientes) movibles, creando multiformas en la memoria durante su ejecución para evitar formar parte de un “patrón” detectable por los antivirus, la ordenacion de los minimodulos tendria que ser generada tambien a traves de una semilla aleatoria, pero nunca partiendo de una semilla original, empezando con una semilla por ejemplo a partir de la hora minutos y segundos del reloj, y cambiando a partir de cada momento de la misma forma, o sea completamente aleatoria y casi infinita en formas, esto seria rizar el rizo.

Quisiera que comentarais que pensais para darle forma a la idea, ademas de si hay interes en desarrollar la idea.

Un saludo a todos/as y muchas gracias

ErOzE


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: [Zero] en 3 Marzo 2011, 16:36 pm
He pensado en esa idea varias veces pero nunca se me dió por intentarlo, no sé tampoco si hay algo parecido hecho. Podemos intentarlo, pero estaría bien plantear ideas antes, por ejempo para evitar el problema de saltos etc.

Saludos


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: ErOzE en 3 Marzo 2011, 16:45 pm
He pensado en esa idea varias veces pero nunca se me dió por intentarlo, no sé tampoco si hay algo parecido hecho. Podemos intentarlo, pero estaría bien plantear ideas antes, por ejempo para evitar el problema de saltos etc.

Saludos
Pues si, lo importante es darle forma entre todos, pulir la idea, y todo antes de empezar siquiera el desarrollo.

Como comentario lo ultimo que digo sobre que la cabecera sea polimorfica, quiero aclarar que la aplicacion que crearia el ejecutable a partir del troyano, el archivo cifrado en cuestion, es en ese punto donde el ejecutable nuevo cifrado, tomaria la forma concreta y determinada en cada ordenador, por lo que el mismo troyano creado por uno o por otra persona, nunca tendria la misma cabecera. si con la hora como decia añadimos el numero de serie del disco duro del ordenador donde se crea el ejecutable cifrado, daria siempre como resultado un ejecutable unico y diferente.


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: Karcrack en 3 Marzo 2011, 16:53 pm
Lo he leido muy rapido, asi que no se si lo he entendido completamente... El proyecto consistiria en virtualizador de codigo... es decir, las instrucciones originales serian cifradas o bien reemplazadas por otras, y luego habria una parte encargada de interpretar ese codigo ejecutando las instrucciones... Algo como esto?
Código:
http://www.oreans.com/es/codevirtualizer.php


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: ErOzE en 3 Marzo 2011, 17:35 pm
Lo he leido muy rapido, asi que no se si lo he entendido completamente... El proyecto consistiria en virtualizador de codigo... es decir, las instrucciones originales serian cifradas o bien reemplazadas por otras, y luego habria una parte encargada de interpretar ese codigo ejecutando las instrucciones... Algo como esto?
Código:
http://www.oreans.com/es/codevirtualizer.php

No, no consiste en un virtualizador de codigo, sino como se propone seria una cabecera que desencriptaria y ejecutaria el codigo del troyano poco a poco, codigo que además estaria desordenado en si mismo, además de que la propia cabecera estaria en si misma tambien desordenada.

un virtualizador esta bien para proteger codigo, pero dará como producto cuando lo utilicemos para ofuscar un troyano un producto siempre igual, que una vez que lo identifiquen los desarrolladores de antivirus, seria facilmente detectable.


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: Elemental Code en 3 Marzo 2011, 20:14 pm
Vendria a ser como un descifrado progresivo instruccion por instruccion ¿?¿?
 :huh: :huh:


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: ErOzE en 4 Marzo 2011, 10:50 am
Vendria a ser como un descifrado progresivo instruccion por instruccion ¿?¿?
 :huh: :huh:


Exacto, pero como se ha dicho habrá ocasiones (muchas) en las que la zona a descifrar para ser procesada, no será de una instruccion, imagina que la instruccion a ejecutar es la carga en la direccion tal de un valor que esta en la direccion tal ó el resultado de una operacion anterior, por lo que la cabecera tendria que considerar y evaluar las necesidades de las instrucciones que se van a ir procesando para ir descifrando las zonas que vayan a ser necesitadas.


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: Arkangel_0x7C5 en 4 Marzo 2011, 13:08 pm
la cosa reria asi, activas el flag de paso a paso, y descibras siempre en bloques de 9, luego le pasas lo descifrado a un desensamblador para que calcule y de informacion de la instrucion.....


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: Karcrack en 4 Marzo 2011, 13:39 pm
Y la finalidad de descifrar instruccion por instruccion y ejecutar que ventajas tiene? :-\ Quiero decir, seria exactamente igual que hacer un crypter runtime... pero complicandolo de forma innecesaria...


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: ErOzE en 4 Marzo 2011, 17:01 pm
Y la finalidad de descifrar instruccion por instruccion y ejecutar que ventajas tiene? :-\ Quiero decir, seria exactamente igual que hacer un crypter runtime... pero complicandolo de forma innecesaria...

la finalidad principal es que nunca tendra la misma forma. esa es la ventaja. imagina que cuando creas el troyano con la cabecera de la que hablamos en tu ordenador, el codigo cifrado del troyano sera diferente que el mismo que yo generaria en mi ordenador aunque ambos usemos el mismo troyano, sin embargo cuando el troyano se esta ejecutando tanto el archivo tuyo como el mio haran lo mismo. gracias

la verdad es que la idea en si es complicada, pero poniendo un simil, imagina que el codigo del troyano fueran 10 bytes, que estarian originalmente asi, 1,2,3,4,5,6,7,8,9,0 pero una vez desordenado a la hora de cifrarlo en tu ordenador fuera en este instante 2,5,1,0,9,6,5,7,3,4,8 y ademas cifrado, logicamente tu semilla se quedara en tu cabecera para que la misma sepa el orden en que tiene que ir descifrando las instrucciones, una a una o multiples para la ejecucion del troyano, pero ojo debes pensar que un lugar en la memoria es donde esta el troyano cifrado, y otra parte reservada en la memoria de la longitud real del troyano estara llena de ceros, pero en la posicion adecuada iran apareciendo las instrucciones descifradas para ser ejecutadas, volviendolas a 0 una vez ejecutadas y apareciendo las nuevas sucesivamente pero nunca todas juntas a la vez, rompiendo por completo cualquier patron a buscar, no se si me explico correctamente o si se plasmar la idea bien para que se me entienda. a la vez que pensaba que la propia cabecera tambien cambiara de forma.
 

por cierto como funciona un crypter runtime, descrifra todo el codigo a ejecutar y luego lo ejecuta ¿no?, con lo que una vez terminado el descifrado, el codigo en abierto del troyano estaria en memoria y seria detectado con muchisima facilidad por los antivirus. ¿si ó no?, te pregunto porque no se realmente como funciona el crypter runtime de que hablas.


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: Karcrack en 4 Marzo 2011, 18:53 pm
por cierto como funciona un crypter runtime, descrifra todo el codigo a ejecutar y luego lo ejecuta ¿no?, con lo que una vez terminado el descifrado, el codigo en abierto del troyano estaria en memoria y seria detectado con muchisima facilidad por los antivirus. ¿si ó no?, te pregunto porque no se realmente como funciona el crypter runtime de que hablas.
Actualmente se pueden diferenciar los Crypters (Cifradores) en dos ramas. Los scantime, que cuando son ejecutados sencillamente descifran en el ejecutable,lo guardan en el disco duro y lo ejecutan... O runtime, que descifran el ejecutable y lo ejecutan desde la memoria...
El scantime seria detectado ya que esta dejando en el disco duro el ejecutable descifrado, por lo que el antivirus lo detectara sin problema, en cambio el runtime no sera detectado, porque ningun AV analiza todo la memoria de todos los procesos en busca de codigo malicioso. Los runtime a veces son detectados por la defensa proactiva o heuristica.

Quitando el polimorfismo, cual seria la ventaja de ejecutar instruccion por instruccion? Me da la sensacion de que seria realmente inestable... ya que es muy dificil abarcar todas las posibles acciones que podria hacer el ejecutable...


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: ErOzE en 4 Marzo 2011, 19:49 pm
Pues si, tienes toda la razon seria bastante inestable, pero el hecho de hacerlo instruccion por instruccion es para que "nunca" el codigo del troyano este en abierto. Aunque la inestabilidad será inversamente proporcional a la calidad del analizador que determinaria que parte o partes son los que hay que descifrar para procesar correctamente, que desde luego para nada seria facil ni sencillo.


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: [Zero] en 5 Marzo 2011, 16:21 pm
Actualmente se pueden diferenciar los Crypters (Cifradores) en dos ramas. Los scantime, que cuando son ejecutados sencillamente descifran en el ejecutable,lo guardan en el disco duro y lo ejecutan... O runtime, que descifran el ejecutable y lo ejecutan desde la memoria...
El scantime seria detectado ya que esta dejando en el disco duro el ejecutable descifrado, por lo que el antivirus lo detectara sin problema, en cambio el runtime no sera detectado, porque ningun AV analiza todo la memoria de todos los procesos en busca de codigo malicioso. Los runtime a veces son detectados por la defensa proactiva o heuristica.

Quitando el polimorfismo, cual seria la ventaja de ejecutar instruccion por instruccion? Me da la sensacion de que seria realmente inestable... ya que es muy dificil abarcar todas las posibles acciones que podria hacer el ejecutable...

Supongo que la heurística hace precisamente eso, ejecuta el archivo "en su mundo", para que le de tiempo a desencriptarse, y luego analiza el archivo descifrado en memoria. Osea, si el antivirus echa un ojo a la memoria lo detectaría, de esta forma no, o le costaría mucho más. El caso es que es tremendamente complicado hacerlo, pero para eso tenemos tiempo libre xD.

Saludos


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: Karcrack en 5 Marzo 2011, 19:06 pm
Ningun AV analiza la memoria de los procesos... sencillamente porque eso haria que el usuario notase una ralentizacion asombrosa... Pero bueno, esto puedes probarlo facilmente haciendole un StrReverse() al EICAR test file y descifrarlo en memoria... veras como ningun AV dice nada :P


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: ErOzE en 5 Marzo 2011, 20:23 pm
Ningun AV analiza la memoria de los procesos... sencillamente porque eso haria que el usuario notase una ralentizacion asombrosa... Pero bueno, esto puedes probarlo facilmente haciendole un StrReverse() al EICAR test file y descifrarlo en memoria... veras como ningun AV dice nada :P

Si ningun AV analiza la memoria de los procesos como dices, sin hacer nada especial simplemente inviertes un troyano o virus, lo descifras en memoria, y una vez asi, podrias ejecutarlo directamente. ¿no?, porque la intencion no solamente será tener un troyano en memoria, sino que el mismo este activo.


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: Karcrack en 5 Marzo 2011, 20:25 pm
Exactamente, pero no sirve únicamente con darle la vuelta... hace falta un cifrado un poco más complejo, solo dándole la vuelta el AV lo detecta ;)


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: ErOzE en 5 Marzo 2011, 21:02 pm
Exactamente, pero no sirve únicamente con darle la vuelta... hace falta un cifrado un poco más complejo, solo dándole la vuelta el AV lo detecta ;)

ok vamos por partes, cogemos el archivo de test, lo invertimos por ejemplo, lo ciframos con xor 170 y si quieres podemos añadir un SHR a la derecha y el acarreo que provoque lo colocamos como primer bit de cada byte, ya no tiene la forma original ni de lejos, ahora nos vamos a un programa que lo lee por ejemplo de un archivo donde lo tenemos ya transformado, o no, mejor no lo lee de ningun sitio, el archivo lo tenemos integrado en modo binario dentro del propio programa, y este programa coge el codigo del archivo de test cifrado y dentro de una variable o de una zona de la memoria lo desciframos, para despues ejecutarlo y lo ejecutamos desde este mismo programa, y los AV no lo detectan. ¿estas realmente seguro?, me da la impresion que los AV BUENOS, lo detectaran. ¿no crees? :rolleyes:


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: [Zero] en 5 Marzo 2011, 21:54 pm
ok vamos por partes, cogemos el archivo de test, lo invertimos por ejemplo, lo ciframos con xor 170 y si quieres podemos añadir un SHR a la derecha y el acarreo que provoque lo colocamos como primer bit de cada byte, ya no tiene la forma original ni de lejos, ahora nos vamos a un programa que lo lee por ejemplo de un archivo donde lo tenemos ya transformado, o no, mejor no lo lee de ningun sitio, el archivo lo tenemos integrado en modo binario dentro del propio programa, y este programa coge el codigo del archivo de test cifrado y dentro de una variable o de una zona de la memoria lo desciframos, para despues ejecutarlo y lo ejecutamos desde este mismo programa, y los AV no lo detectan. ¿estas realmente seguro?, me da la impresion que los AV BUENOS, lo detectaran. ¿no crees? :rolleyes:


Si lo haces bien no lo detectan xD. En este caso si lo detectarían, porque un xor y un shr sigue sin ser suficiente para la heurística, pero metes una cifrado mejor y el AV no debería chillar.

Saludos


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: ErOzE en 5 Marzo 2011, 22:08 pm
Entonces no me he explicado bien, el hecho de cifrar de una forma o con un procedimiento AES o de cualquier otra forma no creo que sea lo importante, lo que ocurre es que de la forma que sea, siempre al final tendras el virus o troyano en la memoria en abierto una vez descifrado y cualquier AV decente lo detectará.

Saludos


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: [Zero] en 5 Marzo 2011, 22:09 pm
siempre al final tendras el virus o troyano en la memoria en abierto una vez descifrado y cualquier AV decente lo detectará.

Falso, aunque parezca increíble  ;D. Lo detectarán a la hora de hacer el proceso de inyectarse, o cuando lo inyectado haga algo raro, pero por tener las firmas en memoria no pasa nada :).

Saludos


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: ErOzE en 5 Marzo 2011, 22:33 pm
Gracias entonces, me acabas de aclarar que no vale la pena utilizar un troyano ya hecho, seria mejor dedicar el tiempo a la creacion de un troyano desconocido, para evitar la encriptacion incluso, pues al ser desconocido no haria falta ocultarlo, por lo que habria que dedicarse mejor a mejorar que la actividad del troyano no sea monitoreada ni supervisada.

Aunque la idea de que cualquier troyano CONOCIDO pueda ser ejecutado sin que lo reconozcan los AV, para muchos sería una buena herramienta. :rolleyes: :P ;-)

Un saludo.


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: [Zero] en 5 Marzo 2011, 22:45 pm
Gracias entonces, me acabas de aclarar que no vale la pena utilizar un troyano ya hecho, seria mejor dedicar el tiempo a la creacion de un troyano desconocido, para evitar la encriptacion incluso, pues al ser desconocido no haria falta ocultarlo, por lo que habria que dedicarse mejor a mejorar que la actividad del troyano no sea monitoreada ni supervisada.

Aunque la idea de que cualquier troyano CONOCIDO pueda ser ejecutado sin que lo reconozcan los AV, para muchos sería una buena herramienta. :rolleyes: :P ;-)

Un saludo.

Si, y aunque no sirvise sería un buen ejercicio, aunque solo sea por el ego xD.

Saludos


Título: Re: [PROYECTO]Desarrollo de un cifrador indetectable
Publicado por: ErOzE en 5 Marzo 2011, 22:52 pm
Si, y aunque no sirvise sería un buen ejercicio, aunque solo sea por el ego xD.

Saludos

Mas que por el EGO, yo lo decia porque cuando un troyano por ejemplo un BACKDOOR es efectivo en su trabajo, la reutilizacion de ese troyano y de muchos otros seria muy interesante alargando la vida de los mismos.

Un saludo. :rolleyes: