Żądny wiedzy? Wbijaj na Mega Sekurak Hacking Party w maju! -30% z kodem: majearly

„Pilne zamówienie nr…” – czyli kampania mailowa celowana na polskich internautów. Atakujący wykradają dane bankowe / VPN / poczty elektronicznej, ciasteczka z przeglądarek…

02 lutego 2023, 20:18 | Aktualności | komentarze 4

Tym razem otrzymaliśmy od jednego z naszych Czytelników próbkę złośliwego oprogramowania wykradającego poświadczenia przechowywane w przeglądarkach i jest to stealer podobny do opisywanego już wcześniej. Nota bene: przed publikacją artykułu, wysłaliśmy powiadomienia do zespołów CERT Polska, CSIRT KNF oraz CERT Orange.

Tak jak w poprzednim przypadku, malware rozsyłany jest e-mailami z rzekomym zapytaniem ofertowym / zamówieniem:

Rysunek 1. E-mail ze złośliwym załącznikiem (Pilne zamowienie nr…)

Jeśli ofiara uruchomi ten załącznik (plik exe), to wykradane są dane logowania do rozmaitych usług (np. klienci FTP, poczty, VNC, VPN), ale też ciasteczka z przeglądarek czy dane logowania do banków.

Co ciekawe, udało się nam uzyskać dostęp do serwera FTP, na który atakujący wysyła wykradzione informacje – wygląda to np. w ten sposób i pozwala stwierdzić, że kampania jest cały czas aktywna tj. „łapią się” kolejne ofiary.

Poniżej bardziej techniczna część analizy.

Pierwszy etap – binarka PE

Pierwszym etapem wykonania tego programu wykradającego jest 32 bitowy plik PE Pilne zamowienie [REDACTED].exe., który został podpisany nieprawidłowym certyfikatem. Po uruchomieniu sampla widać, że jest to instalator typu NSIS (Nullsoft Scriptable Installer System). Widzimy również katalog o nazwie Pacifisterne tworzony w katalogu domowym użytkownika. Interesujące są w nim dwa pliki: Reinspired.Aut oraz Seacross.Him. Pierwszy plik (Reinspired.Aut) jest około 50-kb plikiem tekstowym z bajtami zapisanymi hexem (rys. 2.), a drugi (Seacross.Him) to większy plik z nieznaną zawartością, zaczynający się od ciągu powtarzających się znaków X o długości 21 200 bajtów.

Rysunek 2. Fragment pliku Reinspired.Aut

Rysunek 3. Drzewo katalogu Pacifisterne

Analiza instalatora

Instalatory NSIS można rozpakowywać przy użyciu starszych wersji programu 7zip (do wersji 15.06). Po rozpakowaniu instalatora, oprócz omówionych wcześniej plików, otrzymujemy także skrypt instalacyjny [NSIS].nsi, który będzie bardzo przydatny do statycznej analizy próbki. Pakiet instalacyjny zawiera również dwa pluginy w katalogu $PLUGINSDIR  – nsExec.dll oraz System.dll. NsExec umożliwia wykonywanie innych programów z parametrami i odczyt ich wyjścia z poziomu instalatora. Plugin System pozwala na używanie dowolnych funkcji WinAPI. Plik Reinspired.Aut czytany jest od 36 000 bajtu, a następnie, w pętli, dwa kolejne bajty przenoszone są do zmiennej $_68_. Funkcja nsExec::ExecToStack (rys. 4.), wywołuje komendę set w cmd i na każdym z tych bajtów wykonuje operację xor przez klucz 0x4B. Zdekodowane znaki odkładane są na stosie, a następnie przenoszone do rejestru $0 i finalnie składane w stringi.

Rysunek 4. Fragment skryptu odpowiedzialny za dekodowanie

Po wykonaniu tej samej operacji można odczytać pięć calli WinAPI (rys. 5), które będą później wykonywane przy użyciu System.dll. 

Zgodnie z dokumentacją pluginu System litery, które stoją przy argumentach, oznaczają typy danych:

  • m – multibyte; string,
  • i – 32-bajtowy int,
  • p – wskaźnik.

Litera r z liczbą od 0 do 9 po niej oznacza rejestr – ten sam, który w skrypcie NSIS oznaczany jest znakiem dolara. Po argumentach definiowane są rejestry, do których trafi to, co zwróci dana funkcja.

