malware polimorficzny
| Po angielsku | polymorphic malware |
|---|---|
| Którą formą pisać | obie formy Obie formy są w obiegu. Przy pierwszym wystąpieniu pisz „polski termin (english term)”, dalej sam polski. |
| Inne formy | złośliwe oprogramowanie polimorficzne · kod polimorficzny · wirus polimorficzny |
| Kategoria | Złośliwe oprogramowanie |
Malware polimorficzny (polymorphic malware) to złośliwe oprogramowanie (malware), które przy kolejnych infekcjach zmienia swoją postać, zachowując to samo działanie. Zwykle robi to przez ponowne zaszyfrowanie właściwego kodu i wygenerowanie nowego, inaczej wyglądającego dekryptora [1]. MITRE opisuje kod polimorficzny jako oprogramowanie zdolne zmieniać swój ślad w trakcie działania, tak że każde wykonanie daje inną wersję o tym samym celu [2]. Celem jest ucieczka przed wykrywaniem opartym na sygnaturach [2].
Jak działa
Program antywirusowy w najprostszej postaci szuka w plikach znanych sygnatur, czyli skrótów albo charakterystycznych ciągów bajtów. Sekurak wyjaśnia, że nawet najdrobniejsza zmiana w kodzie złośliwego oprogramowania, na przykład nowy wariant albo malware polimorficzny, sprawia, że stara sygnatura nie wykryje nowej wersji [5]. Polimorfizm robi z tej słabości metodę.
Według przeglądu Sharmy i Sahaya polimorficzny malware składa się z dwóch części: dekryptora i zaszyfrowanego ciała [1]. Przy każdym rozmnożeniu tzw. silnik mutacji tworzy nowy dekryptor i dołącza go do zaszyfrowanego ciała, co daje nowy wariant [1]. Nowe dekryptory powstają przez techniki zaciemniania kodu: wstawianie martwego kodu, zamianę rejestrów, zmianę kolejności podprogramów i podmianę instrukcji na równoważne [1]. Autorzy piszą, że w ten sposób można wygenerować miliony dekryptorów [1].
Przebieg jednej infekcji pokazuje schemat poniżej.
Odmiany
Przegląd Sharmy i Sahaya porządkuje techniki ukrywania w kolejne generacje, od najprostszej do najtrudniejszej do wykrycia [1].
| Odmiana | Co się zmienia | Słaby punkt |
|---|---|---|
| Szyfrowany | tylko klucz, dekryptor stały [1] | sygnatura dekryptora [1] |
| Oligomorficzny | dekryptor z niewielkiego zestawu [1] | sygnatury wszystkich dekryptorów [1] |
| Polimorficzny | dekryptor generowany na nowo [1] | emulacja ujawnia odszyfrowane ciało [1] |
| Metamorficzny | całe ciało zamiast dekryptora [1] | trudny do stworzenia bez wzrostu rozmiaru [1] |
Przykładem odmiany oligomorficznej jest Win95/Memorial, który potrafił budować 96 wzorców dekryptora [1]. Pierwszy wirus metamorficzny, Win95/Regswap, powstał w 1998 roku [1]. Granica między pojęciami nie wszędzie jest ostra: MITRE podaje „metamorficzny” jako synonim kodu polimorficznego [2], a przegląd Sharmy i Sahaya traktuje metamorfizm jako osobną, trudniejszą technikę [1].
Polimorfizm łączy się z innymi sposobami ukrywania. MITRE wymienia pakowanie, czyli packer, zaciemnianie poleceń i szyfrowanie lub kodowanie plików [2].
W WordPressie
Na serwerach WordPress polimorfizm rzadko ma postać klasycznego silnika mutacji z plików wykonywalnych. Częściej jest to złośliwy kod PHP albo JavaScript, który przy każdej infekcji dostaje inne zaciemnienie.
Sucuri w listopadzie 2024 roku opisał taki przypadek [6]. Złośliwy kod wstrzykiwał się do aktywnych wtyczek i fragmentów kodu dodanych przez wtyczkę WPCode, za każdym razem w zaciemnionej wersji [6]. Autorka zauważa, że ponieważ malware za każdym razem zmienia wygląd, wykrycie staje się coraz trudniejsze, a czyszczenie skomplikowane [6]. Jeśli strona nie zostanie wyczyszczona do końca, nawet drobne pozostałości mogą szybko zarazić wszystko ponownie [6].
Dla administratora wniosek jest praktyczny. Szukanie „tego samego” fragmentu kodu we wszystkich plikach zawiedzie, bo każda kopia wygląda inaczej. Skuteczniejsze jest porównanie plików z wzorcem. Polecenie wp core verify-checksums sprawdza pliki rdzenia z sumami kontrolnymi z WordPress.org, a z opcją --include-root ostrzega także o obcych plikach w katalogu głównym [7].
wp core verify-checksums --include-root
To samo podejście w sposób ciągły realizuje monitorowanie integralności plików: każda zmiana pliku jest podejrzana, niezależnie od tego, jak wygląda nowy kod.
Zagrożenia i skutki
Polimorfizm nie jest osobnym rodzajem szkody, tylko sposobem ukrywania. Skutki zależą od tego, co niesie ciało: może to być tylna furtka (backdoor), wirus komputerowy, ransomware albo koparka kryptowalut. Polimorfizm wydłuża czas, w którym infekcja pozostaje niewykryta, i utrudnia pełne sprzątanie.
Kaspersky opisuje, że pojawienie się rodziny Chameleon w 1990 roku uczyniło ówczesne programy antywirusowe bezużytecznymi wobec tych wirusów [3]. W 1992 roku, mimo miesięcy pracy, wiele firm antywirusowych nie osiągało pełnej wykrywalności wirusów tworzonych generatorem MtE [4].
Jak się bronić
Obrona polega na tym, by nie polegać na samej sygnaturze.
- Emulacja. Przegląd Sharmy i Sahaya wskazuje, że mimo wielu wariantów dekryptora oryginalny program da się rozpoznać po uruchomieniu go w emulatorze [1]. Kaspersky podaje, że w 1992 roku Eugene Kaspersky opracował do tego emulator procesora [3]. Współczesnym odpowiednikiem jest piaskownica (sandbox).
- Heurystyka i zachowanie. Sekurak opisuje heurystykę jako wszystkie metody poza klasycznymi sygnaturami, w tym śledzenie wywołań API, piaskownicę z obserwacją zachowania i wykrywanie anomalii [5]; zob. wykrywanie sygnaturowe i heurystyczne.
- Wskazówki MITRE. MITRE zaleca narzędzia antymalware z uczeniem maszynowym i analizą zachowania oraz monitorowanie plików wykonywalnych, które zmieniają skrót, entropię albo sekcje pamięci [2]. Takie funkcje mają rozwiązania klasy EDR (Endpoint Detection and Response).
- Na stronie WordPress. Porównanie z wzorcem [7], stały nadzór nad zmianami plików i usunięcie przyczyny infekcji. Sucuri podkreśla, że trzeba znaleźć i usunąć podatność, przez którą malware się dostał [6]; zob. czyszczenie przejętej strony.
Historia i przykłady
Chameleon (1260). Kaspersky podaje, że pierwsze wirusy polimorficzne pojawiły się w 1990 roku jako rodzina Chameleon (1260, V2P1, V2P2 i V2P6) [3]. Autor, Mark Washburn, oparł się na wirusie Vienna i dodał cechy samoszyfrującego się wirusa Cascade [3]. W odróżnieniu od Cascade kod Chameleona zmieniał się przy każdej infekcji [3].
MtE. Na początku 1992 roku pojawił się pierwszy generator polimorficzny MtE, autorstwa Dark Avengera [4]. Był dostarczany jako gotowy moduł z dokumentacją, do dołączania do innych wirusów [4]. Według Kaspersky’ego od razu pojawiło się kilka wirusów polimorficznych, a MtE był poprzednikiem kolejnych generatorów [4].
BendyBear. Jako współczesny przykład MITRE podaje BendyBear, który zmienia swój ślad w trakcie działania, by unikać obrony opartej na sygnaturach [2].
Przypisy
7- [1] Evolution and Detection of Polymorphic and Metamorphic Malwares: A Survey (Sharma, Sahay) · arXiv
- [2] T1027.014: Obfuscated Files or Information: Polymorphic Code · MITRE ATT&CK
- [3] 1990 — Kaspersky IT Encyclopedia · Kaspersky
- [4] 1992 — Kaspersky IT Encyclopedia · Kaspersky
- [5] W jaki sposób działają programy antywirusowe? · Sekurak
- [6] PHP Reinfector and Backdoor Malware Target WordPress Sites · Sucuri
- [7] wp core verify-checksums — WP-CLI Commands · WordPress.org