stringtranslate.com

código polimórfico

En informática, el código polimórfico es un código que utiliza un motor polimórfico para mutar manteniendo intacto el algoritmo original ; es decir, el código cambia cada vez que se ejecuta, pero la función del código (su semántica ) sigue siendo la misma. Por ejemplo, las expresiones matemáticas simples 3+1 y 6-2 logran el mismo resultado, pero se ejecutan con un código de máquina diferente en una CPU . En ocasiones, los virus informáticos , los códigos shell y los gusanos informáticos utilizan esta técnica para ocultar su presencia. [1]

El cifrado es el método más común para ocultar código. Con el cifrado, el cuerpo principal del código (también llamado carga útil ) se cifra y parecerá que no tiene sentido. Para que el código funcione como antes, se agrega una función de descifrado al código. Cuando se ejecuta el código , esta función lee la carga útil y la descifra antes de ejecutarla a su vez.

El cifrado por sí solo no es polimorfismo. Para obtener un comportamiento polimórfico, el par cifrador/descifrador muta con cada copia del código. Esto permite diferentes versiones de algún código que funcionan igual. [2]

Código malicioso

La mayoría del software antivirus y los sistemas de detección de intrusos (IDS) intentan localizar códigos maliciosos buscando en archivos informáticos y paquetes de datos enviados a través de una red informática . Si el software de seguridad encuentra patrones que corresponden a virus o gusanos informáticos conocidos, toma las medidas adecuadas para neutralizar la amenaza. Los algoritmos polimórficos dificultan que dicho software reconozca el código infractor porque muta constantemente.

Los programadores maliciosos han tratado de proteger su código cifrado de esta estrategia de escaneo de virus reescribiendo el motor de descifrado no cifrado (y la carga útil cifrada resultante) cada vez que se propaga el virus o gusano. El software antivirus utiliza un análisis de patrones sofisticado para encontrar patrones subyacentes dentro de las diferentes mutaciones del motor de descifrado, con la esperanza de detectar dicho malware de manera confiable .

La emulación se puede utilizar para vencer la ofuscación polimórfica al permitir que el malware se autodefienda en un entorno virtual antes de utilizar otros métodos, como el escaneo de firmas tradicional. A este tipo de entorno virtual a veces se le llama sandbox . El polimorfismo no protege al virus contra dicha emulación si la carga útil descifrada sigue siendo la misma independientemente de la variación en el algoritmo de descifrado. Se pueden utilizar técnicas de código metamórfico para complicar aún más la detección, ya que el virus puede ejecutarse sin tener bloques de código identificables en la memoria que permanezcan constantes de una infección a otra.

El primer virus polimórfico conocido fue escrito por Mark Washburn. El virus, llamado 1260 , fue escrito en 1990. En 1992, el hacker Dark Avenger creó un virus polimórfico más conocido como una forma de evitar el reconocimiento de patrones del software antivirus. Un virus polimórfico común y muy virulento es el infectador de archivos Virut .

Ejemplo

Este ejemplo no es realmente un código polimórfico, pero servirá como introducción al mundo del cifrado mediante el operador XOR . Por ejemplo, en un algoritmo que utiliza las variables A y B pero no la variable C, podría haber una gran cantidad de código que cambie C, y no tendría ningún efecto en el algoritmo en sí, permitiendo que se cambie infinitamente y sin atención. en cuanto a cuál será el producto final.

Comenzar:GOTO Código_descifradoCifrado:...un montón de código cifrado...Código_descifrado:C = C + 1A = cifradoBucle:B = *AC = 3214 * UnB = B clave criptográfica XOR*A = BC = 1C = A + BUna = Una + 1GOTO Bucle SI NO ES A = Código_descifradoC = C^2IR A cifradoClave criptográfica:algún_número_aleatorio

El código cifrado es la carga útil. Para hacer diferentes versiones del código, en cada copia cambiarán las líneas basura que manipulan C. El código dentro de "Cifrado" ("mucho código cifrado") puede buscar el código entre Decryption_Code y CryptoKey y cada algoritmo en busca de código nuevo que haga lo mismo. Normalmente, el codificador utiliza una clave cero (por ejemplo; A x o 0 = A) para la primera generación del virus, lo que le facilita las cosas al codificador porque con esta clave el código no está cifrado. Luego, el codificador implementa un algoritmo de clave incremental o aleatorio.

Ver también

Referencias

  1. ^ Raghunathan, Srinivasan (2007). Protección del software antivirus frente a ataques virales (M.Sc.). Universidad del estado de Arizona. CiteSeerX  10.1.1.93.796 .
  2. ^ Wong, ala; Sello, M. (2006). "Búsqueda de motores metamórficos". Revista de Virología Informática . 2 (3): 211–229. CiteSeerX 10.1.1.108.3878 . doi :10.1007/s11416-006-0028-7. S2CID  8116065.