Polimorfismul virusului informatic ( greacă πολυ- - many + greacă μορφή - formă, aspect) este o tehnică specială folosită de autorii de malware pentru a reduce rata de detectare a malware-ului de către produsele antivirus clasice .
Polimorfismul constă în generarea „din mers” a codului de program al unui program rău intenționat – deja în timpul execuției, în timp ce procedura în sine care generează codul nu trebuie să fie constantă și se modifică cu fiecare nouă infecție. Adesea, schimbarea codului se realizează prin adăugarea de instrucțiuni care nu modifică algoritmul codului programului (de exemplu, instrucțiunea NOP ).
Modificarea constantă a codului malware nu permite crearea unei semnături universale pentru un anumit eșantion de malware. Până în prezent, software-ul antivirus utilizează tehnologii precum analiza euristică și emularea pentru a contracara această metodă .
Primul virus polimorf cunoscut a fost scris de Mark Washburn. Virusul, care a fost numit 1260, a fost creat în 1990. Un virus polimorf mai cunoscut a fost introdus în 1992 de către crackerul bulgar Dark Avenger (pseudonim), care a creat MtE (Motorul de mutație) .
Până în prezent, sunt cunoscute un număr mare de programe rău intenționate care folosesc polimorfismul ca mijloc de a complica analiza și de a crea o semnătură.
Un algoritm care folosește variabilele A și B, dar nu folosește variabila C, poate funcționa în continuare chiar dacă adăugați multe comenzi diferite care vor schimba conținutul variabilei C.
Algoritm sursă:
start: GOTO Cod_decriptare Criptat: ... o mulțime de cod criptat ... Cod_decriptare: A = criptat buclă: B = *A B=B XOR CryptoKey *A=B A=A+1 GOTO Loop IF NOT A = Cod_Decriptare GOTO criptat CryptoKey: un număr_aleatoriuAcelași algoritm, dar cu adăugarea de operații care modifică variabila C:
start: GOTO Cod_decriptare Criptat: ... o mulțime de cod criptat ... Cod_decriptare: C=C+1 A = criptat buclă: B = *A C=3214*A B=B XOR CryptoKey *A=B C=1 C=A+B A=A+1 GOTO Loop IF NOT A = Cod_Decriptare C=C^2 GOTO criptat CryptoKey: un număr_aleatoriuCodul din interiorul secțiunii „Encrypted” poate procesa apoi codul dintre secțiunile „Decryption_Code” și „CryptoKey” și poate elimina operațiunile „inutile” care modifică variabila C. Înainte ca dispozitivul criptografic să fie reutilizat, acesta poate adăuga noi operațiuni „inutile” care schimbă variabila C, sau chiar schimbă complet algoritmul, dar astfel încât să îndeplinească aceleași funcții.
Una dintre cele mai ușoare moduri de a cripta corpul principal al unui virus este să-l criptezi octet cu octet folosind operația XOR.
mov cx, lungime_cod mov si, offset begin_code mov al, xor_key _buclă: xor [si+cx], al ;decode byte loop _loop ;luați următorul octet jmp si ;... ;... begin_code: ;aici este partea criptată a corpului virusului ;ea este cea care este responsabilă pentru infectarea fișierelor noi și formarea unei noi proceduri de decriptare ; în același timp, aceeași parte a corpului virusului din noul fișier trebuie rescrisă ;criptat, dar cu o cheie diferităO nouă procedură de decriptare poate fi formată folosind următorii pași simpli:
Sa spunem
adăugați eax, 5poate fi înlocuit cu
subax, -5si codul
mov ax, bxpoate fi înlocuit cu
împinge bx pop toporProtecția eficientă împotriva programelor malware polimorfe necesită utilizarea unor metode proactive de protecție antivirus , cum ar fi analiza euristică și emularea . Cu toate acestea, analiza euristică și emularea nu poate garanta detectarea 100% a programelor malware polimorfe și, prin urmare, se recomandă utilizarea HIPS .