Temat: Zagrożenia i anomalie w systemach komputerowych. Metody detekcji. inż. Mateusz Olejnik, KNI 2012, 3.04.2012 1
Część I - Atak: 1. Złośliwe oprogramowanie definicje i taksonomia. 2. Środowiska działania - zależności. 3. Strategie infekcji. 4. Wirusy rezydujące w pamięci. 5. Metody ukrywania wirusów, wirusy polimorficzne i metamorficzne. 6. Co jeszcze? Część II - Obrona: 1. Podejścia i techniki obronne. 2. Skanowanie rozwój metod. 3. Emulacja kodu, heurystyka, sprawdzanie spójności, sand-boxing. 4. Problemy skanowania pamięci, propozycje rozwoju. inż. Mateusz Olejnik, KNI 2012, 3.04.2012 2
A virus is a program that is able to infect other programs by modifying them to include a possibly evolved copy of itself. Dr Frederic B. Cohen (1984r.) A computer virus is a program, that recursively and explicitly copies a possibly evolved version of itself. Peter Szor (2005r.) inż. Mateusz Olejnik, KNI 2012, 3.04.2012 3
Wirusy (viruses), zarazki (germs); Robaki (worms); Bomby logiczne (logic bombs); Konie trojańskie (trojan horses); Exploity (exploits); Key loggery (keyloggers); Rootkity (rootkits); Ogólnie przyjęty schemat nazewniczy: [<malware_type>://][<platform>/]<family_name>[.<group_name>] [.<infective_length>][.<variant>[<devolution>]][<modyfiers>] przykład: Virus://W32/Beast.4174.A inż. Mateusz Olejnik, KNI 2012, 3.04.2012 4
Zależność od architektury systemu komputerowego: różny proces ładowania dla różnych systemów operacyjnych różny układ pamięci operacyjnej (schematów adresacji) Metody: implementacja dla dwóch różnych architektur w kodzie wirusa (wirus sprawdza architekturę i sam dokompilowuje część swojego kodu) wirusy w pseudoformacie (kodzie pośrednim) w obu przypadkach konieczność dodania fragmentu kodu rozpoznającego, skompilowanego w danej architekturze inż. Mateusz Olejnik, KNI 2012, 3.04.2012 5
Zależność od jednostki CPU: ta sama operacja różnie zakodowana NOP -> 0x90 (Intel CPU) NOP -> 0x01 (VAX) zmiana kodu operacji w kolejnych wersjach procesora (stary kod operacji nie jest już wspierany) Metody: zamiana kodu operacji gdy ta znajduje się już w kolejce prefetch procesora (Intel 8088, 8086) trudność w debugowaniu inż. Mateusz Olejnik, KNI 2012, 3.04.2012 6
Harvard Architecture wysoki koszt dodatkowych pinów procesora, zapewniających połączenie z dwoma pamięciami Von Neuman Architecture (z elementami architektury Harvardzkiej dostęp do cache) inż. Mateusz Olejnik, KNI 2012, 3.04.2012 7
Zależność od systemu operacyjnego (i jego wersji) tryby user-mode i kernel-mode w różnych systemach operacyjnych różny dostęp do interfejsów sieciowych, interfejsów I/O format pliku PE w systemach Windows poprawki eliminujące podatności występujące we wcześniejszych wersjach systemu operacyjnego Metody: niektóre wirusy wymagają tylko niewielkich poprawek aby przenieść je z systemu Windows NT/XP na Windows 7 wirusy wykorzystujące podatności w maszynach wirtualnych (np. JVM) inż. Mateusz Olejnik, KNI 2012, 3.04.2012 8
Zależność od systemu plików strumienie NTFS (! ) kompresja plików NTFS, wykorzystywana przez niektóre wirusy Zależność od formatu pliku wirusy plików EXE na DOS ie, NE na 16-bit Windows i OS/2 wirusy plików PE na 32 bit Windows wirusy plików PE+ na 64-bit Windows wirusy bibliotek łączonych dynamicznie (DLL) wirusy plików ELF na Unix (zarówno 32 jak i 64-bit) wirusy sterowników (rezydujące w pamięci) wirusy makr i skryptowe (także AUTORUN.INF od Win95 wzwyż) inż. Mateusz Olejnik, KNI 2012, 3.04.2012 9
Wirusy rozruchowe (Boot Viruses) infekcje MBR (zamiana Boot Strap Loader a) wykorzystanie INT 13h w celu czytania i pisania do dysku kopiowanie MBR na koniec dysku, zastępowanie MBR (i pełnienie jego funkcji przez wirus), zmiana w Partition Table inż. Mateusz Olejnik, KNI 2012, 3.04.2012 10
Wirusy infekujące pliki wirusy nadpisujące Algorytm: 1. Znajdź wszystkie (*.*) nowe pliki hosta w bieżącym katalogu. 2. Otwórz plik do zapisu. 3. Nadpisz kodem wirusa plik hosta (może zmienić rozmiar pliku hosta). inż. Mateusz Olejnik, KNI 2012, 3.04.2012 11
Wirusy infekujące pliki wirusy nadpisujące losowe fragmenty pliku hosta + Trudne do wykrycia przez skaner/emulator kodu - Kod wirusa może się nie wykonać inż. Mateusz Olejnik, KNI 2012, 3.04.2012 12
Wirusy infekujące pliki wirusy dopisujące się na końcu pliku wirus przechowuje pierwsze 3 bajty pliku w swoim kodzie w miejsce wyciętych bajtów wirus wstawia instrukcję skoku a) JMP start_of_virus b) CALL start_of_virus c) PUSH start_of_virus RET inż. Mateusz Olejnik, KNI 2012, 3.04.2012 13
Wirusy infekujące pliki wirusy wpisujące się na początku pliku wirus wpisuje swój kod na początku pliku wykonywalnego właściwy kod programu przesunięty zostaje o liczbę bajtów równą rozmiarowi wirusa trudności w czasie wykonania (parametry wejściowe) próba przechowywania oryginalnego programu w tymczasowym pliku inż. Mateusz Olejnik, KNI 2012, 3.04.2012 14
Wirusy infekujące pliki wirusy pasożytnicze wirus wpisuje swój kod na początku pliku wykonywalnego, zastępując początkowe bajty kodu programu zastąpione bajty dopisywane są na końcu pliku naprawa wymaga odliczenia pewnej liczby bajtów od końca pliku w celu wpisania ich na początek pliku inż. Mateusz Olejnik, KNI 2012, 3.04.2012 15
Wirusy infekujące pliki wirusy wypełniające (cavity virus) wirusy wypełniają wolne miejsca w pliku zera w pliku binarnym, spacje (0x20) nie zwiększają rozmiaru pliku hosta inż. Mateusz Olejnik, KNI 2012, 3.04.2012 16
Wirusy infekujące pliki podzielone wirusy wypełniające wirusy wypełniają wolne miejsca w pliku szukają wielu takich miejsc zastępowanie punktu wejścia przez punkt wejścia wirusa konieczność dodawania instrukcji JMP inż. Mateusz Olejnik, KNI 2012, 3.04.2012 17
Wirusy infekujące pliki wirusy kompresujące wirus kompresuje kod programu, tak aby po dodaniu swojego kodu całkowity rozmiar pliku nie zmienił się wirus modyfikuje entry-point tak aby wskazywał na kod wirusa wirus zawiera dekompresor, który rozpakowuje kod programu do pamięci inż. Mateusz Olejnik, KNI 2012, 3.04.2012 18
Wirusy infekujące pliki technika wbudowanego deszyfratora (ser szwajcarski) entry-point modyfikowany jest tak aby wskazywał na pierwszy fragment deszyfratora deszyfrator odszyfrowuje kod wirusa zastąpiony oryginalny kod znajduje się w kodzie wirusa bardzo trudne do wykrycia inż. Mateusz Olejnik, KNI 2012, 3.04.2012 19
Wirusy infekujące pliki wirusy nadpisujące punkt wejścia (EPO entry point obscuring) utrudnia odnalezienie przez tzw. skanowanie szybkie wyszukuje specyficzne instrukcje (JMP, CALL etc.) pojawiające się w entry-poincie, jednak zamiast je zastąpić wstawia swój kod po odpowiedni adres inż. Mateusz Olejnik, KNI 2012, 3.04.2012 20
Wirusy infekujące pliki wirusy modyfikujące wywołania API jedna z najpopularniejszych zaawansowanych technik infekcji, wirus podmienia adresy odwołań do API w sekcji code implementacja Microsoft -> CALL DWORD PTR [] implementacja Borland -> JMP DWORD PTR [] podmienienie wywołania do ExitProcess() inż. Mateusz Olejnik, KNI 2012, 3.04.2012 21
Wirusy infekujące pliki wirusy podmieniające tablice importów w pliku PE znajduje się tablica z zaimportowanymi adresami odwołań do API (np. GetProcessAdress(), FindFirstFileA() ) wirus podmienia adresy odwolań, tak aby wskazywały na jego kod inż. Mateusz Olejnik, KNI 2012, 3.04.2012 22
wirusy bezpośrednio atakujące pliki (direct-action viruses), po wczytaniu do pamięci razem z programem hosta, wyszukują nowe obiekty (pliki) do zarażenia (sekwencja FindFirst(), FindNext() ) wirusy rezydujące w pamięci (memory-resident viruses) przejmują kontrolę nad systemem, alokują dla siebie pamięć, ładują się do niej, aktywują a na końcu przenoszą sterowanie do swojego kodu Ale zaraz, jak to przejmują kontrolę nad systemem? inż. Mateusz Olejnik, KNI 2012, 3.04.2012 23
Boot wirusy i podmiana wywołań w tabeli przerwań inż. Mateusz Olejnik, KNI 2012, 3.04.2012 24
Wirusy zarażające procesy User Mode Kernel Mode wirus ładuje się przed procesem hosta wirus pozostaje w pamięci jako sterownik oraz podmienia przerwanie INT 2Eh wirus ładuje się jako osobny wątek wirus alokują pamięć w trybie user mode i tam się przenosi wirus ładuje się jako usługa wirus ładuje się jako biblioteka DLL poprzez modyfikację kluczy rejestru polecenie: driverquery inż. Mateusz Olejnik, KNI 2012, 3.04.2012 25
antydeasemblacja szyfrowanie kodu, obfuskacja, zamiana jednego polecenia assemblera na inne, równoważne w celu zmylenia deasmblera inż. Mateusz Olejnik, KNI 2012, 3.04.2012 26
antydebugging hookowanie przerwań INT 1 oraz INT 3 (używanych przez debuggery do breakpoint ów), sprawdzanie stosu w czasie wykonywania się wirusa (w celu wykrycia obecności debuggera), użycie API IsDebuggerPresent() (sic! -> http://msdn.microsoft.com/en-us/library/ windows/desktop/ms680345(v=vs.85).aspx ), sprawdzanie kluczy rejestru oraz tablicy załadowanych sterowników, blokada klawiatury oraz wiele innych inż. Mateusz Olejnik, KNI 2012, 3.04.2012 27
antyheurystyka statyczna heurystyka polega na formacie plików oraz analizie fragmentów kodu, heurystyka dynamiczna emuluje środowisko i wykonuje kod. Wirusy w celu uniknięcia wykrycia pakują i kompresują swój kod, dołączają się nie tylko do jednej, ale do wielu sekcji w pliku, szyfrują nagłówek oryginalnego pliku, który jest zapisywany na końcu zainfekowanego pliku, zmieniają nazwy poszczególnych sekcji i wykorzystują wiele innych technik. inż. Mateusz Olejnik, KNI 2012, 3.04.2012 28
antyemulacja wirusy wykorzystują instrukcje FPU, nie tylko CPU, wirusy ustawiają uchwyt, który przekazuje kontrolę do programu hosta w przypadku wystąpienia wyjątku, używają długich pętli, które pozornie nic nie robią, a tak naprawdę służą do wytworzenia klucza szyfrującego i zaszyfrowania kodu wirusa wirusy rozpoznające pliki kozły ofiarne specjaliści badający działanie wirusów, tworzą proste pliki, a następnie infekują je wirusem w celu zrozumienia jego działania. Nowoczesne wirusy są w stanie rozpoznać takie pliki i ich nie atakują inż. Mateusz Olejnik, KNI 2012, 3.04.2012 29
wirusy polimorficzne Wirus zmienia swój wygląd w pliku hosta np. poprzez szyfrowanie swojego kodu każdorazowo innym kluczem i dołączanie deszyfratora do swojego kodu. Deszyfrator jest zmutowany w sposób losowy, tak aby nie mógł być łatwo rozpoznany. wirusy metamorficzne Wirus zmienia swój wygląd w pliku hosta, nie korzystając jednak z szyfrowania, ale poprzez dopisanie/skasowanie pewnych instrukcji śmieciowych do swojego kodu. Taki wirus może także np. zmieniać kodowanie instrukcji na poziomie assemblera (zmiana jednej instrukcji na drugą, o innym kodzie ale tej samej funkcji). Najtrudniejsze w rozpoznaniu są wirusy zamieniające całe bloki logiczne. inż. Mateusz Olejnik, KNI 2012, 3.04.2012 30
robaki internetowe i konie trojańskie podatności i exploity ataki przepełniające bufor i nadpisujące stos inż. Mateusz Olejnik, KNI 2012, 3.04.2012 31
1. Peter Szor, The art of computer virus research and defense, Symantec Press, 2005 2. Virus Bulletin, http://www.virusbtn.com/index 3. http://www.symantec.com/connect/security/articles (sekcja: Malicious Code) 4. http://www.symantec.com/connect/articles/detectingcomplex-viruses inż. Mateusz Olejnik, KNI 2012, 3.04.2012 32
W przygotowaniu na przyszły tydzień obrona, czyli jak mamy sobie radzić z tymi łobuzami? inż. Mateusz Olejnik, KNI 2012, 3.04.2012 33