Rysunek 5. Calle WinAPI odczytane po wykonaniu XOR-a na pliku Reinspired.Aut

Powyższe instrukcje otwierają plik Seacross.Him, alokują stronę pamięci, przesuwają wskaźnik pliku o 21 200 bajtów, czyli o tyle, ile wynosi padding złożony ze znaków X, i czytają resztę pliku do zaalokowanej strony. Ostatni etap to wykonanie shellcodu, do którego wskaźnik znajduje się w rejestrze 1. Podany zostaje on jako argument do funkcji EnumResourceTypes. godnie z dokumentacją, pełni on rolę pointera do funkcji wywoływanej później przy każdym znalezionym typie zasobu. Jest to trochę bardziej wyrafinowana metoda niż zwykły CreateThread.

Rysunek 6. Dokumentacja funkcji EnumResourceTypesW

Shellcode ładowany do pamięci ma około 266 kb i można powiedzieć, że jest niejako “poszatkowany” ciągami bajtów o tej samej wartości. Każdy taki blok jest przeskakiwany short jumpemw celu utrudnienia jego analizy i zminimalizowania wykrywalności. Poniżej (rys. 7) wspomniane bloki zostały wyróżnione na zielono.

Rysunek 7. Fragment shellcode’u, z zaznaczonymi blokami bajtów tej samej wartości

Dynamiczna analiza

Z uwagi na zastosowanie technik uniemożliwiających wykonanie w maszynie wirtualnej czy debugowanie, optymalnym podejściem była analiza na hoście fizycznym. Po wykonaniu pliku PE na liście procesów można zobaczyć procesy cmd.exe, których działanie zostało wyjaśnione na etapie analizy statycznej. Później, analogicznie do starszej wersji, o której też już pisaliśmy: https://sekurak.pl/zobaczcie-calkiem-normalne-zapytanie-ofertowe-z-wyzszego-urzedu-gorniczego-w-srodku-niespodzianka-malware-analiza/, uruchamia się proces caspol.exe i wykorzystywana jest technika process hollowing’u, czyli wstrzyknięcie złoścliwego kodu do uprzednio wstrzymanego procesu. Dociągany jest dodatkowy plik, tym razem jednak autor zrezygnował z Google Drive i zastąpił go prawdopodobnie własną infrastrukturą. Plik (md5: 52c1f8285a0b29f9d5580ef47d1a9469) znajduje się pod adresem e[…][.]tk/[…].pcx, i jest konieczny do dalszego wykonania malware’u. W chwili pisania niniejszej analizy powyższy adres nadal odpowiadał, dlatego próbka jest niebezpieczna, a kampania prawdopodobnie aktywna. Wysyłany jest również request http do api[.]ipify[.]org, dzięki czemu próbka pozyskuje publiczny adres IP ofiary.

Rysunek 8. Odszyfrowane requesty HTTP

Klucze rejestru i pliki

W kontekście odczytu plików i kluczy rejestru obie wersje stealerów (obecnie analizowany i omówiony w poprzednim artykule) są tożsame. Wykradane są poświadczenia do tych samych programów (tj. przeglądarki internetowe, klienci FTP, poczty, VNC i VPN). 

