A számítógépes vírusok polimorfizmusa ( görögül πολυ- - sok + görögül μορφή - alak, megjelenés) egy speciális technika, amelyet a rosszindulatú programok szerzői alkalmaznak a rosszindulatú programok klasszikus víruskereső termékek általi észlelési arányának csökkentésére .
A polimorfizmus abban áll, hogy egy rosszindulatú program programkódját "menet közben" generálják - már a végrehajtás során, miközben magának a kódot előállító eljárásnak sem kell állandónak lennie, és minden újabb fertőzéssel változik. A kód megváltoztatását gyakran olyan utasítások hozzáadásával érik el, amelyek nem változtatják meg a programkód algoritmusát (például a NOP utasítás ).
A rosszindulatú programkód folyamatos módosítása nem teszi lehetővé egy adott kártevő-mintához univerzális aláírás létrehozását. A víruskereső szoftverek a mai napig olyan technológiákat használnak, mint a heurisztikus elemzés és az emuláció e módszer ellen .
Az első ismert polimorf vírust Mark Washburn írta. Az 1260-nak nevezett vírust 1990-ben hozták létre. Egy ismertebb polimorf vírust 1992-ben mutatott be a bolgár Dark Avenger cracker (álnév), aki megalkotta az MtE-t (Mutation Engine) .
A mai napig számos rosszindulatú program ismert , amelyek polimorfizmust használnak az elemzés bonyolítására és az aláírás létrehozására.
Egy algoritmus, amely az A és B változókat használja, de nem használja a C változót, akkor is működhet, ha sok különböző parancsot ad hozzá, amelyek megváltoztatják a C változó tartalmát.
Forrás algoritmusa:
Rajt: GOTO Decryption_Code Titkosított: ... sok titkosított kód ... Decryption_Code: A = Titkosított hurok: B = *A B=B XOR CryptoKey *A=B A=A+1 GOTO Loop IF NOT A = Decryption_Code GOTO Titkosítva CryptoKey: valamilyen_véletlen_számUgyanaz az algoritmus, de olyan műveletek hozzáadásával, amelyek megváltoztatják a C változót:
Rajt: GOTO Decryption_Code Titkosított: ... sok titkosított kód ... Decryption_Code: C=C+1 A = Titkosított hurok: 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 Titkosítva CryptoKey: valamilyen_véletlen_számA „Titkosított” részben lévő kód ezután feldolgozhatja a „Decryption_Code” és „CryptoKey” szakaszok közötti kódot, és eltávolíthatja a „felesleges” műveleteket, amelyek megváltoztatják a C változót. Mielőtt a kriptográfiai eszközt újra felhasználnák, új „felesleges” műveleteket adhat hozzá. amelyek megváltoztatják a C változót, vagy akár teljesen megváltoztatják az algoritmust, de úgy, hogy ugyanazokat a funkciókat látja el.
A vírus törzsének titkosításának egyik legegyszerűbb módja, ha bájtonként titkosítjuk az XOR művelettel.
mov cx, code_length mov si, offset start_code mov al, xor_key _hurok: xor [si+cx], al ;dekódoló bájt loop _loop ;vegye a következő bájtot jmp si ;... ;... kezdőkód: ;itt van a vírus testének titkosított része ; ő a felelős az új fájlok megfertőzéséért és egy új visszafejtési eljárás kialakítása ;ugyanakkor az új fájl vírustörzsének ugyanazt a részét kell átírni ;titkosított, de más kulccsalÚj visszafejtési eljárás a következő egyszerű lépésekkel hozható létre:
Mondjuk
add eax, 5helyettesíthető
subeax, -5és a kódot
mov ax, bxhelyettesíthető
nyomja meg a bx-et pop baltaA polimorf kártevők elleni hatékony védelem proaktív vírusvédelmi módszerek , például heurisztikus elemzés és emuláció használatát igényli . A heurisztikus elemzés és emuláció azonban nem garantálja a polimorf kártevők 100%-os észlelését, ezért a HIPS használata javasolt .