Ktoś był w moim komputerze!

Pora na narzędzia

Podstawowym narzędziem profesjonalnego komputerowca będzie... kartka papieru i długopis. Czeka nas po drodze sporo pisania dokumentującego to, co robimy. Podstawową pokusą, jaką musimy zwalczyć, jest używanie narzędzi dostępnych w podejrzanym systemie oraz wykorzystywanie systemu do magazynowania zbieranych informacji.

Zawsze przygotowujemy zewnętrzny nośnik, z którego będą uruchamiane poszczególne narzędzia i który nie będzie mógł być zmodyfikowany. Najlepiej nadaje się do tego celu płyta CD lub napęd USB (zalecane jest użycie tego pierwszego, o czym dalej).

Z kolei do archiwizowania informacji najlepiej użyć innego komputera, do którego można przesłać dane za pomocą odpowiedniego programu np. netcat (Windows i Linux). Jeżeli nie mamy drugiego komputera, możemy użyć pamięci zewnętrznej, np. pendrive'a. Nie jest to jednak rozwiązanie optymalne, ponieważ wymaga od systemu załadowania odpowiednich sterowników, co już samo z siebie jest ingerencją, której przecież chcemy uniknąć. Ponadto nigdy nie wiemy, czy intruz nie pozostawił skryptu, który zostanie zainicjowany w momencie podłączenia urządzenia zewnętrznego.

Musimy zatem przygotować niezbędnik - narzędzia programowe (zob. tabela) będące zamiennikami tych dostępnych bezpośrednio w podejrzanym systemie. Jeżeli mamy nadmiar gotówki lub jesteśmy gadżeciarzami, przyda się dodatkowy sprzęt (zob. tabela).

W przypadku Windows sprawa jest stosunkowo prosta. Większość istotnych z naszego punktu widzenia narzędzi to po prostu pliki ".exe". Wszystko czego potrzebujemy możemy zwyczajnie przekopiować ze zdrowego systemu lub pobrać z Internetu. Czasami oprócz plików wykonywalnych konieczne będzie dołączenie bibliotek wykorzystywanych przez dane narzędzie. Aby sprawdzić jakie biblioteki są wymagane, możemy uruchomić interesujący nas program i użyć bezpłatnego programu listdlls.exe wydając polecenie:

Listdlls.exe -r [nazwa programu]Analogicznie w Linuxie możemy użyć narzędzia ldd. Poza tym, jeżeli korzystamy z narzędzi dla systemu Linux, najlepiej zdobądźmy źródła i skompilujmy je statycznie (np. używając kompilatora GCC z opcją -static). Umożliwi to przygotowanie narzędzia, które może być uruchomione na innej maszynie linuksowej.

Oprócz dokumentowania każdego kroku, potrzeba bycia profesjonalistą każe nam także zadbać o zapewnienie autentyczności zebranych informacji. Każdy może nam przecież zarzucić, że np. fragment logu, który uważamy za podstawowy dowód w naszym śledztwie, napisaliśmy sami. Tak jak detektywi z serialu "Kryminalne zagadki Las Vegas" - wszystko "pakujemy w torebeczki" i dokładnie opisujemy, czyli stemplujemy nasze ślady, używając do tego celu algorytmu haszującego SHA-2. A że odrobina paranoi nigdy nie zaszkodzi, zrobimy to z wykorzystaniem klucza 512-bitowego. Do tego celu w Windows użyjemy programu fsum.exe, a w Linuksie shash.

Ustalamy czas

Mając już pewną wiedzę wstępną i niezbędnik z narzędziami, możemy dobrać się do systemu.

Przyjmijmy, że do archiwizowania danych użyjemy drugiego komputera - jest to najpewniejsza metoda. Do przesyłania wyników działania narzędzi wykorzystamy program netcat, który jest dostępny zarówno w wersji dla systemu Windows, jak i Linux. Na maszynie magazynującej uruchamiamy netcata w trybie nasłuchiwania na wybranym porcie i przekierowujemy wyniki operacji do pliku. Na badanym komputerze uruchamiamy odpowiednie narzędzie, z którego wynik przekazywany jest dzięki użyciu symbolu "|" (pipe) do netcata. Ten z kolei przysyła dane do nasłuchującej maszyny. Następnie tworzymy sumę kontrolną dla wygenerowanego wyniku.

W listingach zaprezentowanych dalej nasz komputer będziemy nazywali Pacjentem, a komputer docelowy Magazynem. Celowo czasem Pacjent będzie maszyną linuksową, czasem windowsową, podobnie jak Magazyn. Parametr "-w" w poleceniu nc.exe oznacza odczekanie 5 s przed zamknięciem połączenia. Jest to czas wystarczający do przesłania krótkich plików. Jeżeli będziemy chcieli przesłać plik o większym rozmiarze, odpowiednio zwiększamy wartość tego parametru. Zaczynamy od uzyskania daty i czasu systemowego. Jest to ważne z uwagi na

1. konieczność udokumentowania czasu rozpoczęcia przez nas czynności;

2. fakt, że czas systemowy może odbiegać od czasu rzeczywistego;

3. gromadzone przez nas ślady będą zawierały informacje o czasie różnych zdarzeń i potrzebny będzie punkt odniesienia.

F:\>now.exe | nc.exe 192.168.5.1 5000 -w 5 (PACJENT)

# /mnt/cdrom/netcat -l -p 5000 > czas (MAGAZYN)

# /mnt/cdrom/shash -a sha512 czas > czas.sha (MAGAZYN)

Jeżeli chcemy sprawdzić czy rzeczywiście operacja przebiegła prawidłowo w Magazynie, sprawdzamy obecność i zawartość plików "czas" oraz "czas.sha" i badamy poprawność sumy kontrolnej:

# /mnt/cdrom/shash -c -V czas.shaWynik powinien wyglądać następująco:

czas: OK

0 of 1 file(s) failed SHA512 check.

Widzimy zatem, że operacja przebiegła prawidłowo oraz że suma kontrolna odpowiada zawartości pliku "czas". Analogicznie możemy sprawdzić, od kiedy nasz komputer pracuje. Dowiemy się, czy system od naszego ostatniego logowania nie był restartowany. Być może intruz wymusił takie zachowanie. Powtarzamy powyższy scenariusz, zmieniając jedynie narzędzie na uptime.exe (Windows) lub uptime (Linux):

F:\> uptime.exe | nc.exe 192.168.5.1 5000 -w 5 (PACJENT)

# /mnt/cdrom/netcat -l -p 5000 > uptime (MAGAZYN)

# /mnt/cdrom/shash -a sha512 uptime > uptime.sha (MAGAZYN)

Co zostało w pamięci

Ktoś był w moim komputerze!

Przykłady dodatkowych narzędzi

Jak ustaliliśmy wcześniej, najbardziej podatnym na zmiany elementem systemu jest pamięć operacyjna. Jest to szczególnego rodzaju bufor, w którym przechowywane są różnorodne informacje. Dzięki nim można dowiedzieć się, jaki kod wykonywany był w systemie i co powodował oraz jakie operacje były przeprowadzone. Każda wykonywana w systemie czynność powoduje zmianę zawartości pamięci operacyjnej i dlatego chcemy uzyskać jej obraz możliwie szybko.

Proces ten nie jest jednak trywialny. Możemy do niego podejść na kilka sposobów. Działania zależą przede wszystkim od rodzaju systemu operacyjnego. Windows oferuje nam możliwość ustawienia opcji wykonania zrzutu pamięci do pliku. Niestety, domyślnie taki zrzut ma miejsce tylko w przypadku szeroko rozumianej "katastrofy", np. niebieskiego ekranu, co trudno jest na zawołanie wygenerować. Poza tym jeżeli dojdzie do zawieszenia się systemu, będziemy musieli go zrestartować, a wtedy tracimy szanse na zebranie innych ulotnych informacji. To jednak nie tragedia - w Windows mamy jeszcze przynajmniej dwie możliwości.

Jeżeli kiedyś wnikliwie studiowaliśmy materiały dotyczące bezpieczeństwa systemu Windows możliwe, że podczas ćwiczeń wykonaliśmy pierwszy krok i wtedy sprawa jest prosta. Tym krokiem była modyfikacja rejestru, a dokładnie wartości następującego klucza:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parametersi dodanie do niego wartości:

Nazwa : CrashOnCtrlScroll

Typ: REG_DWORD

Wartość: 1

Wówczas wystarczy wywołać ręcznie zrzut pamięci kombinacją klawiszy [prawy CTRL + dwa razy SCROLL LOCK], a w katalogu %WINDIR% pojawi się plik "memory.dmp". Dlaczego ważne jest żeby wpis ten dokonany był sporo wcześniej? Ponieważ aby zaczął działać, musimy ponownie uruchomić komputer. Co wtedy - już wiemy.

Jeżeli nigdy nie tworzyliśmy takiego wpisu, pozostaje druga metoda. Do zrzucenia zawartości pamięci operacyjnej możemy użyć bardzo dobrego i wszechstronnego narzędzia "DD". Służy ono do wykonywania kopii bitowych - nie polega na logicznym układzie danych, a odwołuje się bezpośrednio do struktury fizycznej, tworząc kopie 1:1. Musimy pamiętać o zarezerwowaniu odpowiedniej ilości miejsca na dysku Magazynu - nieco przewyższającej ilość posiadanej pamięci RAM. Polecenie:

#/mnt/cdrom/nc -l -p 5000 > pamiecram.img (MAGAZYN)

F:\>dd if=\\.\PhysicalMemory bs=4096 | nc.exe 192.168.5.1 5000 (PACJENT)

W systemie Linux najprostszym sposobem pobrania zawartości pamięci będzie wykorzystanie narzędzia "memdump" i przesłanie wyniku do zdalnej maszyny znanym już netcatem:

F:\>nc.exe -l -p 5000 > pamiecram.img (MAGAZYN)

#/mnt/cdrom/memdump -v | /mnt/cdrom/nc 192.168.5.5 5000 (PACJENT)

Zapis rzecz jasna "znaczymy" sumą kontrolną.


TOP 200