El polimorfismo de virus informáticos ( griego πολυ- - muchos + griego μορφή - forma, apariencia) es una técnica especial utilizada por los autores de malware para reducir la tasa de detección de malware por parte de los productos antivirus clásicos .
El polimorfismo consiste en generar el código de programa de un programa malicioso "sobre la marcha", ya durante la ejecución, mientras que el propio procedimiento que genera el código tampoco tiene que ser constante y cambia con cada nueva infección. A menudo, cambiar el código se logra agregando sentencias que no cambian el algoritmo del código del programa (por ejemplo, la sentencia NOP ).
La modificación constante del código de malware no permite crear una firma universal para una muestra de malware dada. Hasta la fecha, el software antivirus utiliza tecnologías como el análisis heurístico y la emulación para contrarrestar este método .
El primer virus polimórfico conocido fue escrito por Mark Washburn. El virus, que se llamó 1260, fue creado en 1990. Un virus polimórfico más conocido fue introducido en 1992 por el cracker búlgaro Dark Avenger (seudónimo), quien creó el MtE (Motor de mutación) .
Hasta la fecha, se conocen una gran cantidad de programas maliciosos que utilizan el polimorfismo como medio para complicar el análisis y crear una firma.
Un algoritmo que usa las variables A y B, pero no usa la variable C, aún puede funcionar incluso si agrega muchos comandos diferentes que cambiarán el contenido de la variable C.
Algoritmo de origen:
comienzo: GOTO Código de descifrado Encriptado: ... mucho código encriptado ... Código_descifrado: A = Cifrado círculo: B = *A Clave criptográfica B=B XOR *A=B A=A+1 Bucle GOTO SI NO A = Código_descifrado GOTO cifrado Clave criptográfica: algún_número_aleatorioEl mismo algoritmo, pero con la adición de operaciones que cambian la variable C:
comienzo: GOTO Código de descifrado Encriptado: ... mucho código encriptado ... Código_descifrado: C=C+1 A = Cifrado círculo: B = *A C=3214*A Clave criptográfica B=B XOR *A=B C=1 C=A+B A=A+1 Bucle GOTO SI NO A = Código_descifrado C=C^2 GOTO cifrado Clave criptográfica: algún_número_aleatorioEl código dentro de la sección "Cifrado" puede procesar el código entre las secciones "Decryption_Code" y "CryptoKey" y eliminar las operaciones "innecesarias" que cambian la variable C. Antes de reutilizar el dispositivo criptográfico, puede agregar nuevas operaciones "innecesarias". que cambian la variable C, o incluso cambian completamente el algoritmo, pero para que realice las mismas funciones.
Una de las formas más sencillas de cifrar el cuerpo principal de un virus es cifrarlo byte a byte mediante la operación XOR.
mov cx, código_longitud mov si, compensar código_comienzo mov al, xor_key _círculo: xor [si+cx], al ;byte decodificado loop _loop ;tomar el siguiente byte jmp si ;... ;... código_comienzo: ;aquí está la parte encriptada del cuerpo del virus ;es ella quien se encarga de infectar nuevos archivos ; y la formación de un nuevo procedimiento de descifrado ;al mismo tiempo, se debe reescribir la misma parte del cuerpo del virus en el nuevo archivo ;cifrado, pero con una clave diferenteSe puede formar un nuevo procedimiento de descifrado siguiendo los siguientes pasos simples:
Digamos
añadir eax, 5puede ser reemplazado por
subeje, -5y el codigo
hacha de movimiento, bxpuede ser reemplazado por
empujar bx hacha popLa protección eficaz contra el malware polimórfico requiere el uso de métodos de protección antivirus proactivos , como el análisis heurístico y la emulación . Sin embargo, el análisis heurístico y la emulación no pueden garantizar la detección al 100 % de malware polimórfico y, por lo tanto, se recomienda el uso de HIPS .