- Polimorfismo (virus informáticos)
-
Polimorfismo (virus informáticos)
Para otros usos del termino, véase Polimorfismo
En relación a los virus informáticos un código polimórfico o polimorfismo es aquel que se sirve de un motor polimórfico para mutarse a si mismo mientras mantiene su algoritmo original intacto. Esta técnica es utilizada comúnmente por virus informáticos y gusanos para ocultar su presencia.
Muchos productos antivirus y sistemas de detección de intrusiones intentan localizar programas maliciosos mediante búsquedas en los archivos de la computadora y en los paquetes enviados a través de una red informática. Si ese software encuentra patrones de código que coinciden con una amenaza conocida toman los pasos apropiados para neutralizar esa amenaza.
Los algoritmos polimórficos dificultan la detección de ese código malicioso modificandolo constantemente.
En la mayoría de casos los programas maliciosos que usan de técnicas de polimorfismo lo hacen conjuntamente con técnicas de cifrado, en esos casos el programador malicioso usa cifrado para evitar la detección de la mayor parte del código, y técnicas de polimorfismo para modificar la propia rutina de descifrado.
El primer caso de virus informático polimórfico conocido fue el 1260 creado por Mark Washburn en 1990.
Otro virus informático mas conocido fue el creado por Dark Avenger en 1992, Dark Avenger publicaría mas tarde su famosos Mutation engine, un motor polimórfico que muchos otros creadores de virus usarían mas tarde en sus creaciones.
Ejemplo simple
Un algoritmo que usa, por ejemplo, las variables A y B, pero no la variable C, puede permanecer intacto incluso tras añadir grandes cantidades de código que modifiquen la variable C
Algoritmo original:
Inicio: GOTO Codigo_De_Descifrado
Cifrado: ... Mucho código cifrado ...
Codigo_De_Descifrado: A = Cifrado Loop: B = *A B = B XOR ClaveDeDescifrado *A = B A = A + 1 GOTO Loop IF NOT A = Codigo_De_Descifrado GOTO Cifrado
ClaveDeDescifrado: numero_aleatorio
El mismo algoritmo con código innecesario que modifica la variable C:
Inicio: GOTO Codigo_De_Descifrado
Cifrado: ... Mucho código cifrado ...
Codigo_De_Descifrado: A = Cifrado C = 3 Loop: B = *A C = C + B B = B XOR ClaveDeDescifrado *A = B C = C * A A = A + 1 C = C + 20 GOTO Loop IF NOT A = Codigo_De_Descifrado C = A + C C = 2 + B GOTO Cifrado
ClaveDeDescifrado: numero_aleatorio
El código dentro de la sección "Cifrado" puede posteriormente buscar el código entre "Codigo_De_Descifrado" y "ClaveDeDescifrado" eliminando todo el código que altere la variable C. Antes de que el algoritmo de cifrado sea usado de nuevo, puede añadir de nuevo código que afecte a a la variable C, o incluso modificar el código del algoritmo por nuevo código con la misma finalidad.
Normalmente el creador del virus informático utiliza una clave nula (con valor cero) en la primera generación del virus, esto hace que sea todo mas fácil para el desarrollador ya que con esta clave el virus no se encuentra cifrado. Luego para las siguientes infecciones puede implementar una clave incremental o aleatoria.
Referencias
- Diomidis Spinellis. Reliable identification of bounded-length viruses is NP-complete. IEEE Transactions on Information Theory, 49(1):280–284, January 2003. doi:10.1109/TIT.2002.806137
Categoría: Programas maliciosos
Wikimedia foundation. 2010.