Tofsee jest złośliwym oprogramowaniem z wieloma funkcjami – może kopać bitcoiny, wysyłać emaile, kraść dane dostępowe, wykonywać ataki DDoS i wiele więcej.
Pisaliśmy już o Tofsee/Ghegu kilka miesięcy temu – nasza analiza znajduje się pod adresem https://www.cert.pl/news/single/tofsee. Znajomość tamtego posta jest potrzebna żeby w pełni zrozumieć obecnie omawiany temat. Ten post ma za zadanie tylko rozszerzyć tamte badania, koncentrując się na funkcjach wtyczek, których wcześniej nie opisaliśmy.
Podsumujemy pokrótce każdy moduł i podkreślimy jego najważniejsze możliwości.
Ten post jest raczej długi – dla niecierpliwych, lista hashy i spis treści w jednym:
ID Zasobu | Nazwa DLL | Hash pluginu |
---|---|---|
1 | ddosR.dll | fbc7eebe4a56114e55989e50d8d19b5b |
2 | antibot.dll | a3ba755086b75e1b654532d1d097c549 |
3 | snrpR.dll | 385b09563350897f8c941b47fb199dcb |
4 | proxyR.dll | 4a174e770958be3eb5cc2c4a164038af |
5 | webmR.dll | 78ee41b097d402849474291214391d34 |
6 | protect.dll | 624c5469ba44c7eda33a293638260544 |
7 | locsR.dll | 2d28c116ca0783046732edf4d4079c77 |
10 | hostR.dll | c90224a3f8b0ab83fafbac6708b9f834 |
11 | text.dll | 48ace17c96ae8b30509efcb83a1218b4 |
12 | smtp.dll | 761e654fb2f47a39b69340c1de181ce0 |
13 | blist.dll | e77c0f921ef3ff1c4ef83ea6383b51b9 |
14 | miner.dll | 47405b40ef8603f24b0e4e2b59b74a8c |
15 | img.dll | e0b0448dc095738ab8eaa89539b66e47 |
16 | spread.dll | 227ec327fe7544f04ce07023ebe816d5 |
17 | spread2.dll | 90a7f97c02d5f15801f7449cdf35cd2d |
18 | sys.dll | 70dbbaba56a58775658d74cdddc56d05 |
19 | webb.dll | 8a3d2ae32b894624b090ff7a36da2db4 |
20 | p2p.dll | e0061dce024cca457457d217c9905358 |
1. ddosR.dll
Oryginalna nazwa pliku: p:\cmf5\small2\plugins\plg_ddos\ddos.cpp
Zadaniem tego pluginu jest wykonywanie ataków DDoS na wskazane cele. Zaimplementowane metody nie są zbyt skomplikowane, np. wykonywanie wielu zapytań (tzw. HTTP Flood):
Albo stary dobry SYN flood (używając sterownika PassThru, czyli modułu grabb).
Nie zaobserwowaliśmy jeszcze żadnej aktywności DDoS od Tofsee – prawdopodobnie ten plugin obecnie nie jest wykorzystywany przez botmastera.
Konfiguracja otrzymywana z C&C dla tego pluginu jest bardzo prosta:
Moduły zawierają wiele napisów, które znacznie upraszczają analizę:
2. antibot.dll
Oryginalna nazwa pliku: z:\cmf5\small2\plugins\plg_antibot\plugin.cpp
To bardzo interesujący plugin – jego celem jest usunięcie innych rodzajów złośliwego oprogramowania z komputera ofiary.
Jest w stanie:
- sprawdzić wszystkie działające procesy i zabić te, które mogą być potencjalnym zagrożeniem (sprawdzenie oparte o nazwę procesu)
- przeszukać klucz rejestru SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects i usunąć niektóre dodatki do przeglądarki
- przeszukać aktualne mutexy i zabić procesy które je posiadają (sprawdzenie oparte o nazwę)
Lista dodatków usuwanych aktualnie przez moduł (pobranych z C&C):
3. snrpR.dll
Oryginalna nazwa pliku: p:\\cmf5\\small2\\plugins\\plg_sniff\\sniff.cpp
Powiązana sekcja w konfiguracji:
Ruch jest podsłuchiwany i przechwytywany przez sterownik PassThru (dostępny przez named pipe „\\\\.\\PassThru”).
-
mail.sniff aktywuje kradzież adresów e-mail przechodzących po sieci. Adresy są kradzione z nagłówków From i To. Dodatkowo szuka w treści encji „%40″,”#64″,”#064” (czyli zakodowanego znaku „@”).
-
ftp.sniff i pop.sniff aktywują kradzież danych logowania POP3 i FTP. Plugin szuka komend USER i PASS, a następnie wyciąga zawartość i wysyła do serwera C&C.
-
mail.replace Aktywuje transparentne podmienianie zawartości wysyłanych emaili, używając wybranego szablonu (przechowywanego w konfiguracji w polu mailbody)
Przykładowy szablon który otrzymaliśmy (mimo że ta funkcja jest obecnie wyłączona):
Jak widać, szablon zostawia oryginalne nagłówki From, To (%FROM_LINE, %TO_LINE), dodatkowo ma opcję zostawienia oryginalnego tematu (%SUBJ, %_SUBJ) i oryginalnego czasu (%DATE, %P5DATE, %M5DATE)
4. proxyR.dll
Oryginalna nazwa pliku: p:\\cmf5\\small2\\plugins\\plg_proxy\\plugin.cpp
Ten moduł nasłuchuje na połączenia TCP na adresie 0.0.0.0:1080 i dostarcza wielowątkowy serwer SOCKS proxy. Wersja, którą analizowaliśmy, identyfikuje się w nagłówku Proxy-agent jako WinRoute Pro/4.1.
Ruch jest przekierowywany do adresów wpisanych w sekcji proxy_cfg, osobno dla każdego regionu:
Adresy są albo wpisane jako referencje do listy work_srv, albo bezpośrednio:
W proxy_cfg mamy też listę skonfigurowanych dla socketów timeoutów:
Kiedy brakuje jakiejś wartości w konfiguracji, program ma kilka domyślnych wartości zapewniających działanie.
Moduł dodatkowo dodaje mapowanie portu używając UPnP, przedstawiając się jako Skype:
Napisy z programu dają trochę wglądu w cel i wewnętrzne działanie tego pluginu:
6. protect.dll
Oryginalna nazwa pliku: z:\cmf5\small2\plugins\plg_protect\plugin.cpp
Ten moduł pobiera i instaluje złośliwą usługę w systemie:
Złośliwa usługa jest obfuskowana „nowoczesnym algorytmem szyfrowania” – czyli każdy bajt jest negowany:
Md5 zdeszyfrowanego backdoora = 49642f1d1b1673a40f5fa6263a66d056. Ten backdoor jest chroniony przez packer i to jedyne zaobserwowane przez nas jego użycie podczas całego procesu analizy Tofsee – może to sugerować, że był stworzony przez innego aktora i później wykorzystany przez twórców Tofsee.
7. locsR.dll
Oryginalna nazwa pliku: z:\cmf5\cmf5\small2\plugins\plg_locs\plg.cpp
Ten plugin kradnie dane dostępowe do programu Microsoft Outlook:
Po wyciągnięciu ich z rejestru, są odszyfrowywane i wykorzystywane do wysłania większej liczby emaili. Dodatkowo, generuje adres email w postaci [nazwa komputera]@mail.run i próbuje wysłać emaile korzystając z niej (czystym protokołem SMTP).
Ciekawsze napisy z pliku:
10. hostR.dll
Plugin, który potrafi działać jako serwer HTTP. Przedstawia się Apache/2.2.15 (Win32). Może serwować pliki, prawdopodobnie dla innych botów (w połączeniu z pluginem p2p.dll).
Jest w stanie wykluczać niektóre IP – prawdopodobnie analityków bezpieczeństwa (np. całe zakresy adresowe Forcepoint i Google są zbanowane).
Pobrana z C&C konfiguracja dla tego modułu:
11. text.dll
Oryginalna nazwa pliku: p:\cmf5\small2\plugins\plg_text\plg_text.cpp.
Bardzo prosty plugin, jest w stanie tylko przetwarzać szablony emaili pobranych z serwera C&C.
12. smtp.dll
Bardzo ważny moduł – generuje i wysyła emaile. Jest prawdopodobnie największym pluginem, a jego kod jest często skomplikowany.
Najciekawszą rzeczą w nim jest fakt, że do generowania wiadomości używa własnego dedykowanego języka skryptowego. Przykładowy skrypt otrzymany od C&C:
Jeśli ktoś jest w stanie rozpoznać ten język skryptowy, bardzo chętnie dowiedzielibyśmy się co jeszcze z niego korzysta. Jako że nie widzieliśmy wcześniej czegoś takiego, spróbowaliśmy przeanalizować interpreter tego języka.
Składnia jest raczej prosta, ale bardzo podobna do asemblera i prymitywna. Mamy nadzieję że autorzy malware generują ten skrypt z jakiegoś bardziej wysokopoziomowego języka, bo pisanie w takim czymś musi bardzo ranić zdrowie psychiczne programisty ;].
Wspieranych jest bardzo wiele opcodów – polecamy spojrzeć na tę uproszczoną funkcję parsującą jako przykład:
Nie przeanalizowaliśmy ich wszystkich, ale kilka najważniejszych to:
- C ip:port – Połącz do ip:port (Connect)
- L lbl – Stwórz etykietę (Label) o nazwie lbl.
- J lbl – Skocz (Jump) do etykiety lbl.
- v name value – Stwórz zmienną (variable) o nazwie name i przypisz wartość value.
- W text – Wypisz (Write) coś na wyjście – czyli w tym przypadku do emaila.
- I lbl condition – Jeśli (If) condition jest spełniony, skocz do etykiety lbl
Dodatkowo, otoczenie tekstu w „”” pozwala na znaki nowej linii i escape sequences, a __v(XX)__ to interpolacja zmiennych.
Ponownie, kilka ciekawszych napisów, które można znaleźć w tym pliku:
Przez chwilę myśleliśmy, że IfYouAreReadingThisYouHaveTooMuchFreeTime to easter-egg dla nas, analityków malware – ale okazuje się że to tylko dziwny specjalny przypadek związany z logowaniem do hotmaila.
Konfiguracja, którą pobraliśmy dla tego modułu z C&C:
13. blist.dll
Ten plugin sprawdza czy bot znajduje się na listach spambotów. W konfiguracji, którą zaobserwowaliśmy, następujące DNSBL (DNS-based Blackhole List) były używane:
DNSBL to usługa bazująca na DNS, używana do publikowania adresów IP nadających spam. Jeśli serwer mailowy używa DNSBL, wykona żądanie DNS do domeny DNSBL z każdym nadchodzącym połączeniem SMTP. Techniczne detale tego rozwiązania są poza zakresem naszego posta, ale jeśli ktoś jest ciekawy może spojrzeć na http://www.us.sorbs.net/using.shtml albo https://en.wikipedia.org/wiki/DNSBL.
Sprawdzenie DNSBL w malware jest wykonywana za pomocą gethostbyname.
Konfiguracja modułu pobrana z C&C:
14. miner.dll
Jak sama nazwa wskazuje, jest to koparka kryptowalut. Ten plugin służy tylko do koordynacji pracy, ale ma kilka powiązanych programów, które wykonują całą „ciężką pracę”.
Jeden z programów, nazywany grabb, jest dystrybuowany prosto z C&C. Inne są pobierane z URLi zapisanych w konfiguracji – w teorii. W praktyce serwery dystrybuujące programy kopiące wyglądają na martwe, więc nie byliśmy w stanie ich pobrać.
Miner.dll weryfikuje że na pewno pobrał poprawny program, ale być może hashowanie było za trudne do zaimplementowania dla twórców, więc użyli prostszej metody – porównanie długości – na przykład, upewniają się że pobrany program cores_gt_1 ma dokładnie 223744 bajtów.
Nie analizowaliśmy tego pluginu bardzo dokładnie, bo koparki bitcoinów nie leżą w naszym obszarze zainteresowań, a napisy dały wystarczająco wiele informacji o tym co dzieje się w środku i tak:
A resztę można znaleźc w konfiguracji pobranej z C&C:
15. img.dll
Ten krótki plugin służy do przetwarzania złośliwych załączników – koduje je za pomocą algorytmu base64 i załącza do emaili.
Nie ma tu nic interesującego, jak widać w napisach zapisanych w kodzie:
Konfiguracja dla tego modułu pobrana z C&C.
16. spread.dll
Ten plugin jest wykorzystywany żeby rozprzestrzeniać Tofsee przez media społecznościowe: Facebooka, Twittera oraz komunikator Skype.
Najpierw wyciąga ciastka xs, datr, c_user (i więcej).
Dokładna metoda zależy od przeglądarki, ale generalnie wtyczka czyta ciastka zapisane na dysku przez przeglądarkę. Na przykład cookies.sqlite z \Mozilla\Firefox\Profiles dla Firefoxa. Wspierane przeglądarki to Chrome, IE, Firefox, Safari i Opera.
Następnie plugin używa tych ciastek np. żeby podszyć się pod użytkownika przed API Facebooka:
Lista przyjaciół jest pobierana przez API i wiadomość jest wysyłana do każdego z nich. Format wiadomości jest przechowywany w konfiguracji, na przykład:
‚fb.message1’: ‚%SPRD_TEXT1|%LANG_ID| %SPRD_URL1’
Twitter jest obsługiwany bardzo podobnie – ciastka są kradzione, followersi są pobierani przez API pod adresem https://twitter.com/followers, a następnie wysyłane są wiadomości.
Dodatkowo wspierane jest rosyjskie VKontakte, ale ta funkcja jest opcjonalna i trzymana w osobnym pluginie. Opisywany tu moduł sprawdza tylko czy VK jest włączony w konfiguracji i wywołuje odpowiedni handler (który musi być inicjalizowany z innego pluginu), jeśli jest zdefiniowany. Twórcy złośliwego oprogramowania zazwyczaj nie obierają na cel Rosji, więc ta funkcja jest wyłączona i moduł do Vkontakte nie jest rozpowszechniany.
Moduł może również rozprzestrzeniać się za pomocą Skype, ale analiza wsteczna protokołu Skype była widocznie za trudna, więc twórcy poszli na łatwiznę i wtyczka czeka, aż Skype zostanie uruchomiony, po czym wysyła wiadomości windowsowe do okna Skype:
Ten plugin ma dziesiątki zapisanych napisów, więc analiza w deasemblerze jest bardzo prosta. Kilka ciekawszych grup:
Referencje do pluginu OCR – żeby rozwiązywać Captchę:
Ciastka Facebooka:
Napisy związane z rozpowszechnianiem się przez Facebooka:
Napisy związane z kradzieżą ciasteczek:
Napisy związane z przechwytywaniem Skype:
Ciastka Twittera:
I rozpowszechnianie się przez Twittera:
Na koniec napisy związane z wysyłaniem ciasteczek:
Dużo funkcji oznacza dużo konfiguracji od C&C:
17. spread2.dll
Plugin stosujący metody sprzed ponad 15 lat – przenosić Tofsee przez… zainfekowane nośniki USB! Nie brzmi to jak dobra strategia w roku 2017, ale mimo to, jest on ciągle aktywny.
Najpierw złośliwy program jest kopiowany jako RECYCLER\<random_gibberish>.exe na nośnik USB, następnie są na nim ustawiane atrybuty READONLY i SYSTEM, a finalnie zapisywany jest złośliwy autorun.inf:
Złośliwy program, który będzie dystrybuowany, jest pobierany z Internetu (patrz również sys.dll i zmienna %FIREURL).
W napisach nie ma wiele ciekawego, poza logami:
A konfiguracja dla modułu jest dość uboga:
18. sys.dll
Ten plugin wygląda na downloader, albo raczej program aktualizujący. Wysyła on żądanie zależne od zawartości zmiennej %FIREURL w konfiguracji:
Przykładowe wartości %FIREURL (jeden na linię):
Zmienne są podmieniane rekursywnie, a %SYS_RN oznacza \r\n, więc pierwsza możliwa wartość powinna być traktowana jako:
Jeśli wyślemy to żądanie do odpowiedniego IP na porcie 80, otrzymamy kolejny złośliwy program. Różne żądania zwracają inne programy.
Jeśli żądanie jest niepoprawne, albo nie wspierane, zwracany jest następujący obraz:
Doceniamy poczucie humoru.
Nic zaskakującego w napisach:
Konfiguracja od C&C:
Dodatkowo używana jest zmienna %FIREURL z głównego modułu.
19. webb.dll
Ta wtyczka szuka procesu iexplore.exe. Jeśli znajdzie go, wstrzykuje do niego DLL IEStub.dll.
IEStub.dll przechwytuje bardzo dużo funkcji – lista:
Hooki przechwytują wołane funkcje i mogą nawet zmienić im parametry. Nie analizowaliśmy ich dokładnie, ale większość z nich to bardziej loggery, które tylko przechwytują interesujące dane z parametrów. Nie zaobserwowaliśmy żeby Tofsee serwowało jakiekolwiek web injecty.
Dla kompletności, interesujące napisy:
Konfiguracja dla tego modułu pobrana z C&C:
20. P2P.dll
Oryginalna nazwa pliku: p:\cmf5\small2\plugins\plg_p2p\plg_p2p.cpp
Ten plugin jest raczej krótki. Mimo że ma obiecującą nazwę, nie ma w nim wiele ciekawego – otwiera port na routerze i nasłuchuje połączeń. Nie implementuje żadnych poleceń, wszystko jest zostawione dla głównego modułu (albo pluginów, jak np. serwer HTTP).
Jak prawie każdy moduł, zapisuje logi do pliku %TMP%\log_%s.txt, a jeśli to się nie uda, to do C:\log.txt.
Dodaje również mapowanie portu używając UPnP, w taki sam sposób jak plugin 4 (proxyR.dll).
Konfiguracja otrzymana z C&C:
Interesujące napisy: