Analiza złośliwego oprogramowania Ostap (Backswap dropper)

Data publikacji: 01/06/2018, Paweł Srokosz

    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ć, że będzie to prosty dropper, mający na celu wyłącznie pobranie i instalację złośliwego oprogramowania. Coraz częściej zdarza się jednak, że 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 oprogramowania 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. Obecnie 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).

    Fałszywa faktura

    Mtracker drops

    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 oprogramowania (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 oprogramowania – 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 zazwyczaj 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

    Bomb dropper

    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ć, że 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 oprogramowania (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”.

    goddamnright

    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 nadal 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.

    myname

    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 obecnie 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 oprogramowania 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 obecnie 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.

    myname

    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”):