Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Automatyczna analiza złośliwego oprogramowania z wykorzystaniem SysAnalyzer
Wstęp
SysAnalyzer jest aplikacją (a właściwie zestawem), która pozwala na szybką analizę złośliwego oprogramowania poprzez obserwację wykonywanych przez nią działań w różnych stadiach systemu.
Oprogramowanie przed startem „złośliwej próbki” tworzy snapshot obecnego stanu naszego środowiska, który po uruchomieniu malware stanowi podstawę do stwierdzenia zmian w systemie.
Autorem aplikacji jest David Zimmer, którego możecie znać z takich narzędzi jak PDF Stream Dumper czy COMRaider.
W niniejszym artykule omówię opcje aplikacji SysAnalyzer, dzięki czemu korzystanie z niej stanie się znacznie prostsze.
Zanim zaczniemy…
Pamiętaj, że każdą analizę złośliwego oprogramowania powinieneś przeprowadzać w kontrolowanym środowisku. Uruchomienie maszyny wirtualnej na prywatnym lub biurowym komputerze, na którym codziennie pracujemy, nie jest najlepszym pomysłem. Zawsze istnieje ryzyko podatności oprogramowania, które wykorzystujemy do wirtualizacji (znane są takie przypadki z przeszłości, np. CVE-2014-0983, CVE-2015-3456 i CVE-2008-0923). Postaraj się stworzyć oddzielne środowisko z odseparowanym dostępem do Internetu (i dedykowanym adresem IP).
Instalacja
Instalacja przebiega w dość prosty sposób i sprowadza się do kliknięcia kilka razy przycisku „Dalej”, oczywiście poza zdefiniowaniem miejsca instalacji. Aplikacja po zainstalowaniu zajmuje ok. 8 MB, więc jest stosunkowo nieduża.
Jeżeli wybieraliśmy standardowe opcje, to na pulpicie powinniśmy zobaczyć 5 głównych elementów programu SysAnalyzer (które zostaną omówione w kolejnym rozdziale):
Dostępny jest również kod źródłowy tej aplikacji:
Konfiguracja
W tej części przyjrzymy się opcjom dostępnym w narzędziu SysAnalyzer. Po uruchomieniu aplikacji powinniśmy zobaczyć poniższy ekran:
Do wyboru mamy następujące opcje:
- Executable – lokalizacja złośliwej aplikacji, którą chcemy przeanalizować (możemy ją przenieść za pomocą Drag&Drop)
- Arguments – argumenty niezbędne do uruchomienia złośliwej aplikacji
Wskazówka: Druga opcja jest szczególnie przydatna, gdy chcemy przeanalizować np. działanie potencjalnie złośliwych dokumentów. Przyjrzyjmy się poniższym prostym przykładom:
Dokumenty *.doc – zakładając, że w celu analizy wykorzystamy oprogramowanie Microsoft Office, to w polu Executable podajemy lokalizację do głównego pliku aplikacji Microsoft Word, tj. WINWORD.EXE, natomiast w polu Arguments – lokalizację do pliku *.doc.
Analogicznie do powyższej sytuacji w przypadku np. plików PDF prawdopodobnie podalibyśmy lokalizację do AcroRd32.exe (Acrobat Reader) – w zależności od wersji systemu itp.
Decyzję o tym, jakiej aplikacji trzeba prawdopodobnie użyć, należy podejmować na podstawie rozszerzenia danego pliku i własnych doświadczeń.
- Delay (secs) – czas opóźnienia pomiędzy stworzeniem początkowego snapshotu a snapshotem, z którym go porównujemy
- Known file DB – baza znanych i zaufanych plików, niewidocznych w wynikach
- Use SniffHit – odpowiada za monitorowanie ruchu HTTP, IRC oraz zapytań DNS, a także stworzenie listy unikalnych adresów IP
- Use API Logger – wstrzykuje bibliotekę DLL do procesu, aby pokazać nam wszystkie wywoływane API
- Use Directory Watcher – obserwuje modyfikacje w systemie plików (tworzone, modyfikowane oraz usuwane pliki i foldery)
- Full Packet Capture – pełny zapis ruchu sieciowego do pliku *.pcap
- Interface Index – numer interfejsu sieciowego
- Run As Another User – uruchomienie jako inny użytkownik
- RWE Scan – skanowanie procesów pod kątem iniekcji w pamięci (RWE – Read, Write, Execute) oraz zapisanie zrzutu ciągu znaków (z pamięci)
- Monitor Dlls in – monitorowanie konkretnych procesów pod kątem ładowania nowych bibliotek DLL (wprowadzając *, dołączamy obserwację wszystkich procesów)
Oczywiście pozostały jeszcze opcje dodatkowe:
- About – informacje o aplikacji
- Help file – pomoc
- Tools – po kliknięciu prawym przyciskiem myszy prezentowane są opcje:
- Scan Processes for DLL – wyszukiwanie ciągów znaków w nazwie biblioteki DLL lub jej ścieżce
- Scan Procs for Unknow Dlls – skanowanie procesów pod kątem nieznanych bibliotek (jeżeli stworzymy „Known file DB”)
- RWE Memory Scan All – analogicznie do „RWE Scan” opcja ze skanowaniem całej pamięci
- RWE Memory Scan One – analogicznie do „RWE Scan” opcja ze skanowaniem jednego procesu
- Open Saved Analysis – otwieranie zapisanej analizy
- Kill All Like – zamknięcie procesów, których nazwa zawiera określony ciąg znaków
- External
- SniffHit – uruchamia aplikację Sniffhit
- ProcWatch – uruchamia aplikację ProcWatch
- Api Logger – uruchamia aplikację ApiLogger
- DirWatch – uruchamia aplikację DirWatch
- Command Prompt – uruchamia wiersz poleceń w folderze aplikacji SysAnalyzer
- Edit Hosts File – edycja pliku %WINDIR%\system32\drivers\etc\hosts
Natomiast opcję „Skip”(odpowiadającą za przejście do panelu manualnej analizy) omówię w części Alternatywne uruchomienie.
Analizujemy plik i przeglądamy wyniki z raportu
Jeżeli udało nam się już zapoznać z podstawowymi opcjami aplikacji, to przyszedł czas na analizę.
Wskazówka: Wykorzystując maszynę wirtualną, warto przed rozpoczęciem zrobić snapshot – aby w prosty sposób powrócić potem do stanu początkowego.
Przykładowa konfiguracja może wyglądać następująco:
Jeśli mamy już ustawione wszystkie niezbędne opcje, to pozostało nam jedynie kliknięcie przycisku „Start”.
Bezpośrednio po uruchomieniu zobaczymy kolejno włączające się narzędzia oraz informację o starcie naszej potencjalnie złośliwej aplikacji „malware.exe”, a po chwili powinien pojawić się raport:
Jak pewnie zauważyliście, po uruchomieniu na Pulpicie został stworzony nowy katalog o nazwie „analysis”, w którym zapisane są wszystkie wyniki raportu.
Uwaga! Pamiętaj, że część informacji o zaistniałych zmianach w naszym środowisku zebranych przez narzędzia automatyczne nie zawsze wynika z działalności malware – czasami jest to po prostu zwykłe działanie systemu operacyjnego.
Przyjrzyjmy się teraz informacjom, które udało się uzyskać aplikacji. Widzimy 4 główne gałęzie:
- \analysis
- DirWatch
- Malware
- RWE_Memory
W sekcji „\analysis” możemy znaleźć:
- api.log – lista wywołanych API
- capture.pcap – zapis ruchu sieciowego (który możemy np. wczytać do programu Wireshark)
- debug.log – zapis działania aplikacji
- dirWatch.log – lista stworzonych, zmodyfikowanych lub usuniętych plików i katalogów
- ProcWatch.log – lista stworzonych i zamkniętych procesów
- Report_GODZINA-ANALIZY.log – ogólny zbiór informacji o analizowanej próbce
- sample_NAZWA-ANALIZOWANEJ-APLIKACJI.exe_ – kopia analizowanej aplikacji
- servers.log – lista adresów IP, z jakimi nastąpiło połączenie
Przyjrzyjmy się teraz sekcji „DirWatch”. Znajdziemy w niej kopie plików, które zostały stworzone w trakcie działania testowanej aplikacji. Jak widzimy, nawet plik „1478967.bat_”, który był stworzony, a potem usunięty, został skopiowany – dzięki temu możemy przejrzeć jego zawartość. Znalazły się tam również dwa pliki, które zazwyczaj nas nie interesują, m.in. wbemcore.log – są to pliki wygenerowane przez usługę WMI.
W części „NAZWA_MALWARE” (w naszym przykładzie będzie to „malware”) znajdziemy m.in. zrzuty pamięci, ciągów znaków oraz kopię testowanej aplikacji.
Ostatnią sekcją, jaką widzimy, jest „RWE_Memory”. Wszystkie nazwy procesów, które umieściliśmy w rubryce „RWE Scan” podczas konfiguracji, zostały przeskanowane pod kątem iniekcji w pamięci. Zobaczymy więc zrzuty pamięci z ww. procesów oraz ich ciągi znaków.
Częstym przykładem jest „załadowanie” przez złośliwe oprogramowanie nowej biblioteki dla procesu Explorer.exe – o czym (jeżeli do tego dojdzie) zostaniemy powiadomieni przez SysAnalyzer w raporcie.
Pamiętaj: Powodów tego, że nasza próbka nie zadziałała, może być wiele. Do najpopularniejszych należą: błędne środowisko uruchomienia, wadliwa próbka (np. brak części kodu w próbce w wyniku działalności oprogramowania antywirusowego) czy też fakt, że próbka nie jest złośliwa.
Alternatywne uruchomienie
Wracamy do opcji „Skip”, czyli przechodzimy do trybu manualnej analizy.
Na początek przyjrzyjmy się interfejsowi:
W górnym menu mamy do wyboru następujące opcje:
- Snapshot
- Show Snapshot 1 – prezentacja snapshotu początkowego
- Show Snapshot 2 – prezentacja snapshotu końcowego (porównawczego)
- Show Diff report – prezentacja różnic w snapshotach (w związku z tym po wybraniu tej opcji w zakładkach zobaczymy jedynie różnice)
- Take Snapshot 1 – stworzenie snapshotu początkowego
- Take Snapshot 2 – stworzenie snapshotu końcowego (porównawczego)
- Start Over – rozpoczęcie nowej analizy
- Data
- Search All Tabs – wyszukiwanie danego słowa kluczowego we wszystkich zebranych wynikach
- Copy All Tabs Data – prezentacja wszystkich danych w przejrzystej formie oraz możliwość ich skopiowania lub zapisu do pliku
- Copy All Selected Entries – prezentacja jedynie zaznaczonych wpisów w przejrzystej formie oraz możliwość ich skopiowania lub zapisu do pliku
- Basic Text Report – wyświetlenie prostego raportu tekstowego (podobny / taki sam jak w opcji „Copy All Tabs Data”)
- Report Viewer – wyświetlenie standardowego okna prezentacji raportu
- Tools
- Scan Procs for Unknown Dlls – skanowanie procesów pod kątem nieznanych bibliotek
- Scan processes For Dll – wyszukiwanie danego ciągu znaków w nazwie biblioteki DLL lub jej ścieżce
- RWE Memory Scan All – analogicznie do „RWE Scan” opcja ze skanowaniem całej pamięci
- String Memory Scan All – skanowanie całej pamięci pod kątem obecności danego słowa kluczowego
- Start Directory Watch – uruchamianie monitorowania pod kątem stworzonych, zmodyfikowanych lub usuniętych plików i katalogów
- Command Prompt – uruchamianie wiersza poleceń w folderze aplikacji SysAnalyzer
- KnownDB – bardzo przydatna opcja, która pozwala na stworzenie bazy znanych i zaufanych plików, abyśmy nie widzieli ich w wynikach
- Build Known File DB – budowanie bazy znanych plików
- Hide Known Files – ukrywanie znanych plików w wyników analizy
- Update Known Db – aktualizowanie bazy znanych plików
- Help – pomoc
Przejdźmy teraz do zakładek… Zanim je omówimy, warto dodać, że w każdej z nich istnieje możliwość filtrowania wyświetlonych danych pod różnym kątem (standardowo filtr ustawiony jest na kolumnę „Path”, o czym informuje * przy nazwie kolumny – możemy to zmienić, m.in. wpisując w pole „Filter” polecenie „/TUTAJ_NUMER np. /1”, co spowoduje ustawienie filtrowania na kolumnę „PID”).
Ponadto w większości okien, jeżeli klikniemy prawym przyciskiem myszy dany wpis, zobaczymy dodatkowe menu, w którym możemy m.in. przeanalizować konkretny proces („Analyze”), wyświetlić powiązane biblioteki DLL („ShowDlls”) oraz Mapę Pamięci z listą modułów i wykonywalnych sekcji (oraz typami pamięci itp.), zamknąć proces („Kill”), a także wyświetlić właściwości danego pliku („File Properties”) czy zapisać zrzut procesu do folderu „analysis”.
- Running Processes – prezentacja wszystkich uruchomionych procesów
- Open Ports – lista otwartych portów
- Process Dlls – lista bibliotek DLL powiązanych z danym procesem
- Loaded Drivers – lista załadowanych sterowników
- Reg Monitor – pozwala na monitorowanie zmian zachodzących w rejestrze
- Directory Watch Data – lista stworzonych, zmodyfikowanych lub usuniętych plików i katalogów (pamiętaj, aby włączyć w menu „Tools” opcję „Start Directory Watch”)
- Mutexes – wyświetla listę mutexów
- Tasks – pozwala na monitorowanie harmonogramu zadań
- Pipes – wyświetla listę pipe’ów
Jak przeprowadzić najprostszą przykładową analizę manualną?
Wystarczy, że stworzymy snapshot początkowy: „Snapshot” –> „Take Snapshot 1”, a po chwili uruchomimy nasze złośliwe oprogramowanie. Po kilkunastu sekundach powinniśmy stworzyć snapshot końcowy: „Snapshot” –> „Take Snapshot 2”. Teraz pozostało nam jedynie porównać wyniki naszej analizy z wykorzystaniem opcji „Snapshot” –> „Show Diff report”.
Podsumowanie
SysAnalyzer jest interesującym projektem, który dostarczy nam wiele przydatnych narzędzi do obserwacji potencjalnie złośliwej aplikacji pod różnym kątem. W trakcie analizy kilkudziesięciu próbek w ramach testów kilka z nich nie uruchomiło się z bliżej nieokreślonej przyczyny w trybie automatycznym – ale już tryb manualny dał pozytywne rezultaty. Jeżeli nie mamy czasu na analizę, a chcielibyśmy przeanalizować daną aplikację (nie tylko złośliwą), to warto wybrać SysAnalyzer.
Download:
Źródła pozyskiwania próbek do analizy (wybrane):
- http://contagiodump.blogspot.com/
- http://www.kernelmode.info/forum/viewforum.php?f=16
- https://malwr.com/
- https://virusshare.com/
- http://thezoo.morirt.com/
- https://zeustracker.abuse.ch/monitor.php
- https://ransomwaretracker.abuse.ch/tracker/online/
- http://malc0de.com/database/
- http://www.malwareblacklist.com/showMDL.php
~ Artur Czyż, konsultant d/s bezpieczeństwa IT & pentester w Securitum.
Super tool i znakomicie opisany :)
Dobro robota Panie Arturze :-D
Szkoda, że nie ma wersji na systemy unixowe
„Zanim zaczniemy…
Pamiętaj, że każdą analizę złośliwego oprogramowania powinieneś przeprowadzać w kontrolowanym środowisku. Uruchomienie maszyny wirtualnej na prywatnym lub biurowym komputerze, na którym codziennie pracujemy, nie jest najlepszym pomysłem. Zawsze istnieje ryzyko podatności oprogramowania, które wykorzystujemy do wirtualizacji (znane są takie przypadki z przeszłości, np. CVE-2014-0983, CVE-2015-3456 i CVE-2008-0923). Postaraj się stworzyć oddzielne środowisko z odseparowanym dostępem do Internetu (i dedykowanym adresem IP).”
hm.. A jak sobie na oddzielnym dysku postawię system obok tych do codziennego użytku. Nie będę montował pozostałych dysków. I na nim postawię maszynę virtualną do takiej analizy, to będzie ok?
Zdecydowanie nie polecam Ci takiego rozwiązania ;-)
Warto przygotować całkowicie dedykowaną maszynę (w większości przypadków wystarczy „stary” laptop), która jest podłączona do oddzielnej sieci (np. modem z kartą prepaid), w żadnym wypadku nie połączonej z inną.
Musisz mieć zawsze na uwadze, możliwość zidentyfikowania błędów w oprogramowaniu, którego używasz do zarządzania swoimi maszynami wirtualnymi.
Rozwiązanie z dedykowaną maszyną, podłączoną do całkowicie odseparowanej sieci – to kierunek w którym powinieneś pomyśleć, jeżeli chciałbyś analizować złośliwe oprogramowanie ;-)
Warto przygotować sobie dobry „warsztat pracy” :-)
„Musisz mieć zawsze na uwadze, możliwość zidentyfikowania błędów w oprogramowaniu, którego używasz do zarządzania swoimi maszynami wirtualnymi.”
No rozumiem, że może być błąd w systemie do virtualizacji. Może sprobuję rozrysować mój pomysł w ASCII.. :-)
dysk1 | dysk2 | dysk3 (do analizy malware montowany tylko na sys3)
Sys1 | sys2 | sys3 (do analizy malware montujący tylko dysk3)
| | virtualna maszyna (do analizy malware)
W takim modelu systemy wspołdzielą tylko ram, procesor, itd. Dyski są odseparowane, sieć jest łatwo zmienić lub całkowicie odłączyć. Co złego w takiej konfiguracji?