Długo zabierałem się do napisania postu o analizie malware’u w kontekście OSINTu i threat intelligence. Jest to jedno z najczęściej wykorzystywanych źródeł informacji i powszechny cel poszukiwań analityków, jednak jednocześnie złożone technicznie zagadnienie. Jeżeli mówimy o zaawansowanej analizie statycznej (samego pliku) i dynamicznej (obserwowania zachowania pliku po uruchomieniu) to jest to temat nawet nie na serie postów, ale kilka książek. Dla zainteresowanych zgłębieniem tematu, polecane pozycje znajdziecie w dziale Czytelnia. W tym miejscu chciałbym jednak podejść do problemu w inny sposób, tak aby umożliwić OSINTowcom zebranie wielu informacji o próbce złośliwego oprogramowania nawet jeżeli widok assemblera w IDA Pro czy Ghidrze wywołuje taką reakcję:
Na szczęście w zakresie analizy malware’u znajdziemy wiele serwisów, które zarówno pokażą nam informacje o samym pliku jak i pozwolą zrozumieć jego zachowanie. Korzystanie z zewnętrznych dostawców ma wady i zalety. Podstawową wadą jest to, że będziemy tutaj mówić tylko o próbkach, które zostały już znalezione i udostępnione pośród społeczności analityków. Jeżeli więc pracujemy nad incydentem i znajdujemy nowe, nieznane dotąd implanty to uploadowanie ich gdziekolwiek nie jest dobrym pomysłem, ponieważ w ten sposób poinformujemy zarówno atakujących jak i resztę świata, że zajmujemy się tym przypadkiem. W przypadku zespołu reagowania na incydenty będziemy zazwyczaj jednak pracować z analitykami malware’u i specjalistami inżynierii wstecznej, którzy wspomagając obsługę incydentu dokładnie przebadają właściwości malware’u. Tutaj będziemy zajmować się innym przykładem. Powiedzmy, że jesteśmy analitykiem threat intelligence i zajmujemy się śledzeniem kampanii określonych grup. Ponieważ chcemy wyprzedzać działania przeciwników to w naturalny sposób uwagę będziemy kierować na ataki dokonane wobec innych podmiotów, tak aby przekazać jak najwięcej informacji tworzącym detekcje i monitoringowi aby przygotować się na atak, zanim napastnicy wezmą na cel nasze środowisko. Chcemy więc skorzystać z potęgi OSINTu, wyjść poza nasze środowisko i zdobyć informacje o malwarze który już się ujawnił. W takim przypadku korzystanie z zewnętrznych serwisów pomoże nam szybko zebrać dane, a ponieważ nie będziemy musieli sami pobierać próbki, to eliminujemy ryzyko przypadkowej infekcji. A więc do dzieła 🙂
Jako przykład wykorzystamy kampanie HermeticWiper, która uaktywniła się w Ukrainie na krótko przed inwazją wojsk Rosyjskich. Może to wydać się zabawne, ale jeżeli malware czy kampania została już ochrzczona konkretną nazwą przez infosecową społeczność, to zazwyczaj zaczynam od wyszukiwania na Twitterze. W ten sposób szybko znajduje raporty, komentarze analityków i przede wszystkim informacje które pozwolą na zlokalizowanie próbki – zazwyczaj hashe.
Gdy już mamy hash próbki, w tym przypadku z repozytorium na GitHub zalinkowanego w tweetcie powyżej, możemy przejść do wszelkich serwisów które przeanalizowały pliki za nas i pozwolą nam na zebranie informacji. Najpopularniejszy z nich to VirusTotal. Serwis który początkowo służył głównie porównywaniu skuteczności programów antywirusowych i umożliwiał sprawdzenie podejrzanego pliku na wielu serwisach, rozrósł się w czasie znacząco i teraz pokaże nam sporo informacji o samym pliku, a nawet raporty z sandboxów, w których odpalono próbkę. Wadą VirusTotal jest to, że wersja bezpłatna nie uniemożliwia pobierania plików. Wpiszmy więc hasha „com.exe” w wyszukiwarkę i zobaczymy co otrzymamy. Pierwsza strona, która nam sie ukaże to wyniki analizy pliku przez poszczególne silniki anytwirusowe:
Czasami może to dostarczyć pewnych wskazówek co klasyfikacji pliku, przynależności do określonej rodziny malware’u. Jednak ze względu na ograniczenia systemów detekcji i częste mieszanie się sygnatur byłbym bardzo ostrożny w sugerowaniu się tą klasyfikacją. Często też opisy nie będą szczególnie przydatne:
Dużo ciekawsze informacje znajdziemy w kolejnych zakładkach: Details, Relations i Behavior. W pierwszej z nich znajdziemy informacje o samym pliku, takie jak hashe w różnych formatach, daty analiz na VT i informacje związane ze strukturą pliku. Możemy więc znaleźć też informacje o kompilacji, podpis elektroniczny jeżeli takowy znajdziemy i tablicę importów. Szczególnie te dwie ostatnie pozycje przenoszą nas już w świat analizy malware’u i tworzenia detekcji. Informacje o wykorzystanym podpisie elektronicznymi pozwolą nam bowiem określić potencjalnie powiązane próbki – korzystające z tego samego certyfikatu, stwierdzić czy napastnikom udało się uzyskać prawdziwy certyfikat danej organizacji i czy dalej jest on ważny. W tym przypadku możemy zobaczyć, że ważność certyfikatu została cofnięta przez wystawcę:
Tablica importów daje z kolei wgląda w funkcjonalność dostępną próbce. Malware aby skutecznie działać korzysta najczęściej z API systemu Windows aby wchodzić w interakcje z systemem i przeprowadzać operacje. Wgląd w to jakie funkcje są importowane pozwoli więc z grubsza ustalić jaki może być cel oprogramowania. Tutaj znajdziemy między innymi pozycje związane z serwisami w systemie Windows i manipulacją rejestru:
Czasem nazwy funkcji są dość jasne jak RegOpenKey, jednak zawsze warto sprawdzić co dokładnie może ona zrobić w oficjalnej dokumentacji API od Microsoftu.
W zakładce Relations zobaczymy niejako pochodne artefakty działalności próbki – domeny i adresy IP z którymi się łączyła czy pliki które zostały zrzucone prze nią na dysk. Jest to więc idealne źródło dla analityków threat intelligence szukających infrastruktury C2 i powiązań z innymi malwareami, potencjalnie prowadząc do atrybucji do określonej grupy aktywności. Informacje o plikach które wywołały malware (execution parents) i zapisanych na dysku przez nią (dropped files) pozwala z kolei na określenie łańcucha infekcji i rozszerzenie analizy o pliki które poprzedzają wykonanie właściwej próbki i dodatkowych plików wykorzystywanych w toku infekcji. Możemy również skorzystać z funkcji Graph, która w sposób podobny do Maltego pozwala na graficzne przedstawienie zależności pomiędzy artefaktami.
W końcu najciekawszą zakładką dla osób które chciałyby zrozumieć działanie malware’u ale nie czują się pewnie w samodzielnej analizie jest Behavior. Znajdziemy tutaj raporty z wykonania próbki w różnych sandboxach, które za nas przeanalizują i zapiszą zachowanie. Szczególnie interesującą funkcjonalnością VT jest to, że często znajdziemy wyniki pracy różnych sandboxów, co przełoży się na dokładniejszą analizę. W przypadku naszego HermeticWipera znajdziemy choćby ślady listowania dysków z których dane miały być usnięte.
Listy zmian w rejestrze, wykonane polecenia, drzewa procesów czy aktywność sieciowa to idealne źródło informacji zarówno do tworzenia detekcji behawioralnych jak i grupowania aktywności. Analizując i katalogując zachowanie próbek nie musimy już zdawać się na sygnatury, samemu oceniając czy zachowanie i charakterystyka pliku pasuje do danej grupy.
W końcu ostatnią zakładką jaką znajdziemy na VT są komentarze, ich wartość jest różna, jednak zawsze warto tam zajrzeć. Szczególnie, że czasami znajdziemy informacje od osoby która wgrywała plik, tak jak w przypadku tych pochodzących od US Cybercommand, tutaj komentarz przy próbce implantu X-Agent:
VirustTotal dostarczył nam sporo informacji, jednak niestety dwie ważne funkcje są dostępne tylko dla płatnych użytkowników – możliwość pobierania plików i wyszukiwania próbek korzystając z reguł YARA. Te funkcjonalności są natomiast dostępne również bezpłatnie, dla zarejestrowanych użytkowników, w HybridAnalysis. Jest to również serwis oferujący bazę informacji o malwarze przy czym jest on oparty głównie o autorski sandbox Falcon Sandbox (właścicielem Hybrid-Analysis jest CrowdStrike). Poszukajmy więc ponownie naszego hasha, tym razem w HA:
Hash jest jeden ale znaleźliśmy trzy wyniki – jak wspominałem HA jest oparty o własny sandbox, także pozycje odnoszą się do różnych konfiguracji sandboxa co widzimy w kolumnie Environment. Kliknijmy w środkowy rekord i zobaczmy jak wygląda raport. Pierwsze co rzuci nam się w oczy to wspomniane dodatkowe funkcje związane z możliwością pobrania próbki, a nawet zrzutu pamięci i pakietów przechwyconych podczas komunikacji sieciowej. Jest to więc nieocienione źródło jeżeli będziemy chcieli dalej, już samodzielnie przyjrzeć się działaniu pliku:
Ponieważ Hybrid-Analysis to raczej sandbox niż narzędzie do „suchego” listowania informacji o pliku, dane które tutaj uzyskamy będą związane ściśle z potencjalną złośliwą i podejrzaną aktywnością. Zobaczymy więc z jakich technik powszechnie wykorzystywanych przez malware korzysta próbka, jakie informacje zbiera i jak stara się modyfikować system. Poniżej znajdziemy również wylistowanie danych tekstowych w pliku (strings) – które to zazwyczaj jest jednym z pierwszych kroków analityka malware’u. Często wiele zmiennych i informacji jest zwartych w pliku w niezaszyfrowanej formie i spojrzenie na nie może dostarczyć wskazówek co do funkcjonalności i celu. Tak jak wcześniej w raporcie jednego z sandboxów VirusTotal widzieliśmy ślady listowania dysków które miały zostać wyczyszczone z danych, tak tutaj w samym pliku może odnaleźć gdzie przekazywana jest zmienna w celu listowania kolejnych dysków:
Kolejną z funkcjonalności, która dostępna jest w Hybrid-Analysis za darmo w przeciwieństwie do VirusTotal to możliwości wyszukiwania próbek korzystając z reguł YARA. YARA to narzędzie umożliwiające klasyfikacje i wyszukiwanie próbek na podstawie charakterystyk pliku, jak rozmiar, i występujących w nim danych. Pisaniu reguł YARA poświęcę być może osobny post gdyż to jedno z moich ulubionych narzędzi, teraz jednak zobaczmy jak działą to praktyce na przykładzie reguły zbudowanej w oparciu o właśnie powyższe „PhysicalDrive%u”:
Pisanie reguły zaczynamy od nazwy a następnie w nawiasach klamrowych określamy jej treść. Pierwsza sekcja „meta” zawiera dane pomagające zrozumieć działanie reguły, ale nie wpływające na sam zakres wyszukiwania. Nie jest to sekcja obowiązkowa, ale jej dodanie pomaga zrozumieć kontekst i jest wysoce zalecane. Dalej w „strings” określamy ciągi znaków które chcemy wyszukiwać. YARA nie ogranicza nas do „zwykłych” danych tekstowych, możemy również określać dane w systemie szesnastkowy (czyli popularne hexy) i wyrażenia regularne. Tutaj ograniczyłem się jednak do zawarcia fragmentu który odnaleźliśmy wcześniej. Dodatkowe modyfikatory „nocase”, „ascii” i „wide” sprawiają, że podczas wyszukiwania nie będzie rozróżnienia na małe i duże litery, a wyszukiwanie będzie obejmować tekst kodowany w ascii i unicode. W końcu sekcja „condition” decyduje o tym jak wykorzystane będą dane zawarte w poprzedniej sekcji. Oprócz instrukcji any wyszukiwać dowolną z wartości z sekcji strings „any of them”. Dodałem jeszcze dwa prametery:
- uint16(0) == 0x5a4d może brzmieć bardzo zagadkowo, jednak oznacza to po prostu, że plik ma rozpoczynać się od znaków „MZ” identyfikując pliki wykonywalne.
- filesize > 100KB oznacza natomiast, że szukamy plików większych niż 100KB.
Naszą regułę kopiujemy do pola Advanced Search:
Warto zauważyć, że HA umożliwia dodanie parametrów takich jak rozmiar pliku z poziomu menu wyszukiwania, lecz wolę je zawierać w samych regułach tak aby nie były one zależne od zewnętrznych właściwości wyszukiwarki. Reguły YARA są bowiem powszechnie stosowane – możemy nawet skanować pliki na dyskach czy obrazy pamięci, więc warto zawrzeć wszystko co chcemy wykorzystać jako element wyszukiwania w jednym miejscu. Spójrzmy więc na wyniki:
W publicznej bazie HA znaleźliśmy więc 38 plików, dodatkowo HA zachęcając do zakupu komercyjnej wersji informuje, że tym wypadku zobaczylibyśmy dodatkowe 1050 plików. Jak na darmowe narzędzia i prostą regułę YARA opartą o dane tekstowe jest całkiem nieźle 🙂 Możemy teraz zacząć przeglądać pliki w poszukiwaniu podobieństw w funkcjonalności czy powiązaniu z infrastrukturą sieciową i w ten sposób rozszerzać bazę powiązanych implantów.
Jak widzimy korzystając z otwartych źródeł i baz danych próbek udało nam się uzyskać całkiem sporo informacji, a co najważniejsze możemy zacząć wyszukiwać powiązań z innymi plikami będącymi częścią tej samej kampanii, bądź po prostu należących do arsenału tej samej grupy. Skoro tak dużo danych możemy uzyskać online to czy umiejętności z zakresu analiz malware’u tracą rację bytu? Oczywiście nie – po pierwsze jak zaznaczyłem na początku techniki te odnoszą się do próbek już znanych i przeanalizowanych. Dla analityków threat intelligence najcenniejsze będą te, które zostały wykryte w ramach analizy incydentu jednak nie są jeszcze szerzej znane, a przez to z większym prawdopodobieństwem są cały czas w użyciu. Stworzenie sposobu wykrywania ich (jak choćby reguły YARA) daję więc znaczną przewagę obrońcom. Po drugie jesteśmy tutaj zdani na możliwości techniczne sandboxów czy innych metod wykrywania właściwości pliku. Automatyzacja taka może nie być wystarczająca jeżeli malware korzysta z bardziej zaawansowanych technik unikania analizy, które wymagają ręcznej interwencji, choćby w celu modyfikacji pliku tak aby wykonał się on w środowisku. Jeżeli jednak poszukujemy kolejnych wątków już znanej aktywności bądź poszerzamy wiedzę o złośliwym oprogramowaniu znalezionym we własnym środowisku, to korzystanie z otwartych źródeł jest jak najbardziej wskazane.
We can now start browsing the files for similarities in functionality or connection with the network infrastructure and thus expand the database of related implants.