Zaloguj się do usług
bezpieczeństwa
9 marca 2021
Malware Flubot – analiza

Kolejny tydzień – kolejne kampanie phishingowe z fałszywymi aplikacjami mobilnymi. Do takiej aktywności przestępców przyzwyczailiśmy się przez ostatnie miesiące, ale w kilka/naście dni temu pojawiło się coś nowego. Zamiast klasycznych w rękach przestępców Cerberusa, czy Hydry pojawił się Flubot.

Pierwsze wersje Malware Flubot zaobserwowano w Hiszpanii, po raz pierwszy trafiliśmy na nie w Polsce 3. marca. Pierwsze ostrzeżenie opublikowaliśmy 3 marca w tekście o fałszywej aplikacji FedEx. Po kliknięciu w niemający niczego wspólnego z FedExem link w domenie .ro ściągaliśmy aplikację FedEx.apk (43c25bee994bf0d87aa313c0ac20a74f), opatrzoną logo znanej firmy kurierskiej. Co się działo, jeśli mimo ostrzeżeń o jej pochodzeniu spoza Sklepu Play zdecydowaliśmy się na instalację?

Podstępne ułatwienia dostępu

Analizowaliśmy wersję 3.2 aplikacji, w systemie operacyjnym Android 10/API 29. Warto już na początku zwrócić uwagę na wyjątkowo rozbudowane uprawnienia, których żąda aplikacja (w pliku AndroidManifest.xml)

android.permission.INTERNET
android.permission.READ_CONTACTS
android.permission.WRITE_SMS

android.permission.READ_SMS
android.permission.SEND_SMS

android.permission.RECEIVE_SMS
android.permission.READ_PHONE_STATE
android.permission.QUERY_ALL_PACKAGES
android.permission.WAKE_LOCK
android.permission.FOREGROUND_SERVICE
android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
android.permission.CALL_PHONE
android.permission.REQUEST_DELETE_PACKAGES

Po zainstalowaniu, aby aplikacja mogła wchodzić w interakcje z wyświetlanymi oknami prosi o zgodę na dostęp do Ułatwień Dostępu/Accessibility Services. Z założenia przeznaczone dla osób niepełnosprawnych pozwalają one aplikacji, której są przydzielone, na bardzo rozbudowaną kontrolę nad otwieranymi oknami (bez konieczności pytań i interakcji ze strony użytkownika). Swoją drogą, treści, które zobaczycie na poniższych zrzutach ekranu to kolejne wyjące czerwone syreny, które powinny w takiej chwili uruchomić się w głowach potencjalnej ofiary.

 

W kolejnym kroku „Fedex” przejmuje rolę domyślnej aplikacji do wysyłania SMSów. Ta aktywność to kolejny dowód, że warto uaktualniać system operacyjny do najnowszej wersji. Począwszy bowiem od Androida 10 system wymaga potwierdzenia zmiany domyślnej aplikacji. W starszych systemach dzieje się to bez konieczności interakcji z użytkownikiem.

Jednym ze sposobów, który aplikacja wykorzystuje do wykradania danych użytkownika jest wygenerowanie okna z informacją o konieczności podania danych karty płatniczej, w celu rzekomego sprawdzenia wieku ofiary (pojawia się w momencie, gdy taką aktywność uruchomi botmaster):

A bank card must be provided to prove that you are an adult. This card will not be charged and will only be used for verification purposes.

Na ekranie wyświetlane są pola, umożliwiające wprowadzenie numeru karty, terminu jej ważności oraz numeru CVV. Co ciekawe, mimo iż aplikacja wspiera język polski, ten komunikat pojawia się w języku angielskim.

Elementy utrudniające analizę

Aby utrudnić analizę złośliwej aplikacji zostały użyte dwa sposoby. Przede wszystkim jest spakowana. Po uruchomieniu automatycznie się rozpakowuje i zapisuje pod nazwą “classes-v1.bin”. Jest to plik dex, który jest następnie dynamicznie ładowany i wykonywany.

Drugi sposów to obfuskacja łańcuchów znaków, które są następnie dekodowane w osobnej paczce, która w analizowanej próbce miała nazwe “io.michaelrocks.paranoid”. Samo dekodowanie jest wykonywane w metodzie “getString”

Dokładnie taki deobfuskator znajdziemy na stronie https://github.com/MichaelRocks/paranoid/blob/master/core/src/main/java/io/michaelrocks/paranoid/DeobfuscatorHelper.java

Pokazywane w dalszej części analizy łańcuchy znaków w poszczególnych metodach są już zdekodowane.

Komunikacja z serwerem Command&Control

Ciekawym mechanizmem jest sposób generowania domen, przy użyciu których z serwerami Command&Control łączą się zainfekowane urządzenia. Aby utrudnić ewentualną blokadę ruchu do serwera C&C, domeny z którymi próbuje się połączyć analizowana aplikacja, generowane są przy użyciu mechanizmu Domain Generating Algorithm (DGA). Ziarno (seed) używane do zainicjowania generatora, jest tworzone z użyciem roku i numeru miesiąca. Dzięki temu zestaw domen jest inny każdego miesiąca. Dla analizowanej aplikacji każdorazowo kreowane jest 2000 hostów.

Na samym początku działania metody generowane jest ziarno (seed), przekazywane następnie do generatora. Seed jest tworzony przez “GetSeed”:

“Calendar.getInstance().get()” wywołane z cyframi 1 oraz 2, zwraca odpowiednio rok oraz numer miesiąca, a następnie wykonuje na tych wartościach operacje arytmetyczne i logiczne. Tak stworzony seed inicjuje obiekt “random”, Tworzonych jest 2000 domen, z TLD (domen najwyższego rzędu) .com, .ru oraz .cn. Dla każdej z nich sprawdzane jest, czy jest do niej przyporządkowany adres IP i czy po wysłaniu zapytania witryna zwraca poprawną odpowiedź. Opowiada za to:

PanelReq.Send(str, "PREPING,") != null

Funkcja wysyła do serwera C&C zaszyfrowane zapytanie “PREPING,” i jeśli odpowiedź zdeszyfruje się poprawnie – host zostaje C&C.

Szyfrowanie

Kolejnym sposobem ukrycia złośliwych działań jest zaszyfrowanie całej komunikacji. Same polecenia i odpowiedź z serwera są zaszyfrowane za pomocą operacji logicznej XOR, przy użyciu 10-znakowego, odrębnego dla każdego zapytania klucza. Jest on wysyłany wraz z wygenerowanym UUID (Universal Unique identifier) i zaszyfrowany za pomocą RSA. Za wysyłanie danych do C&C i obsługę szyfrowania odpowiada metoda: