Artykułem tym kończymy serię publikacji poświęconych analizie złośliwego oprogramowania. W
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.
W rezultacie ładunek zostaje pobrany i uruchomiony.
Analiza drzewa procesu i markerów behawioralnych pokazuje zastrzyk w proces RegAsm.exe.
Istnieją markery behawioralne charakterystyczne dla AgentTesla.
Pobrana próbka jest próbką wykonywalną .NET-plik chroniony przez protektora Reaktor .NET.
Otwórzmy go w narzędziu dnSpy x86 i przejdź do punktu wejścia.
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.
W jednym ze zwróconych buforów widać sygnaturę MZ (0x4D 0x5A). Oszczędźmy to.
Zrzucony plik wykonywalny to dynamiczna biblioteka będąca modułem ładującym, tj. wyodrębnia ładunek z sekcji zasobów i uruchamia go.
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.
- Pierwsza umożliwia „wklejenie” biblioteki dynamicznej do próbki macierzystej.
- Drugim jest przepisanie kodu funkcji w punkcie wejścia, aby wywołać żądaną metodę wstawionej biblioteki dynamicznej.
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.
Po usunięciu ochraniacza korzystamy z napisanych wcześniej reguł YARA i upewniamy się, że rozpakowanym szkodliwym oprogramowaniem jest naprawdę AgentTesla.
Próbka nr 2
Plikiem źródłowym jest dokument MS Excel. Wbudowane makro powoduje wykonanie złośliwego kodu.
W rezultacie zostaje uruchomiony skrypt PowerShell.
Skrypt odszyfrowuje kod C# i przekazuje mu kontrolę. Sam kod jest programem ładującym, co widać również w raporcie piaskownicy.
Ładunek jest plikiem wykonywalnym .NET-plik.
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ę:
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.
Usuwamy zaciemnienia za pomocą de4dot i prześlij do dnSzpieg. Z opisu pliku rozumiemy, z czym mamy do czynienia Ładowarka CyaX-Sharp.
Ten moduł ładujący ma rozbudowaną funkcję zapobiegającą analizie.
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
Aby wyłączyć ochronę, skorzystamy z okazji dnSzpieg, który pozwala na edycję IL-kod.
Zapisz i zainstaluj breakpoint do linii wywołania funkcji deszyfrowania ładunku. Znajduje się w konstruktorze klasy głównej.
Wystrzeliwujemy i zrzucamy ładunek. Korzystając z wcześniej napisanych zasad YARA, upewniamy się, że jest to AgentTesla.
Próbka nr 3
Plik źródłowy jest plikiem wykonywalnym VB Natywny PE32-plik.
Analiza entropii pokazuje obecność dużej części zaszyfrowanych danych.
Analizując formularz zgłoszeniowy w Dekompilator VB możesz zauważyć dziwne pikselowane tło.
Wykres entropii bmp-image jest identyczny z wykresem entropii oryginalnego pliku, a jego rozmiar wynosi 85% rozmiaru pliku.
Ogólny wygląd obrazu wskazuje na zastosowanie steganografii.
Zwróćmy uwagę na wygląd drzewa procesu, a także obecność znacznika wtrysku.
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.
Chodźmy do IDA profesjonalista pod podany adres i przestudiuj funkcję. Kod jest mocno zaciemniony. Poniżej prezentujemy interesujący nas fragment.
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.
Wydajność Kod powłoki realizowany w dwóch etapach. Pierwszy rozszyfrowuje główną część. W tym przypadku klucz jest określany brutalną siłą.
Zrzuć odszyfrowany Kod powłoki i spójrz na linie.
Po pierwsze, znamy teraz funkcję tworzenia procesu potomnego: Utwórz Proces Wewnętrzny W.
Po drugie, dowiedzieliśmy się o mechanizmie utrwalania w systemie.
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.
Łą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.
Zrzucony plik jest chroniony przez zabezpieczenie Reaktor .NET, które można łatwo usunąć za pomocą narzędzia de4dot.
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źć
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
Źródło: www.habr.com