2009.09_Wykrywanie infekcji.pdf

(1009 KB) Pobierz
439176774 UNPDF
ATAK
PIOTR JASTAK
Wykrywanie
Stopień trudności
Dla przeciętnego użytkownika Windows wystarczającym jest
używanie oprogramowania antywirusowego i firewalla aby mieć
zapewnione bezpieczeństwo bez potrzeby wgłębiania się
w techniczne szczegóły. Co jednak zrobić kiedy system wyraźnie
szwankuje, a oprogramowanie antywirusowe nic nie wykrywa?
mimo iż przedstawione tu metody
wykrywania infekcji powinny w większości
przypadków się sprawdzać, to nigdy nie można
mieć absolutnej pewności co do stanu systemu.
Zatem jeśli uważamy, że system jest zainfekowany
należy go traktować tak, jakby był zainfekowany.
Ponadto, mimo że stosując opisane tu metody
można w teorii pozbyć się większości złośliwego
oprogramowania, to jeśli na danym komputerze
przechowywane są ważne, prywatne lub
poufne informacje, należy sformatować partycję
systemową i przeinstalować system, nadpisując
MBR dysku. Z punktu widzenia bezpieczeństwa
danych nie można mieć pewności, że po
usunięciu wykrywalnego malware system
został kompletnie oczyszczony. Dzisiejsze
systemy operacyjne cechuje olbrzymi stopień
skomplikowania, a pewność bezpieczeństwa
dać może tylko kompletne usunięcie wszystkich
systemowych plików, które mogą wciąż zawierać
w sobie fragmenty złośliwego kodu. Kopie
zapasowe są zatem głównym gwarantem
nie tylko bezpieczeństwa danych w razie
uszkodzenia sprzętu, ale także kiedy potrzebne jest
przywrócenie systemu do stanu sprzed infekcji.
W tym artykule przechodzić będziemy
systematycznie od najprostszych do
najtrudniejszych metod wykrywania złośliwego
oprogramowania. Od naszej oceny wagi
zagrożenia zależeć będzie jak wyrafinowanych
sposobów zdecydujemy się użyć.
Malware poziomu użytkownika
Nie każde złośliwe oprogramowanie potrzebuje
uprawnień administratora czy systemu, aby
działać. Wiele rodzajów spyware do ukrywania
się stosuje bardzo proste techniki, a adware z
samej definicji jest bardzo proste do wykrycia.
Jeśli nasz system nagle próbuje nas namówić
do ściągania produktów antywirusowych, które
notabene antywirusowymi nie są, możemy mieć
pewność, że system został zainfekowany.
W przypadku nieco bardziej skrytych
programów należy sprawdzić co najmniej
pięć rzeczy: listę uruchomionych procesów,
rejestr systemu, listę usług systemowych, listę
autouruchamiania i BHO ( Browser Helper
Objects ). Przed zrobieniem tego warto jest
jednak zamknąć wszystkie programy, z których
korzystamy. Ułatwiamy sobie tym samym pracę,
likwidując szum generowany przez zwyczajną
aktywność działających programów.
Do sprawdzania listy uruchomionych
procesów nadaje się chociażby menedżer
zadań, (Alt+Ctrl+Del) jednak do pobrania ze
strony Microsoftu sysinternals.com są narzędzia
takie jak Process Explorer , czy Process Monitor ,
które pozwalają nie tylko przeglądać listę
działających procesów, ale także monitorować
wszelkie ich działania. Natychmiast po
uruchomieniu Process Explorera powinniśmy
otrzymać listę działających procesów. Można
przystąpić do analizy każdego z nich, korzystając
z dodatkowych informacji obecnych w okienku
Z ARTYKUŁU
DOWIESZ SIĘ
jak wykrywać malware,
jakich narzędzi stosować.
CO POWINIENEŚ
WIEDZIEĆ
jak działają systemy z rodziny
Windows,
jak działa Windows API.
30 HAKIN9 09/2009
infekcji
N a początku warto wspomnieć, że
439176774.018.png 439176774.019.png 439176774.020.png 439176774.021.png
LOKALIZACJA INFEKCJI W SYSTEMACH WINDOWS
właściwości (PPM – Properties ). Warto
zwrócić uwagę na:
i filtrujemy wyniki monitorowania tak,
aby zawierały tylko akcje podjęte przez
interesujący nas proces. (Ctrl-L, z listy
wybieramy Process Name , is , a następnie
podajemy nazwę procesu, klikamy Apply ).
Następnie możemy dodawać nowe reguły
filtrów, na przykład ograniczając interesujące
nas działania tylko do zapisu do plików.
Identyfikując pliki, na których operuje dany
proces możemy rozpoznać z jakiego typu
szkodliwym oprogramowaniem mamy do
czynienia.
Następną rzeczą wartą sprawdzenia
są usługi i programy uruchamiane przy
starcie systemu. Możemy zobaczyć ich
listing za pomocą programu msconfig
(dostarczany z każdą kopią Windows) w
zakładce Uruchamianie lub też posłużyć się
bardziej wyrafinowanym narzędziem, jakim
jest AutoRuns . AutoRuns ma kilka zalet
– pozwala filtrować wyniki, jak i pokazuje,
który element systemu sprawia, że proces
uruchamiany jest przy starcie. Używając go
nie musimy zatem przeszukiwać rejestru
w poszukiwaniu podejrzanych wpisów w
np. HKEY_LOCAL_MACHINE\SOFTWARE\
Microsoft\Windows\CurrentVersion\
Run . W przypadku identyfikacji usług i
programów uruchamianych przy starcie
należy pamiętać, jakie oprogramowanie
instalowaliśmy na naszym systemie
oraz znać nazwy usług systemowych.
Nieznane pliki identyfikujemy za pomocą
wyszukiwarek internetowych.
Oprócz tego wszystkiego warto
sprawdzić jeszcze usługi działające
w systemie. Każda kopia systemu
Windows wyposażona jest w narzędzie
Usługi , obecne w katalogu Narzędzia
Administracyjne w Panelu Sterowania . Jeśli
któraś z usług ma nietypową nazwę, warto
jest się jej przyjrzeć metodami opisanymi
wcześniej.
Obiekty BHO są to biblioteki DLL
systemu Windows, które w założeniu mają
zwiększać funkcjonalność istniejących
programów, takich jak Internet Explorer,
czy Windows Explorer. Jednak są one
uruchamiane wraz z każdą nową instancją
przeglądarki i posiadają m. in. dostęp
do modelu DOM, stanowią duże ryzyko
jeśli chodzi o bezpieczeństwo (szkodliwe
oprogramowanie maskujące się jako
BHO będzie na przykład w stanie logować
uderzenia w klawisze jeśli użytkownik
przejdzie na konkretną stronę). Programami
które umożliwiają sprawdzenie listy BHO są
na przykład HijackThis czy SilentRunners . W
przypadku logów HijackThis , BHO zawsze
będą oznaczane jako O2. Jeśli zauważymy
BHO bez nazwy lub też DLL, których nie
instalowaliśmy, warto jest korzystając z
Google sprawdzić podejrzane nazwy
plików i ich GUID ( HijackThis umożliwia
otrzymywanie dodatkowych informacji o
wpisie przez kliknięcie Info on selected item ,
a także łatwe usuwanie niepożądanych
elementów przez zaznaczanie okienek przy
ich wpisach i kliknięcie na Fix checked )
Jeśli zdecydujemy, że działania
podejmowane przez dany proces lub
usługę są podejrzane, warto jest upewnić
się czy to my nie jesteśmy zbyt paranoiczni.
W tym celu odszukujemy podejrzany plik
i za pomocą strony VirusTotal poddajemy
go skanowaniu. Jeśli wyniki są pozytywne,
oznacza to, że najprawdopodobniej
jesteśmy zainfekowani.
Przykład: identyfikacja infekcji Trojan-Dow
nloader.Win32.Agent.mee. Symptomy: próba
kontaktu systemu z nieznanymi serwerami,
• lokalizację pliku wykonywalnego;
• zużycie zasobów systemowych;
• poziom uprawnień z jakimi działa
proces;
• zarejestrowane usługi procesu;
• wątki procesu;
• połączenia procesu.
Pliki szkodliwego oprogramowania
często maskują swoją obecność przez
stosowanie nazw autentycznych plików
systemowych. Tu przydaje się dobra
znajomość systemu – jeśli widzimy, że
proces o systemowej nazwie uruchamiany
jest z pliku, nie znajdującego się w swoim
domyślnym katalogu (np. svchost.exe
startujący z Documents and Settings ), jest
to znak że mamy najprawdopodobniej do
czynienia z infekcją.
Jeśli zauważamy, że któryś proces
zużywa znaczną część czasu procesora,
warto jest przyjrzeć mu się z bliska. W
jego właściwościach (PPM – Properties )
sprawdzamy z jakimi uprawnieniami działa
(zakładka Security ), jakie ma zarejestrowane
usługi (zakładka Services ) oraz jakie
uruchomił wątki (zakładka Threads ). Przy
sprawdzaniu wątków może być użyteczne
sprawdzenie stosu danego wątku (przycisk
Stack ) – pozwala to zorientować się m.
in. jakie funkcje wywołuje dany wątek.
Sprawdzamy nazwy bibliotek DLL, do
których odwołują się dane wątki oraz
funkcje jakie wywołują. Jeśli na przykład
explorer.exe wywołuje funkcje znajdujące
się w niesystemowych bibliotekach DLL,
w dodatku takich, których instalacji nie
pamiętamy, możemy nabrać pewnych
podejrzeń. W zakładce TCP/IP sprawdzić
możemy protokoły i stany wszystkich portów
używanych przez proces. Porównując wyniki
z dostępnymi listami portów używanych
przez szkodliwe oprogramowanie (np. http:
//www.simovits.com/trojans/trojans.html )
możemy zidentyfikować ewentualną
infekcję (choć wiele nieszkodliwych aplikacji
korzysta z tych samych portów, co malware
– warto jest zatem upewnić się czy proces
nie należy do oprogramowania, z którego
korzystamy).
Po zidentyfikowaniu podejrzanego
procesu, uruchamiamy Process Monitora
Rysunek 1. Adware
Rysunek 2. Process Explorer
09/2009
HAKIN9
31
439176774.001.png 439176774.002.png 439176774.003.png 439176774.004.png
ATAK
spowolnienie połączenia z Internetem,
nietypowe komunikaty systemowe.
Wyłączamy wszystkie zbędne programy.
Uruchamiamy Process Explorer – widzimy
listę uruchomionych procesów. Z pozoru
wszystko w porządku, sprawdzamy zatem
procesy o typowo systemowych nazwach
– kiedy dochodzimy do procesu lsass.exe
okazuje się, że zamiast z jego domyślnej
lokacji ( C:\WINDOWS\system32\lsass.exe),
startuje on z C:\Windows\system32\inetsrv\
lsass.exe . W zakładce TCP/IP widzimy
aktywne połączenia z nieznanymi nam
adresami. Włączamy Process Monitora .
Filtrujemy wyniki, tak aby zawierały tylko
aktywność procesu o nazwie lsass.exe
(Ctrl-L -> Process Name -> is -> lsass.exe) . Po
chwili widzimy próby utworzenia ukrytych
plików exe o nieznanych nam nazwach
w katalogach systemowych. Za pomocą
Process Explorera wymuszamy zakończenie
podejrzanego procesu. Przechodzimy
na stronę http://www.virustotal.com/
i uploadujemy jeden ze ściąganych
przez niego plików. Naszym oczom
ukazuje się wynik skanowania, ukazany
na Rysunku 6. Samo to wystarczyłoby w
zasadzie do zakwalifikowania systemu
jako zainfekowanego, chcemy się jednak
upewnić. Wyszukując frazę inetsrv\lsass.exe
w Google trafiamy na opis konkretnego
zagrożenia (http://www.viruslist.com/en/
viruses/encyclopedia?virusid=21782782 ).
Jesteśmy już praktycznie pewni – system
został zainfekowany. Postępując zgodnie
z opisywanymi krokami usuwamy
zagrożenie. Dla pewności skanujemy
system programami ComboFix i SDFix ,
analizujemy wyniki działania HijackThis
i AutoRuns . Jeśli logi ComboFixa
potwierdzają usunięcie zagrożenia, a
HijackThis i AutoRuns nie wykrywają
lsass.exe jako programu uruchamianego
z C:\Windows\system32\inetsrv\lsass.exe
przy starcie systemu, można by uznać, że
niebezpieczeństwo zostało zażegnane. W
rzeczywistości jednak raz zainfekowany
system na zawsze pozostaje niewiadomą.
Od naszego zaufania do narzędzi, którymi
się posługujemy i własnego doświadczenia
zależy, czy zdecydujemy się używać danego
systemu, czy sformatujemy partycję i
przeinstalujemy go (w tym przypadku nie
trzeba trudzić się usuwaniem zagrożeń
opisanymi wcześniej metodami).
Był to oczywiście jedynie przykład – do
każdej sytuacji należy podchodzić osobno,
zarówno jeśli chodzi o identyfikację, jak i
likwidację infekcji. Równie dobrze mogliśmy
posłużyć się programami HijackThis i
AutoRuns na samym początku – nie ma
jedynej słusznej drogi analizy systemu.
Wyniki nie zawsze będą jednoznaczne,
Rysunek 3. Process Monitor
Listing 1. Log GMER
---- System - GMER 1.0.7 ----
SSDT \ SystemRoot \ System32 \ DRIVERS \ avpe32 . sys ZwCreateProcess
SSDT \ SystemRoot \ System32 \ DRIVERS \ avpe32 . sys ZwCreateProcessEx
SSDT \ SystemRoot \ System32 \ DRIVERS \ avpe32 . sys ZwOpenProcess
SSDT \ SystemRoot \ System32 \ DRIVERS \ avpe32 . sys ZwOpenThread
SSDT \ SystemRoot \ System32 \ DRIVERS \ avpe32 . sys ZwQueryDirectoryFile
SSDT \ SystemRoot \ System32 \ DRIVERS \ avpe32 . sys ZwQuerySystemInformation
---- Processes - GMER 1.0.7 ----
Process explorer . exe ( *** hidden *** ) 1596
File D: \ WINDOWS \ system32 \ avpe32 . dll
File D: \ WINDOWS \ system32 \ drivers \ avpe64 . sys
File D: \ WINDOWS \ system32 \ klgcptini . dat
File D: \ WINDOWS \ system32 \ stt82 . ini
Listing 2. Uruchamianie podsłuchu
#echo 1 > /proc/sys/net/ipv4/ip_forward
#arpspoof -t komputer brama
#arpspoof -t brama komputer
32 HAKIN9 09/2009
439176774.005.png 439176774.006.png 439176774.007.png 439176774.008.png 439176774.009.png 439176774.010.png
 
LOKALIZACJA INFEKCJI W SYSTEMACH WINDOWS
a usunięte problemy mogą powracać
– najlepiej być zatem przygotowanym
na ewentualną konieczność reinstalacji
Windows zawczasu.
adresy ich konkretnych funkcji do
IAT. Za każdym razem kiedy dany
program wywołuje funkcję zawartą
w jakiejś bibliotece, następuje
przeskok do odpowiadającego
jej adresu odczytanego z IAT.
Modyfikując tę tablicę, rootkity są
w stanie modyfikować zachowanie
dowolnej aplikacji. Wykrywanie takich
modyfikacji jest możliwe za pomocą
narzędzi typu GMER.
• Modyfikowanie SSDT: SSDT, czyli tablica
deskryptorów usług systemowych
( System Services Descriptor Table ) jest
tablicą, w której znajdują się adresy
właściwych funkcji eksportowanych
przez jądro systemu i wywoływanych
przez używanie adresów IAT.
Malware
poziomu systemowego
Biorąc pod uwagę fakt, że duża ilość
użytkowników systemów z rodziny
Windows używa konta administratora do
codziennego korzystania z komputera,
nie należy dziwić się, że duża ilość
szkodliwego oprogramowania działać
będzie z uprawnieniami administratora lub
systemu. Malware takie ma praktycznie
nieograniczone możliwości – może utworzyć
nowe konto administratora lub też, co jest
dużo gorsze, podnieść swoje uprawnienia
do poziomu użytkownika SYSTEM. W
systemach z rodziny Windows konto
SYSTEM posiada wyższe uprawnienia od
konta administratora, co powoduje, że mając
dostęp do niego jesteśmy w stanie dowolnie
modyfikować zachowanie systemu bez
możliwości interwencji administratora.
Jednak brak możliwości dostępu do
stron antywirusowych czy edycji plików
systemowych z poziomu administratora
jest dość oczywistą wskazówką, że coś
jest nie tak. Zachowanie tego typu jest
też najczęściej wykrywalne przy użyciu
technik pozwalających rozpoznać malware
poziomu użytkownika, gdyż najczęściej
zachowanie tak inwazyjne pozostawia
ślady w postaci zmian rejestru, pliku hosts ,
czy dodaniu nowych usług lub blokowaniu
niektórych istniejących. Problemem jest
wykrycie oprogramowania, które ingeruje
w działanie systemu operacyjnego bez
dawania praktycznie żadnych oznak
ingerencji. Jest to jedna z głównych cech
rootkitów. Przeanalizujmy zatem techniki
stosowane przez rootkity:
Rysunek 4. Autoruns
• Modyfikowanie IAT: IAT, czyli tablica
adresów importów ( Import Address
Table ) znajduje się w pamięci
każdego programu działającego
w środowisku Windows. Podczas
uruchamiania danego programu,
Windowsowy loader plików PE
lokalizuje wszelkie wywołania funkcji
znajdujących się w bibliotekach
DLL, po czym ładuje dane biblioteki
do pamięci programu i mapuje
Rysunek 5. Virus Total
09/2009
HAKIN9
33
439176774.011.png 439176774.012.png
 
ATAK
Rysunek 6. Wynik skanowania podejrzanego pliku
Modyfikowanie SSDT ma te zalety,
że rootkit nie musi modyfikować IAT
każdego procesu z osobna. Wiedząc,
które funkcje są odpowiedzialne za
określone zachowanie (np. listing
zawartości katalogu), rootkit modyfikuje
przebieg funkcji, tak aby zamiast
normalnego działania następował
przeskok do funkcji zawartej w
plikach rootkita. Przeskok ten może
następować przed samą funkcją,
lub tuż przed powrotem z niej. I tak
na przykład funkcja FindNextFile
zaimplementowana w kernel32.dll, której
odpowiednikiem w jądrze systemu
jest NtQueryDirectoryFile , może być
przekierowywana do funkcji rootkita,
która pozwoli jej na odnalezienie
danego pliku tylko jeśli nie będzie to plik
z zastrzeżoną nazwą lub też tuż przed
jej powrotem przekieruje wykonywanie
do funkcji rootkita, która usunie wynik
jeśli będzie zawierał zastrzeżoną nazwę.
Modyfikacje SSDT można również
wykryć za pomocą narzędzi typu GMER
czy RootkitRevealer .
• Modyfikacje IDT: IDT, czyli tablica
deskryptorów przerwań jest w
architekturze x86 i AMD64 specjalną
tablicą ulokowaną w pamięci
komputera, w której zawarte są
adresy kodu wywoływanego przez
przerwania w trybie chronionej pamięci.
Kiedy procesor napotyka instrukcję
programowego przerwania, przekłada
jego wartość liczbową na offset w
tablicy IDT. Pod tym offsetem znajduje
się instrukcja przejścia do konkretnego
kodu zajmującego się obsługą
przerwań ( interrupt handler ). Modyfikacja
IDT polega na podmianie adresu kodu
obsługi przerwań. Kiedy zatem system
próbuje na przykład dowiedzieć się, jakie
pliki znajdują się w danym katalogu,
co wiąże się z obsługą przerwań
odpowiedzialnych za komunikację
ze sprzętem, rootkit może podmienić
adres kodu obsługi przerwań na taki,
który zachowa co prawda oryginalną
funkcjonalność, ale ze zwracanych
wyników będzie odsiewał te zawierające
określone nazwy, tym samym maskując
obecność własnych plików na dysku
(możliwe jest też dodanie przeskoku
w istniejącym już kodzie obsługi
Rysunek 7. GMER
34 HAKIN9 09/2009
439176774.013.png 439176774.014.png 439176774.015.png 439176774.016.png 439176774.017.png
 
Zgłoś jeśli naruszono regulamin