Już od szkoły średniej nauczyciele powtarzają, iż nic nie robi tak dobrze krótkiej formie literackiej jak powoływanie się na autorytety. I tak też będzie tutaj. Ponieważ, parafrazując lekturę szkolną, Markus Jakobsson, główny naukowiec Agari, autorytetem jest i basta.
Spędził ponad 20 lat jako badacz bezpieczeństwa, naukowiec i przedsiębiorca. Analizował phishing oraz systemu przestępcze. Zajmował się bezpieczeństwem mobili. Przed Agari Jakobsson kierował badaniami nad złośliwym oprogramowaniem, uwierzytelnianiem, oszustwami, interfejsami użytkownika i technologiami bezpieczeństwa dla Qualcomm. Był także współzałożycielem trzech cyfrowych startupów – ZapFraud, RavenWhite i FatSkunk.
Ale to nie wszystko. Kariera naukowa Jakobssona jest równie bogata jak zdobienia letniej rezydencji Putina. Pełnił najważniejsze funkcje jako główny naukowiec w firmach PayPal, Xerox PARC i RSA Security. Posiada ponad 100 patentów i jest wizytującym pracownikiem naukowym Anti-Phishing Working Group (APWG). Uzyskał stopień doktora w dziedzinie informatyki na Uniwersytecie Kalifornijskim w San Diego oraz tytuł magistra zarówno na Uniwersytecie Kalifornijskim w San Diego, jak i na Uniwersytecie Lund w Szwecji.
Ale czemu o tym wszystkim? Otóż na łamach SecurityWeek Jakobsson opublikował kilka swoich spostrzeżeń. Było to prawie trzynaście lat temu, jak na Informatykę cały wiek, ale sam oceń, czytelniku, ile z tych uwag jest dalej aktualnych.
Czy możemy szukać malware inaczej?
„Produkty antywirusowe skanują w poszukiwaniu złośliwego systemu na dwa sposoby. W pierwszym szukają sekwencji bitów, które można znaleźć w programach, o których wiadomo, iż są »złe« (ale które nie są powszechnie spotykane w »dobrych« programach). W drugim uruchamiają programy w piaskownicach i szukają znanych złośliwych działań. Pierwsze podejście wychwytuje tylko znane przypadki złośliwego oprogramowania, podczas gdy drugie może również przechwytywać ich warianty. Mimo to wielu »agentów szkodliwego oprogramowania« prześlizguje się przez szczeliny niezauważonych… dopóki reguły programów antywirusowych nie zostaną zaktualizowane. To ciągła walka między atakującymi a obrońcami”. Może właśnie teraz jest dobry moment, żeby przypomnieć, iż na Kapitanie Hacku publikowaliśmy całą dużą kampanię poświęconą malware – do przeczytania tutaj.
Ale kontynuując rozważania Jakobssona:
„Zamiast szukać znanych wzorców – niezależnie od tego, czy są to wzorce instrukcji i danych, czy wzorce działań – czy nie byłoby wspaniale, gdybyśmy mogli szukać wszystkiego, co jest złośliwe? To może brzmieć jak mrzonka. Nie dla mnie. Powiem ci dlaczego. Ale najpierw zgódźmy się co do kilku punktów.
1) Podczas skanowania w poszukiwaniu złośliwego systemu są trzy i tylko trzy rzeczy, które malware może zrobić:
- Być aktywny w pamięci RAM, być może próbując ingerować w algorytm wykrywania.
- Nie być aktywnym w pamięci RAM, ale przechowywać się w pamięci dodatkowej (gdzie oczywiście nie może zakłócać algorytmu wykrywania).
- Wymazać się.
2) Każdy program – dobry lub zły – który chce być aktywny w pamięci RAM, nie ma innego wyjścia, jak tylko zająć trochę miejsca w pamięci RAM. Przynajmniej jeden bajt, prawda?
Załóżmy teraz, iż mamy algorytm wykrywania, który działa w trybie jądra i zamienia wszystko w pamięci RAM. Wszystko oprócz siebie. Cóż, złośliwe oprogramowanie może oczywiście przeszkadzać, jak to często bywa, i pozostać w pamięci RAM. Ale jeżeli wiemy, jak duża jest pamięć RAM, wiemy, ile miejsca powinno być wolne. Załóżmy, iż zapisujemy pseudolosowe bity na całej tej rzekomo wolnej przestrzeni. Ponownie agent złośliwego systemu może odmówić zastąpienia. Zamiast tego może przechowywać te losowe bity gdzie indziej… na przykład w pamięci dodatkowej.
Następnie obliczmy zaszyfrowany skrót całej zawartości pamięci — zarówno naszego programu wykrywającego, jak i wszystkich losowych bitów. Oto, co może się wydarzyć: jeżeli w pamięci RAM nie ma złośliwego oprogramowania, wyniki będą zgodne z oczekiwaniami. Sprawdzający to zewnętrzny weryfikator powiedziałby nam, iż zeskanowane urządzenie jest czyste. Lub w pamięci RAM może znajdować się złośliwe oprogramowanie, a suma kontrolna byłaby błędna. Zewnętrzny weryfikator zauważyłby to i stwierdziłby, iż urządzenie musi być zainfekowane.
Po trzecie, złośliwe oprogramowanie może przekierować żądania odczytu do miejsca w pamięci dodatkowej, w którym przechowuje losowe bity przeznaczone dla zajmowanej przestrzeni. Spowodowałoby to prawidłową sumę kontrolną… ale także opóźnienie. To opóźnienie może zostać wykryte przez zewnętrzny weryfikator, który następnie stwierdzi, iż urządzenie jest zainfekowane.
Dlaczego pojawia się zwłoka? Ponieważ pamięć dodatkowa jest wolniejsza niż pamięć RAM. Zwłaszcza jeżeli odczyty i zapisy są uporządkowane w sposób, który celowo powoduje ogromne opóźnienia, jeżeli są kierowane do pamięci flash, dysków twardych itp.
Wystarczy nam pomoc zewnętrznego weryfikatora, który wie, ile pamięci RAM ma urządzenie, które chcemy chronić, i jak szybki jest jego procesor. I sposoby uniknięcia wariancji opóźnienia, gdy mierzymy czas do obliczenia sumy kontrolnej. Ten argument mówi nam kilka interesujących rzeczy. Możemy zagwarantować wykrycie złośliwego oprogramowania. Obejmuje to ataki typu zero-day i rootkity. Możemy choćby zagwarantować, iż wykryjemy złośliwe oprogramowanie, które zainfekowało urządzenie, zanim zainstalowaliśmy nasz program wykrywający”.
I jak Ci się to podoba, Drogi Czytelniku? Ma to sens?