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 ) permanece igual. 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 . Esta técnica a veces la utilizan los virus informáticos , los shellcodes y los gusanos informáticos 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á carente de sentido. Para que el código funcione como antes, se añade 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 lograr un comportamiento polimórfico, el par cifrador/descifrador se muta con cada copia del código. Esto permite que existan distintas versiones de un código que funcionan todas de la misma manera. [2]
La mayoría de los programas antivirus y 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 este tipo de software reconozca el código ofensivo porque muta constantemente.
Los programadores malintencionados han intentado proteger su código cifrado de esta estrategia de escaneo de virus reescribiendo el motor de descifrado no cifrado (y la carga cifrada resultante) cada vez que se propaga el virus o gusano. El software antivirus utiliza un sofisticado análisis de patrones para encontrar patrones subyacentes dentro de las diferentes mutaciones del motor de descifrado, con la esperanza de detectar de forma fiable dicho malware .
La emulación se puede utilizar para vencer la ofuscación polimórfica al permitir que el malware se desmantele en un entorno virtual antes de utilizar otros métodos, como el escaneo de firmas tradicional. Este entorno virtual a veces se denomina sandbox . El polimorfismo no protege al virus contra dicha emulación si la carga útil descifrada permanece igual 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 nunca 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. Un virus polimórfico más conocido fue creado en 1992 por el hacker Dark Avenger como un medio para evitar el reconocimiento de patrones del software antivirus. Un virus polimórfico común y muy virulento es el infector de archivos Virut .