Evitar detección de anti virus.

Iniciado por APOKLIPTICO, 16 Noviembre 2012, 18:59 PM

0 Miembros y 7 Visitantes están viendo este tema.

APOKLIPTICO

El tema es que me parece que cuando escaneas, el emulador se toma todo el tiempo del mundo para emularlo. El problema es que mi sistema anti-emulacion se basa en hacer que el emulador tarde demasiado tiempo en analizarlo y lo descarte. Debería hacer algo que el emulador no pueda emular y entonces detectarlo de esa manera...
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

ferleg

Tu "cifrado" que lo tienes por no simple, te digo que sí es simple. Vamos, yo diría que muy simple.

No es polimórfico, es simple cifrado. Además, aún siendo cifrado, no son distintas capas de cifrado una sobre otra, sino sólo una. ¿Me equivoco o te entendí mal? Pero es que aunque fueran varias capas de cifrado, cosa que no es tu caso, de poco te iba a servir ante los emuladores: lo pillan aún con varias capas.

Resumen: Tu cifrado es simple: una sóla capa. Es cifrado, no polimorfismo: o sea tu operación es siempre la misma: XOR en tu caso (además la clásica y más usada). Y lo único que varías es la clave con que cifras esa XOR, que aunque fuera de 32 bits es totalmente pobre ante un emulador.

Te repito que un emulador te lo pilla rápido. Los emuladores no analizan todo el fichero, sino sólo partes sospechosas. A veces ni siquiera necesitan descifrar todo el fichero (la parte que esté cifrada), ni si quiera todo tu virus, sino tan sólo una parte. Y con eso solo ya saltan.


Y finalmente: te diría que para mí el que te lo detecten es por:

1. Tu propia rutina de cifrado, que es el típico bucle loop XOR de los antiguos virus cifrados simples, (rutina por cierto que hoy día ya casi ni se utiliza (o al menos sola), de lo vieja y conocida que es). Eso mismo: tu rutina, ya les hace saltar. O sea lo que utilizas para que no te detecten, eso mismo les sirve para detectarte, al menos ya como código sospechoso.

2. Y aún más seguro: En tu código, ya plano descifrado, debe haber unas cuantas cadenas=patterns que corresponden a otros malwares, más si lo tienes escrito en C, ya que C utiliza=compila según qué trozos de código, de la misma manera siempre igual. Mira como cada AV te da como distintos malware tu virus= te lo confunde con distintos otros programas malware.


Puedes probar a:

1. Quítale tu rutina de cifrado XOR. Deja tu código plano.

2. Comenta y Descomenta, trozos de tu código, y luego compila, ..., y luego pásale los AVs, ..., prueba... , y es posible que veas que alterando tu código plano, o sea quitando o poniendo según qué partes, los AVs te seguirán saltando o te dejarán de saltar.


Además: ¿hablas de virus? O sea que tu programa INFECTA otros programas. ¿? ¿Y en C? Lo dudo. No lo veo. Explica un poco qué tipo de programa es el tuyo. O es simplemente un worm sencillo en C que se automanda por email, ¿o qué?

Otras cosas que comentabas, que no te siente mal, perdona pero se ve que no tienes nivel, no al menos el suficiente. Por ejemplo cuando dices que las funciones de las DLL que importas las tienes encriptadas. ¿Y qué? ¿Que las sacas dinámicamente? Eso no es nada nuevo, técnica que tiene al menos 10 años.
Y además eso no tiene relación directa con no ser detectado. La detección está en primer lugar en tu código ejecutable, aún antes de ser ejecutado. Y si te lo emulan, al ejecutarse, antes de llegar a ejecutarse las funciones de tu virus como el de obtener las API de las DLL que necesites, están muchas otras cosas, como por ejemplo tu rutina de cifrado, que a todas luces parece un: "¡hey Antivirus, que soy un virus!": o sea más que esconder código, llama la atención como rutina  sospechosa.


Mira: el tema de la cifrado, polimorfismo, metamorfismo, ..., no es sencillo.
Si pretendes hacer una rutina de cifrado, que haga que tu código, de momento, pase desapercibido sin ser detectado, tendrás que estudiar bastante más, yo diría que mucho más, que el nivel que tienes con tu bucle XOR.

Como ejemplo, aquí tienes un artículo COJONUDO sobre el tema:
http://www.thehackademy.net/madchat/vxdevl/papers/avers/x-raying.pdf

Y aún siendo COJONUDO, a la vez te digo que ya está algo desfasado.

Aún así si lo lees=estudias, comprobarás que virus mucho más complejos que el tuyo, pero mucho más complejos, como el Magistr, (ya por cierto viejo, muy viejo), tenían técnicas de cifrado polimórfica que le dan 1000 vueltas a la tuya, y aún así fueron cogidos=detectados al poco de salir.

Un saludo. Y no por ello te desanimes. Está genial que estés en este tema. Muchos ingenieros informáticos con título, no saben ni hacer un volcado de memoria. Son ignorantes con título. Lo suyo es la administración empresarial usando un ordenador: las bases de datos, SQL, Visual Basic, etcs: patético.

Así que tú dale y ánimo con el SISTEMA y con cómo funcionan las máquinas, que es lo que realmente es la ingeniería informática, en este caso particularizando en el área de la seguridad.

ferleg

Esa idea está muy bien. Yo mismo la pensé hace tiempo. Pero en mi opinión, para llevarla a la práctica, en primer lugar has de generar código polimórfico. Si es sólo cifrado=código fijo, entonces no tardarán nada en pillar tu rutina y se la saltarán de inmediato, incluso desde el primer momento en que hagas tus pruebas en tu casa con los AV probando en tu ordenador.

Y en segundo lugar, siendo polimórfica=variable=distinta cada vez, debes crear: bucles, llamadas, etcs, ..., lo suficientemente complejas en su estructura como para que el emulador "se las trague" y las emule pensando que es código legítimo, porque de lo contrario no te las va a emular, y por tanto no perderá ese tiempo que quieres que pierda con tus rutinas de sistema anti-emulación.


La idea que dices es la complejidad temporal. Los emuladores tienen un quantum=fracción de tiempo, para emular cada fichero que consideran sospechoso. Si mientras emulan, ese quantum es superado, y a la vez no han dado con una identificación positiva como que ese fichero es sospechoso, entonces lo dejan y pasan al siguiente. La técnica es atacar la complejidad temporal del emulador. Y para ello como dices, hacer que dé vueltas y vueltas en tu rutina, hasta que "se aburra", y deje el fichero. Pero eso no es fácil de implementar. Prueba y verás. Si no sabes hacer código polimórfico, entonces en mi opinión poco puedes hacer. Y para hacer código polimórfico, has de programar en Ensamblador, el C no te sirve para nada para eso. Saludos.


Cita de: APOKLIPTICO en 29 Noviembre 2012, 02:31 AM
El tema es que me parece que cuando escaneas, el emulador se toma todo el tiempo del mundo para emularlo. El problema es que mi sistema anti-emulacion se basa en hacer que el emulador tarde demasiado tiempo en analizarlo y lo descarte. Debería hacer algo que el emulador no pueda emular y entonces detectarlo de esa manera...

0xDani

Despues de leer esto, voy a poner el punto newbie xD. Si nada mas empezar, hago algo como esto:
Código (asm) [Seleccionar]
call delta
delta:
pop ebp
sub ebp,delta

El clasico delta, significa deteccion segura no?
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

ferleg

;-) significa detección segura, o más bien saltar alarma de código sospechoso.

Pero es que antes de llegar al delta offset, que eso está dentro de tu código del virus, el antivirus y sus módulos como el emulador, ya te han chequeado unas cuantas cosas antes: como por ejemplo en qué sección (primera, última, ...) (.text, .data, .rsrc, ...) del ejecutable (infectado) se está ejecutando tu código, qué atributos tiene esa sección, si hay alguna rutina de descifrado, ..., etcs.

O sea tu delta offset sería uno de los últimos datos que el antivirus vería para concluir que ahí en ese ejecutable hay algo muy sospechoso.

Cita de: 0xDani en 30 Noviembre 2012, 18:15 PM
Despues de leer esto, voy a poner el punto newbie xD. Si nada mas empezar, hago algo como esto:
Código (asm) [Seleccionar]
call delta
delta:
pop ebp
sub ebp,delta

El clasico delta, significa deteccion segura no?

0xDani

Ese truco lo he sacado de manuales antiguos, obviamente, pero hay alguna version mas moderna?
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

APOKLIPTICO

@Ferleg.
El cifrado es XOR pero no es con una clave estática, sino que es con una clave que se utiliza como seed del generador pseudoaleatorio y luego se utiliza el keystream que genera el mismo para hacer XOR. Es exactamente lo mismo que hace cualquier cifrado simétrico, lo único que cambia es la complejidad del PRNG.

Estoy seguro que la rutina de cifrado no lo hace saltar porque lo utilizo en otros programas y no lo detecta, eso estoy seguro.

Los anti virus no son tan complejos y realmente reemplazando rutinas se hacen indetectables. No necesito un virus que sea completamente indetectable para siempre, simplemente uno que sea indetectable por heuristica y emulación de código. Estoy realmente bastante cerca y sólo me falta una pequeña cosa.
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

ferleg

#27
APOKLIPTICO: No lo pillas. Estás utilizando cifrado, simple no, muy simple. Aunque tú sigas diciendo que es compleja y hables de clave seed, PRNG, y etcs.

Estás muy equivocado cuando dices que los antivirus no son tan complejos. Por poner un ejemplo, los emuladores de código que usan los AV son de lo más complejo que te puedes echar a la cara.

Dices que no necesitas un virus que sea completamente indetectable para siempre. No desde luego que no. Porque no existen.

Y dices que uno simplemente que sea indetectable por heurística y emulación de código. Pues para eso empieza por estudiar polimorfismo y técnicas como EPO, etcs. Porque con tu rutina XOR no tienes ni para empezar.

Y si te da por pensar que digo estupideces, pues ¿por qué no demuestras lo que dices con hechos?: O sea puedes poner en el post el código ASM de cifrado que genera tu rutina de cifrado XOR, y ya veremos lo "compleja" que es. Y si no sabes ASM (por cierto mal si quieres hacer virus (serios) ), entonces pon al menos el código fuente de tu rutina C que realiza la cifrado.

Y ya para terminar, como estoy casi seguro que al final dirás "ya lo conseguí", pues puedes mandarme el EXE de tu virus, y yo le meto el debugger y veré el nivel de tu super rutina de cifrado XOR con su seed y su PRNG y sus etcs, además de comprobar que realmente es indetectable por los AVs.

Te digo que el nivel que aplicas de cifrado es pobre si lo que quieres hacer es un virus como dices que sea indetectable por heurística y emulación de código.
Pero bueno, tú sigue con tus planteamientos. Eso sí: seguro que ni pones en el post el código ASM de cifrado que genera tu rutina XOR, ni pones el código fuente C de la función con la que haces la cifrado, ni tampoco me mandarás el EXE si lo terminas y dices que ya nadie lo detecta. ¿Sí o no?

burbu_1

#28
a qué antivirus te refieres?
yo no soy hacker  :P, pero quiero tu seguridAD?

p.d. creo que panda de español lo justo.....

APOKLIPTICO

Mirá, te habla el moderador del área de criptografía. Te digo, más allá de la clave corta y que el PRNG no es criptográficamente apropiado, sirve perfectamente para lo que se le pide. Cifra los strings. Sin emulación de código no se va a poder saber el contenido de los strings. Es decir, es necesario que se ejecute la rutina que descifra los strings y luego ver el contenido de los mismos mirando la memoria. El XOR se utiliza en todos los cifrados simétricos actuales, incluido el AES, RC4, Blowfish, Twofish, Serpent, etc. El cifrado es más que suficiente ya que va a resistir que se le pasen XOR básicos para descifrarlos. El código no está cifrado ni obfuscado, pero tampoco me interesa que lo esté. Prefiero que el anti virus vea el programa como uno inofensivo, no que detecte el código obfuscado o cifrado.

No voy a subir la rutina de cifrado, aunque ya con lo que te dije deberías poder hacerla vos mismo. Una seed hardcodeada de 32 bits, un generador pseudoaleatorio básico LCG y el keystream aplicado con un XOR al plaintext.
El virus es indetectable por heurística e incluso en su gran parte por emulación de código.
Todo bien, pero no te voy a mandar el ejecutable, no tengo nada que probarle a nadie.

Saludos
APOKLIPTICO.
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.