Od pewnego czasu obserwujemy rosnący stopień złożoności złośliwych skryptów rozsyłanych za pośrednictwem poczty elektronicznej. Zazwyczaj, widząc skrypt w załączniku wiadomości phishingowej, mogliśmy z dużym prawdopodobieństwem założyć, iż będzie to prosty dropper, mający na celu wyłącznie pobranie i instalację złośliwego oprogramowania. Coraz częściej zdarza się jednak, iż skrypt nie kończy działania po wykonaniu głównego zadania i czeka na dodatkowe komendy. Przykładami są m.in. vjw0rm wykorzystywany w kampaniach ransomware’u Vortex (opisany w 2016 r. przez Cert OPL), a także Ostap będący przedmiotem niniejszego artykułu.
Artykuł stanowi wstęp do analizy złośliwego systemu Backswap, dla którego Ostap jest pierwszym etapem infekcji. Nasza analiza Backswap pojawi się wkrótce!
Ostap jest oprogramowaniem, które często pojawia się w Polsce w kampaniach zw. z fałszywymi fakturami. w tej chwili wykorzystywany jest do dystrybucji dwóch rodzin malware’u bankowego – Nymaim i Backswap, będący zmodyfikowaną wersją Tinby. Oba bankery wykorzystywane są przez przestępców naprzemiennie – przez pewien czas Ostap instaluje oprogramowanie Nymaim, następnie znów wykorzystywany jest do dystrybucji Backswapa. Z tego powodu maszyny ofiar są zainfekowane najczęściej obiema rodzinami (tą korelację zauważył również ESET w opublikowanej niedawno analizie Backswap).
Skrypt rozsyłany jest w postaci spakowanego załącznika (będącego rzekomą fakturą) dołączanego do wiadomości. Pomimo rozszerzenia RAR, archiwum jest w rzeczywistości w formacie ACE, co ma na celu zmylić narzędzia analityczne sugerujące się rozszerzeniem pliku. Mimo to, program WinRAR jest w stanie rozpoznać format archiwum pomimo wadliwego rozszerzenia i umożliwić ofierze rozpakowanie skryptu.
Archiwum zawiera plik JSE, który jest zakodowanym skryptem w języku JScript (JScript.Encoded). Ze względu na stosowaną metodę obfuskacji, plik po wypakowaniu ma najczęściej spory rozmiar, który przekracza kilkaset kilobajtów.
Pierwsze kampanie złośliwego systemu (2016)
Pierwsze kampanie z wykorzystaniem Ostapa obserwowaliśmy w okolicach maja 2016 r. W początkowych wersjach malware był prostym dropperem, który kończył działanie po pobraniu pliku. Już wtedy jednak charakteryzował się specyficzną obfuskacją polegającą na wyliczaniu łańcuchów znaków ze złożonych wyrażeń – znak po znaku. Zastosowana metoda ma duży wpływ na objętość skryptu i jest stosowana po dziś dzień.
Po deobfuskacji – skrypt prezentował się następująco:
Skrypt po uruchomieniu wykonywał następujące czynności:
- Wyświetlał komunikat The document is corrupted and cannot be opened
- Dodawał się do folderu Autostart oShell[‚NameSpace’](7), powodując automatyczne uruchomienie skryptu przy logowaniu (w razie gdyby pobierany plik nie był dostępny od razu pod wskazaną lokalizacją).
- Dokonywał próby pobrania i wykonania pliku EXE spod adresu URL https://217.28.218.217/YOP634EFARRR/q64.php?add=gtyhbncdfewpnjm9oklmnfdrtqdczdfgrt&<losowa liczba>. W razie niepowodzenia, ponawiał próbę co 80 sekund.
- Po instalacji systemu – skrypt usuwał się z autostartu, a także usuwał pobrany EXE – kończąc działanie.
Ostap początkowo pełnił rolę prostego droppera. Posiadał jednak wiele charakterystycznych cech (m.in. argument add= przekazywany do C&C, obfuskacja, format ścieżki). Próbka pobierana przez Ostapa zwykle nie była dostępna od razu po rozpoczęciu kampanii i była rozsyłana przez C&C wyłącznie przez krótki okres czasu. Pierwsze wersje Ostapa były wykorzystywane do dystrybucji malware’u bankowego KBot i ISFB.
Miesiąc później – w czerwcu 2016 r. ukazała się kolejna wersja, wysyłająca do serwera dodatkowe informacje na temat środowiska ofiary.
Adres C&C posiadał od tego momentu charakterystyczny wzorzec:
Wśród informacji zawarty był:
- hash ze ścieżki folderu autostart i nazwy komputera (uid)
- wersja systemu operacyjnego (na podstawie obecności podciągu Users w zmiennej środowiskowej HOMEPATH) – ver
- dodatkowe żądanie wysyłane po pomyślnym pobraniu malware’u (out=1 w przypadku sukcesu)
Złośliwe oprogramowanie pobierane było w postaci zakodowanej Base64 i dekodowane wbudowaną w system Windows komendą certutil. Prawdopodobnie czerpiąc z doświadczeń z poprzednią wersją – uzupełniono oprogramowanie o dodatkowe, awaryjne metody uruchomienia pobranego pliku:
W tym wypadku argument out zawierał odpowiedni kod lub PID procesu.
Czasem do archiwum ACE ze skryptem dołączany był obrazek
Serwer C&C od tego momentu zaczął zwracać różne trojany bankowe z rodzin takich jak Tinba, Ramnit, ISFB. Otrzymywane próbki i częstotliwość dystrybucji zależały od zadanego identyfikatora kampanii (parametr add). Ostap (nazwany od charakterystycznej wówczas nazwy skryptu C&C ostap.php) zaczynał nabierać cech pełnoprawnego złośliwego oprogramowania.
Ze względu na mnogość kampanii i różnorodność otrzymywanych próbek, zaczęliśmy podejrzewać, iż Ostap jest dostarczany przestępcom jako usługa dystrybucyjna, a pobierane oprogramowanie nie jest powiązane z konkretnym aktorem. Od 2016 roku Ostap coraz aktywniej pojawiał się w załącznikach.
Ewolucja złośliwego systemu (2017)
Do połowy 2017 roku, Ostap uległ znacznej rozbudowie. Pierwszą rzeczą, o której warto wspomnieć, były zastosowane techniki obrony przed analizą dynamiczną i wykonywaniem w sandboxach.
Pozyskiwanie informacji na temat środowiska i omijanie analizy
Przed rozpoczęciem wykonywania – malware wykonywał zapytanie WMI odpytując system o listę działających procesów, nazwę użytkownika, nazwę domenową, dokładną wersję systemu operacyjnego itp.
Przykładowe wyjście z sysInfo+procInfo prezentowało się następująco
Następnie lista była przeszukiwana pod kątem obecności nazw charakterystycznych dla środowisk analitycznych.
W przypadku znalezienia charakterystycznej nazwy – wykonywana była metoda document.alert. Obiekt document nie jest dostępny z poziomu środowiska Windows Script Host (charakterystyczny jest dla środowiska przeglądarki) – co prowadziło do wyjątku i zakończenia działania skryptu.
Po zebraniu informacji i weryfikacji środowiska – skrypt kopiował się do Autostartu i przechodził do głównego kodu.
Komunikacja z C&C (pobranie złośliwego oprogramowania)
Nowe wersje używały podobnego wzorca URL prowadzącego do C&C. W sposobie komunikacji zaszły jednak pewne zmiany:
- Metoda żądania zmieniła się z GET na POST
- W treści żądania wysyłane są wcześniej zebrane informacje sysInfo+procInfo (w formacie przedstawionym na przykładzie)
- Skróceniu uległy nazwy argumentów (np. z uid na u)
Ostap uzyskał możliwość otrzymywania dodatkowych informacji na temat sposobu w jaki ma być wykonany otrzymany plik:
- Plik mógł być dostarczony w postaci surowej lub Base64 (na podstawie wartości nagłówka Content-Transfer-Encoding)
- Ostap otrzymywał dodatkowe instrukcje na temat metody wykonania za pośrednictwem dodatkowego nagłówka HTTP pojawiającego się w odpowiedzi – you_god_damn_right (jego nazwa zmieniała się w kolejnych wersjach).
Złośliwe oprogramowanie obfituje w liczne nawiązania do popularnego serialu „Breaking Bad”.
Możliwe wartości nagłówka you_god_damn_right prezentowały się następująco:
- 0 – plik jest aktualizacją (podmień i uruchom ponownie oryginalny plik skryptu)
- 1 – uruchom plik DLL (z punktem wejścia o nazwie secretFunction)
- 2 – zainstaluj oprogramowanie z prawami administratora (instalator MSI)
Domyślnie plik był uruchamiany komendą cmd /c start <ścieżka>.
Po udanej instalacji – plik usuwał wszystkie pliki tymczasowe potencjalnie powiązane z pobraną próbką z folderu TEMP
Destruktywna propagacja na nośnikach wymiennych i zasobach sieciowych
Jeśli utworzenie pliku z pobranymi danymi nie powiodło się (plik pomimo otrzymania odpowiedzi HTTP 200 przez cały czas nie istniał na dysku) – Ostap uaktywniał dodatkową funkcjonalność.
Na samym początku wykonywał listę wszystkich plików o rozszerzeniach z listy extensions, znajdujących się na nośnikach wymiennych i zasobach sieciowych. Lista plików zapisywana była do pliku tymczasowego saymyname.txt.
Następnie na podstawie listy – wszystkie znalezione pliki były usuwane i podmieniane na kopię Ostapa (z zachowaną nazwą i dodanym rozszerzeniem JSE).
Cały mechanizm ma najprawdopodobniej na celu „ukarać” początkujących analityków, którzy wpływając na działanie skryptu (np. poprzez modyfikacje) mogą spowodować przypadkowe uaktywnienie się tego elementu.
Persystencja
Począwszy od tej wersji – Ostap nie ulegał już dezaktywacji po instalacji złośliwego oprogramowania. Zainfekowana maszyna, otrzymując regularne aktualizacje, pozostawała w dystrybucyjnym botnecie, który serwował ofierze trojany bankowe z różnych rodzin.
Obecna wersja (2018)
Ostap stanowi w tej chwili jedną z najaktywniejszych rodzin złośliwego oprogramowania, pojawiającą się w licznych kampaniach phishingowych wymierzonych w klientów bankowości elektronicznej w Polsce. Kod malware’u jest nieustannie rozwijany i ulepszany przez twórców.
Dodane zostały m.in. dodatkowe metody detekcji sandboxów:
- Malware nie uruchamia się na systemie Windows XP (wersja ta jest wykorzystywana często w sandboxach)
- Weryfikuje długość listy procesów (>1500 znaków, co przez pewien czas zapobiegało analizom złośliwego systemu z wykorzystaniem takich narzędzi jak box-js)
- Uzupełnieniu uległa blacklista nazw:
W przypadku wykrycia znanego ciągu:
- Wykonywana jest linia ploha[‚show’](‚No more half-measures.’); odwołująca się do nieistniejącej zmiennej ploha (co powoduje zakończenie działania skryptu przez nieobsłużony wyjątek)
- Jeśli wyjątek nie został rzucony – skrypt jest zamykany przez WScript.Quit()
- Jeśli również ten element nie zadziałał – aktywacji ulega kod „destruktywnej propagacji”
Destruktywna propagacja w tej chwili posiada dodatkowy warunek – oprócz braku możliwości utworzenia pliku, wymagane jest wykrycie sandboxa z ominięciem zakończenia działania skryptu. Domyślnie kod jest nieaktywny.
Niewielkiej zmianie uległ układ adresu URL:
Obecnie parametr add nie stanowi już identyfikatora kampanii, rolę tą pełni argument poprzedzający, który zmienia się w zależności od próbki.
W nowych wersjach zmieniła się również nazwa nagłówka HTTP z komendą na We_are_done_when_I_say_we_are_done, a także komunikat wyświetlany przy pierwszym uruchomieniu Ostapa na PDF Error: The document could not be printed.
Podsumowanie
Podsumowując – cechy charakterystyczne dla Ostapa stanowią:
- Dystrybucja za pośrednictwem spamu w postaci skryptów JSE o dużym rozmiarze (ok. kilkaset kilobajtów), dostarczanych jako załączone do wiadomości archiwum ACE z rozszerzeniem RAR
- Komunikat wyświetlany po uruchomieniu skryptu (PDF Error: The document could not be printed.)
- Charakterystyczna obfuskacja skryptów
- Persystencja (Ostap wznawia działanie przy każdym logowaniu, czekając na kolejne próbki/aktualizacje)
- Żądania wysyłane do C&C pod adres wg. wzorca https://<ip[:port]>/<ścieżka>.php?<id kampanii1>=<id kampanii2>&add=james&(argumenty…)
Informacje dodatkowe
Przykładowe próbki z omawianych wersji:
Próbki po deobfuskacji:
Ostap pojawiał się wielokrotnie w innych analizach (jako Nemucod lub „interesujący dropper”):