ALPHACON BBSGość · pl
← Newsy

Newsy / CERT Orange

Koktevrat – wieloetapowy Android RAT dystrybuowany pod przykrywką aplikacji MandatGO

Nieistniejąca aplikacja rządowa, reklama na Facebooku i obietnica prostego sposobu na opłacenie mandatu. Tak zaczyna się infekcja, której kolejne etapy prowadzą od zwykłego pliku APK do pełnoprawnego Android RAT-a. Analiza próbki pokazuje, że atakujący nie ograniczyli się do kradzieży danych. Malware zapewnia operatorowi szeroki zestaw funkcji pozwalających na zdalne pozyskiwanie informacji, wykonywanie działań na urządzeniu i utrzymywanie komunikacji z infrastrukturą C2.

Analizowana próbka została pozyskana w ramach kampanii wykorzystującej aplikację MandatGO, przedstawianą użytkownikom jako narzędzie związane z obsługą mandatów.

Reklama zachęcająca do zainstalowania aplikacji

Dystrybucja odbywała się za pośrednictwem reklamy na Facebooku, a użytkownik był kierowany do strony fb-market-play[.]cc, z której mógł pobrać plik APK. Aplikacja MandatGO okazała się pierwszym etapem wieloetapowego łańcucha prowadzącego do instalacji Android RAT-a.

Fanpage na Facebooku dystrybuujący złośliwą aplikację

Na potrzeby analizy badaną rodzinę nazwaliśmy koktevrat. Nazwa pochodzi od ciągu koktevran_channel, wykorzystywanego przez malware podczas tworzenia kanału powiadomień Androida. Nie znaleziono wystarczających przesłanek pozwalających przypisać próbkę do znanej rodziny malware.

Najważniejsze cechy koktevrat to: wieloetapowe ładowanie kodu, wykorzystanie Accessibility Service, komunikacja C2 wspierana przez Firebase Cloud Messaging (FCM) oraz szeroki zestaw poleceń umożliwiających operatorowi zdalną interakcję z urządzeniem.

Stage 1. Dropper

Pierwszy APK prezentuje się jako aplikacja MandatGO, ale jego głównym zadaniem jest dostarczenie kolejnego komponentu. Manifest zawiera m.in. REQUEST_INSTALL_PACKAGES, a kod właściwej aplikacji jest częściowo ukryty przed analizą statyczną.

Dropper wykorzystuje dynamiczne ładowanie DEX oraz deszyfrowanie zasobów w czasie działania. Obfuskacja obejmuje również zakodowane ciągi znaków, refleksję Javy i pozorny kod utrudniający analizę. W jednym z mechanizmów wykorzystano XOR z trzybajtowym kluczem [32, 17, 46].

Po wykonaniu pierwszego etapu odszyfrowywany jest kolejny komponent – wudEMR.apk. Oznacza to, że APK dostarczony użytkownikowi nie zawiera wprost pełnej funkcjonalności RAT-a. Istotne elementy pojawiają się dopiero po wykonaniu droppera.

Stage 2: właściwy Android RAT

Drugi komponent zachowuje tę samą nazwę i ikonę co MandatGO, ale jego funkcja jest już zupełnie inna. Pakiet com.kowo.ciligeci zawiera właściwą funkcjonalność koktevrat.

Podobnie jak w pierwszym etapie, kod został ukryty w zasobie uoN.css. Plik zawiera zaszyfrowany payload, który jest odszyfrowywany przy użyciu RC4 z kluczem iOZ, a następnie dynamicznie ładowany. Zaciemnianie kodu zostało zastosowane na obu poziomach łańcucha infekcji.

Manifest Stage 2 wskazuje już bezpośrednio na charakter komponentu. Aplikacja posiada m.in. READ_SMS, QUERY_ALL_PACKAGES, INTERNET oraz WAKE_LOCK. Właściwe możliwości RAT-a wynikają jednak przede wszystkim z wykorzystania Accessibility Service.

