Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3

Artykułem tym kończymy serię publikacji poświęconych analizie złośliwego oprogramowania. W część pierwsza Przeprowadziliśmy szczegółową analizę zainfekowanego pliku, który europejska firma otrzymała pocztą i odkryliśmy w nim oprogramowanie szpiegujące AgentTesla. W druga część opisał wyniki analizy krok po kroku głównego modułu AgentTesla.

Dziś Ilya Pomerantsev, specjalista ds. analizy złośliwego oprogramowania w CERT Group-IB, opowie o pierwszym etapie analizy złośliwego oprogramowania - półautomatycznym rozpakowywaniu próbek AgentTesla na przykładzie trzech mini-przypadków z praktyki specjalistów CERT Group-IB.

Zazwyczaj pierwszym etapem analizy złośliwego oprogramowania jest usunięcie ochrony w postaci programu pakującego, szyfrującego, zabezpieczającego lub ładującego. W większości przypadków problem ten można rozwiązać, uruchamiając złośliwe oprogramowanie i wykonując zrzut, ale zdarzają się sytuacje, w których ta metoda nie jest odpowiednia. Na przykład, jeśli złośliwe oprogramowanie jest programem szyfrującym, jeśli chroni swoje obszary pamięci przed zrzutem, jeśli kod zawiera mechanizmy wykrywania maszyny wirtualnej lub jeśli złośliwe oprogramowanie uruchamia się ponownie natychmiast po uruchomieniu. W takich przypadkach stosuje się tzw. rozpakowywanie „półautomatyczne”, czyli badacz ma pełną kontrolę nad procesem i może interweniować w dowolnym momencie. Rozważmy tę procedurę na przykładzie trzech próbek rodziny AgentTesla. Jest to stosunkowo nieszkodliwe złośliwe oprogramowanie, jeśli wyłączysz jego dostęp do sieci.

Próbka nr 1

Plik źródłowy to dokument programu MS Word wykorzystujący lukę CVE-2017-11882.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
W rezultacie ładunek zostaje pobrany i uruchomiony.

Analiza drzewa procesu i markerów behawioralnych pokazuje zastrzyk w proces RegAsm.exe.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Istnieją markery behawioralne charakterystyczne dla AgentTesla.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Pobrana próbka jest próbką wykonywalną .NET-plik chroniony przez protektora Reaktor .NET.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Otwórzmy go w narzędziu dnSpy x86 i przejdź do punktu wejścia.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Przechodząc do funkcji Przesunięcie daty i godziny, znajdziemy kod inicjujący dla nowego .NET-moduł. Włóżmy breakpoint na interesującej nas linii i uruchamiamy plik.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
W jednym ze zwróconych buforów widać sygnaturę MZ (0x4D 0x5A). Oszczędźmy to.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Zrzucony plik wykonywalny to dynamiczna biblioteka będąca modułem ładującym, tj. wyodrębnia ładunek z sekcji zasobów i uruchamia go.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Jednocześnie na wysypisku nie ma samych niezbędnych zasobów. Znajdują się w próbie macierzystej.

Użyteczność dnSzpieg posiada dwie niezwykle przydatne funkcjonalności, które pomogą nam dość szybko stworzyć „Frankensteina” z dwóch powiązanych ze sobą plików.

  1. Pierwsza umożliwia „wklejenie” biblioteki dynamicznej do próbki macierzystej.

    Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3

  2. Drugim jest przepisanie kodu funkcji w punkcie wejścia, aby wywołać żądaną metodę wstawionej biblioteki dynamicznej.

    Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3

Zapisujemy nasz zestaw „Frankenstein”. breakpoint na linii zwracającej bufor z odszyfrowanymi zasobami i tworzymy zrzut analogicznie do poprzedniego etapu.

Drugi zrzut jest zapisany VB.NET plik wykonywalny chroniony przez znane nam zabezpieczenie ZamieszaczEx.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Po usunięciu ochraniacza korzystamy z napisanych wcześniej reguł YARA i upewniamy się, że rozpakowanym szkodliwym oprogramowaniem jest naprawdę AgentTesla.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3

Próbka nr 2

Plikiem źródłowym jest dokument MS Excel. Wbudowane makro powoduje wykonanie złośliwego kodu.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
W rezultacie zostaje uruchomiony skrypt PowerShell.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Skrypt odszyfrowuje kod C# i przekazuje mu kontrolę. Sam kod jest programem ładującym, co widać również w raporcie piaskownicy.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Ładunek jest plikiem wykonywalnym .NET-plik.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Otwieranie pliku w dnSpy x86, widać, że jest zaciemnione. Usuwanie zaciemnień za pomocą narzędzia de4dot i wracamy do analizy.

Badając kod, możesz odkryć następującą funkcję:

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Zakodowane linie robią wrażenie Punkt wejścia и odwołać się. Kładziemy breakpoint do pierwszej linii, uruchom i zapisz wartość bufora bajt_0.

Zrzut jest ponownie aplikacją .NET i chronione ZamieszaczEx.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Usuwamy zaciemnienia za pomocą de4dot i prześlij do dnSzpieg. Z opisu pliku rozumiemy, z czym mamy do czynienia Ładowarka CyaX-Sharp.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Ten moduł ładujący ma rozbudowaną funkcję zapobiegającą analizie.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Funkcjonalność ta obejmuje ominięcie wbudowanych systemów ochrony systemu Windows, wyłączenie programu Windows Defender, a także mechanizmów wykrywania piaskownicy i maszyn wirtualnych. Możliwe jest załadowanie ładunku z sieci lub przechowywanie go w sekcji zasobów. Uruchomienie następuje poprzez wstrzyknięcie do własnego procesu, do duplikatu własnego procesu lub do procesów MSBuild.exe, vbc.exe и RegSvcs.exe w zależności od parametru wybranego przez atakującego.

Jednak dla nas są one mniej istotne niż AntiDump-funkcja, która dodaje ZamieszaczEx. Jego kod źródłowy można znaleźć pod adresem GitHub.

Aby wyłączyć ochronę, skorzystamy z okazji dnSzpieg, który pozwala na edycję IL-kod.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Zapisz i zainstaluj breakpoint do linii wywołania funkcji deszyfrowania ładunku. Znajduje się w konstruktorze klasy głównej.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Wystrzeliwujemy i zrzucamy ładunek. Korzystając z wcześniej napisanych zasad YARA, upewniamy się, że jest to AgentTesla.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3

Próbka nr 3

Plik źródłowy jest plikiem wykonywalnym VB Natywny PE32-plik.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Analiza entropii pokazuje obecność dużej części zaszyfrowanych danych.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Analizując formularz zgłoszeniowy w Dekompilator VB możesz zauważyć dziwne pikselowane tło.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Wykres entropii bmp-image jest identyczny z wykresem entropii oryginalnego pliku, a jego rozmiar wynosi 85% rozmiaru pliku.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Ogólny wygląd obrazu wskazuje na zastosowanie steganografii.

Zwróćmy uwagę na wygląd drzewa procesu, a także obecność znacznika wtrysku.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Oznacza to, że rozpakowywanie jest w toku. W przypadku programów ładujących Visual Basic (aka VBKrypt lub VBInjector) typowe zastosowanie kod szelkowy do inicjalizacji ładunku, a także do wykonania samego wtrysku.

Analiza w Dekompilator VB pokazał obecność zdarzenia Załadować przy formularzu FegatassocAirballoon2.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Chodźmy do IDA profesjonalista pod podany adres i przestudiuj funkcję. Kod jest mocno zaciemniony. Poniżej prezentujemy interesujący nas fragment.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Tutaj przestrzeń adresowa procesu jest skanowana w poszukiwaniu podpisu. Takie podejście jest niezwykle wątpliwe.

