Rozbrajamy trojana. Część IV: Agent Tesla
Postęp prac nad rozkładem złośliwego maila doprowadził nas już do pierwszych składników kodu wykonywalnego o czysto złośliwej charakterystyce. Pozstał nam do przejrzenia już tylko jeden skrypt z czterech początkowych składników oraz kod wykonywalny uruchamiany przez największy z nich. Dotarliśmy do momentu, w którym malware próbuje wołać program VBC. Zazwyczaj takie zachowanie zwraca uwagę antywirusów, więc VBC wydaje się być niefortunnym wyborem.
Na szczęście, okazuje się to nie mieć znaczenia z perspektywy analizy infekcji. Pierwszy binarny blob z skryptu M2 służy do drążenia procesów i niczego więcej, a drugi zawiera swój payload zapisany czystym tekstem w swoim wnętrzu. VBC jest więc uruchamiane, ale niczego nie kompiluje, więc antywirus daje mu spokój. Wspomniany blob jest binarny po to, by móc występować jako zawartość procesu VBC.EXE, a jedną z pierwszych rzeczy jakie robi, to samodzielne podniesienie uprawnień, czyli ominięcie Kontroli Konta Użytkownika (UAC). A to już coś, co może zrobić program, a nie skrypt, który od początku musi być uruchomiony w kontekście podwyższonych uprawnień.
Ominięcie Kontroli Konta Użytkownika
Zajrzenie do środka pozwoli prędko przekonać się, że celem bloba ze skryptu M2 jest jedynie podnieść sobie uprawnienia do tych potrzebnych do wyłączenia lub unieszkodliwienia Defendera. Cel ten jest osiągany za pomocą ogólnodostępnych narzędzi autorstwa hakera przedstawiającego się jako NYANxCAT. Jest on twórcą pokaźnej biblioteki czystego zła (i niemal niczego więcej), udostępnianej, wedle licencji, „tylko do celów edukacyjnych”. Niewątpliwie, twórcy niniejszego trojana złamali ową licencję, ale chyba nieszczególnie się tym faktem przejmują. W ogóle, pomysł niekorzystania z plików podczas dostarczania malware’u i opierania się w całości o Rejestr to również rozwiązanie, które prezentuje NYANxCAT, z czym można się zapoznać w jego projekcie „Dropless-Malware”.
Korzystając z projektu „UAC-Escaper” program podwyższa swoje uprawnienia za pomocą luki w zabezpieczeniu systemowego instalatora VPN (opisał ją Oddvar Moe). Następnie umieszcza w Rejestrze klucze wyłączające Defendera, korzystając z kolei z projektu „Bypass-Windows-Defender-VBS”. Ponieważ jednak nowe wersje Defendera zawierają tzw. Ochronę przed naruszeniami i ich wyłączenie z poziomu Rejestru jest niemożliwe, złośliwy program dodaje do wyjątków cały dysk C:, a potem jeszcze (na wszelki wypadek), definiuje oddzielne wyjątki dla ścieżek do wszystkich drążonych procesów. Wyklucza ze skanowania zarówno pliki, jak i procesy.
Ostatnią czynnością jest ułatwienie przyszłych infekcji poprzez wyłączenie dosłownie wszystkich zabezpieczeń w pakiecie Office w wersjach 2003 i nowszych oraz wyłącza izolowanie LUA dla Kontroli Konta Użytkownika u administratorów, czyniąc każdy proces domyślnie otrzymującym uprawnienia administracyjne. Mając rozszerzone prawa uruchomienia oraz unieszkodliwionego antywirusa, trojan uruchamia zawarty w czwartym skrypcie (M1) VBS pobranym z bloga-atrapy.
Nie mamy już antywirusa
Finalny skrypt M1 również przepuszcza wszystko przez Rejestr, a dostarczany kod uruchamia cztery (!) nowe kampanie, dociągające dodatkowe składniki infekcji, poprzez pobieranie kolejnych fejkowych blogów z BlogSpota. Jedna z kampanii otrzymuje w dodatku dedykowane zadanie w Harmonogramie Zadań, z maksymalnymi uprawnieniami i o nazwie „tutipajikhana”. Tak durna nazwa jest błędem ze strony twórców trojana. Nie jest losowa, a poza tym zdecydowanie sugerowałbym tworzenie zadania w katalogu Microsoft, a nie w korzeniu Harmonogramu i oczywiście stosowanie nazw w stylu „Windows Update” lub podobnych. „Tutipajikhana” jednak nieco rzuca się w oczy.
Zresztą, po co odpalać dodatkowe EXE (schtasks), skoro to samo można osiągnąć PowerShellem? Ta część zestawu wydaje się być stworzona przez innych ludzi niż reszta. Może przez nabywców kampanii? Wyraźna jest różnica zaawansowania poszczególnych składników. Za część związaną z rozesłaniem maila „odpowiadają” inni ludzie niż twórcy modułu wrednej, bezplikowej infekcji. A adaptacje klientów kupujących narzędzie obniżają poziom na tle reszty.
Wirus z Archiwum
Poza harmonogramem i kolejnymi blogami (w momencie badania były puste) skrypt M1 wykonuje też krótkie, zaciemnione polecenie PowerShella, najkrótsze ze wszystkich. Robi wrażenie swoją bezczelnością i odkrywczością pobiera bowiem dalszy payload z… archive.org, The Internet Archive! Nie jest jasne w jaki sposób i wskutek jakiego działania portal Internet Archive dokonał archiwizacji złośliwych plików, ale metoda okazała się godnym zaufania sposobem na unieśmiertelnienie nośnika. Katalog zawiera aż czterdzieści (!) dostosowanych do odbiorcy pakietów z dalszym payloadem infekcji. To chyba najbardziej innowacyjny element całego ataku.
Pliki przedstawiają się jako czysty tekst, ale są skryptami PowerShella, kolejny raz bardzo mocno zaciemnionymi. Każdy z nich zawiera cztery części. Pierwszą jest bardzo długi łańcuch tekstowy (brzmi znajomo?) o długości aż 445 kilobajtów. Dla każdego pliku ten łańcuch jest inny, co oznacza oddzielne kampanie dostosowane do różnych odbiorców. Druga część to funkcja odszyfrowująca, która zamienia długi łańcuch na tablicę bajtów. Skacze ona co drugi bajt i dla każdego z nich czyta niższe wartości bitów, rzutując z powrotem na pełny bajt. Niespodzianką jest część trzecia, gdzie znajduje się kolejna bardzo długa zmienna, ale już docelowo zapisana właśnie jako tablica bajtów.
Właściwy wirus
Wreszcie docieramy do loadera, czyli czwartej części zestawu. Podobnie, jak M2, skrypt z Internet Archive ładuje żywcem do pamięci assembly środowiska .NET, tym razem bez rozpinania oddzielnego AppDomain. Owym assembly okazuje się być jeszcze jeden projekt którego autorem jest NYANxCAT, tym razem chodzi o bibliotekę RunPE. Umożliwia ona mniej więcej to samo, co qw5f0, czyli wydrążenie procesu i uruchomienie złośliwego kodu w jego imieniu. W przeciwieństwie jednak do qw5f0, niniejsze assembly jest znacznie mniejsze, waży tylko 16 kilobajtów, więc adaptacje pozwalające payloadowi uruchamiać się tylko w takich warunkach muszą być wykonane po jego stronie.
I istotnie tak jest: program uruchomiony samodzielnie nie działa ze względu na format MS-DOS, załadowanie jego kodu żywcem i zmuszenie do działania kończy się wyjściem z błędem i tylko uruchomienie przez RunPE daje jakieś efekty. A i to następuje tylko wtedy, gdy program pracuje z pełnymi uprawnieniami, na fizycznej maszynie i z dostępem do internetu. W przeciwnym wypadku również kończy pracę z błędem.
Agent Tesla
Uruchomiono już analizy zbliżonych plików (są cudzego autorstwa, wszak ofiar jest więcej, a wśród nich i ciekawscy), jak 7902633d2693d907bc10aad3778c8929 środowiska any.run, dzięki czemu możemy się dowiedzieć, że złośliwym kodem, do którego udaje się dogrzebać po wielu podróżach i sklejaniach danych, jest zestaw znany pod nazwą Agent Tesla. Odpowiada on między innymi za kradzież haseł, ciasteczek, poświadczeń i sesji w przeglądarkach internetowych i niektórych znanych programach. W ten sposób wreszcie dotarliśmy do końca naszej analizy!
Doskonały artykuł na temat narzędzia Agent Tesla, w starszej wersji, znajduje się na blogu KrebsOnSecurity, gdzie możemy się dowiedzieć między innymi o tym, że program potencjalnie może służyć także do kradzieży zrzutów ekranu oraz robić za ransomware. Opisano także wpadki przy ochronie prywatności prawdopodobnego autora programu, który sprzedaje go w przystępnej cenie i upiera się, że narzędzie jest niewinnym programem do kontroli stacji roboczych i regulowania aktywności pracowników w sieciach firmowych...
Choć w badanych próbkach Agent albo łączył się po HTTPS z publicznie działającymi serwerami albo milczał i kończył pracę, każdy z plików EXE zawierał, czystym tekstem, link do witryny projektu The Onion Router, prowadzący do narzędzia tor w wersji 0.4.3.6. Było to najnowsze wydanie tora między lipcem a listopadem 2020, co pozwala określić kiedy mniej więcej powstała obecna inkarnacja środowiska Agent Tesla. Jest to zatem nowy produkt, ale nie aż tak nowy. Pisano o nim w pewnych kręgach już w grudniu, pierwszy mail z uszkodzonym plikiem PPT również przyszedł na redakcyjną skrzynkę właśnie wtedy, ale został bez namysłu usunięty.
Podsumowanie części czwartej
Złośliwe oprogramowanie korzysta z legalnie dostępnych "gotowców" Użycie gotowców nie sprawia, że antywirusy szybciej wykrywają zagrożenie Trojany wykorzystują systemowy Harmonogram Zadań i podejście bezplikowe by przywrócić się w systemie po usunięciu, w nowej wersji Cały payload jest pobierany z "bezpiecznych" stron, a gdy konieczne jest pobranie bezsprzecznie złośliwej treści, jest ona "prana" przez portal Internet Archive Istnieje wiele metod ukrywania kodu wykonywalnego, co pozwala uniknąć tworzenia nowych procesów (fork), a nawet nowych plików