Datorviruspolymorfism ( grekiska πολυ- - många + grekiska μορφή - form, utseende) är en speciell teknik som används av upphovsmän till skadlig programvara för att minska upptäckten av skadlig programvara av klassiska antivirusprodukter .
Polymorfism består i att generera programkoden för ett skadligt program "on the fly" - redan under exekvering, medan själva proceduren som genererar koden inte heller behöver vara konstant och ändras vid varje ny infektion. Ofta uppnås ändring av koden genom att lägga till satser som inte ändrar programkodens algoritm (till exempel NOP- satsen ).
Konstant modifiering av skadlig kod tillåter inte att skapa en universell signatur för ett givet skadlig program. Hittills använder antivirusprogram tekniker som heuristisk analys och emulering för att motverka denna metod .
Det första kända polymorfa viruset skrevs av Mark Washburn. Viruset, som kallades 1260, skapades 1990. Ett mer välkänt polymorft virus introducerades 1992 av den bulgariska krackaren Dark Avenger (pseudonym), som skapade MtE (Mutation Engine) .
Hittills är ett stort antal skadliga program kända som använder polymorfism som ett sätt att komplicera analys och skapa en signatur.
En algoritm som använder variablerna A och B, men som inte använder variabel C, kan fortfarande fungera även om du lägger till många olika kommandon som kommer att ändra innehållet i variabel C.
Källalgoritm:
Start: GOTO Decryption_Code Krypterad: ... massor av krypterad kod ... Dekrypteringskod: A = Krypterad slinga: B = *A B=B XOR Kryptonyckel *A=B A=A+1 GOTO Loop IF NOT A = Decryption_Code GÅ TILL Krypterad Kryptonyckel: något_slumpmässigt_nummerSamma algoritm, men med tillägg av operationer som ändrar C-variabeln:
Start: GOTO Decryption_Code Krypterad: ... massor av krypterad kod ... Dekrypteringskod: C=C+1 A = Krypterad slinga: B = *A C=3214*A B=B XOR Kryptonyckel *A=B C=1 C=A+B A=A+1 GOTO Loop IF NOT A = Decryption_Code C=C^2 GÅ TILL Krypterad Kryptonyckel: något_slumpmässigt_nummerKoden i avsnittet "Krypterad" kan sedan bearbeta koden mellan avsnitten "Decryption_Code" och "CryptoKey" och ta bort "onödiga" operationer som ändrar variabeln C. Innan den kryptografiska enheten återanvänds kan den lägga till nya "onödiga" operationer som ändrar variabel C, eller till och med helt ändrar algoritmen, men så att den kommer att utföra samma funktioner.
Ett av de enklaste sätten att kryptera huvuddelen av ett virus är att kryptera det byte för byte med XOR-operationen.
mov cx, code_length mov si, offset start_code mov al, xor_key _slinga: xor [si+cx], al ;avkoda byte loop _loop ;ta nästa byte jmp si ;... ;... start_code: ;här är den krypterade delen av virusets kropp ;det är hon som är ansvarig för att infektera nya filer och bildandet av ett nytt dekrypteringsförfarande ;samtidigt måste samma del av viruskroppen i den nya filen skrivas om ;krypterad, men med en annan nyckelEn ny dekrypteringsprocedur kan skapas med följande enkla steg:
Låt oss säga
lägg till eax, 5kan ersättas av
subeax, -5och koden
mov yxa, bxkan ersättas av
tryck bx pop yxaEffektivt skydd mot polymorf skadlig kod kräver användning av proaktiva antivirusskyddsmetoder , såsom heuristisk analys och emulering . Heuristisk analys och emulering kan dock inte garantera 100 % upptäckt av polymorf skadlig kod , och därför rekommenderas användning av HIPS .