Po pierwsze, adres początkowy skanowania 0x400100. Wartość ta jest statyczna i nie jest dostosowywana w przypadku przesuwania podstawy. W idealnych warunkach szklarniowych będzie to oznaczać koniec PE-nagłówek pliku wykonywalnego. Baza danych nie jest jednak statyczna, jej wartość może się zmieniać, a poszukiwanie prawdziwego adresu wymaganego podpisu, choć nie spowoduje przepełnienia zmiennej, może zająć bardzo dużo czasu.

Po drugie, znaczenie podpisu iWGK. Myślę, że to oczywiste, że 4 bajty to za mało, aby zagwarantować niepowtarzalność. A jeśli weźmiesz pod uwagę pierwszy punkt, prawdopodobieństwo popełnienia błędu jest dość wysokie.

Tak naprawdę wymagany fragment jest dołączony na końcu znalezionego wcześniej fragmentu bmp-zdjęcia offsetowe 0xA1D0D.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Wydajność Kod powłoki realizowany w dwóch etapach. Pierwszy rozszyfrowuje główną część. W tym przypadku klucz jest określany brutalną siłą.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Zrzuć odszyfrowany Kod powłoki i spójrz na linie.

Po pierwsze, znamy teraz funkcję tworzenia procesu potomnego: Utwórz Proces Wewnętrzny W.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Po drugie, dowiedzieliśmy się o mechanizmie utrwalania w systemie.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Wróćmy do pierwotnego procesu. Włóżmy breakpoint na Utwórz Proces Wewnętrzny W i kontynuować wykonanie. Następnie widzimy połączenie NtGetContextThread/NtSetContextThread, który zmienia adres początkowy wykonania na adres Kod powłoki.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Łączymy się z utworzonym procesem za pomocą debuggera i aktywujemy zdarzenie Wstrzymaj przy ładowaniu/rozładowywaniu biblioteki, wznów proces i poczekaj na załadowanie .NET-biblioteki.

Dalsze użytkowanie ProcesHaker regiony zrzutu zawierające rozpakowane .NET-aplikacja.

Zatrzymujemy wszystkie procesy i usuwamy kopię złośliwego oprogramowania, która została osadzona w systemie.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Zrzucony plik jest chroniony przez zabezpieczenie Reaktor .NET, które można łatwo usunąć za pomocą narzędzia de4dot.

Frekwencja nie powiodła się: wystawmy AgentaTeslę na działanie czystej wody. Część 3
Korzystając z zapisanych wcześniej zasad YARA, upewniamy się, że jest to AgentTesla.

Podsumowując

Zademonstrowaliśmy więc szczegółowo proces półautomatycznego rozpakowywania próbek na przykładzie trzech mini-przypadków, a także przeanalizowaliśmy szkodliwe oprogramowanie na podstawie pełnego przypadku, stwierdzając, że badaną próbką jest AgentTesla, ustalając jego funkcjonalność i pełna lista wskaźników kompromisu.

Przeprowadzona przez nas analiza szkodliwego obiektu wymaga dużo czasu i wysiłku, a tę pracę powinien wykonywać specjalny pracownik w firmie, jednak nie wszystkie firmy są gotowe na zatrudnienie analityka.

Jedną z usług świadczonych przez Laboratorium Informatyki Śledczej i Analizy Złośliwego Kodu Group-IB jest reagowanie na incydenty cybernetyczne. Aby klienci nie tracili czasu na zatwierdzanie dokumentów i omawianie ich w trakcie cyberataku, Group-IB uruchomiła Pracownik odpowiedzialny za reagowanie na incydenty, usługa reagowania na incydenty przed subskrypcją, która obejmuje również etap analizy złośliwego oprogramowania. Więcej informacji na ten temat można znaleźć tutaj.

Jeśli chcesz jeszcze raz przestudiować jak rozpakowywane są próbki AgentTesla i zobaczyć jak robi to specjalista CERT Group-IB, możesz pobrać nagranie webinaru na ten temat tutaj.

Źródło: www.habr.com

Dodaj komentarz