Polimorfismo (virus informáticos)

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

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 sí 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 modificándolo 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 1972 creado por Mark Washburn en 1990. Otros virus informáticos de esta clase son el creado por Dark Avenger en 1992 (Dark Avenger publicaría más tarde su famosos Mutation engine, un motor polimórfico que muchos otros creadores de virus usarían más tarde en sus creaciones), y ILoveYou en 2000.

Ejemplo simple[editar]

Un algoritmo que usa, por ejemplo, las variables A y ß, 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
    ß = ß XOR ClaveDeDescifrado
    *A = ß
    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 XOR ClaveDeDescifrado
    *A = ß
    C = C * A
    A = A + 1
    C = C + 20
    GOTO Loop IF NOT A = Codigo_De_Descifrado
    C = A + C
    C = 2 + ß
    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 más 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[editar]