Architektura drugiego etapu składa się z kilku usług działających w tle oraz odbiornika zdarzeń. Komunikacja i aktywacja funkcji są rozdzielone pomiędzy komponent C2 JyfNnJyj oraz usługę Accessibility GtVyayDo. Taki podział pozwala oddzielić odbieranie poleceń od ich wykonywania.

Accessibility Service jako mechanizm wykonawczy

GtVyayDo stanowi jeden z najważniejszych komponentów koktevrat. Po uzyskaniu przez malware odpowiedniego uprawnienia może odbierać zdarzenia Androida oraz wykonywać operacje za pośrednictwem mechanizmów dostępności.

Ekran włączający usługi dostępności (Accessibility Services).

Zakres obsługiwanych poleceń obejmuje m.in. launch_app, action_home, action_recents, lock_screen, unlock_screen, set_text, clear_input oraz key_press. Operator może więc uruchamiać aplikacje, wykonywać akcje systemowe i wprowadzać dane do elementów interfejsu.

Koktevrat obsługuje również schowek poprzez clipboard i clear_clipboard. Pozwala to pozyskiwać informacje kopiowane przez użytkownika oraz usuwać ich zawartość. Kolejnym elementem są nakładki. Polecenia inject_overlay, disable_overlay, show_klock, hide_klock, Show_update_screen i hide_update_screen pozwalają malware wyświetlać własne elementy nad aplikacjami. W połączeniu z możliwością wprowadzania tekstu daje to operatorowi możliwość wpływania na przebieg interakcji użytkownika z aplikacjami.

W kodzie zidentyfikowano również olop_maybe_set oraz olop_app_set, związane z mechanizmem keyloggingu. Pozwalają one sterować rejestrowaniem aktywności i ograniczać je do określonych aplikacji.

Po uzyskaniu dostępu do Accessibility Service malware podejmuje również działania utrudniające użytkownikowi przerwanie procesu konfiguracji. W analizowanym przebiegu uruchamiana jest nakładka, a przez około 45 sekund wykonywana jest cyklicznie akcja ACTION_BACK.

Accessibility Service nie jest więc pojedynczą funkcją koktevrat, ale komponentem sterującym, który pozwala wykorzystać pozostałe możliwości RAT-a w kontekście urządzenia i aktywności użytkownika.

Zakres funkcjonalny RAT-a

Lista poleceń pokazuje, że koktevrat został zaprojektowany jako pełnoprawne narzędzie zdalnego dostępu, a nie wyłącznie infostealer.

Wśród zidentyfikowanych funkcji znajdują się:

  • get_sms – pobieranie wiadomości SMS,
  • get_apps – enumeracja zainstalowanych aplikacji,
  • clipboard / clear_clipboard – odczyt i czyszczenie schowka,
  • launch_app – uruchamianie aplikacji,
  • set_text / clear_input – wprowadzanie i usuwanie danych,
  • key_press – wykonywanie operacji odpowiadających zdarzeniom klawiatury,
  • inject_overlay / disable_overlay – obsługa nakładek,
  • lock_screen / unlock_screen – blokowanie i odblokowanie ekranu,
  • olop_maybe_set / olop_app_set – sterowanie keyloggingiem.

Komponenty oraz komunikacja aplikacji.

Osobną grupę stanowią funkcje związane z utrzymaniem dostępu i ograniczaniem możliwości usunięcia malware, m.in. protect_on, protect_off oraz gp_off. Dostępne są również polecenia umożliwiające zmianę ustawień urządzenia, takie jak battery_opt, brightness_perm czy need_admin.

Tak szeroki zestaw funkcji wskazuje, że operator może traktować zainfekowane urządzenie nie tylko jako źródło danych, ale jako zdalnie sterowany punkt końcowy.

C2: Firebase jako mechanizm sygnalizacji i zdalnego sterowania

Warstwa komunikacyjna koktevrat łączy klasyczną komunikację z serwerem C2 z Firebase Cloud Messaging (FCM). Za jej obsługę odpowiada przede wszystkim JyfNnJyj.

Podczas inicjalizacji malware pobiera FCM registration token urządzenia i przekazuje go do infrastruktury C2 za pomocą send_token. Token może w ten sposób służyć jako identyfikator konkretnej instalacji. W kodzie widoczne są również akcje ACTION_CONNECT, ACTION_DISCONNECT, ACTION_CHECKIN, ACTION_HEARTBEAT oraz ACTION_REPORT_TOKEN.

FCM pełni przy tym rolę mechanizmu sygnalizacji i wybudzania. Malware nie musi utrzymywać przez cały czas aktywnego kanału komunikacyjnego — może zostać pobudzone przez wiadomość push. Równolegle AlarmManager planuje okresowe uruchomienie komponentu C2. W analizowanej próbce heartbeat ustawiono na około cztery godziny.

W kodzie zapisano dwie domeny C2:

  • streams-tv[.]lol
  • stream-plus[.]lat

Próbka zawiera również mechanizm DGA, zmieniający generowane domeny w dziesięciodniowych interwałach. Utrudnia to skuteczne blokowanie infrastruktury wyłącznie na podstawie statycznej listy domen.

Warstwa C2 nie służy wyłącznie do raportowania statusu urządzenia. Otrzymane polecenia są przekazywane do komponentów wykonawczych, m.in. przez intent com.kowo.ciligeci.COMMAND, obsługiwany przez GtVyayDo.handleServerCommand.

Kod odpowiadający za generowanie nazw domenowych (implementacja DGA).

Tunelowanie ruchu

Interesującą funkcją jest obsługa tunelu TCP poprzez proxy_open, proxy_data i proxy_close. Mechanizm pozwala przekazywać ruch sieciowy przez zainfekowane urządzenie, rozszerzając rolę C2 poza zwykłą wymianę komend i danych.

W kodzie widoczna jest konfiguracja lokalnego interfejsu z adresem 10.0.0.2/32 oraz trasą obejmującą 0.0.0.0/0. Wskazuje to na próbę utworzenia routowanego kanału dla ruchu przechodzącego przez implant.

Architektura koktevrat wykorzystuje więc kilka mechanizmów jednocześnie: C2 odpowiada za wymianę danych i poleceń, FCM za sygnalizację i wybudzanie, a AlarmManager za okresową aktywność komponentu komunikacyjnego.

Utrzymanie dostępu i defense evasion

Koktevrat zawiera również funkcje mające utrudnić użytkownikowi usunięcie malware lub ograniczyć możliwość jego wykrycia. Polecenia protect_on i protect_off sterują mechanizmem ochrony przed usunięciem, natomiast gp_off jest przeznaczone do wyłączenia Google Play Protect.

Dodatkowe polecenia pozwalają otwierać odpowiednie ekrany ustawień Androida, m.in. w celu uzyskania kolejnych uprawnień. W połączeniu z Accessibility Service i możliwością sterowania interfejsem tworzy to mechanizm, w którym malware może aktywnie prowadzić urządzenie przez wymagany proces konfiguracji.

Istotną cechą jest również wielowarstwowe ukrywanie kodu. Zarówno dropper, jak i właściwy RAT wykorzystują szyfrowanie payloadu, dynamiczne ładowanie i obfuskację. Oznacza to, że część najważniejszych artefaktów może być niewidoczna podczas analizy samego dostarczonego APK.

Threat Hunting: najważniejsze artefakty

Najbardziej oczywistymi IOC są domeny C2 streams-tv[.]lol i stream-plus[.]lat, jednak ze względu na wykorzystanie DGA nie powinny być jedyną podstawą detekcji sieciowej.

Warto wyszukiwać również:

  • pakiet com.kowo.ciligeci,
  • kanał powiadomień koktevran_channel,
  • pliki uoN.css i uoN.apk,
  • aplikację wykorzystującą jednocześnie Accessibility Service, READ_SMS i QUERY_ALL_PACKAGES,
  • aktywność FCM połączoną z podejrzaną aplikacją,
  • nietypowe operacje proxy_open, proxy_data i proxy_close,
  • konfigurację routingu związaną z 10.0.0.2/32.

