Temat: Rootkit stworzony w oparciu o technikę "SSDT hooking". Autor: Damian Tykałowski. I. Cel projektu

Podobne dokumenty
Linux vs rootkits. - Adam 'pi3' Zabrocki

Rootkity - zagrożenie czy plotki? Mateusz Sell, Dariusz Świderski MKS Sp. z o.o.

Rejestr HKEY_LOCAL_MACHINE

Necurs analiza malware (1)

Struktury systemów operacyjnych

16MB - 2GB 2MB - 128MB

UNIX: architektura i implementacja mechanizmów bezpieczeństwa. Wojciech A. Koszek dunstan@freebsd.czest.pl Krajowy Fundusz na Rzecz Dzieci

Wyszukiwanie plików w systemie Windows

Konwersja maszyny fizycznej na wirtualną.

5.4. Tworzymy formularze

Konwersja maszyny fizycznej na wirtualną

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Aplikacja Sieciowa wątki po stronie klienta

Wykonać Ćwiczenie: Active Directory, konfiguracja Podstawowa

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

U M L. System operacyjny Linux zagnieżdżony w zewnętrznym systemie operacyjnym (Linux)

Rozdział II. Praca z systemem operacyjnym

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

Agenda. Rys historyczny Mobilne systemy operacyjne

Informatyka II. Laboratorium Aplikacja okienkowa

PROGRAMY NARZĘDZIOWE 1

Rozdział 5. Administracja kontami użytkowników

Projekt PaX. Łata na jądro systemu operacyjnego Linux Strona projektu: pax.grsecurity.net

Diagnostyka pamięci RAM

Lekcja : Tablice + pętle

Instrukcja konfiguracji programu Fakt z modułem lanfakt

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

1) Czym jest architektura systemu Windows 7 i jak się ją tworzy? 2) Jakie są poszczególne etapy uruchomienia systemu Windows 7?

Biuletyn techniczny. CDN OPT!MA 8.5 Wskazówki dotyczące instalacji programu. Copyright 2006 COMARCH SA

Dział Dopuszczający Dostateczny Dobry Bardzo dobry Celujący

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Robert Barański, AGH, KMIW Writing TDM and TDMS Files in LabVIEW v1.0

Plan na dziś. Co to jest wirus komputerowy? Podział wirusów komputerowych Jak działają wirus komputerowe? Jak zabezpieczyć się przed wirusami?

Monitor maszyn wirtualnych

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Instrukcja użytkownika ARSoft-WZ1

Struktury systemów operacyjnych Usługi, funkcje, programy. mgr inż. Krzysztof Szałajko

Antywirusy. Marcin Talarczyk. 2 czerwca Marcin Talarczyk Antywirusy 2 czerwca / 36

dr inż. Jarosław Forenc

ATAKI NA SYSTEMY KOMPUTEROWE POZNAJ SWOJEGO WROGA. opracował: Krzysztof Dzierbicki

Programowanie zespołowe

Bezpieczeństwo w sieci Internet Rodzaje złośliwego oprogramowania

5. Administracja kontami uŝytkowników

Geneza rejestru systemu Windows

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Technologia Automatyczne zapobieganie exploitom

Ustalanie dostępu do plików - Windows XP Home/Professional

Laboratorium - Zarządzanie systemem plików poprzez wbudowane oprogramowanie w systemie Windows 7

Architektura i administracja systemów operacyjnych

Linux vs rootkits. - Adam 'pi3' Zabrocki

Mikroinformatyka. Mechanizmy ochrony pamięci

enova Systemowe Narzędzia Projektowe

Tworzenie prezentacji, PowerPoint

Zadanie 1 Treść zadania:

Instalacja/aktualizacja systemu Android na tablecie Plug Impact/3G.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

5.2. Pierwsze kroki z bazami danych

Analiza możliwości złośliwego oprogramowania vjw0rm w kampanii phishingowej PayU

Maszyna stanu State Machine

Jądro systemu operacyjnego

Faza Określania Wymagań

Mechanizmy pracy równoległej. Jarosław Kuchta

SQL z perspektywy hakera - czy Twoje dane są bezpieczne? Krzysztof Bińkowski MCT,CEI,CEH,ECSA,ECIH,CLFE,MCSA,MCSE..

Dzielenie sieci na podsieci

Instrukcja instalacji certyfikatu w systemie Windows

Platformy programistyczne:.net i Java L ABORATORIUM 7,8: HACKATHON - JTTT

Systemy operacyjne i sieci komputerowe Szymon Wilk Etapy uruchamiania systemu 1

Wykład 2: Budowanie sieci lokalnych. A. Kisiel, Budowanie sieci lokalnych

Opis zmian funkcjonalności platformy E-GIODO wprowadzających możliwość podpisania wniosku bezpośrednio w oknie przeglądarki.

Instrukcja konfiguracji programu Fakt z modułem lanfakt

Ewidencja Wyposażenia PL+

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Futex (Fast Userspace Mutex) Łukasz Białek

WYMAGANIA EDUKACYJNE Z PRZEDMIOTU DIAGNOZA I NAPRAWA SYSTEMÓW KOMPUTEROWYCH

QEMU działa na procesorach procesorach: emuluje procesory: dostępne dla s.o. hosta:

Wirusy w systemie Linux. Konrad Olczak

Status usługi Instalatora Windows

System plików. Warstwowy model systemu plików

Laboratorium - Zarządzanie systemem plików poprzez wbudowane oprogramowanie w systemie Windows XP

Przykładowe sprawozdanie. Jan Pustelnik

Struktura dysku. Dyski podstawowe i dynamiczne

Wirtualizacja. Metody, zastosowania, przykłady

Wyciąg z ogólnej analizy ataków na witryny administracji państwowej RP w okresie stycznia 2012r.

PRZEWODNIK PO ETRADER PEKAO ROZDZIAŁ I. JAK ZACZĄĆ PRACĘ Z ETRADER PEKAO? SPIS TREŚCI

Ochrona płatności online za pomocą technologii Bezpieczne pieniądze

etrader Pekao Podręcznik użytkownika Jak zacząć pracę z etrader Pekao?

ODCZYT PRZEZ ZŁĄCZE OBD

Paragon Camptune X. Podręcznik użytkownika

Kodu z klasą. Skarb w zatrutej wodzie, cz. 2. Scenariusz 6

użytkownika 1 Jak wybrać temat pracy 2 Spis treści 3 Część pierwsza problematyka 4 Część druga stosowane metody 5 Część trzecia propozycja rozwiązania

Przegląd technik wirtualizacji i separacji w nowoczesnych systemach rodziny UNIX

Budowa systemów komputerowych

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Język C++ zajęcia nr 2

ROZKŁADY MATERIAŁU PRZEDMIOT ELEMENTY INFORMATYKI KLASA IV, V I VI.

AM 331/TOPKATIT Wsparcie techniczne użytkowników i aplikacji w Windows 7

Memeo Instant Backup Podręcznik Szybkiego Startu

Programy antywirusowe dostępne bez opłat

Ćwiczenie 6. Wiadomości ogólne.

- komputer (stacja robocza) ma być naprawiony i skonfigurowany w siedzibie firmy,

Transkrypt:

Temat: Rootkit stworzony w oparciu o technikę "SSDT hooking". Autor: Damian Tykałowski I. Cel projektu Jako temat projektu wybrałem stworzenie rootkit'a, który działałby w oparciu o technikę o nazwie "SSDT (System Service Descriptor Table) hooking", czyli tłumacząc na język polski, "modyfikacja" tablicy wskaźników funkcji zajmujących się obsługą podstawowych wywołań systemowych. System posiada tablicę, w której przechowuje adresy funkcji, które są wywoływane poprzez Win32API takich jak np. CreateWindow() czy WriteFile(). Wykorzystując opisywaną technikę, istnieje możliwość zamiany funkcji w tej tablicy, bądź modyfikacji w celu ukrycia intruza w systemie, tj. rootkita. Polega to na tym, że modyfikujemy daną funkcję dodając do niej warunki, które pozwalają nam na ukrycie aktywności rootkita w systemie np. poprzez ukrycie jego plików na dysku (najczęściej poprzez zamianę funkcji FindFirstFile() i FindNextFile()) czy też ukrycie naszego programu na liście uruchomionych procesów w systemie. Modyfikacja wyżej wymienionej tablicy daje nam ogromne możwliości i bardzo utrudnia wykrycie takiego intruza w systemie. Celem projektu jest stworzenie takiego programu, którego zadaniem jest jak najlepiej ukryć się w systemie za pomocą opisanej techniki, przy czym przejąłby on kontrolę nad systemem użytkownika i dawał możliwość wykonywania różnych operacji na komputerze ofiary. 2. Wstęp Należy zacząć od tego, czym jest rootkit. A więc termin ten odnosi się do narzędzia bądź zestawu narzędzi, którego zadaniem jest przejąć kontrolę nad systemem jednocześnie pozostając cały czas w ukryciu, tak aby użytkownik nie miał świadomości, że jego komputer jest kontrolowany. Dzieje się to poprzez szereg technik, m.in. ukrywanie rootkita na liście procesów, ukrywanie aktywnych połączeń TCP/IP związanych z intruzem, ukrywanie plików na dysku itp. Używa się do tego różnych technik, jedną z bardziej popularnych technik jest modyfikacja tablicy SSDT, tak jak jest to w temacie. Zarys tej techniki został opisany wyżej. Należy rozgraniczyć tu pewną granicę pomiędzy tym, czym jest malware a czym jest tak naprawdę rootkit. Malware jest tworzony w celu przechwycenia różnych, cennych informacji bądź innych podobnych celach np. wykonywanie różnych zadań z poziomu użytkownika dla osiągnięcia korzyści atakującego. Malware jest też często o wiele bardziej łatwy do wykrycia niż rootkity. Natomiast głównym zadaniem rootkita jest jedno - pozostać niewykrytym, jak tylko to długo możliwe. Jeżeli na komputerze zostanie wykryta jego obecność, to znaczy że zawiódł. Drugim, również ważnym zadaniem, jest przejęcie praw roota/administratora na komputerze. W ten sposób umożliwia to atakującemu pełną kontrolę nad ofiarą, przy czym ofiara nie powinna być niczego świadoma. Malware jest często tworzony na szerszą skalę, np. w celu budowy botnetów, podczas gdy rootkity mają pewne wyspecjalizowane cele, tj. komputer osoby posiadającej ważne informacje lub dostęp do wrażliwych danych, bądź pewien sektor gospodarki, np elektrownia atomowa. Rootkity są tworzone pod konkretne platformy, np. kernel w wersji 3.0.2 podatny na atak, nie oznacza, że kernel 2.6.32 tego samego systemu również jest podatny. Tytułowe aplikacje działają w oparciu o różne techniki, aby oszukać użytkownika

i oprogramowanie, które zajmuje się wyszukiwaniem szkodliwych programów na komputerze. Ja skupie się na technice modyfikacji tablicy SSDT. Najpierw postaram się opisać niezbędne podstawy, aby jak najlepiej zrozumieć na czym polega ta technika, a następnie przejdę do opisu samej techniki, na czym ona polega, w jaki sposób działa. Następnie po rozważaniach teoretycznych zajmę się implementacją przedstawionego rozwiązania. Będę zapisywał na bieżąco swoje wnioski i spostrzeżenia z procesu implementacji, aby na końcu wyciągnąć wnioski. 3. Teoria Podobnie jak zwykłe programy posiadają swoje tablice, gdzie przechowują adresy poszczególnych funkcji, tak kernel posiada swoją tablicę, gdzie trzyma lokacje, gdzie znajdują się funkcje systemowe, odpowiedzialne m.in. za komunikację ze sprzętem i zarządzanie zasobami. Użytkownik wywołując funkcję, posłusznie czeka na odpowiedź, nie zagłębiając się w to co się dziele dalej z wywołaniem funkcji. A tak naprawdę wywołanie przechodzi długą drogę, zanim trafi do warstwy sprzętowej w postaci 0 i 1 (gdyż tylko taka postać jest akceptowalna), a następnie tą samą drogą wraca odpowiedź. Po drodze znajduje się kilka innych etapów, nas będzie interesować zwłaszcza System Services, czyli SSDT. Poniżej uproszczony schemat:

SSDT jest tworzona podczas inicjalizacji ntoskrnl.exe (kernel image systemów z rodziny Windows NT) i jest używana przez KiSystemService() ( KiSystemService jest funkcją w kernelu, która jest uruchamiana za każdym razem, gdy wywoływana jest usługa systemowa i zajmuje się odszukiwaniem Entry Pointów funkcji wywoływanych z natywnego API). Tak naprawdę jest to ostatnia brama pomiędzy aktualnie wywoływaną funkcją z kernela a wywołaniem z wyższego poziomu). Warto tutaj przytoczyć przykład jak wygląda droga wywołania dla CloseHandle:

Struktura SSDT wygląda następująco: typedef struct SERVICE_DESCRIPTOR_TABLE { PNTPROC pservicetable; PULONG pdwcountertable; ULONG dwservicelimit; PUCHAR pargumenttable; } SERVICE_DESCRIPTOR_TABLE, *PSERVICE_DESCRIPTOR_TABLE; W systemie są obecne dwie tablice: KeServiceDescriptorTable i KeServiceDescriptorTableShadow, ntoskrnl exportuje tylko pierwszą. Obie z nich są zdefiniowane jako tablice SERVICE_DESCRIPTOR_TABLE i tak np. SERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable[index]. W jednej i drugiej tablicy pod indexem 0, znajdują się adresy Nt API. Dla przykładu załóżmy, że mamy do zhookowania funkcję NtCreateFile. Schemat postępowania wygląda następująco: - najpierw potrzebujemy znaleźć wejście danej funkcji w SSDT (KeServiceDescriptorTable). Punktem wejściowym dla naszej funkcji jest KeServiceDescriptorTable[0].pServiceTable[*(PULONG) ((PUCHAR) NtCreateFile + 1 ))] - odczytujemy znajdującą się tam wartość i zachowujemy ją do późniejszego użytku - zmieniamy wartość wpisu, tak aby wskazywał na naszą funkcję, która ma zostać wywołana Jednak nie można zapomnieć o tym, że tablica, którą chcemy zmodyfikować znajduje się w pamięci przeznaczonej tylko do odczytu. Aby ominąć ten problem, musimy zmodyfikować rejestr kontroly CR0 w odpowiedni sposób. Rejestr ten ma 32-bity długości, a na jego 17 bicie znajduje się flaga WP (Write Protection), która określa zdolność zapisu procesora na stronach w pamięci oznaczonych tylko do odczytu. Jeżeli CR0.WP = 0, wtedy jest możliwość modyfikacji tablicy SSDT, co umożliwia wykonanie ataku. Do wykonania tej czynnośći wystarczy prosta wstawka assemblerowa. Po tym możemy przejść do hookowania naszej tablicy. Potrzebujemy wskaźnika do SSDT, adresu naszej funkcji i adresu funkcji, którą chcemy podmienić. Po odpowiedniej podmianie adresów, warto zachować oryginalny adres funkcji, aby go przywrócić, kiedy już nie będzie potrzeby użycia naszej funkcji. Nie wspomniałem o jednej ważnej rzeczy jak dotąd, mianowicie aby zmodyfikować SSDT potrzebujemy dostępu z poziomu ring0, dlatego aby załadować nasz rootkit, potrzebujemy sterownika, który działa właśnie na tym poziomie. Mała dygresja, w ramach tematu - w obecnych czasach stawia się na technikę DKOM (Direct Kernel Object Modification), gdyż opisywana przeze mnie technika stała się dosyć prosta do wykrycia. Poza tym tą samą technikę stosuje się w różnych programach antywirusowych, które

stanowią kolejną warstwę na drodze żądania, ale powoli odchodzi się od niej ze względu na łatwość popełnienia błędu podczas takiej manipulacji. Echem odbił się atak na antywirusy wykorzystujące właśnie ten sposób, wtedy pokazano, że programy AV opierające się na tym mechaniźmie, okazały się podatne na atak. 4. Bibliografia The Rootkit Arsenal: Escape and Evasion, Bill Blunden Rootkits for Dummies, Larry Stevenson, Nancy Altholz http://shift32.wordpress.com/2011/10/14/inside-kisystemservice/ http://windows-internals.blogspot.com/2009/02/system-call-hooking-i_8590.html http://www.theregister.co.uk/2010/05/07/argument_switch_av_bypass/