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ą.

Podobne dokumenty