Polymorfismus počítačových virů ( řecky πολυ- - mnoho + řecky μορφή - tvar, vzhled) je speciální technika používaná autory malwaru ke snížení míry detekce malwaru klasickými antivirovými produkty .
Polymorfismus spočívá v generování programového kódu škodlivého programu „za běhu“ – již během provádění, přičemž samotná procedura, která kód generuje, také nemusí být konstantní a mění se s každou novou infekcí. Změny kódu je často dosaženo přidáním příkazů, které nemění algoritmus programového kódu (například příkaz NOP ).
Neustálá úprava kódu malwaru neumožňuje vytvořit univerzální podpis pro daný vzorek malwaru. K dnešnímu dni antivirový software používá technologie, jako je heuristická analýza a emulace , aby čelil této metodě .
První známý polymorfní virus napsal Mark Washburn. Virus, který se jmenoval 1260, byl vytvořen v roce 1990. Známější polymorfní virus byl představen v roce 1992 bulharským crackerem Dark Avenger (pseudonym), který vytvořil MtE (Mutation Engine) .
K dnešnímu dni je známo velké množství škodlivých programů , které používají polymorfismus jako prostředek ke zkomplikování analýzy a vytvoření podpisu.
Algoritmus, který používá proměnné A a B, ale nepoužívá proměnnou C, může stále fungovat, i když přidáte mnoho různých příkazů, které změní obsah proměnné C.
Zdrojový algoritmus:
Start: GOTO Decryption_Code Zašifrováno: ... spousta šifrovaného kódu ... Dešifrovací_kód: A = Šifrováno smyčka: B = *A B=B XOR CryptoKey *A=B A=A+1 GOTO Loop IF NOT A = Decryption_Code GOTO Zašifrováno Kryptoklíč: nějaké_náhodné_čísloStejný algoritmus, ale s přidáním operací, které mění proměnnou C:
Start: GOTO Decryption_Code Zašifrováno: ... spousta šifrovaného kódu ... Dešifrovací_kód: C=C+1 A = Šifrováno smyčka: B = *A C=3214*A B=B XOR CryptoKey *A=B C=1 C=A+B A=A+1 GOTO Loop IF NOT A = Decryption_Code C=C^2 GOTO Zašifrováno Kryptoklíč: nějaké_náhodné_čísloKód uvnitř sekce „Encrypted“ pak dokáže zpracovat kód mezi sekcemi „Decryption_Code“ a „CryptoKey“ a odstranit „nepotřebné“ operace, které mění proměnnou C. Než bude kryptografické zařízení znovu použito, může přidat nové „nepotřebné“ operace které změní proměnnou C, nebo dokonce úplně změní algoritmus, ale tak, že bude vykonávat stejné funkce.
Jedním z nejjednodušších způsobů, jak zašifrovat hlavní část viru, je zašifrovat jej bajt po bajtu pomocí operace XOR.
mov cx, délka_kódu mov si, offset begin_code mov al, xor_key _smyčka: xor [si+cx], al ;dekódovací bajt loop _loop ;zabere další bajt jmp si ;... ;... počáteční_kód: ;zde je zašifrovaná část těla viru ;je to ona, kdo je zodpovědný za infikování nových souborů a vytvoření nové dešifrovací procedury ;zároveň musí být přepsána stejná část těla viru v novém souboru ;šifrované, ale s jiným klíčemNový postup dešifrování lze vytvořit pomocí následujících jednoduchých kroků:
Řekněme
přidat eax, 5lze nahradit
subeax, -5a kód
mov ax, bxlze nahradit
stisknout bx pop sekeraÚčinná ochrana proti polymorfnímu malwaru vyžaduje použití proaktivních metod antivirové ochrany , jako je heuristická analýza a emulace . Heuristická analýza a emulace však nemohou zaručit 100% detekci polymorfního malwaru , a proto se doporučuje použití HIPS .