Wielowarstwowa ochrona systemu Windows? Dlaczego?
#1
Mam pomysł na wpis dla początkujących, ale jednocześnie mam nadzieję, że każdy znajdzie w poście coś, co może go zainteresować Wink Od razu uprzedzam, że można nie zgodzić się z pewnymi wymienionymi informacjami. Musiałem ujednolicić kwestię merytoryczną, ponieważ różne źródła w różny sposób opisują poszczególne zagadnienia. Jest możliwym znalezienie innych np. taksonomii, czy klasyfikacji, ale nie powinno znaczyć to, że te przedstawione tutaj nie są poprawne. Wszelkie błędy i sugestie proszę zgłaszać przez wiadomość prywatną. Przyjemnego czytania!

Wszystko od podstaw
Pojęcie systemu antywirusowego wymaga dokładniejszego zdefiniowania na samym początku. Termin ten nie dotyczy programów wykrywających, blokujących, czy usuwających jedynie wirusy, ale wszystkie rodzaje zagrożeń jakie użytkownik komputera może napotkać podczas pracy lub rozrywki korzystając z systemu komputerowego. Program antywirusowy to jedno z niewielu pojęć jakie prawdopodobnie ze względów marketingowych nie ewoluowało od 1987 roku. Właśnie w 1987 w Niemczech powstała aplikacja G Data AntiVirenKit . Potencjalny użytkownik korzystając z aplikacji określonej mianem programu antywirusowego nie powinien czuć się zagrożony ze strony robaków, rootkitów, czy exploitów, ponieważ producenci rozwiązań zabezpieczających dokładają wszelkich starań, aby program antywirusowy neutralizował całą gamę złośliwego oprogramowania. Nie znaczy to oczywiście, że jakakolwiek z dostępnych na rynku aplikacji antywirusowych radzi sobie ze stuprocentowym zwalczaniem malware.

Przesłanki ku tworzeniu malware
Przypisywanie motywacji do tworzenia malware jednemu czynnikowi, np. takiemu jak chęć zarobienia pieniędzy, jest bardzo dużym uproszczeniem i nie jest poprawne. Przyczyn pisania złośliwego oprogramowania przez różnego typu ludzi może być dużo, ale podstawowymi, przedstawionymi przez Johna Aycock’a w książce Computer Viruses and Malwaremotywami są: zafascynowanie technologią, sława, rozprzestrzenienie swojego podpisu (forma podobna do graffiti w rzeczywistym świecie), zemsta (np. niesłusznie zwolnionego pracownika, który zna słabe punkty w informatycznej infrastrukturze danej firmy), ideologia (np. grupa aktywistów internetowych zwana Anonymous , która sprzeciwia się m.in. ograniczaniu wolności i dziecięcej pornografii), sabotaż komercyjny spowodowany konkurencją na rynku oraz wojna i szpiegostwo.

Socjotechnika, czyli sposób na ominięcie zabezpieczeń technicznych
Niezależnie od ilości i jakości wykorzystywanych podczas odpierania ataków systemów zabezpieczeń, najsłabszym elementem jest człowiek. Jeśli haker nie będzie w stanie dostać się do miejsca obranego za cel przez utrudnienia techniczne takie jak firewall, czy system wykrywania włamań, to zrobi to frontowymi drzwiami – za zgodą użytkownika. Termin socjotechnika – używany również poza informatyką, nazywany także inżynierią społeczną – dotyczy osiągnięcia założonego celu poprzez manipulowanie społeczeństwem. Techniki zabezpieczające systemy komputerowe rozwijają się stosunkowo szybko, jednak nie każdy jest w stanie w określonym czasie zrozumieć co tak naprawdę się zmienia i z jakiego powodu. Osoby atakujące systemy informatyczne wykorzystują brak wiedzy lub niedoinformowanie ludzi w celu pół-jawnego wtargnięcia do infrastruktury informatycznej (dotyczy to w większości korporacji). Przykładowym atakiem socjotechnicznym może być podszywanie się pod inną osobę w celu wyłudzenia niejawnych informacji. Innym scenariuszem może być atak socjotechniczny, w którym nie ma aktora – odgrywa go program lub odpowiednio spreparowana strona internetowa, która dzięki wiarygodnym i zachęcającym opisom wprowadza użytkownika w błąd.

Kevin Mitnick w książce pod tytułem Sztuka Podstępu , tłumaczy socjotechnikę jako skłanianie społeczeństwa do robienia rzeczy, których w normalnych sytuacjach nie powinno robić dla nieznajomych im osób. Ludzie, którzy dzięki zdolnością manipulacji wyłudzają pieniądze to najzwyklejsi oszuści. Z kolei osoby, które manipulują wykorzystując swoją perswazję wobec społeczeństwa, zwykle po to by uzyskać informacje, to socjotechnicy.

Procesy inżynierii społecznej tak samo jak ataki wykonywane za pomocą sieci komputerowej, czy robaka internetowego mogą zostać wykryte i zatrzymane przed dostaniem się informacji w niepowołane ręce. Procedury dotyczącezapobiegania atakom socjotechnicznym w przypadku firm, mogą znajdować się w polityce bezpieczeństwa informacji. Jest to dokument zawierający spójne reguły oraz wytyczne mające związek m.in. z zarządzaniem i udostępnianiem informacji w danym środowisku korporacyjnym. Dotyczy również aspektów takich jak sposoby wykorzystywania oprogramowania oraz danych, korzystanie z konta użytkownika i bezpiecznych haseł. Ponadto pracownicy powinni być stale zapoznawani z nowymi rodzajami ataków uczestnicząc okresowo w szkoleniach i kursach.

Rodzaje zagrożeń 
Internet jest miejscem, gdzie użytkownicy poruszają się w celach edukacyjnych, zarobkowych, komunikacyjnych oraz rozrywkowych. Jest ona również miejscem, w którym znajduje się najwięcej zagrożeń – jedne wszczepione są w strony internetowe w postaci niewidocznych przycisków, skryptów JavaScript lub pod postacią fałszywych formularzy wyłudzających dane użytkowników ( phishing ). Można je określić jako szereg danych lub ciąg złośliwego kodu wykorzystującego strukturę stron www oraz budowę przeglądarki internetowej do rozprzestrzeniania się na komputerach użytkowników. Inne zagrożenia znajdują się na serwerach w postaci plików gotowych do pobrania przez nieświadome niebezpieczeństwa osoby. W rzeczywistości występują również ataki bardziej pasywne – np. za pomocą portów USB, oraz wysoce wyrafinowane aktywne ataki przeprowadzane przez grupę bądź jedną osobę, a skierowane bezpośrednio na komputer za pomocą sieci, do której jest on podłączony. 

Jedną z metod podziału malware jest określenie zdolności złośliwego oprogramowania do samodzielnego replikowania się. W następstwie takiego podziału wyróżniamy dwie podstawowe grupy malware – samoreplikujące się oraz niezdolne do replikowania.

Samoreplikujące się malware
Wirus to program, który został napisany przez człowieka w taki sposób, aby był zdolny do rozprzestrzenienia się na jak największa ilość komputerów. Jest on niczym więcej niż zestawem instrukcji napisanych w wysokopoziomowym języku programowania, takim jak C, C++, Java, Visual Basic, przetłumaczonym na niskopoziomowy język wykorzystywany przez procesor oraz pamięć. Architektura wirusa pozwala mu przenosić się za pomocą dodawania złośliwego kodu do innych znajdujących się na dysku programów lub plików wykonywalnych. Następnie wraz z zainfekowanym plikiem wirus przenosi się na inną maszynę by powtórzyć wykonane wcześniej czynności i dalej się rozprzestrzeniać. Większość wirusów składa się z dwóch części: kodu odpowiedzialnego za określone złośliwe zachowanie w systemie (np. błędy, wyświetlanie okienek pop-up, kasowanie plików) oraz kodu za pomocą którego wirus dopisuje się do innych plików. Druga część wirusa wyzwalana jest przez zdefiniowane w kodzie zdarzenie, którym może być określona godzina, data, interwał czasowy lub uruchomienie danego programu. Wirus jest programem, który samodzielnie replikuje się w komputerze ofiary podłączając się do programów i/lub dokumentów stających się nośnikami złośliwego kodu.

Tony Bradley w książce Essential Computer Securityzdefiniował wirusa jako złośliwy kod, który sam się replikuje . Według autora, niektóre wirusy są stworzone po prostu do powielania się (replikowania), inne mogą nieść poważne zagrożenie takie jak kasowanie plików lub nawet uszkodzenie systemu komputerowego.

Niegdyś ideą tworzenia wirusów - bo te były pierwszymi złośliwymi tworami programistów - w większości przypadków było pragnienie zaistnienia w wąskim gronie programistów oraz chęć uprzykrzenia życia użytkownikom systemów komputerowych. Historia wirusów ma swoje początki w połowie XX wieku, kiedy to John von Neumann pracował nad samopowielającymi się automatami. W późniejszych latach zainfekowane komputery po prostu zachowywały się w nieoczekiwany sposób; poprzez „zapychanie” pamięci operacyjnej i dyskowej spadała ich wydajność, a w niektórych przypadkach na ekranie można było zobaczyć różnego rodzaju komunikaty, alarmy lub animacje. Dla przykładu: celem wirusa Elk Cloner(1981) było infekowanie sektorów startowych dyskietek systemów operacyjnych Apple II, rozprzestrzenienie się na jak największą ilość maszyn i każdorazowe uruchamianie się wraz ze startem systemu. Skutkiem ubocznym działania wirusa były migające teksty i obracające się na ekranie obrazki. Innym, bardziej drastycznym efektem infekcji było niszczenie danych zapisanych na dyskach twardych. Niszczycielskie działanie wirusów nie bez powodu miało swoje początki w 1987 roku, kiedy to rok po opracowaniu kontrolera IDE, rozpoczęto produkcję dysków twardych (3,5 cala). Wtedy też rozpoznano masowe infekcje plików .COM oraz .EXE przez wirusa Suriv , a w 1988 nastąpiła globalna epidemia zapoczątkowana wirusem Jerusalem(czwarte wcielenie wirusa Suriv ) na czele. Infekcja skutkowała zniszczeniem wszystkich napotkanych na dyskach plików wykonywalnych.

Robak sieciowy – malware rozprzestrzeniające się za pomocą sieci... Robak jest podobny do wirusa. Robaki replikują się, lecz nie poprzez modyfikowanie plików (dołączanie się) tak jak robią to wirusy. Główną różnicą jest to, że robaki rezydują w pamięci operacyjnej i zwykle są niezauważalne do momentu kiedy tempo i ilość replikacji ogranicza zasoby systemu.Robak komputerowy jest programem, którego celem – podobnie jak w przypadku wirusa – jest rozprzestrzenianie się i destruktywny wpływ na komputery oraz dane. Jednak w przeciwieństwie do wirusa, który musi dołączyć się do programu lub pojedynczego pliku, robak ma swój własny, wbudowany system rozsyłania się. Główną drogą ekspansji robaków jest Internet oraz pamięci flash USB (niegdyś również dyskietki), a celem są w szczególności komputery, których system operacyjny lub oprogramowanie zawierają luki bezpieczeństwa. Cechą charakterystyczną dla robaków jest to, że rezydują one w pamięci operacyjnej i w większości przypadków są niezauważane do momentu, w którym tempo i ilość ich replikacji spowalnia działanie komputera i połączenia sieciowego. W 1987 roku odnotowano pierwszą epidemie dotyczącą sieci lokalnych, która była spowodowana robakiem Christmas Tree . Po infekcji, szkodnik wyświetlał na ekranie monitora świąteczną choinkę i rozsyłał się za pomocą połączenia sieciowego.

Bakteria to określenie złośliwego oprogramowania, które tak samo jak wirus i robak rozprzestrzenia się w bardzo szybkim tempie, co dla tego rodzaju oprogramowania jest najważniejsze. Aktualnie rozpoznaje się w dwa rodzaje oprogramowania zwanego bakterią. Celem pierwszego rodzaju bakterii jest „konsumpcja” jak największej ilości zasobów sprzętowych (najczęściej jest pamięć dyskowa i operacyjna). Rabbit ma tendencję do pozostawiania w systemie śladów wskazujących na źródło infekcji. Drugi rodzaj bakterii jest szczególnym przypadkiem robaka, który - jako samodzielne oprogramowanie - rozprzestrzenia się z komputera na komputer za pomocą sieci, lecz po replikacji usuwa oryginalne kopie swojego kodu.

Malware, które nie replikuje się samodzielnie
Koń trojański to program, który nie powiela się na maszynie ofiary, ale do rozprzestrzenia się za pomocą sieci wykorzystuje funkcjonalność robaków sieciowych. Ideą stworzenia programu nie była jedynie infekcja znajdujących się na dysku plików lecz samo przedostanie się do systemu za pomocą wykorzystania elementów socjotechniki. Następnie pod postacią rzekomo użytecznego narzędzia, którego celem jest np. dobranie i zainstalowanie odpowiednich kodeków multimedialnych, czy też naprawa lub przyspieszenie systemu, koń trojański zagnieżdża się w systemie i daje możliwość zdalnego dostępu do zasobów komputera, które dotyczą m.in.: 
  • kradzieży danych osobowych
  • pobierania z sieci kolejnych zainfekowanych plików
  • operacji na plikach oraz rejestrze systemowym
  • logowania aktywności użytkownika (np. key-logger, screen-logger)
  • otwierania szkodliwych połączeń sieciowych (część botnetu)
Głównym celem konia trojańskiego jest udostępnienie zasobów komputera za pomocą połączenia internetowego – otwarcie systemu na potrzeby szkodliwego działania kierowanego z zewnątrz. Z definicją konia trojańskiego wiążą się również pojęcia taki jak drive-by-download oraz drive-by-install. Pierwsze z nich odnosi się do świadomego pobrania z sieci pliku bez wiedzy na temat zagrożenia jakie niesie za sobą pobierany obiekt, oraz każdego nieautoryzowanego pobrania złośliwego kodu – bez świadomości użytkownika. Z kolei pojęcie drive-by-install w powyższej definicji, zamiast pobrania dotyczy zainstalowania malware. Niektóre konie trojańskie, takie jak Trojan-Spy.Win32.Zbot do maskowania swojej obecności w systemie operacyjnym wykorzystują techniki rootkitów. Jego celem jest przesyłanie cyberprzestępcom danych dotyczących kont bankowych, które zostały zgromadzone na komputerze ofiary.

Mianem backdoor’a nazywa się każdy mechanizm pozwalający obejść egzystujące w danym systemie zabezpieczenia. Pojęcie to nie wiąże się jedynie z łamaniem zabezpieczeń, ponieważ jest wykorzystywane przez wielu programistów przy dużych i ważnych przedsięwzięciach. Stosowanie backdoorów może mieć na celu zabezpieczenie danego programu/systemu w przypadku utraty nad nim kontroli (lub utracenia haseł dostępu). Wykorzystanie backdoora w kodzie logowania do systemu. Język C#. Opracowanie własne na podstawie książki Computer Viruses and Malware (John Aycock):

Cytat:var username = readUsername();
var password = readPassword();
if (username == ”forgot_my_pass”)
{
return ALLOW_LOGIN;
}
else if (isValid(username, password))
{
return ALLOW_LOGIN;
}
else
{
return DENY_LOGIN;
}

Kod backdoora może być połączony z innym złośliwym oprogramowaniem po wykryciu luki bezpieczeństwa w określonym programie lub systemie operacyjnym. Integracja backdoora z robakiem internetowym może otworzyć atakującemu drogę do systemu i umożliwić jego kompromitację. Specyficznym rodzajem backdoora jest RAT (ang. Remote Administration Tool ). Wykorzystany w dobrej wierze służy do zdalnego zarządzania określonym komputerem. W połączeniu z odpowiednio napisanym koniem trojańskim, RAT (w tym przypadku zwany już Remote Acces Trojan ) umożliwia atakującemu monitorowanie i przejęcie zdalnej kontroli nad zainfekowanym systemem.

Spyware – infiltracja za pomocą aplikacji użytkowej. Ideą działania programów spyware - podobnie jak w przypadku koni trojańskich – jest ukrycie niepożądanego działania w systemie operacyjnym. Mimo to, między spyware, a koniem trojańskim istnieje wyraźna różnica. Oprogramowanie uchodzące za spyware spełnia w systemie pewną funkcję, która rzeczywiście daje oczekiwany efekt, np. skanowanie komputera w celu wyszukania śledzących ciasteczek (tracking cookies), ale ukrywa przed użytkownikiem proces nieautoryzowanego wysyłania poufnych informacji pod określony adres. Popularność spyware wzrosła wraz z zauważeniem możliwości wzbogacenia się poprzez sprzedawanie informacji osobistych. Brian Witten i Carey Nachenberg określają spyware jako użyteczne oprogramowanie, które transmituje również prywatne dane użytkownika do podmiotu zewnętrznego . Programy anty-spyware niegdyś były bardzo popularne jako samodzielne narzędzia skanujące system w poszukiwaniu złośliwego kodu, lecz aktualnie większość systemów antywirusowych poprawnie i bez większych problemów wykrywa i usuwa spyware, ponieważ nie jest to skomplikowana infekcja.

Adware – sprzedawanie sylwetek użytkowników sieci. Działanie oprogramowania adrware, jest podobne do spyware – celem jest transmitowanie informacji dotyczących zachowania użytkownika podmiotom trzecim, lecz adware skupia się bardziej na marketingu niż wyrządzaniem użytkownikowi bezpośrednich szkód technicznych. Handel informacjami dotyczącymi użytkowników sieci Internet nie dotyczy jedynie działania hakerów, ale jest również bardzo popularny w korporacjach i firmach zajmujących się np. targetowaniem behawioralnym, czyli dostosowywaniem wyświetlanych na stronach internetowych reklam do zainteresowań użytkownika. Cechą charakterystyczną dla oprogramowania adware jest wyświetlanie na ekranie okienek (pop-up), których treści mogą być ściśle związane z zainteresowaniami użytkownika. Adware to również rodzaj licencji, której zaakceptowanie oznacza zgodę na wyżej wymienione czynności reklamowe.

Rootkit – maskowanie obecności malware w systemie. Rootkit to rodzaj malware, które wykorzystywane jest do ukrycia obecności swojej oraz egzystującego ewentualnie w systemie innego złośliwego oprogramowania pod postacią sterownika niskiego poziomu lub jednego z modułów jądra. Nie pojawia się również w systemie plików, a na liście aktywnych procesów może widnieć jako proces systemowy. Występuję w dwóch głównych odmianach: kernel-modeoraz user-mode . W pierwszej odmianie manipuluje jądrem systemu operacyjnego, aby ukryć zainstalowane w systemie malware oraz osłabia lub wyłącza systemy ochronne działające w trybie jądra (IPS, Firewall). W przypadku odmiany user-mode, rootkit jest w stanie modyfikować i podmieniać pliki biblioteki oraz wykonywalne wykorzystywane przez użytkownika lub administratora systemu. Rootkity do infekcji systemu operacyjnego wykorzystują technikę zwaną stealth. Polega ona m.in. na przechwytywaniu funkcji systemowych i zwracaniu nieprawdziwych wyników oraz umieszczeniu złośliwego kodu w innych procesach, aby ominąć zaporę sieciową. Innymi efektami infekcji, które mogą towarzyszyć obecności rootkitów jest dezaktywacja zainstalowanego programu antywirusowego oraz blokowanie stron producentów programów antywirusowych (np. infekcja trojanem Mebroot ). Dezaktywacja programów antywirusowych, nie tylko w przypadku rootkitów, polega na infekcji rekordu startowego dysku – MBR ( Master Boot Record ). Za jego pomocą do pamięci ładowane są elementy systemu operacyjnego oraz aplikacji i usług uruchamianych wraz ze startem systemu Windows. Dzięki modyfikacji MBR, złośliwy kod jest uruchamiany przed załadowaniem do pamięci procesów systemu antywirusowego, co skutkuje dezaktywacją monitorów zabezpieczających.

Ostatnim zagrożeniem, o którym chcę napisać w tej suchej teorii jest exploit umożliwiający wykorzystanie luk w oprogramowaniu. Luki w zabezpieczeniach programów są słabymi punktami, które mogą zostać wykorzystane w celu uzyskania dostępu do systemu operacyjnego. Wyróżnić można parę przyczyn złamań zabezpieczeń, takie jak egzystujące w systemie wirusy/konie trojańskie, słabe hasła nadane przez użytkowników, czy po prostu błędy (luki) w zainstalowanym oprogramowaniu. W momencie kiedy luka w zabezpieczeniach zostaje rozpoznana, programiści tworzą programy wykorzystujące słaby punkt. Programy takie określane są jako exploity i rozprzestrzeniają się prawie tak samo szybko jak wirusy. Pojęcie exploita nie dotyczy jednak tylko i wyłącznie programu – może być to fragment danych, sekwencja poleceń, usterka lub luka za sprawą której oprogramowanie lub sprzęt nie działa w sposób jaki jest oczekiwany przez użytkownika W przypadku infekcji spowodowanej przez luki w przeglądarce, exploitem zwykle jest skrypty HTML lub JavaScript, którego celem jest pobranie na dysk i uruchomienie innego złośliwego kodu. W każdym programie znajdują się błędy zabezpieczeń, które są wykrywane z biegiem czasu. Producenci oprogramowania aktualizując swoje produkty, pozbywają się kolejnych luk zabezpieczeń. Tak samo jest w przypadku systemów Microsoft Windows, gdzie infrastruktura Microsoft Update ma za zadanie regularnie dostarczać usuwające luki aktualizacje dla systemów Windows. W sytuacji kiedy upublicznienie luki następuje przed opracowaniem i wydaniem aktualizacji, programy wykorzystujące lukę nazywane są Zero Day Exploit . Microsoft udostępnia również narzędzie Enhanced Mitigation Experience Toolkit , które ogranicza ryzyko wystąpienia ataku przy wykorzystaniu exploitów.

Taksonomia malware
Joanna Rutkowska – polska specjalistka w kwestii zabezpieczeń komputerowych – w dokumencie

[Aby zobaczyć linki, zarejestruj się tutaj]

zdefiniowała malware jako część kodu, która zmienia zachowanie jądra systemu operacyjnego bądź czułość/skuteczność aplikacji zabezpieczających system bez świadomości użytkownika i w taki sposób, by operacje te były trudne do wykrycia.

[Aby zobaczyć linki, zarejestruj się tutaj]


Tryb działania złośliwego kodu
Introducing Stealth Malware Taxonomyzakłada, że złośliwe oprogramowanie można podzielić na cztery typy: TYPE 0 , TYPE I , TYPE IIoraz TYPE III

TYPE 0
Złośliwe oprogramowanie jako proces nie wchodzi w interakcje z żadną częścią systemu ani innymi procesami w nieautoryzowany sposób. Może jednak kasować pliki i dane z lokalizacji użytkownika lub też otwierać porty TCP, by komputer stał się częścią botnetu. Zasadniczym wyznacznikiem jest jednak to, że złośliwy kod nie kompromituje systemu operacyjnego i nie zmienia zachowania innych aplikacji oraz procesów uruchomionych w pamięci. Malware zostało przedstawione jako niezależnie działający proces.

[Aby zobaczyć linki, zarejestruj się tutaj]


TYPE I
Patrząc na system operacyjny z różnych punktów widzenia, można stwierdzić, iż zawierają się w nim zasoby relatywnie stałe, lub takie które powinny być stałe (np. tylko do odczytu) oraz takie, które zmieniają się cały czas podczas działania systemu i wykonywania w nim różnorakich operacji. Do grupy pierwszych zasobów można zaliczyć pliki, np. wykonywalne, kod biosu, czy zawartość pamięci EEPROM. Z kolei do grupy zasobów zmiennych należą m.in. niektóre pliki konfiguracyjne i klucze rejestru systemowego oraz przede wszystkim sekcje danych działających procesów oraz jądra. Złośliwe oprogramowanie, które modyfikuje powyżej przedstawione zasoby stałe, klasyfikowane jest jako malware typu I. Konsekwentnie, złośliwy kod, który nie modyfikuje zasobów stałych, a wchodzi w interakcję z zasobami naturalnie zmiennymi (jak sekcje danych) jest klasyfikowane jako malware typu II.

[Aby zobaczyć linki, zarejestruj się tutaj]


W opinii Joanny Rutkowskiej, wykrywanie złośliwego oprogramowania typu I powinno odbywać się za pomocą sprawdzania integralności zasobów stałych, by móc jednoznacznie stwierdzić, czy nie zostały one zmienione przez złośliwy kod. Metodą jaką jest sprawdzanie integralności danych wymuszające posiadanie odniesienia, z którym obiekty będą porównywane. W przypadku systemów operacyjnych z rodziny Windows nie ma z tym problemu ponieważ wzorce takie są dostępne (pliki EXE, SYS, DLL, itp.) i są podpisane cyfrowo przez korporację Microsoft.

Niestety, należy podkreślić, że wiele rozwiązań zabezpieczających takich jak systemy HIPS, czy personalne zapory sieciowe, modyfikują kod jądra systemu operacyjnego w sposób podobny lub nawet taki sam jak złośliwe oprogramowanie. Ponadto, wielu producentów oprogramowania nie podpisuje cyfrowo instalatorów i plików, które w rzeczy samej nie stanowią zagrożenia – przeciwnie, starają się zapobiegać wykonywaniu złośliwego kodu. Dotyczy to również większości aplikacji użytkowych. Przykładem dla malware typu I może być Hacker Defender – rootkit typu user-mode korzystający z metody API-hooking. Występował w wersji open-source, którą każdy zainteresowany mógł dostosować do swoich potrzeb oraz w wersjipłatnej, której cena zależała od ilości zamieszczonych w nim modułów.

TYPE II
Jak zostało to określone wyżej, w przeciwieństwie do złośliwego oprogramowania typu I, malware typu II nie zmienia stałych zasobów systemu (sekcje kodu), lecz wchodziw interakcję z zasobami dynamicznymi, takimi jak sekcje danych (np. poprzez modyfikowanie wskaźników funkcji w niektórych strukturach danych jądra, co pozwala wykonać złośliwy kod zamiast oryginalnego kodu systemu lub danego programu).

[Aby zobaczyć linki, zarejestruj się tutaj]


W wyżej przedstawionym przypadku swojego rodzaju problem polega na tym, że dynamiczne obszary systemu, które są modyfikowane przez malware typu II, de facto są modyfikowane również naturalnie przez sam system lub inne (pożądane) aplikacje. Z tej przyczyny odróżnienie i wykrycie zmian dokonanych przez złośliwe oprogramowanie nie jest oczywiste, co z kolei wymusza niemożność automatycznej weryfikacji integralności ogółu sekcji danych korzystając z haszu lub podpisu cyfrowego, ponieważ sekcje danych po prostu nie mogą zostać „zhaszowane”.

W celu wykrycia złośliwego programowania typu II, należałoby przeanalizować całą sekcję danych należącą nie tylko do jądra i wszystkich sterowników, ale także do aplikacji zabezpieczających uruchomionych w systemie operacyjnym oraz stworzyć listę wszystkich wrażliwych na modyfikację obszarów. Proces ten mógłby okazać się bardzo skomplikowany, a przede wszystkim długotrwały, więc rozwiązanie problemu leżałoby częściowo po stronie producentów systemów oraz oprogramowania – należałoby zadbać o odpowiednie oznakowanie wrażliwych struktur danych oraz oprogramowania zabezpieczającego w celu automatycznego sprawdzenia ich integralności. Stworzenie i opublikowanie listy wrażliwych, dynamicznie zmiennych obszarów systemu w celu porównywania integralności danych zniechęciłoby hakerów do ataku na ww. strefy ponieważ mieli by oni świadomość, że złośliwy kod zostanie zdemaskowany. Z drugiej strony, brak takowej listy wpływa niekorzystanie na korporacje zajmujące się bezpieczeństwem, ponieważ osoby zajmujące się atakowaniem i tak znalazłyby odpowiedni do „zahaczenia” obszar systemu. Bez oficjalnej, stale i dynamicznie rozwijającej się listy wrażliwych danych rozwiązania zabezpieczające nie będą w stanie na bieżąco zweryfikować integralności systemu.

Reprezentantem malware II typu jest m.in. rootkit DeepDoor , który modyfikuje zaledwie cztery wartość DWORD (double word - słowo podwójne – zawierające informacje równe dwóm słowom) w sekcji danych Specyfikacji Interfejsu Sterowników Sieciowych (Network Driver Interface Specification, NDIS) – interfejsie programowania aplikacji dla kart sieciowych.

TYPE III
Rozwiązanie problemu detekcji malware II typu nie oznaczałoby jednak zakończenia walki ze złośliwym oprogramowaniem na niskim poziomie abstrakcji. Zostało dowiedzione, że możliwym jest stworzenie malware, które może przejąć kontrolę nad systemem operacyjnym bez zmian pamięci systemu oraz rejestrów sprzętowych. Ten rodzaj złośliwego kodu został określony jako malware typu III. Sekcja ta ściśle dotyczy wirtualizacji na niskim poziomie, więc koniecznym jest wyjaśnienie pojęcia hipernadzorcy (ang. hypervisor ). Hipernadzorca to narzędzie, które jest niezbędne do poprawnego przeprowadzenia procesu wirtualizacji. Jako, że wirtualizator pozwala jak największej ilości procesów wirtualnych na wykonanie swoich instrukcji bezpośrednio na dostępnych zasobach sprzętowych, konieczne jest zastosowanie systemu kontroli tychże zasobów. W przypadku gdy jakiejś operacji nie da wykonać się na określonym zasobie sprzętowym (zwracany jest błąd ochrony) jest ona przechwytywana i emulowania za pomocą hipernazdorcy – decyduje on, które z wykonywanych procesów można wykonać na rzeczywistych zasobach sprzętowych, a które z nich trzeba emulować.

[Aby zobaczyć linki, zarejestruj się tutaj]


Najważniejszą kwestią dotyczącą malware typu III jest to, że przez brak ingerencji w kod systemu i jądra, nie ma żadnego powiązania prowadzącego do złośliwego kodu (rootkita) - kod rootkita jest całkowicie odłączony od kodu systemu. Może rezydować w pamięci operacyjnej wyglądając jak „jakieś” losowe dane, przez co nie zostanie wykryty przez skaner integralności. Nie znaczy to jednak, że malware typu III nie może zostać wykryte patrząc na skutki uboczne jakie może wprowadzać w systemie. Dla przykładu, można przeprowadzić analizę pewnych instrukcji jeśli istnieje podejrzenie, że zostały przechwycone przez złośliwy kod. Innym sposobem jest próba wykrycia podejrzanej aktywności sieciowej, która w danym momencie nie powinna mieć miejsca. Niestety obie procedury – jako efekty uboczne – mogą być dobrze ukryte i praktyczne zastosowanie ich do wykrywania malware typu III może być nierealne.

Złośliwy kod określony w jako malware typu III jest na tyle ciężki do wykrycia, że należy założyć iż najlepszym rozwiązaniem nie jest detekcja, a zapobieganie – prewencja, na której trzeba polegać. Prewencją w przypadku malware typu III jest posiadanie dobrego hipernadzorcy – raczej wbudowanego w system operacyjny – który zatrzymałby złośliwy kod przed jego załadowaniem. Stworzenie zabezpieczającego przez malware hipernadzorcy jest zadaniem niezwykle trudnym, a na pewno trudniejszym niż stworzenie samego malware typu III.

Podsumowując, złośliwy kodu typu 0 mógłby nie być określany mianem „malware” gdyby nie wprowadzał żadnych zmian do systemu oraz działających aplikacji, z kolei malware typu I modyfikuje struktury, które nie powinny być zmieniane (np. część danego kodu) przez co staje się stosunkowo łatwe do wykrycia. Kod typu II stwarza problem związany z modyfikacją dynamicznych obszarów systemu (sekcje danych), które ciężko skompletować aby utworzyć listę umożliwiającą sprawdzenie integralności danych. Malware typu III jest reprezentowane przez hipotetycznego rootkita nazwanego Blue Pill. Jego działanie miałoby się opierać na technologii wirtualizacji mikroprocesorów – egzystowanie rootkita mogłoby być niewykrywalne ponieważ przejmowałby on rolę hipernadzorcy i umieszczał system operacyjny w wirtualizowanym środowisku.

Proszę nie zapominać, że oficjalny dokument Introducing Stealth Malware Taxonomy oraz teoria dotycząca rootkita Blue Pill pochodzi z 2006 roku i na przestrzeni ostatnich lat producenci oprogramowania położyli dość duży nacisk na cyfrowe podpisywanie aplikacji, szczególnie tych, które na poziomie jądra pełnią ważną rolę w systemie. Większość programów jak Online Armor Firewall, czy polski produkt zabezpieczający SpyShelter Personal umożliwiają domyślne zezwalanie na modyfikację systemu aplikacjom i plikom sygnowanym cyfrowo m.in. przez Microsoft, posiadając w swojej bazie odnośnik do sum kontrolnych oryginalnych, niezmodyfikowanych plików. Od 2006 roku zauważalnie zmieniono postrzeganie malware i ulepszono sposoby zapobiegania jego instalacji w systemach operacyjnych rodziny Windows.

Systemy zabezpieczające i techniki wykrywania malware
Komponenty wykrywania złośliwego kodu i klasyfikacja technik skanowania
Każdą z technologii wykorzystywanych do wykrywania niebezpiecznego oprogramowania można podzielić na dwa moduły: moduł techniczny oraz moduł analityczny. Niezależnie, czy omawiane jest wykrywanie malware za pomocą sygnatur wirusów, czy analiza heurystyczna – moduł techniczny jest zbiorem algorytmów i funkcji prowadzących dane do modułu analitycznego, który przetwarzając dane odgrywa rolę systemu decyzyjnego. W przypadku programów antywirusowych system decyzyjny to miejsce, w którym w zależności od oceny danych, podejmowana zostaje akcja, taka jak usunięcie niebezpiecznego obiektu, poddanie obiektu kwarantannie lub interakcja z użytkownikiem – zależy to od polityki działania programu. Rozpatrując detekcję sygnaturową, kod pliku jest elementem wejściowym do modułu analitycznego, a jego ocena jako bezpieczny lub groźny jest efektem wyjścia z modułu.

[Aby zobaczyć linki, zarejestruj się tutaj]


Techniczny komponent wykrywania złośliwego oprogramowania gromadzi dane, które zostaną wykorzystane do analizy konkretnej sytuacji dla danego obiektu. Na potencjalnie szkodliwy program należy spojrzeć z różnych stron – jest to plik posiadający pewną, szczególną zawartość, ale jest to również zbiór akcji, oraz suma zdarzeń i zmian, które po wykonaniu programu będą miały miejsce w systemie operacyjnym. Każda kolejna z wymienionych perspektyw wiąże się z wyższym poziomem abstrakcji. Przedstawione spojrzenie na analizowany obiekt wyjaśnia dlaczego detekcja następuje na wielu poziomach, takich jak sekwencja bajtów, akcja oraz wpływ programu na system (skutek wykonania). Gromadzenie danych na potrzeby podjęcia decyzji realizowane jest za pomocą skanowania plików (analiza sygnaturowa), emulacji kodu programu, wirtualizacji programu, monitorowaniu zdarzeń systemowych oraz analizie anomalii w systemie.

Najniższy poziom abstrakcji - wykrywanie malware za pomocą sygnatur
Tradycyjna ochrona antywirusowa oparta jest na sygnaturach wirusów i polega na analizie kodu programu i dopasowaniu go do wzorców sygnatur definiujących dane zagrożenie lub zbiór zagrożeń. Jest to najstarsza metoda wykrywania złośliwego oprogramowania, ale w dzisiejszych czasach dalej znajduje swoje zastosowanie podczas skanowania wiadomości e-mail, skanowania ruchu sieciowego, czy transferu plików (odczyt/zapis). Systemy antywirusowe aktualizowane są w najgorszym wypadku codziennie, przez co silnik skanujący względnie na bieżąco uzyskuje informacje o nowych zagrożeniach. Jedna sygnatura może rozpoznawać nawet kilka-kilkadziesiąt odmian malware, ale musi być odpowiednio skonstruowana dla jak najlepszej wydajności. Wzorzec identyfikujący wirusa nie może być zbyt, krótki ponieważ spowodowałoby to w najlepszym wypadku wyświetlanie zbyt wielu fałszywych alarmów (false positive), ale nie może być też zbyt obszerny, ponieważ wpłynęłoby to negatywnie na szybkość skanowania. We wzorcu muszą znajdować się jedynie fragmenty charakterystyczne dla malware, co ułatwia detekcję wielu zagrożeń jedną sygnaturą, gdy kilku różnych programistów wykorzystało tę samą metodę np. infekcji plików. Do rozwiązania problemu konstrukcji sygnatury stosuje się parę krótkich wzorców, które muszą znajdować się w skanowanym obiekcie, by można było stwierdzić, że jest on wirusem. Sygnatura służąca wykrywaniu wielu niezależnych zagrożeń nazywana jest sygnaturą generyczną – nie służy identyfikowaniu poszczególnego, unikalnego zagrożenia, a identyfikuje fragment kodu odpowiadający za złośliwe zachowanie wielu różnych obiektów. 

Między powstaniem nowego zagrożenia a publikacją sygnatury je wykrywającą istnieje pewna luka czasowa. Czas reakcji na nowe zagrożenia niekiedy jest zbyt długi, przez co spora ilość komputerów podłączonych do sieci może zostać zainfekowana – moduł skanujący pliki nie korzysta z prawidłowych informacji o zagrożeniu jakie niesie ze sobą skanowany w czasie rzeczywistym plik. Przypadki takie nazywane są zagrożeniami zero-day.

W sporym uproszczeniu, proces aktualizacji bazy sygnatur w programie antywirusowym wygląda następująco:

1. Przechwycenie próbki zagrożenia przez analityków dostawcy zabezpieczeń
2. Przeanalizowanie próbki ze względu na zachowanie i kod
3. Stworzenie sygnatury umożliwiającej bezbłędne rozpoznanie zagrożenia
4. Przetestowanie stworzonej sygnatury, by upewnić się, że nie jest szkodliwa dla systemu operacyjnego oraz innych bezpiecznych programów
5. Opublikowanie uaktualnienia bazy, która zawiera nową sygnaturę


Ostatnim krokiem jest pobranie i zainstalowanie nowej bazy sygnatur malware na komputerze użytkownika. Aktualizacja silnika oraz bazy definicji wirusów w większości systemów zabezpieczających następuje automatycznie, lecz częstotliwość sprawdzania nowych sygnatur na serwerze producenta zależy od konfiguracji modułu aktualizacji. Producenci innowacyjnych systemów antywirusowych opracowali metodę aktualizacji, która nie zawiera „wady opóźnienia” między wydaniem sygnatury, a pobraniem i zainstalowaniem jej na komputerze klienta. Umożliwia to technika strumieniowego rozsyłania definicji wirusów. Z praktycznego punktu widzenia oznacza to, że zapytanie o aktualizacje nie następuje po stronie klienta – aktualizacje baz sygnatur oraz modułów skanujących są wysyłane do komputerów będących online gdy tylko zostaną przetestowane w laboratorium. Z kolei to oznacza, że w ciągu parunastu minut, baza sygnatur może zostać zaktualizowania kilkukrotnie i klienci nie mają do czynienia z czasowym interwałem sprawdzania aktualizacji.

Z perspektywy technicznej „wykrywanie malware oparte na sygnaturach wirusów” oznacza operacje na kodzie bajtowym plików, z kolei z perspektywy analitycznej, jest to prymitywny sposób przetwarzania i analizowania danych za pomocą porównania. Projektowanie sygnatur dla producentów systemów zabezpieczeń jest procedurą kosztowną m.in. ze względu na konieczność zatrudnienia dużej ilości programistów-analityków pracujących nad aktualizacjami baz wirusów, ale mimo wszystko technologia ta jest stale wykorzystywana w programach antywirusowych z powodów niezawodności.

Silnik antywirusowy „w chmurze”
Trendy w tworzeniu rozwiązań antywirusowych zmierzają w kierunku odciążenia zasobów komputera użytkownika, a detekcja oparta o sygnatury otwarcie uznawana jest za prymitywną. Nowe narzędzia zabezpieczające (realizowane przez „lekkie” klienty instalowane na komputerach) w celu zaoszczędzenia zasobów sprzętowych komunikują się z serwerem przechowującym dane o zagrożeniach w postaci sum kontrolnych, aby uzyskać informacje, czy dany obiekt jest bezpieczny. Jeśli na serwerze nie istnieje suma kontrolna identyfikująca wysłany plik, to jest on analizowany po stronie infrastruktury producenta programu antywirusowego. Rozwiązanie to stosuje już bardzo wielu liczących się na runku producentów oprogramowania antywirusowego. Podczas analizy kilku plików połączenie z chmurą nie obciąża sieci i nie wymaga dużo czasu, lecz w przypadku skanowania złożonych obiektów korzystanie z chmur obliczeniowych przy niskiej wydajności łącza staje się niewygodnym rozwiązaniem. Patrząc na aktualnie dostępną szybkość Internetu, przetwarzanie danych poza komputerem użytkownika jest bardzo dobrym rozwiązaniem, ale ma też swoje wady. W przypadku kiedy program antywirusowy nie posiada własnego, opartego na sygnaturach silnika skanowania, spada wykrywalność zagrożeń w trybie off-line. W takim wypadku ważną rolę odgrywa moduł heurystyczny oraz analiza behawioralna, które niekoniecznie są wbudowanymi składnikami systemu antywirusowego.

Heurystyka
Przed rozwinięciem tematu heurystyk w programach antywirusowych, należy przedstawić również pojęcie emulatora. Jego zadaniem jest uruchamianie kodu podejrzanego programu w bezpiecznym, izolowanym od systemu środowisku. Uruchomienie to polega na rozbiciu kodu bajtowego aplikacji na pojedyncze polecenia, a następnie uruchomieniu poszczególnych poleceń w wirtualnym środowisku, będącym odzwierciedleniem macierzystego środowiska komputerowego. Jeśli silnik emulatora jest wyposażony w system analizy heurystycznej, wszystkie wykonywane procesy mogą być na bieżąco monitorowane i ostatecznie klasyfikowane jako bezpieczne lub zagrażające bezpieczeństwu systemu. Emulacja znajduje swoje zastosowanie na niskim poziomie abstrakcji – jako uzupełnienie silników antywirusowych, lub zabezpieczenie wyższego poziomu abstrakcji – element silnika wirtualizacji jakim jest piaskownica. Szczegółowe działanie emulatora zostało opisane w podrozdziale przeznaczonym Heurystyce dynamicznej. 

Heurystyka jest metodą umożliwiającą znalezienie rozwiązania, gdy brak jest gwarancji dotarcia do rozwiązania prawdziwego bądź optymalnego. Ze względu na ilość zagrożeń (szczególnie dedykowanym systemom operacyjnym z rodziny Windows) stworzono mechanizmy prewencyjne, które odbiegają od porównywania kodu do sygnatur i są oparte o klasyfikację heurystyczną. Heurystyka (gr. heurisko – znaleźć) to umiejętność odkrywania nowych faktów i związków pomiędzy faktami poprzez umiejętne postawienie hipotez. Aktualnie można rozróżnić dwie metody analizy heurystycznej: metodę statyczną oraz metodę dynamiczną.

Heurystyki wykorzystywane są w większości przypadków w czasie rzeczywistym aby nie dopuścić do zagnieżdżenia się malware w komputerze, aczkolwiek metoda statyczna występuje również podczas skanowania na żądanie. Moduł heurystyczny skanując kod źródłowy, analizuje specyficzne, znane jako niebezpieczne atrybuty, które charakteryzują zachowanie złośliwego oprogramowania. Analiza wiąże się głównie z powstrzymywaniem mutacji znanego już malware (np. wirusy polimorficzne). Konfigurowalność modułów heurystycznych jest ograniczona jedynie do czułości skanowania – użytkownik nie ma możliwości dodawania bądź modyfikowania reguł badających pliki.

Webroot:

[Aby zobaczyć linki, zarejestruj się tutaj]


Kaspersky:

[Aby zobaczyć linki, zarejestruj się tutaj]


Avast:

[Aby zobaczyć linki, zarejestruj się tutaj]


Heurystyka statyczna traktuje analizowany obiekt jako ciąg bajtów, a kluczową rolę odgrywają dyskryminatory będące cechami odróżniającymi zainfekowany plik od obiektu bezpiecznego. Aby analizowany element został uznany za niebezpieczny, musi zawierać określoną liczbę dyskryminatorów (np. ciąg bajtów/mikrowzorce lub podejrzana budowa pliku wykonywalnego). Utrudnieniem podczas analizy pliku wykonywalnego lub biblioteki DLL są protektory i kompresory – narzędzia pozwalające na zmniejszenie zajmowanego przez dany plik miejsca dyskowego. Wprowadzają one zmiany podobne do typowych modyfikacji wprowadzanych przez wirusy. Typowe kompresory (np. UPX) i protektory (np. Asprotect) można zidentyfikować i zignorować je, ale narzędzia o otwartych źródłach są często modyfikowane, co wpływa na zwiększenie ilości alertów false positive. Największą zaletą heurystyki statycznej jest jej szybkość działania – obszary analizowane przez moduł nie są duże, co umożliwia całościowe wczytanie ich do pamięci. Wadą jest możliwość poprawnego wykrywania zagrożeń tylko w przypadku, kiedy skanowane dane zawierają konkretne, często występujące w złośliwym oprogramowaniu cechy. Zdefiniowanie pliku jako niebezpieczny następuje tylko wtedy gdy moduł heurystyki statycznej znajdzie w obiekcie wystarczającą ilość dyskryminatorów.

Heurystyka dynamiczna polega na analizowaniu działania kodu (programu) podczas jego wykonywania w emulowanym środowisku. Dzięki takiemu zabiegowi można zebrać informacje na temat zapotrzebowania programu na zasoby systemowe, uruchamiane za jego pomocą procesy lub tworzone/kasowane pliki. Emulacja w systemach antywirusowych została stworzona, by umożliwić odszyfrowanie zaszyfrowanych części wirusów polimorficznych. Kod wirusa w izolowanym środowisku jest wykonywany aż do zakończenia deszyfracji, co w większości przypadków wywołuje funkcję systemową i kończy proces analizy. Nowocześniejsze rozwiązania oferują rozszerzenie funkcjonalności emulatorów o możliwość analizowania obiektu pod kontem behawioralnym – w tym przypadku wywołanie funkcji systemowej nie kończy procesu analizy i detekcji, lecz jest w dalszym ciągu emulowane według zasad działania systemu operacyjnego. Podczas emulacji badane są akcje podejmowane przez obiekt, co pomaga jednoznacznie stwierdzić, czy wykonywane zadanie zagraża bezpieczeństwu systemu.

Zastosowanie pełnej emulacji w procesie wykrywania zagrożeń posiada podstawową wadę, którą jest powolne działanie samego emulatora. Ponadto dodatkowe operacje i sprawdzenia wykonywane wraz z analizą, jeszcze bardziej spowalniają proces emulacji. Ważnym więc aspektem wydajnościowym podczas dynamicznej analizy heurystycznej jest moment, w którym emulacja powinna zakończyć działanie.

Rozwój emulatorów będących częścią programów zabezpieczających jest bardzo dynamiczny i stosowane są w nich co raz nowocześniejsze technologie. Nie znaczy to jednak, że zabezpieczeń nie da się ominąć. Największym problemem podczas analizy emulowanego programu jest niedeterministyczność wykonywania kodu (np. funkcja zwracająca wartość losową). Znaczy to, że program może wywoływać „złośliwą funkcje” co kilka uruchomień, lub tylko i wyłącznie w przypadku kiedy spełnione są dane warunki środowiska – przykładowo rodzaj systemu operacyjnego. Emulator umożliwia sprawdzenie tylko jednej ścieżki działania programu i nie bada wszystkich rozgałęzień kodu, co może skutkować niepoprawną oceną zagrożenia. Ponadto zaawansowane malware potrafi rozpoznać obecność emulatora i dynamicznie zmienić swoje zachowanie lub ewentualnie starać się wydostać z emulowanego środowiska wykorzystując błąd w emulatorze (exploit).

Analiza Behawioralna – badanie zachowania programu
Podobnie jak w przypadku heurystyki – monitor behawioralny ma za zadanie powstrzymać złośliwe oprogramowanie, które nie jest jeszcze oficjalnie umieszczone w bazach sygnatur wirusów. Różnica polega jednak na analizie uruchomionej aplikacji. Monitor behawioralny nie skanuje kodu wykonywanego programu, lecz analizuje jego zachowanie – sprawdza jakie operacje aplikacja wykonuje lub zamierza wykonać. Pojęcie analizy behawioralnej ma związek z ochroną w czasie rzeczywistym, a sama analiza może być przeprowadzana zarówno w środowisku emulowanym, jak i w systemie macierzystym podczas jego właściwego działania. Badanie zachowania programów stanowi wyższy poziom abstrakcji, niż w przypadku heurystyki. 

Proces monitorowania aplikacji poza emulatorem może spowalniać działanie systemu, ale staje się popularniejszy ponieważ ma większe możliwości detekcji złośliwego oprogramowania – brak ograniczeń stawianych przez emulator. Nowoczesne monitory behawioralne podnoszą alarm po wykryciu sekwencji podejrzanych operacji wykonywanych przez aplikacjęi umożliwiają cofnięcie zmian ewentualnie wprowadzonych przez uruchomiony program. Analiza behawioralna jest wykonywana tylko w czasie rzeczywistym (ochrona proaktywna) - moduł nie jest uruchamiany podczas skanowania na żądanie, ponieważ badanie zachowania każdego znajdującego się na dysku pliku wykonywalnego mijałoby się z celem ze względów czasowych i wydajnościowych.

Wirtualizacja – hermetycznie zamknięty poligon dla malware
Wirtualizacja, podobnie jak emulacja, również dotyczy odizolowania wybranych plików i procesów od systemu macierzystego, jednak zawartość kontenerów nie musi być w żaden sposób analizowana pod kątem zagrożeń - to jedna z zasadniczych różnic między emulacją, a wirtualizacją. Wirtualizacja jest logicznym rozszerzeniem emulacji i działa z uruchamianymi aplikacjami. Procesy uruchamiane w wirtualnym środowisku korzystają z zasobów systemu operacyjnego, ale nałożone są na nie ograniczenia dotyczące interakcji z systemem i jego krytycznymi strefami. Przykładem ograniczenia, może być dynamiczne stworzenie wirtualnego katalogu systemowego, do którego badana aplikacja żąda dostępu. Próba zmodyfikowania plików systemowych powiedzie się, lecz malware nie zagnieździ się w systemie ponieważ nie będą to pliki systemu macierzystego. Procesowi wirtualizacji podlegają wszystkie punkty systemu operacyjnego (odczyt/zapis plików, rejestr systemu Windows, pamięć operacyjna), do których uruchomiony proces oczekuje dostępu.

Przedstawiony wyżej przykład wirtualizacji środowiska uruchomieniowego dla programów w systemie Windows ma zasadniczą przewagę nad klasycznymi rozwiązaniami antywirusowymi - zapobiega atakom zero-day - kiedy zagrożenie nie jest umieszczone w bazie sygnatur wirusów i inteligentnie omija heurystykę oraz analizę behawioralną przez niedeterministyczność wykonywania kodu i rozpoznawanie środowiska, jakim może być emulator.

Linia dzieląca emulację i wirtualizację zasobów sprzętowych oraz systemowych jest stosunkowo cienka, ale bardzo wyraźna. Technologia emulacji reprezentowana jest przez środowisko, w którym dana aplikacja jest uruchamiana. Emulator całkowicie kontroluje procesy i pliki podczas wykonywania kodu. Wirtualizacja wykorzystuje macierzysty system operacyjny jako środowisko wykonywania kodu programu i kontroluje jedynie interakcję między systemem operacyjnym a daną aplikacją. W przypadku komputera personalnego, narzędzia zabezpieczające tworzą na wybranej partycji odpowiedni katalog, w którym przechowywane i uruchamiane są wskazane przez użytkownika (lub z domyślnych list producenta narzędzia) programy. Wirtualizacja w pełni korzysta z zasobów sprzętowych komputera – pliki i procesy umieszczone w kontenerach używają pamięci operacyjnej, procesora i dysku twardego w taki sam sposób jak robiłby to w systemie - w środowisku rzeczywistym.

Host-based Intrusion Prevention System
Host-based Intrusion Prevention System (HIPS) służący do wykrywania i zatrzymywania malware może wykorzystywać metody heurystyczne, lecz główną ideą działania systemu zapobiegania włamaniom jest kontrolowanie pracy programów i zdarzeń systemowych. Blokowanie złośliwego oprogramowania, tak samo jak w przypadku analizy behawioralnej oparte jest na badaniu zachowania uruchamianych procesów i zmian w systemie, lecz podstawowym elementem różniącym klasyczny moduł HIPS od monitora behawioralnego jest moment wyświetlenia alarmu. W czasie gdy monitor behawioralny pozwala na uruchomienie programu i zbiera o nim informacje, HIPS zatrzymuje program podczas jego uruchamiania i umożliwia podjęcie decyzji, czy zezwolić na wykonanie określonej funkcji. W przypadku wykonania, monitorowana jest również każda kolejna operacja wykonywana przez program. Gdy użytkownik oceni którąś akcje za niebezpieczną lub niewłaściwą dla uruchamianego programu (np. wykonanie zrzutu ekranu), system zapobiegania włamaniom może przerwać wykonywany proces. Głównym zadaniem modułu ochrony jest wykrywanie zmian inicjowanych z nieautoryzowanych źródeł. Monitory HIPS umożliwiają kontrolę systemu na wielu poziomach: 
  • kontrola uruchamianych procesów
  • kontrola usług
  • kontrola dostępu do rejestru systemowego
  • kontrola dostępu do dysków/plików/katalogów
  • kontrola aktywności sieciowej
Alarmy modułu HIPS wyświetlają szczegółowe informacje dotyczące aktualnie wprowadzanych zmian. W większości przypadków użytkownik ma do dyspozycji akcje takie jak m.in.: 

Zezwolenie na wykonanie zmiany:
- zezwolenie na jednorazowe wykonanie
- zezwolenie i stworzenie reguły dla akcji (podczas kolejnego wykonania użytkownik nie będzie pytany o akcję)
- zezwolenie związane z instalacją zaufanego produktu (trust – install mode) 

Zablokowanie zmiany:
- jednorazowe zablokowanie zmiany
- zablokowanie i stworzenie reguły dla akcji
- zablokowanie i przerwanie dalszego wykonywania (block and terminate)

Utworzenie reguły wiąże się z zapamiętaniem wyboru akcji dla danego procesu lub pliku, a zbiór reguł zezwalających na wykonanie zamian w systemie tworzy „białą listę”.

Model HIPS oparty jest na interakcji z człowiekiem i jest tak skuteczny, jak trafna jest odpowiedź użytkownika na alarm. Zagrożenie może zostać poprawnie wykryte i zatrzymane, jednak przez nieodpowiednią decyzję, system może równie łatwo zostać zainfekowany. Częściowym rozwiązaniem problemu jest udostępnianie na serwerach dostawców programów typu HIPS, bazy znanych i zaufanych aplikacji. Komunikacja programu z bazą za pomocą sieci Internet w czasie rzeczywistym ułatwia użytkownikowi podjęcie właściwej akcji, o ile nie podejmuje jej automatycznie. Podejmowanie decyzji bez ingerencji użytkownika dotyczy jedynie obiektów oficjalnie sklasyfikowanych jako bezpieczne, ewentualnie posiadających wiarygodne i sprawdzone podpisy cyfrowe. Nie jest to procedura obligatoryjna - w przypadku większości programów można ją wyłączyć i nie korzystać z podpowiedzi czerpanych z sieci.Host IDS cechuje się również dużymi możliwościami konfiguracyjnymi - narzędzie daje możliwość dodawania, modyfikowania i usuwania reguł monitorowania systemu, jednak działania takie nie są zalecane początkującym użytkownikom.

Monitorowanie systemu i kontrola zachowań za pomocą HIPS są pojęciami szerszymi od ochrony opartej na heurystyce, czy detekcji sygnaturowej. Należy podkreślić, że kontrola nie jest nastawiona tylko i wyłącznie na wykrywanie złośliwego oprogramowania – nie zawsze klasyfikuje proces jako groźny lub bezpieczny - pomaga na bieżąco weryfikować wszystkie, nawet nieszkodliwe zmiany w systemie, lecz decyzję pozostawia użytkownikowi. Aplikacje typu HIPS działają w czasie rzeczywistym nie wykorzystując emulacji, więc podjęcie złej decyzji podczas monitu o próbie wykonania określonej funkcji przez uruchamiany program może skutkować infekcją systemu tak samo, jak gdyby żadna aplikacja nie monitorowała zdarzeń systemowych.

Podsumowanie
Ochrona przed zagrożeniami dedykowanymi dla systemu Windows jest skomplikowana ze względu na różnorodność występującego malware. Pomijając nie ujętą w poście obronę przed malware atakującym BIOS, chronione muszą być różne obszary systemu: pamięć operacyjna, rejestr systemowy, dostęp do dysku (w tym do krytycznych plików systemowych) oraz połączenia sieciowe. Wymienione wyżej samodzielne techniki i technologie tylko częściowo rozwiązują problemy związane ze złośliwym oprogramowaniem – należy więc je ze sobą odpowiednio integrować w celu uzyskania jak najwyższego poziomu bezpieczeństwa zarówno oprogramowania jak i prywatnych danych. Pełnowartościowa ochrona zasobów informatycznych powinna być realizowana na różnych poziomach abstrakcji - począwszy od analizy kodu plików, poprzez analizę zachowania programów, wirtualizację i monitorowanie systemu oraz połączeń sieciowych. Informacje zamieszczone w poście są bliższe użytkownikom końcowym niż klientom korporacyjnym. Ochrona infrastruktury informatycznej w firmach realizowana jest w trochę inny sposób, o czym może również uda mi się kiedyś napisać. 

W razie potrzeby i możliwości oczywiście będę poprawiał bądź też uzupełniał post.

Żaden fragment tekstu publikacji nie może być powielany lub rozpowszechniany w żadnej formie i w żaden sposób bez uprzedniego zezwolenia autora.


Źródła i informacje:
A. Shevchenko: Ewolucja technologii wykorzystywanych do wykrywania szkodliwego kodu
B. Sosinsky: Sieci komputerowe Biblia
Emsisoft Knowledgebase: What is a HIPS?
J. Aycock: Computer Viruses and Malware
J. C. Foster, M. Price: Sockets, Shellcode, Porting & Coding: Reverse Engineering Exploits and Tool Coding for Security Professionals
J. Dębski: Wirusy komputerowe i techniki antywirusowe
J. Dębski - Programy antywirusowe od środka
J. Dębski; Heurystyka w programach antywirusowych
J. Erickson: Hacking: Sztuka Penetracji
J. Rutkowska: Introducing Stealth Malware Taxonomy
J. Turkulainen: Emulators and disassemblers
K. Mitnick: Sztuka Podstępu
M. Christodorescu, S. Jha, D. Maughan, D. Song, C. Wang: Advances in Information Security - Malware Detection
M. Sikorski, A. Honig: Practical Malware Analysis
P. Gregory: Computer Viruses for Dummies
T. Bradley: Essential Computer Security
Xin. Zhou, Bo Xu, Yaxuan Qi, Jun Li: MRSI: A Fast Pattern Matching Algorithm for Anti-virus Applications
SpyShelter Firewall
Odpowiedz
#2
nikita , bardzo fajne mini-kompendium! Beer
Odpowiedz
#3
Rozumiem po ostatnim akapicie, że to tekst autorski...gratulacje więc i podziękowania za tak obszerne opracowanie w jednym miejscu. To będzie...tak sądzę...bardzo przydatne i wygodne dla większości początkujących z zabezpieczeniami oraz dla tych, którzy coś tam już wiedzą i umieją, ale specjalizują się w jakimś konkretnym obszarze.
----------------------------------
edit:
Czekam tylko na aneks dotyczący backupu...to niezwykle istotny element ochrony.
"Bezpieczeństwo jest podróżą, a nie celem samym w sobie - to nie jest problem, który można rozwiązać raz na zawsze"
"Zaufanie nie stanowi kontroli, a nadzieja nie jest strategią"
Odpowiedz
#4
Dziękuje za miłe słowa. Nie ukrywam, że to bardzo motywujące.

Backup, hm... ichito, mówisz masz. Oczekuj... Wink
SpyShelter Firewall
Odpowiedz
#5
nikita

Super artykuł,dobrze się go czytało,tak trzymaj dalej leci plus Smile
Odpowiedz


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości