Zadanie 1. Interpreter języka skryptowego wspomagający
Transkrypt
Zadanie 1. Interpreter języka skryptowego wspomagający
Zadanie 1. Interpreter języka skryptowego wspomagający odszyfrowywanie danych w exploitach. Większość aktualnie obserwowanych exploitów używa prostego szyfrowanie z wykorzystaniem instrukcji xor. Celem zadania jest zaimplementowanie interpretera prostego języka skryptowego ułatwiającego automatyczne odczytywanie zaszyfrowanych danych. W ramach projektu należy zaproponować składnię języka pozwalającego wyszukać w danych wejściowych pewnego wzorca (charakterystyczny ciąg instrukcji danego typu exploita), odczytać klucz użyty do szyfrowania (1, 2 lub 4 bajty, podane jako przesunięcie od miejsca wykrycia wzorca), długość danych do odszyfrowania (pobrany bezpośrednio z analizowanego kodu lub relatywnie od wykrytego wzorca) oraz przesunięcie danych do odszyfrowanie względem wykrytego wzorca. Zaimplementowany program wczytuje dane w postaci plików tworzonych przez program Dionaea (przykład poniżej), następnie sprawdza czy występuje w nim jeden ze wzorców (program powinien umożliwić wczytanie wielu wzorców i skojarzonych z nimi skryptów) i jeśli go znajdzie wykonuje skrypt. Ideowo, przykładowy skrypt może przyjąć następującą formę. 1)znaleźć wzorzec 0xeb 0x02 0xeb 0x05 2)odczytać klucz szyfrowania, 1 bajt znajdujący się 11 bajtów za wykrytym wzorcem 3)odczytać długość bloku do odszyfrowania, 2 bajty, znajdujące się 5 bajtów za wykrytym wzorcem 4)odczytać przesunięcie zaszyfrowanych danych, 1 bajt, znajdujący się 10 bajtów za wykrytym wzorcem, przesunięcie to trzeba odnieść do pozycji wykrytego wcześniej wzorca 5)dokonać deszyfrowania i zapisać odszyfrowane dane Format danych wejściowych, zapisana komunikacja przez program Dionaea. stream = [('in', b'\x00\x00\x00/\xffSMBr\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x5c\x02\x00\x00\x00\x00\x00\x0c\x00\x02NT LM 0.12\x00'), ('out', b'\x00\x00\x00y\xffSMBr\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\xff\xff\x5c\x02\x00\x00\x00\x00\x11\x00\x00\x03\x0 1\x00\x01\x00\x00\x10\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\xfd\xe3\x00\x 00\xcb\x1f\xbeHc\x8a\xcd\x01\xc4\xff\x004\x00W\x00O\x00R\x00K\x00G\x00R\x00 O\x00U\x00P\x00\x00\x00H\x00O\x00M\x00E\x00U\x00S\x00E\x00R\x00\x003\x00A\x00F\x006\x00F\x00E\x00\x00\x00'), ('in', b'\x00\x00\x00I\xffSMBs\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x5c\x02\x00\x00\x00\x00\x0d\xff\x00\x00\x0 0\xff\xff\x02\x00\x5c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 01\x00\x00\x00\x0b\x00\x00\x00MS\x00CLIENT\x00'), ('out', b'\x00\x00\x00X\xffSMBs\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\xff\xff\x5c\x02\x00\x00\x00\x00\x03\xff\x00\x00\x0 0\x01\x00/\x00Windows 5.1\x00Windows 2000 LAN Manager\x00WORKGROUP\x00')] Zadanie 2. Analiza zmian w liście programów i załadowanych przez nie bibliotek. Danymi wejściowymi są dwie listy wszystkich uruchomionych w systemie procesów oraz załadowanych przez nie bibliotek uzyskane z programu volatility (przykładowy plik poniżej). Na podstawie sparsowanych danych należy podać informację dotyczące różnic między dwoma stanami systemu operacyjnego, między innymi: jakie procesy zostały uruchomione, jakie procesy zostały zakończone, jakie biblioteki zostały dodane (wczytane) przez procesy. Przykładowy fragment pliku zawierającego informacje o procesach i załadowanych przez nie bibliotekach. ************************************************************************ System pid: 4 Unable to read PEB for task. ************************************************************************ smss.exe pid: 316 Command line : \SystemRoot\System32\smss.exe Base Size Path 0x48580000 0x00f000 \SystemRoot\System32\smss.exe 0x7c900000 0x0b0000 C:\WINDOWS\system32\ntdll.dll ************************************************************************ csrss.exe pid: 484 Command line : C:\WINDOWS\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16 Service Pack 2 Base 0x4a680000 0x7c900000 0x75b40000 0x75b50000 0x75b60000 0x77d40000 0x7c800000 0x77f10000 . . . Size 0x005000 0x0b0000 0x00b000 0x010000 0x04a000 0x090000 0x0f4000 0x046000 Path \??\C:\WINDOWS\system32\csrss.exe C:\WINDOWS\system32\ntdll.dll C:\WINDOWS\system32\CSRSRV.dll C:\WINDOWS\system32\basesrv.dll C:\WINDOWS\system32\winsrv.dll C:\WINDOWS\system32\USER32.dll C:\WINDOWS\system32\KERNEL32.dll C:\WINDOWS\system32\GDI32.dll Zadanie 3. Wyszukiwanie adresów stron (URL) w wiadomościach poczty. Danymi wejściowymi jest plik tekstowy w formacie mbox zawierając pełne nagłówki SMTP, koperty listów oraz pełną treść listu. Celem zadania jest wykrycie w treści listów ciągów znaków będących potencjalnie adresami stron www, to znaczy zaczynają się od nazway protokołu http(s)://, dalej następuje nazwa domenowa, opcjonalny numer portu oraz katalog z ewentualnymi parametrami (!!!). Należy pamiętać o możliwych dodatkowych kodowaniach, przykładowo: "http%3A%2F%2Febm.cheetahmail.com%2Fc%2Ftag%2F" gdzie cześć znaków zakodowanych jest w notacji % numer znaku w kodzie ASCII. Dla podanego pliku wejściowego z listami program powinien wyszukać wszystkie potencjalne adresy i zapisać je w pliku wynikowym jeden adres w jednej linii. Zadanie 4. Wyszukiwanie w treści maili w formacie HTML podejrzanych odnośników. Danymi wejściowymi jest plik tekstowy w formacie mbox zawierając pełne nagłówki SMTP, koperty listów oraz pełną treść listu. Celem zadania jest wykrycie w listów zawierających treści w formacie HTML, a następnie wykrycie odnośników (znacznik A) w których w opisie i celu występują różne adresy URL. Przykładowo: opis sugerujący odnośnik do strony www.mbank.pl/login.html a kierujący na "podejrzany" adres w domenie niezwiązanej z mbank.pl. Dla podanego pliku wejściowego z listami program powinien wyszukać wszystkie podejrzane adresy i zapisać je w pliku wynikowym w postaci adres w opisie, adres w atrybucie, jedna linia na podejrzany adres. Zadanie 5. Wyszukiwanie w treści maili załączników i ich dekodowanie. Danymi wejściowymi jest plik tekstowy w formacie mbox zawierając pełne nagłówki SMTP, koperty listów oraz pełną treść listu. Celem zadania jest wykrycie listów zawierających załączniki oraz zapisanie ich w oddzielnych plikach (w celu dalszej analizy). Dodatkowo po analizie powinien być tworzony plik wynikowy zawierający typ (Content-Type z nagłówka SMTP), ewentualną nazwę pliku z maila oraz nazwę pliku utworzonego przez program na dysku skojarzoną ze zdekodowaną zawartością.