Hola! Se me ocurrió algo hoy,, pero quería leer algunas opiniones antes de pasar a la POC..
La idea es hacer un programa que descarga opcodes de un servidor y luego los ejecuta, (los mete en la pila), podría ser un binario o un simple archivo de texto.. quizás eso podría evadir el análisis estático... no? Los opcodes podrían ser cosas como cargar una librería y hacer otra cosa.. digamos que el malware seria solo el motor que ejecuta otras ordenes.. a grandes rasgos seria la única firma detectable (el mismo motor, todas las demás funciones serian dinámicas) no se si me explico bien..
que les parece? seria viable?
Saludos!
Creo que es algo viable para evadir el analisis estatico.
Creo que lo ideal seria algo asi como una maquina virtual polimorfica, la cual puede ser tan compleja como uno quiera (siquiendo esta linea de pensamiento).
Saludos!
Citar
Creo que lo ideal seria algo asi como una maquina virtual polimorfica, la cual puede ser tan compleja como uno quiera (siquiendo esta linea de pensamiento).
Exacto, seria algo asi.. lo bueno que podria tener este metodo seria la capacidad de cambiar en base a lo que uno suba al servidor.. (diferentes opcodes) ademas una vez evadido el analisis estatico, tambien se excluye del sandbox.. despues esta el tema del comportamiento, pero eso ya es otro tema :xD
Voy a tirar unas lineas de codigo a ver que pasa.. jaja
Saludos!
pensé que esto era lo que hacia el payloader -.- no vivo mucho en ese mundo, pero como hacer el opcode solo de un proceso? (tampoco me doy con asm hace mucho XD)
Pues como tu dijiste, si es un opcode ejecutable, pues guardarlo en la pila y para ejecutarlo bastaría con una llamada o un salto.
Aquí tienes un ejemplo muy básico, de un encoder para un payload de BSD*, claro que como dijeron por hay arriba se puede hacer muchísimo mas complejo, solamente quería mostrar un ejemplo.
http://foro.elhacker.net/bugs_y_exploits/encode_xor_binsh_x8664-t396372.0.html
E visto virus polimorfos con simples xor y add, pero evadían mas de la mitad de las firmas :D, imaginate si te tomas tu tiempo para crear un buen polimorfismo, y no hablo mas del tema porque no se nada sobre antivirus y de Windows.
Si tienes alguna duda ya sabes.
Un saludo.
Citarpensé que esto era lo que hacia el payloader -.- no vivo mucho en ese mundo, pero como hacer el opcode solo de un proceso? (tampoco me doy con asm hace mucho XD)
La verdad no se exactamente que es un payloader, lo he leído 1 millón de veces pero nunca lo estudie (ahora lei un poco sobre el tema.. para mi era lo mismo que un exploit)
No creo que sea lo mismo a la idea de "maquina virtual polimorfica", esto podría ser mucho mas amplio y no tan especifico.. Tampoco es necesario meter todo un proceso en opcodes.. el proceso se va creando a medida que le llegan las instrucciones.. el malware es "un simple motor ejecutor" (por así decirlo).
CitarAquí tienes un ejemplo muy básico, de un encoder para un payload de BSD
Voy a estudiar mejor el tema de los payload, entiendo que hay muchas similitudes con esta idea.. todo ejemplo/idea sirve
CitarSi tienes alguna duda ya sabes.
No lo dudo, ya estaré posteando algo por el subforo jeje
Saludos! Gracias!
El concepto de maquina virtual ya no lo tengo claro xD creía ue se rwfería a la virtualizacion del hard...
y viendolo solo como un interprete, podrías usar motores standard como lua y le pasas los scripts cifrados para que el av no fastidie pero te vez limitado sin opcodes a su capacidad inicial, es.decir si solo lees archivos y transmites, un script no te va a dar vidéo, trndrías que actualizar el
exe
Creo que un buen ejemplo de una VM NO polimorfica es la VM de VB6 (la libreria msvbvm60.dll).
Cuando haces un EXE compilado en P-CODE, lo que obtienes es un exe que tiene opcodes que son interpretados por la maquina virtual de Visual Basic. No hay codigo x86 en el ejecutable.
Tambien, todos los .NET normales (normales = sin packers ni cosas raras) trabajan de la misma forma, pero las maquinas virtuales no son polimorficas (Ni hablar que los opcodes tampoco cambian, por ende, se puede interpretar estaticamente lo que hacen).
Un lugar donde puedes encontrar VMs polimorficas es este (http://vxheaven.org/). Pero ojo con lo que ejecutas! :)
Te dejo un par de links interesantes:
link1 (http://www.icemanind.com/VMCS.pdf)
link2 (http://www.codeproject.com/Articles/43176/How-to-create-your-own-virtual-machine)
Saludos!
Muy buena info MCKSys!
Si no mal recuerdo.. vos habías separado la VM de VB6, no? Yo tenia pensado algo mas simplón, pero se podría hacer algo mucho mejor con toda esa información.. en definitiva veo que no es algo nuevo lo que se me ocurrió.. seria una forma de implementar algo que ya esta inventado.. jaja..
PD: Que difícil resulta inventar algo hoy en día :xD
Gracias! Saludos!
@Vaagish
El Payload simplemente son instrucciones "funciones" pasadas a opcode, los payloads normalmente son utilizados en los exploits, este se encarga de explotar el bug y cargar el payload para que ejecute las instrucciones "funciones" que desees. Los polimorfismos de los payloads suelen ser mas simples que los del malware, pero el metedo es casi el mismo.
Y esta es una pregunta abierta, eso de la VM de VB6, solamente es interpretado si el sistema tiene VB6 en el, no? Esta crea un opcode que la VM de VB6 puede interpretar, si es así desde mi punto de vista no vale mucho.
La verdad yo no le veo el sentido a esas cosas, no es mejor buen polimorfismo?
A ver si me aclaran esa duda.
Un saludo.
CitarEl Payload simplemente son instrucciones "funciones" pasadas a opcode, los payloads normalmente son utilizados en los exploits, este se encarga de explotar el bug y cargar el payload para que ejecute las instrucciones "funciones" que desees. Los polimorfismos de los payloads suelen ser mas simples que los del malware, pero el metedo es casi el mismo.
Bien,, pero el exploit también son opcodes, no? Son muy parecidos.. en si el payload es la función especifica que explota la vulnerabilidad..
CitarY esta es una pregunta abierta, eso de la VM de VB6, solamente es interpretado si el sistema tiene VB6 en el, no? Esta crea un opcode que la VM de VB6 puede interpretar, si es así desde mi punto de vista no vale mucho.
Mas que tener el VB6 instalado lo que necesita es la misma VM, como dijo MCKSys, mas específicamente se necesita la libreria msvbvm60.dll, como funciona exactamente "por dentro", lo desconozco, pero básicamente es una VM..
CitarLa verdad yo no le veo el sentido a esas cosas, no es mejor buen polimorfismo?
La idea es que el motor pregunte a un servidor que hacer.. estas tareas podrían cambiar en cualquier momento, ya sea la acción como la forma de realizarla.. supongamos que algún AV detecta la acción maligna, (pero no el metodo).. la acción podría hacerse con diferentes opcodes modificandola desde el servidor..
Saludos!
No, el exploit es el que se encarga de explotar la vulnerabilidad, el payload es el que se encarga de ejecutar las ordenes "funciones" que dicta su opcode, "es el transportista".
Y bueno sobre si el exploit son opcodes, pues te diría de que los dos pueden se representados en opcode. Si haces un antivirus potente puedes declarar el exploit y el payload juntos en un puntero, y que tu virus los llame.
En el link que te pase, ves la shellcode pasada en opcode en "formato" C, eso es el payload con su decrypt, siempre puedes poner el exploit en primer lugar y llamarlos, como dije anteriormente.
Y sobre la VM, pues si el user no elimina VB6 y su maquina pues este método si es valido.
Si te decides con los métodos del polimorfismo y ASM, cuanta con mi ayuda, ya que estos temas me parecen interesantes y no hay ninguno.
Un saludo.
CitarY sobre la VM, pues si el user no elimina VB6 y su maquina pues este método si es valido.
Si te decides con los métodos del polimorfismo y ASM, cuanta con mi ayuda, ya que estos temas me parecen interesantes y no hay ninguno.
Naa,, pero mi idea no es usar la VM de VB6 :xD
CitarSi te decides con los métodos del polimorfismo y ASM, cuanta con mi ayuda, ya que estos temas me parecen interesantes y no hay ninguno.
Ya estoy haciendo unas pruebas en ASM.. y claro que si! Toda participacion es bienvenida.. (ademas puede ser un proyecto largo si asi se quiere) a lo mejor sale algo bueno :P
CitarCreo que un buen ejemplo de una VM NO polimorfica es la VM de VB6 (la libreria msvbvm60.dll).
Cuando haces un EXE compilado en P-CODE, lo que obtienes es un exe que tiene opcodes que son interpretados por la maquina virtual de Visual Basic. No hay codigo x86 en el ejecutable.
muy interesante con que de esa forma es como funciona,
edito:me imagino que una VM polimorfica es completamente indetectable , claro lo digo sin conocer demasiado del tema
Citarme imagino que una VM polimorfica es completamente indetectable , claro lo digo sin conocer demasiado del tema
Mmm... no necesariamente.. yo creo que completamente indetectable no hay nada.. (quizás sea indetectada por un tiempo..) pero a la hora de la heuristica o abuso del malware,, siempre termina detectado...
En realidad eso es lo que hace y a hecho malware durante años la descarga de payload desde la algún servidor y ejecutarlo.
Pero sí, hablando especificamente acerca de 'descargar instructiones' y ejecutarlas es posible , el código debe ser especialmente
diseñado para ser ejecutado de tal manera me refiero a PIC (http://en.wikipedia.org/wiki/Position-independent_code) Pero igual se puede implementar una función que resuelva las direcciones de memoria de igual manera que lo hace Windows.
Cita de: MCKSys Argentina en 23 Junio 2014, 20:12 PM
Un lugar donde puedes encontrar VMs polimorficas es este (http://vxheaven.org/). Pero ojo con lo que ejecutas! :)
Mostranos al menos una 'VM polimorfica' que se encuentre en ese sitio.
CitarPero igual se puede implementar una función que resuelva las direcciones de memoria de igual manera que lo hace Windows.
Te referis a por ejemplo las funciones de las apis? Yo tenia pensado (en un principio), leer desde el servidor una cadena por ejemplo asi:
CitarModulo:Kernel32.dll;Funcion:CopyFile;FileName:X.exe;....
Con eso el motor ya sabría que hacer con X cosa.. cargaría con LoadLibrary el modulo, llamaría a la función con GetProcAddress, etc, etc... luego surgió lo de los opcodes y una maquina virtual mas compleja.. es todo cuestión de probar, solo así se podrá saber la eficiencia..
CitarCita de: MCKSys Argentina en Ayer a las 20:12
CitarUn lugar donde puedes encontrar VMs polimorficas es este. Pero ojo con lo que ejecutas! :)
Mostranos al menos una 'VM polimorfica' que se encuentre en ese sitio.
VM polimorfica no vi, (tampoco busque a fondo) pero hay buena información referente al tema.. la otra información que puso MCK también es muy buena, la VM esta creada en C#, pero no deja de ser buen material..
Saludos!
Cita de: x64Core en 24 Junio 2014, 04:15 AM
Mostranos al menos una 'VM polimorfica' que se encuentre en ese sitio.
La verdad, hace ya un tiempo que vengo leyendo tus posts y me resultan cada vez más irritantes (más allá de quien tenga la razón o no). Es evidente tu necesidad de "demostrar" y "desafiar" y, la verdad, no dedicaré más tiempo que el que estoy empleando para informarte sobre esta cuestión.
Cita de: Vaagish en 24 Junio 2014, 05:21 AM
VM polimorfica no vi, (tampoco busque a fondo) pero hay buena información referente al tema.. la otra información que puso MCK también es muy buena, la VM esta creada en C#, pero no deja de ser buen material..
Saludos!
Ese sitio contiene muchos sources con info para crear código polimórfico. En los otros links, hay info sobre cómo crear una VM.
Uniendo uno con lo otro tienes casi todo lo necesario para empezar.
Saludos!
Cita de: Vaagish en 24 Junio 2014, 05:21 AM
Te referis a por ejemplo las funciones de las apis? Yo tenia pensado (en un principio), leer desde el servidor una cadena por ejemplo asi:
Con eso el motor ya sabría que hacer con X cosa.. cargaría con LoadLibrary el modulo, llamaría a la función con GetProcAddress, etc, etc... luego surgió lo de los opcodes y una maquina virtual mas compleja.. es todo cuestión de probar, solo así se podrá saber la eficiencia..
Mostranos al menos una 'VM polimorfica' que se encuentre en ese sitio.
No, eso vendria a relacionarse si en el código se necesitase que las importaciones se resuelvan, yo realmente lo veo feo una implementación de
esa manera mejor resolver las funciones a usar durante la inicialización, me refiero a implementar GetModuleHandle, GetProcAddress , salvar la
direcciónes de memoria para luego usarlas.
Y lo que me refiero es a sresolver las direcciónes de memoria: http://en.wikipedia.org/wiki/Relocation_(computing)
Cita de: Vaagish en 24 Junio 2014, 05:21 AM
VM polimorfica no vi, (tampoco busque a fondo) pero hay buena información referente al tema.. la otra información que puso MCK también es muy buena, la VM esta creada en C#, pero no deja de ser buen material..
Saludos!
En primer lugar como siempre la gente confunde este tipo de terminos lo que en realidad se habla en los enlaces es acerca de emulación de
código y no una maquina virtual, para realmente decir que es una maquina virtual allí debe haber virtualización, una maquina virtual
emula incluso el hardware incluyendo la BIOS.
Noten la enorme diferencia que hay entre emulación de código y una maquina virtual. Un ejemplo claro es Bochs este es más que un
respetable emulador. Y no se extrañen, es comun mirar norteamericanos en CodeProject programando algo que nisiquiera ellos mismos
saben que es.
Cita de: MCKSys Argentina en 24 Junio 2014, 06:04 AM
La verdad, hace ya un tiempo que vengo leyendo tus posts y me resultan cada vez más irritantes (más allá de quien tenga la razón o no). Es evidente tu necesidad de "demostrar" y "desafiar" y, la verdad, no dedicaré más tiempo que el que estoy empleando para informarte sobre esta cuestión.
No sé a que viene esto, supongo que alguien esta teniendo un mal día.
Cita de: x64Core en 24 Junio 2014, 06:19 AM
En primer lugar como siempre la gente confunde este tipo de terminos lo que en realidad se habla en los enlaces es acerca de emulación de
código y no una maquina virtual, para realmente decir que es una maquina virtual allí debe haber virtualización, una maquina virtual
emula incluso el hardware incluyendo la BIOS.
entonces java no es una maquina virtual debido que nunca emula hardware sino que hace la conversión de opcode java a opcode SOhost?
Cita de: engel lex en 24 Junio 2014, 06:39 AM
entonces java no es una maquina virtual debido que nunca emula hardware sino que hace la conversión de opcode java a opcode SOhost?
Si, java corre en una maquina virtual (http://en.wikipedia.org/wiki/Java_virtual_machine), al igual que Actionscript (http://en.wikipedia.org/wiki/ActionScript_Virtual_Machine) y los demas.
Es evidente que aquí, cuando decimos Virtual Machine, nos referimos a ésto (http://en.wikipedia.org/wiki/Virtual_machine#Process_virtual_machines).
Saludos!
Cita de: engel lex en 24 Junio 2014, 06:39 AM
entonces java no es una maquina virtual debido que nunca emula hardware sino que hace la conversión de opcode java a opcode SOhost?
Java, VB6, .NET tienen enfoque de actuar como una maquina virtual eso no significa lo mismo.
creo que incluso Wikipedia resuelve tu duda.
Cita de: x64Core en 24 Junio 2014, 07:14 AM
Java, VB6, .NET tienen enfoque de actuar como una maquina virtual eso no significa lo mismo.
creo que incluso Wikipedia resuelve tu duda.
es decir que aunque sean maquina virtual java, maquina virutal action script ellos erraron en el concepto y colocaron un nombre que no es preciso para su función?
Cita de: engel lex en 24 Junio 2014, 07:15 AM
es decir que aunque sean maquina virtual java, maquina virutal action script ellos erraron en el concepto y colocaron un nombre que no es preciso para su función?
En realidad es algo ambiguo yo no creo que seria algo original escribir una entera descripción como nombre de algun software es primera
vez que lo miras?
no entendi XD siento que falta una coma para separar la 2 ideas pero no estoy seguro donde empieza la segunda XD... explícate con lo de "es ambiguo", es decir, aun cuando la descripción de java es ser una maquina virtual, no lo es?
Te digo que si es original poner una entera descripción como nombre de algún programa?