W trakcie wykonania próbka usiłowała uzyskać dostęp do następujących zasobów:

  • C:\Users\adm\AppData\Roaming\Mozilla\Firefox\profiles.ini
  • C:\Users\adm\AppData\Roaming\Mozilla\SeaMonkey\profiles.ini
  • C:\Users\adm\AppData\Roaming\Thunderbird\profiles.ini
  • C:\Users\adm\AppData\Roaming\NETGATE Technologies\BlackHawk\profiles.ini
  • C:\Users\adm\AppData\Roaming\8pecxstudios\Cyberfox\profiles.ini
  • C:\Users\adm\AppData\Roaming\K-Meleon\profiles.ini
  • C:\Users\adm\AppData\Roaming\Mozilla\icecat\profiles.ini
  • C:\Users\adm\AppData\Roaming\Moonchild Productions\Pale Moon\profiles.ini
  • C:\Users\adm\AppData\Roaming\Comodo\IceDragon\profiles.ini
  • C:\Users\adm\AppData\Roaming\Waterfox\profiles.ini
  • C:\Users\adm\AppData\Roaming\Postbox\profiles.ini
  • C:\Users\adm\AppData\Roaming\Flock\Browser\profiles.ini
  • C:\Users\adm\AppData\Local\Tencent\QQBrowser\User Data\Default\EncryptedStorage
  • C:\Users\adm\AppData\Local\falkon\profiles\
  • C:\Program Files (x86)\uvnc bvba\UltraVNC\ultravnc.ini
  • C:\Users\adm\AppData\Roaming\Discord
  • C:\Users\adm\AppData\Roaming\Trillian\users\global\accounts.dat
  • C:\Users\adm\AppData\Roaming\MySQL\Workbench\workbench_user_data.dat
  • C:\Users\adm\AppData\Roaming\Psi+\profiles
  • C:\Users\adm\AppData\Roaming\nbdluewj.41s\Edge Chromium\Default\Network\Cookies
  • C:\Users\adm\AppData\Roaming\Opera Software\Opera Stable
  • C:\Users\adm\AppData\Local\Yandex\YandexBrowser\User Data
  • C:\Users\adm\AppData\Local\Iridium\User Data
  • C:\Users\adm\AppData\Local\Chromium\User Data
  • C:\Users\adm\AppData\Local\7Star\7Star\User Data
  • C:\Users\adm\AppData\Local\Torch\User Data
  • C:\Users\adm\AppData\Local\MapleStudio\ChromePlus\User Data
  • C:\Users\adm\AppData\Local\Kometa\User Data
  • C:\Users\adm\AppData\Local\Amigo\User Data
  • C:\Users\adm\AppData\Local\BraveSoftware\Brave-Browser\User Data
  • C:\Users\adm\AppData\Local\CentBrowser\User Data
  • C:\Users\adm\AppData\Local\Chedot\User Data
  • C:\Users\adm\AppData\Local\Orbitum\User Data
  • C:\Users\adm\AppData\Local\Sputnik\Sputnik\User Data
  • C:\Users\adm\AppData\Local\Comodo\Dragon\User Data
  • C:\Users\adm\AppData\Local\Vivaldi\User Data
  • C:\Users\adm\AppData\Local\CatalinaGroup\Citrio\User Data
  • C:\Users\adm\AppData\Local\uCozMedia\Uran\User Data
  • C:\Users\adm\AppData\Local\liebao\User Data
  • C:\Users\adm\AppData\Local\Elements Browser\User Data
  • C:\Users\adm\AppData\Local\Epic Privacy Browser\User Data
  • C:\Users\adm\AppData\Local\CocCoc\Browser\User Data
  • C:\Users\adm\AppData\Local\Fenrir Inc\Sleipnir5\setting\modules\ChromiumViewer
  • C:\Users\adm\AppData\Local\QIP Surf\User Data
  • C:\Users\adm\AppData\Local\Coowon\Coowon\User Data
  • C:\Users\adm\AppData\Local\Google\Chrome\User Data
  • C:\Users\adm\AppData\Local\Microsoft\Edge\User Data
  • C:\Users\adm\AppData\Roaming\FTPGetter\servers.xml
  • C:\Users\adm\AppData\Local\NordVPN
  • C:\Program Files\Private Internet Access\data
  • C:\Users\adm\AppData\Roaming\FlashFXP
  • C:\Users\adm\AppData\Roaming\SmartFTP\Client 2.0\Favorites\Quick Connect
  • C:\Users\adm\AppData\RoamingIpswitch\WS_FTP\Sites\ws_ftp.ini
  • C:\Program Files (x86)\FTP Commander Deluxe\Ftplist.txt
  • C:\Program Files (x86)\FTP Commander\Ftplist.txt
  • C:\cftp\Ftplist.txt
  • C:\Users\adm\AppData\Local\VirtualStore\Program Files (x86)\FTP Commander\Ftplist.txt
  • C:\Users\adm\AppData\Local\VirtualStore\Program Files\Foxmail\mail
  • C:\Users\adm\AppData\Roaming\Opera Mail\Opera Mail\wand.dat
  • C:\Users\adm\AppData\Roaming\Pocomail\accounts.ini
  • C:\Users\adm\AppData\Roaming\eM Client\accounts.dat
  • C:\Users\adm\AppData\Local\Mailbird\Store\Store.db
  • C:\Users\adm\AppData\Roaming\FileZilla\recentservers.xml
  • C:\Users\adm\AppData\Roaming\Claws-mail
  • C:\Users\adm\AppData\Roaming\The Bat!