Dostępne są również hashe analizowanych komponentów:

Największą wartość detekcyjną daje jednak korelacja kilku niezależnych artefaktów. Połączenie podejrzanej aplikacji z Accessibility Service, aktywnością FCM, charakterystycznym kanałem powiadomień i komunikacją z infrastrukturą C2 stanowi znacznie silniejszy sygnał niż pojedyncza domena lub uprawnienie.

Koktevrat na tle znanych rodzin Android RAT

Pod względem funkcjonalnym koktevrat wpisuje się w znany model Android malware wykorzystującego Accessibility Service do uzyskania szerokiego dostępu do urządzenia. Podobne techniki były wykorzystywane m.in. przez FluBot, Cerberus i SpyNote.

Najbliższym porównaniem funkcjonalnym jest FluBot. Obie rodziny łączą Accessibility z obsługą SMS, rejestrowaniem aktywności użytkownika, nakładkami oraz mechanizmami utrudniającymi wykrycie lub usunięcie malware. FluBot posiadał również funkcje proxy i możliwość wyłączenia Google Play Protect. Podobieństwo dotyczy jednak przede wszystkim zestawu technik – nie ma podstaw, aby traktować koktevrat jako wariant FluBota. Podobny model wykorzystuje również Cerberus, który stosował Accessibility do obserwowania zawartości ekranu i wykonywania operacji w imieniu użytkownika. Koktevrat rozwija ten model o wieloetapowy loader, FCM jako mechanizm sygnalizacji, DGA oraz tunelowanie ruchu.

Z kolei SpyNote stanowi dobre porównanie z punktu widzenia klasyfikacji. Zakres funkcji koktevrat jest bliższy pełnoprawnemu Android RAT niż malware skoncentrowanemu wyłącznie na kradzieży danych uwierzytelniających lub atakach na aplikacje finansowe.

Nie ma obecnie wystarczających podstaw, aby przypisać koktevrat do FluBot, Cerberusa, SpyNote lub innej znanej rodziny. Podobieństwa należy traktować jako analogie funkcjonalne, a nie atrybucję.

Podsumowanie

Koktevrat jest wieloetapowym Android RAT-em, którego możliwości wynikają z połączenia kilku dobrze znanych mechanizmów: ukrytego ładowania kodu, Accessibility Service, komunikacji C2 wspieranej przez FCM oraz szerokiego zestawu poleceń operatorskich.

Najważniejszym elementem architektury jest połączenie warstwy komunikacyjnej z Accessibility Service. C2 dostarcza instrukcje, natomiast komponent wykonawczy może wykorzystać uprawnienia Androida do pozyskiwania danych, wykonywania operacji na urządzeniu, obsługi nakładek czy rejestrowania aktywności użytkownika.

Architektura komunikacyjna zwiększa odporność implantu: FCM może służyć do jego wybudzania, AlarmManager zapewnia okresową aktywność, DGA utrudnia blokowanie infrastruktury, a funkcje proxy pozwalają wykorzystać urządzenie jako pośrednika dla ruchu sieciowego.

Najważniejszy wniosek z analizy jest jednak szerszy: detekcja tego typu zagrożeń nie powinna opierać się wyłącznie na hashach czy domenach C2. Znacznie większą wartość daje korelacja charakterystycznej aplikacji, uprawnień, Accessibility Service, aktywności FCM oraz zachowania odpowiadającego funkcjom RAT-a.

Koktevrat pokazuje tym samym, jak legalne mechanizmy Androida mogą zostać połączone w spójny łańcuch zapewniający operatorowi zdalny dostęp, możliwość kradzieży danych i długotrwałe utrzymanie kontroli nad urządzeniem.

Ireneusz Tarnowski

Olaf Grzybowski

The post Koktevrat – wieloetapowy Android RAT dystrybuowany pod przykrywką aplikacji MandatGO appeared first on CERT Orange.