Czy kiedykolwiek zastanawialiście się, dlaczego wirusy komputerowe otrzymały właśnie takie określenie – „wirusy”? Dzisiaj słowo „wirus” odnosi się do wszystkich rodzajów szkodliwego oprogramowania lub też określa wszystkie „szkodliwe zmiany”, które powstały w wyniku działania szkodliwego programu w zaatakowanym systemie. Tak możemy przeczytać w słowniku.
Dalej możemy przeczytać, że to „kod programu, który rozmnaża się”. I rozprzestrzenia – podobnie jak wirusy biologiczne, np. grypy.
Co dziwne, tak określanych wirusów od dawna już nie ma na wolności. Dziś nazywa się tak szkodliwe programy, które nie powielają się, lecz mają różne nieciekawe funkcje: kradną dane z komputera lub całkowicie je usuwają (np. trojan). Gdy zapytać dziś kogoś o to, z czym kojarzą im się „technologie bezpieczeństwa komputerowego”, większość powie, że z naukowcami odpowiedzialnymi za kwarantannę, z probówkami w ręku – chociaż te są potrzebne tylko w przypadku wirusów biologicznych.
A zatem: wirusy komputerowe wymarły. Jednak sposoby analizowania, które były wykorzystywane do ich wykrywania i leczenia (kolejne błędne zapożyczenie ze świata mikrobiologii!), pozostały, rozwijały się i dziś nadal w ogromnym stopniu pomagają w walce ze współczesnym oprogramowaniem wirusowym. Jedną z takich „starych” technologii jest emulator.
Mówiąc w skrócie, emulacja to metoda identyfikowania wcześniej nieznanych zagrożeń, w której plik zachowujący się podejrzanie (inaczej niż zwyczajnie, nietypowo) jest uruchamiany w środowisku wirtualnym („emulowanym”), które naśladuje prawdziwy komputer. Tam antywirus* obserwuje zachowanie tegoż pliku (więcej na ten temat napiszę później), a jeśli rozpozna jakieś niebezpieczne zachowanie, odizoluje go w celu przeprowadzenia dalszych badań.
Czy widzicie analogię z wirusologią mikrobiologiczną? Po co wstrzykiwać pacjentowi, który może mieć jakąś chorobę, silne antidotum mające wiele skutków ubocznych, gdy pacjent może w ogóle jej nie mieć? Lepiej jest emulować ją in vitro i sprawdzić, co się dzieje i dopiero wtedy podać odpowiedni lek.
Jednak największe wyzwanie pozostało takie samo, jak w przypadku mikrobiologii: najważniejsze jest, aby emulowane środowisko przypominało to prawdziwe w jak największym stopniu. W przeciwnym razie szkodliwe pliki mogą zorientować się, że jest to specjalne przygotowane środowisko, i w efekcie zachowywać się niewinnie. Emulację stosujemy od dziesięcioleci, więc – bez zbędnej fałszywej skromności – możemy powiedzieć, że naprawdę jesteśmy pod tym kątem o wiele lepsi od konkurencji.
Pierwszy emulator na świecie powstał w erze DOS w 1992 roku. Chwilę później eksperci na całym świecie zaczęli zachwycać się współczynnikiem wykrywania naszego antywirusa (tak – wtedy nadał był to „antywirus”), który miażdżył konkurencję w niezależnych testach, po części dzięki emulatorowi.
Czas mijał, a krajobraz zagrożeń coraz bardziej się komplikował: wirusy zeszły ze sceny, a zastąpiły je robaki sieciowe, trojany i inne złożone szkodniki. Równolegle rozwinęło się również wiele cyfrowych technologii: komputerów, urządzeń mobilnych, Internet Rzeczy, ale też zwiększyły się kompetencje emulatora. Umieściliśmy go w naszej chmurze zabezpieczającej KSN, nauczyliśmy nowych języków programowania, zapoznaliśmy z nowymi przeglądarkami i innymi obiektami w systemach operacyjnych… a wszystko po to, abyśmy w większym stopniu automatycznie łapali nieznane wcześniej rodzaje szkodliwych programów. Sztuczna inteligencja i ciężka praca człowieka – tak właśnie powstała HuMachine :).
Dziś niewielu naszych konkurentów może pochwalić się taką technologią i nic w tym dziwnego: emulacja to bardzo trudne zadanie, które wymaga wieloletniego doświadczenia, czasochłonnej integracji z produktami będącymi pierwszą linią obrony i nieustannego rozwoju. Jednak wielu nowicjuszy w branży cyberbezpieczeństwa woli inwestować w bla-bla-bla marketing. Oczywiście takie podejście może znacząco przyspieszyć rozwój firmy, jednak użytkowników nie da się długo oszukiwać: w końcu nadejdzie dzień wielkiej wpadki wyznaczający kres istnienia, a historia znajdzie się na pierwszych stronach gazet. Innymi słowy, jeśli firma z branży cyberzabezpieczeń ma własny emulator, wiesz, że producent ma spore doświadczenie. I odwrotnie: jeśli nie ma emulatora, oznacza to, że ma niewiele doświadczenia i nie będzie działać zbyt długo.
Ale zboczyłem z tematu…
Zatem, chociaż nieustannie ulepszaliśmy nasz emulator, po drugiej stronie barykady cybernetyczni bandyci też nie próżnowali. Aktywnie chronili swoje działania biznesowe i cyberszpiegowskie, w tym nawet próby zabezpieczenia się przed naszym emulatorem.
Najbardziej zaawansowane zagrożenia używały wielu sztuczek, aby uchronić się przed emulatorami, czyli rozpoznać środowisko „probówki” — na przykład poprzez uruchomienie nieudokumentowanej funkcji, sprawdzenie autentyczności żądań zmiany rejestrów procesorów, analizę kodów błędów, wyszukiwanie w pamięci określonego kodu, używanie „bomb logicznych”, dzięki którym emulator wpadał w niekończącą się pętlę itp. Jeśli szkodliwy program wyczuje coś podejrzanego, wstrzymuje szkodliwe funkcje i działa bez zarzutu.
Jednak my znamy te sztuczki i zawsze rozwijamy nasz emulator tak, aby rozpoznawał wymienione triki, jak również ulepszamy go na inne sposoby (głównie w zakresie zmniejszania zużycia zasobów). Na przykład, aby przyspieszyć jego działanie, używamy różnych narzędzi ograniczających i optymalizujących oraz profili konfiguracyjnych, które można nawet całkowicie wyłączyć w określonych warunkach, gdy opóźnienie jest niepożądane ze względu na występowanie tzw. niebieskiego ekranu śmierci (ang. Blue Screen of Death, BSoD).
Pewnego dnia nasi eksperci od patentów przekazali nam dobre wieści z frontu emulacji: otrzymaliśmy patent (US10275597) dla emulatora przeznaczonego do wykonywania kodu programu, który potrafi interpretować nieznane obiekty! O ile mi wiadomo, żaden konkurencyjny produkt nie ma takiej funkcji: aby chronić przed stosowanymi przez szkodliwe programy trikami zapewniającymi ochronę przed emulatorem, nasi konkurenci muszą napisać od nowa swój cały emulator, co oczywiście nie nastąpi tak szybko. Z kolei my nauczyliśmy nasz emulator samodzielnej aktualizacji w locie z lokalnej bazy danych! To bardzo przydatna funkcja i nie ma powodu, abyśmy Wam o niej mieli nie mówić, ponieważ wiedza na temat tego, jak Was chronimy, to potęga! 🙂
Niektóre pliki nie są dystrybuowane w kodzie maszyny, ale bezpośrednio w kodzie źródłowym. Aby uruchomić je na komputerze, potrzebny jest interpreter (na przykład JavaScript lub VBA), który tłumaczy ten kod w czasie rzeczywistym na język przyjazny dla maszyny. Z kolei szkodliwy program także często rezyduje w takich plikach.
Aby wykryć takie nieznane zagrożenia, wiele lat temu utworzyliśmy emulator kodu programu, który sprawdza pliki „w probówce” przed ich uruchomieniem. Jednak emulowanie całego interpretera wymaga użycia zbyt wielu zasobów: spore opóźnienie w otwieraniu stron internetowych korzystających ze skryptów byłoby dla wielu użytkowników internetu bardzo frustrujące. Dlatego emulatory zwykle odtwarzają taką wersję przestrzeni wirtualnej, która jest w pewnym sensie kompromisem akceptowalnym zarówno w kwestii wydajności, jak i jakości ochrony. Ale co się dzieje, gdy emulator napotka w kodzie nieznany obiekt, metodę lub funkcję, której interpretacja jest konieczna, aby móc wykonać kompletną analizę pliku?
Rozwiązaliśmy ten problem w inny sposób – przy pomocy „inteligentnego” interpretera, który potrafi szybko poznać, jak emulować takie obiekty. Podczas aktualizacji poprzez chmurę KSN produkt otrzymuje kod pomocniczy w języku analizowanego obiektu (JavaScript, VBA, VB Script, AutoIt…) i, dysponując nową wiedzą, wraca do sprawdzania pliku. W trudnych przypadkach, gdy kod pomocniczy musi dopiero zostać utworzony, zadanie jest automatycznie przesyłane do naszych analityków, którzy go kreują i szybko dodają do bazy danych.
W efekcie użytkownicy otrzymują nie tylko silną, ale także super szybką technologię, która potrafi niezwłocznie reagować na cyberzagrożenia bez konieczności czekania na kolejną wersję emulatora. O to chodziło!
* „Antywirus” to kolejny archaizm ery wirusów komputerowych. Współczesne antywirusy chronią nie tylko przed wirusami, ale także przed wszelkiego rodzaju szkodliwymi programami. Ponadto zawierają one wiele innych przydatnych funkcji bezpieczeństwa: na przykład menedżer haseł, VPN, kontrolę rodzicielską, kopię zapasową i wiele więcej. Więc mówiąc ściślej, dziś dobry „antywirus” powinien być raczej nazywany „anty-to, -tamto i -wszystko; chroniący mnie, moją rodzinę, wszystkie moje urządzenia i dane – oraz oczywiście mieć wszystkie bajery i wodotryski!”.