Software-ul de tip antivirus și antimalware modern este capabil să detecteze cu exactitate fișierele care prezintă amenințări, conform caracteristicilor binare ale acestora, ceea ce în termeni de specialitate poartă numele de semnătură digitală. Singurul impediment al detectării de amenințări este varietatea formelor pe care un virus le poate lua și, mai ales, complexitatea schimbării acestora.
În acest articol am să vorbesc despre gradul de complexitate în ceea ce privește capacitatea de automascare a virușilor, adică, despre virușii oligomorfi, polimorfi și metamorfi. Totodată am să analizez din aceste puncte de vedere de ce virușii devin tot mai greu de detectat și la ce ne putem aștepta pe viitor.
Complexitatea deghizării/ mascării/ ascunderii virușilor informatici
Una dintre funcțiile fundamentale ale virușilor moderni este capacitatea de ascundere a codului malițios astfel încât aceștia să nu poată fi detectați de programele de antivirus.
Cu cât codul sursă al virusului este transformat în mai multe forme diferite între ele, dar care realizează (aproape) aceleași instrucțiuni, și cu cât fiecare dintre formele luate sunt mai complexe în arhitectură și caracteristici, cu atât scad și șansele (uneori fac imposibilă) ca virusul să fie detectat, deși poate acesta a fost deja identificat iar semnătura digitală a acestuia a fost adăugat în baza de date a unui program de antivirus.
Această transformare a codului sursă de la o formă la alta poartă numele de morfologie. În funcție de tipul morfologiei, viruși se clasifică astfel:
- Oligomorfi (oligo = element de compunere cu semnificația „mic”, „insuficient”, „sărac”, „puțin numeros”);
- Polimorfi (poli = element de compunere care înseamnă „mai mulți”, „mai multe”, „multiplu”);
- Metamorfi (meta = element de compunere cu semnificația „schimbare”, „transformare”, „transpoziție”, „transfer”).
Viruși oligomorfi
Au un număr restrâns și stabil de forme pe care codul malițios le poate lua; cu alte cuvinte răspândirea virusului de pe un sistem pe altul se face în mod identic sau aproape identic. Odată ce un astfel de virus este identificat de către companiile de programe antivirus, semnătura digitală a acestuia intră în baza de date cu semnături de viruși, iar antiviruși pot detecta prezența acestuia încă dinainte de executare.
Având un grad redus de mascare, amenințările cu viruși oligomorfi sunt periculoase doar dacă virusul este nou și nu a fost vizat de către compania producătoare de antivirus, în caz contrar, existența unui antivirus cu semnătura digitală a acestuia va bloca complet virusul, sistemul rămânând neafectat.
Viruși polimorfi
Acest tip de viruși sunt programați pentru a se multiplica într-un mod unic la fiecare iterare, în unele cazuri schimbându-și nu doar semnătura digitală, dar și forma propriu zisă. Modalitatea de a se transmite identic de la o sursă la alta, în acest fel rămânând nedetectați, este de regulă prin criptarea codului sursă.
Odată ce semnătura digitală a unui virus polimorfic este adăugat într-un program antivirus, acesta nu va putea detecta altă copie a virusului – pentru că acesta va avea o formă fie foarte diferită, fie unică. Asta până în momentul în care executabilul ce conține virusul în formă criptată execută decriptarea codului malițios, care deconspiră semnătura digitală, făcându-l detectabil de către antivirus.
Așadar, acest tip de virus nu este detectabil la simpla scanare a fișierelor, ci doar în momentul când acesta este rulat în memorie și finalizează (sau este aproape să finalizeze) decriptarea virusului, iar uneori chiar abia după execuție.
Antivirusul poate bloca acest tip de amenințare doar prin analizarea comportamentului de execuție al unui program care deja rulează în memorie sau conform unor anumite tipare de execuție specifice instrucțiunilor făcute de virus. În acest caz, antivirusul nu detectează 100% virusul, ci doar atenționează că acesta poate avea un comportament periculos.
Tot acest tip de virus mai poate lua forme diferite în însăși structura codului malițios, modificându-și codul sursă într-un mod care să nu afecteze funcționalitatea, de exemplu prin adăugarea de șiruri de octeți inutili (garbage), comprimarea ș.a. Acest lucru va reduce gradul de detectabilitate pentru că chiar după decriptare, executabilul rezultat va avea o semnătură digitală diferită față de celelalte versiuni ale aceluiași virus.
Viruși metamorfi
Acest tip de viruși sunt cei care au cel mai înalt grad de invizibilitate pentru programele de antivirus. Aceștia sunt unici prin însăși natura lor, adică multiplicarea într-o nouă formă se face prin modificarea elementelor care alcătuiesc virusul, deci semnătura digitală a fiecărei iterație de multiplicare este unică.
În timp ce virușii polimorfi ascund un același codul malițios (uneori cu anumite variații, însă care se aseamănă într-o mare măsură între ele), deci au o semnătură digitală care îi pot da de gol, virușii metamorfi se multiplică prin reprogramarea internă, ceea ce va duce la versiuni unice, cu funcționalități diferite de la o versiune la alta.
Reprogramarea internă înseamnă modificarea codului sursă într-un mod care să nu ducă la alterarea funcțiilor pentru care a fost conceput, drept pentru care, acesta nu doar că are o semnătură digitală unică pentru fiecare reprogramare, dar poate avea și un comportament diferit, ceea ce îl face dacă nu imposibil de detectat prin analizarea comportamentului de către un antivirus, atunci cu siguranță foarte dificil de detectat.
Exemple de bază de reprogramări sunt permutarea codului, redenumirea regiștrilor și elementelor interne, optimizarea codului (reducerea în dimensiune cu o anumită rată de compresie), extensia codului (adăugarea de conținut cu valoare nulă, garbage code), iar lista exemplelor poate continua și cu unele mult mai avansate: emulație, virtualizare ș.a.
Mai mult decât atât, codul metamorf se poate specializa în versiuni cu funcții și caracteristici diferite, de exemplu în funcție de anumite condiții ale sistemului infectat în mod curent, astfel încât versiunile noi de viruși metamorfi să fie mai bine adaptabili la barierele de protecție întâlnite pe astfel de sisteme – un fel de auto selecție artificială.
Așa cum reiese din aceste informații, astfel de viruși sunt foarte greu de detectat oricare ar fi stagiul de existență pe calculator: neexecutat, în curs de executare sau executat. Totodată, este și mult mai greu de programat comparativ cu cei polimorfi, și indiscutabil mult mai complecși decât cei oligomorfi.
De ce virușii devin din ce în ce mai greu de detectat
Viruși informatici au migrat de la oligomorfi, la polimorfi, apoi la metamorfi, drept urmare și programele de antivirus au având nevoie atât de algoritmi mai complecși pentru detecția acestora, cât și de resurse hardware de procesare și memorare RAM mai extinse, însă chiar și așa, rezultatul nu este întotdeauna ce succes, amenințări deja descoperite și adăugate în baza de date cu semnături de viruși executându-se nedetectabili.
Ținând cont de faptul că virușii devin nu doar mai complecși dar și din ce în ce mai variați, o prognoză legată de programele de antivirus ar fi că acestea vor fi nevoite să se bazeze pe algoritmi mult mai complicați de detecție, în special care să se adapteze în timp real la starea programelor care rulează în memoria internă.
Cum „Nici o problemă nu poate fi rezolvată la același nivel de cunoștințe la care a fost creată” (Albert Einstein), modalitatea de combatere a viitorilor viruși polimorfi și metamorfi nu poate să fie alta decât inteligența artificială.