oraz do poniższych kluczy rejestru:

  • HKCU\Software\Microsoft\Windows Messaging Subsystem\Profiles\9375CFF0413111d3B88A00104B2A6676
  • HKCU\Software\Microsoft\Office\16.0\Outlook\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676
  • HKLM\SOFTWARE\Wow6432Node\RealVNC\WinVNC4
  • HKLM\Software\WOW6432Node\ORL\WinVNC3
  • HKLM\Software\WOW6432Node\TightVNC\Server
  • HKCU\Software\TightVNC\Server
  • HKCU\Software\Aerofox\FoxmailPreview
  • HKCU\Software\TigerVNC\Server
  • HKCU\Software\OpenVPN-GUI\configs
  • HKCU\SOFTWARE\Martin Prikryl\WinSCP 2\Sessions
  • HKCU\SOFTWARE\FTPWare\COREFTP\Sites
  • HKCU\Software\RimArts\B2\Settings
  • HKCU\Software\IncrediMail\Identities
  • HKCU\Software\Qualcomm\Eudora\CommandLine

Komunikacja sieciowa

W poprzednim wydaniu tego stealera ( https://sekurak.pl/zobaczcie-calkiem-normalne-zapytanie-ofertowe-z-wyzszego-urzedu-gorniczego-w-srodku-niespodzianka-malware-analiza/) wykradzione poświadczenia były wysyłane z wykorzystaniem przejętego serwera pocztowego SMTP, jednak z uwagi na to, że brakowało pliku dociąganego z Google Drive, nie można było dokładniej przeanalizować tej komunikacji. Tym razem autor zdecydował się na użycie pozyskanego (zapewne nielegalnie) serwera FTP. W związku z tym analiza komunikacji nie była już skomplikowana. Serwer znajduje się pod adresem ftp[.][redacted-sekurak][.]com. Domena [redacted-sekurak].com jest w tej chwili oznaczana jako niebezpieczna. Próbka wykorzystuje FTP do wrzucenia dwóch plików, w naszym przypadku był to plik HTML – PW_adm-DESKTOP-V0V4A6S_2023_01_29_21_59_07.html oraz archiwum ZIP – CO_adm-DESKTOP-V0V4A6S_2023_01_29_21_59_14.zip. 

Rysunek 9. Kopia komunikacji z przejętym serwerem FTP

W pliku HTML znajdują się podstawowe informacje o hoście, a także wykradzione poświadczenia z podaniem ich źródeł. W pliku ZIP natomiast, w omawianym przypadku, znalazły się ciastka z przeglądarek Microsoft Edge i Google Chrome. 

Rysunek 10. Plik HTML z wykradzionymi poświadczeniami (do testów z tego artykułu)

Rysunek 11. Zawartość pliku ZIP

Wykorzystywany w tej kampanii serwer najprawdopodobniej jest regularnie czyszczony przez autora malware’u, gdyż na początku znaleźliśmy na nim jedynie swoje testowe poświadczenia, a następnego dnia już ich tam nie było. Z kolei później udało się zaobserwować paczki z poświadczeniami kliku ofiar. Niestety z tego powodu nie jesteśmy w stanie oszacować, ile osób mogło spowodować wykonanie analizowanego malware’u i narazić się na utratę swoich danych. 

Rysunek 12. Lista plików na serwerze FTP

~ Jakub Wróbel, as

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Adam

    Czy ESET to wykrywa?

    Odpowiedz
    • wk

      @Adam

      Właściwym adresatem Twojego pytania byłby producent eseta. Jako klient zawsze możesz wysłać takie pytanie na ich support, np z linkiem do tego artykułu. Wtedy jak nawet nie wykrywa, mogą to poprawić.

      Bo żeby samemu to przetestować, trzeba byłoby mieć komputer testowy z windows i akurat esetem. Nie jestem pewien czy ktoś ma akurat taką konfigurację.

      Odpowiedz
  2. Strach wchodzić do internetu bez przejrzenia w pierwszej kolejności różnych stron o bezpieczeństwie, żeby wiedzieć jakie są aktualne ataki i na co uważać. W banku komunikat żeby uważać na dziwne sms, na OLX żeby uważać, na Allegro to samo. Załączniki .exe omijam z daleka. Zapytania ofertowe powinny przychodzić w pdf. Wszystko inne jest podejrzane.

    Odpowiedz
    • tak

      PDF-y też są podejrzane.

      Odpowiedz

Odpowiedz