Metody wykrywania wirusów

Transkrypt

Metody wykrywania wirusów
SYSTEMY OPERACYJNE – WWW.EDUNET.TYCHY.PL
Metody wykrywania wirusów
Istnieją dwie główne metody wykrywania złośliwego oprogramowania. Pierwsza oparta
jest na wzorcach zagrożeń (wymaga ciągłej aktualizacji sygnatur), a druga na analizie heurystycznej.
Metoda oparta na wzorcach
Jest to obecnie najpopularniejsza metoda detekcji. Jej wada polega na zbyt wolnej reakcji
na pojawiające się zagrożenia – musi upłynąć pewien czas nim specjaliści opracują wzorzec,
który będzie mógł być rozesłany klientom.
Wzorzec jest ciągiem bajtów wyekstrahowanym z wirusa, który w sposób jednoznaczny
identyfikuje.
go
Mając wzorzec wirusa możemy zastosować jeden z licznych algorytmów dopasowujących,
w celu znalezienia go w badanym pliku. Wzorzec musi spełniać kilka wymagań, aby można go
było zastosować do identyfikacji zagrożenia:

powinien być fragmentem charakterystycznym
występować w czystych plikach)

nie może być zbyt krótki (mógłby powodować fałszywe alarmy)

nie może być zbyt długi (dopasowanie go byłoby długotrwałe, a zajętość
pamięci znaczna przy licznej bazie zagrożeń)
Opr.: Grzegorz Szymkowiak
dla
wirusa
(nie może
SYSTEMY OPERACYJNE – WWW.EDUNET.TYCHY.PL
Powyższy fragment jest charakterystyczny, ponieważ poszukuje pod wyliczanym adresem
słowa KERN, co nie powinno wystąpić w pliku czystym. Aby uogólnić ten wzorzec na inne wersje, można zastąpić część bajtów znakiem zastępczym odpowiadającym podczas dopasowywania za dowolny bajt.
Zbytnie skracanie i uogólnianie scan-stringów może powodować fałszywe alarmy. Rozwiązaniem tego problemu jest stosowanie kilku krótkich wzorców, które muszą znajdować się w
badanym pliku, aby stwierdzić obecność wirusa.
Metoda oparta na wzorcach ma bardzo wysoką skuteczność. Wymaga jednak ciągłej aktualizacji wzorców (sygnatur).
Metoda oparta na analizie heurystycznej
Heurystykę w programach antywirusowych można podzielić na kilka kategorii w zależności
od sposobu działania. Najczęstszym spotykanym podziałem jest wyszczególnienie heurystyki
statycznej i dynamicznej. Do metod heurystycznych zalicza się również analizę behawioralną
oraz sprawdzanie integralności.
HEURYSTYKA STATYCZNA - opiera się na analizie obiektu w postaci, w jakiej zostanie on
przekazany do analizy; na traktowaniu obiektu jako ciągu bajtów.
Analiza taka bazuje na dyskryminatorach zebranych z istniejących niebezpiecznych programów, czyli na cechach odróżniających niebezpieczne
programy od czystych plików.
Aby analizowany obiekt został uznany za podejrzany, musi zawierać określoną
liczbę dyskryminatorów. Dyskryminatory najczęściej są ciągami bajtów, ale mogą
być związane np. z nietypowym wyglądem pliku wykonywalnego.
Opr.: Grzegorz Szymkowiak
SYSTEMY OPERACYJNE – WWW.EDUNET.TYCHY.PL
Typowy wirus infekuje plik wykonywalny poprzez dołączenie do niego swojego
kodu, następnie przeszukuje dysk w celu znalezienia innych plików podatnych na infekcję. Aby wykryć wirusa przy użyciu heurystyki statycznej, musimy zgromadzić kolekcję mikrowzorców (charakterystycznych zachowań), których występowanie będzie
świadczyło o podejrzanym działaniu. Mikrowzorcem może być przykładowo pobranie
offsetu delta, które można znaleźć w większości wirusów plikowych - jest on wirusowi potrzebny, jeżeli chce w prosty sposób korzystać z danych, które są zawarte w
obszarze wirusa.
W celu zwiększenia jakości klasyfikacji przy użyciu heurystyki statycznej można
połączyć mikrowzorce z nietypowym wyglądem pliku spowodowanym modyfikacjami
przeprowadzonymi podczas infekcji.
Zaletą heurystyki statycznej jest duża szybkość działania – tym większa, że
analizowane obszary zwykle nie są duże i można w całości wczytać je do pamięci. Jej
wadą jest ograniczone pole analizy umożliwiające wykrycie jedynie tych zagrożeń,
które posiadają często występujące cechy. Heurystyka taka potrafi przeanalizować
jedynie kod, który nie jest zaszyfrowany, ale po uzyskaniu postaci zdeszyfrowanej
(np. za pomocą emulacji) można ją przekazać ponownie do skanowania przy użyciu
heurystyki statycznej.
HEURYSTYKA DYNAMICZNA - to analiza przeprowadzana podczas działania podejrzanego programu, dzięki czemu możliwe jest poznanie zachowania obiektu lub
uzyskanie postaci obiektu dającej więcej informacji.
Zwykle taką analizę przeprowadza się podczas uruchomienia podejrzanego programu w środowisku bezpiecznym, za pomocą emulatora procesora i systemu operacyjnego.
Środowisko takie nazywane jest piaskownicą (ang. sandbox). Program w niej
uruchomiony – niczym dziecko znajdujące się w piaskownicy – nie może popsuć niczego, co znajduje się poza nią, a jego działania można obserwować i analizować.
Emulatory w programach antywirusowych początkowo tworzone były w celu odszyfrowania części zaszyfrowanej wirusów polimorficznych. Wykonywały polimorficzny kod wirusa do czasu, aż zakończył on deszyfrację, co najczęściej wiązało się z
wywołaniem funkcji systemowej.
Stosowanie emulacji w procesie analizy ma kilka istotnych minusów. Główną
wadą jest niewielka szybkość działania samego emulatora, a dodatkowe sprawdzenia
wykonywane podczas analizy heurystycznej jeszcze emulację spowalniają. Duże znaczenie dla szybkości działania ma też problem stopu, czyli stwierdzenie, kiedy emulacja powinna się zakończyć. Choć powstało wiele metod przyspieszających działanie
emulatorów i wciąż powstają nowe (np. wykorzystanie wirtualizacji procesorów), istnieje kilka barier nie do pokonania.
Dla niebezpiecznego programu nie jest problemem, jeżeli zadziała raz na kilka
uruchomień. Może być to spowodowane wywołaniem funkcji zwracającej losową wartość lub warunkami logicznymi, które środowisko musi spełnić. Emulator działający w
sposób deterministyczny nie jest w stanie obsłużyć tych sytuacji, ponieważ emulacja
podąża jedną ścieżką, nie badając wszystkich możliwych rozgałęzień kodu. Zatem
emulator może pójść ścieżką, która kończy działanie niebezpieczne-go programu,
przez co nie będzie można stwierdzić podejrzanego zachowania.
Opr.: Grzegorz Szymkowiak
SYSTEMY OPERACYJNE – WWW.EDUNET.TYCHY.PL
ANALIZA BEHAWIORALNA - każdy proces działający w trybie użytkownika musi komunikować się z systemem operacyjnym za pomocą udostępnionego interfejsu API. W trybie
tym pracują wszystkie standardowe aplikacje, w tym większość niebezpiecznych programów, ponieważ nie muszą do działania uzyskiwać nadzwyczajnych uprawnień w
systemie.
Monitorując wywołania funkcji systemowych jesteśmy w stanie uzyskać dokładne informacje na temat zachowania analizowanego programu. Monitorowanie może
odbywać się albo podczas emulacji w środowisku bezpiecznym, albo w działającym
systemie. Monitorowanie działającego systemu, mimo jego spowolnienia, zyskuje coraz większą popularność, ponieważ jest w stanie wykryć zagrożenia, którym emulacja nie jest w stanie sprostać.
Najczęściej monitorowanie behawioralne dotyczy typowych działań niebezpiecznych programów, jakimi są:

modyfikacja plików wykonywalnych

pobieranie i uruchamianie plików z Internetu

wysyłanie listów za pomocą własnego silnika SMTP

modyfikacja rejestru

modyfikacja plików systemowych

zabijanie procesów (np. programów antywirusowych)

modyfikacja innych procesów

szpiegowanie klawiatury

nasłuchiwanie na otwartych portach

praca programu bez widocznego okna
SPRAWDZANIE INTEGRALNOŚCI - najprostszym podejściem do heurystycznego wykrywania
obecności niebezpiecznego oprogramowania jest zbadanie, czy określone obszary
systemu (pliki, rejestr) nie ulegają zmianie. Sprawdzanie integralności działa w przypadku heurystycznego wykrywania rootkitów.
Integralność plików możemy sprawdzić dzięki istnieniu coraz częściej stosowanych podpisów cyfrowych. Sprawdzanie integralności stało się jednym z podstawowych mechanizmów bezpieczeństwa w systemie Windows Vista.
Wspomniany mechanizm Kernel Patch Protection sprawdza, czy nie zostały
wprowadzone w systemie nielegalne zmiany:

modyfikowanie tablicy usług systemowych (system service tables)

modyfikowanie tablicy przerwań (IDT)

modyfikowanie tablicy globalnych deskryptorów (GDT)

używanie w jądrze stosu, który nie został przydzielony przez jądro

łatanie dowolnej części jądra
Opr.: Grzegorz Szymkowiak