Cerberus pod lupą. Analiza popularnego malware na Androidy
Podczas gdy skuteczność kampanii malware'u dla Windows spada (acz wciąż niewystarczająco), nowe zagrożenia celują w system Android. Najnowsza kampania, stosująca malware o nazwie Cerberus, wykorzystuje złośliwą aplikację APK. Podobnie jak Emotet, który stosuje skomplikowane metody propagacji, ale wymaga ręcznego uruchomienia makr pakietu Office, Cerberus jest nie mniej złożony, ale do uruchomienia potrzebne mu jest... wyłączenie ochrony przed aplikacjami spoza Sklepu Play.
Jest to kolejny dowód na ryzyko związane z zabiegiem tzw. rootowania telefonu: uzyskania praw administracyjnych celem głębokich modyfikacji Androida i instalacji pakietów APK z "niezaufanych źródeł", czyli w praktyce poza kontrolą Google. Choć użytkownicy mogą cieszyć się z większej swobody użytkowania i niezależności od ograniczeń producenta, muszą liczyć się z ciemnymi stronami takiego postępowania.
Cerberus jest jednym z groźniejszych malware'ów na smartfony z systemem Android obok GMBot, Marcher, czy Anubis. Zespół CERT Polska przeprowadził analizę jego działania na podstawie kampanii w Polsce podszywającej się pod InPost.
Cerberus. Analiza kampanii i działania
Dystrybucja złośliwego kodu opierała się o wysyłkę wiadomości SMS z informacją o śledzeniu przesyłki za pomocą aplikacji mobilnej, wraz z linkiem do jej pobrania. Jedną z podstawowych funkcji bota było wykradanie danych logowania do wybranych aplikacji. Na celowniku znalazły się m.in. produkty do obsługi bankowości internetowej i poczty. Złośliwe oprogramowanie po udzieleniu mu zezwolenia na korzystanie z usług ułatwień dostępu (ang. accessibility services) dokonywało samodzielnego podniesienia własnych uprawnień. Trojan przyznawał sobie m.in. możliwość odczytywania listy kontaktów, inicjowania wywołań USSD, stawał się administratorem urządzenia oraz domyślną aplikacją do obsługi SMS.
Udostępniany w modelu malware-as-a-service trojan jest silnie promowany w mediach społecznościowych. Cerberus posiada swój profil na Twitterze (@AndroidCerberus), gdzie publikowane są informacje o nowościach, ale również wiadomości kierowane do analityków bezpieczeństwa np. Lukasa Stefanko czy Trend Micro Research. W zamyśle autorów trojan miał pozwalać np. na wyłączenie Google Play Protect, przechwytywanie komunikacji SMS, uruchamianie i usuwanie zainstalowanych aplikacji, otwieranie adresów URL, wyświetlanie fałszywych powiadomień z aplikacji bankowych, unikanie analizy poprzez stosowanie technik anty-emulacji, a w niektórych wypadkach także wykradanie danych przy użyciu keyloggera. W analizowanej próbce zaobserwowano aktywne użycie tylko części funkcji.
Aby zainstalować złośliwe oprogramowanie, użytkownik musi pobrać plik z linka w SMS-ie oraz wyłączyć blokadę instalacji aplikacji spoza oficjalnego sklepu Google Play. Próbka trojana analizowana w środowisku Android 7.0 (API 24) nie domaga się przydzielania dodatkowych uprawnień na etapie instalacji. Może to spowodować uśpienie czujności użytkownika. Dopiero pierwsze uruchomienie skutkuje pojawieniem się okna, które w natarczywy sposób domaga się wyrażenia zgody na korzystanie z usług ułatwień dostępu (ang. accessibility services).
Ułatwienia dostępu, mające z założenia wspomagać obsługę systemu osobom niepełnosprawnym zostają, w przypadku Cerberusa, użyte do przejęcia kontroli nad urządzeniem. Jedną z możliwości, jakie dają Accessibility Services, jest odczytywanie zawartości wyświetlanych okien i wchodzenie z nimi w interakcję. Jeżeli użytkownik zgodzi się, aby złośliwe oprogramowanie korzystało z tej funkcjonalności, może ono samodzielnie pozyskiwać dalsze uprawnienia.
Uprawnienia żądane przez aplikację obejmują m.in:android.permission.BIND_ACCESSIBILITY_SERVICE – ułatwienia dostępu (pobieranie zawartości okien i samodzielne nadawanie uprawnień).android.permission.READ_SMS – odczytywanie SMS.android.permission.RECEIVE_SMS – odbiór wiadomości tekstowych.android.permission.SEND_SMS – wysyłanie wiadomości SMS.android.permission.INTERNET – dostęp do internetu.android.permission.CALL_PHONE – wykonywanie połączeń.android.permission.READ_CONTACTS – odczytywanie kontaktów.android.permission.READ_PHONE_STATE – odczytywanie informacji o stanie urządzenia (m.in. numer telefonu użytkownika, status połączeń telefonicznych, dane dot. sieci komórkowej, lista kont korzystających z menedżera połączeń).android.permission.BIND_DEVICE_ADMIN – przydzielenie uprawnień administratora urządzenia.
Korzystając z techniki przysłaniania ekranu za pomocą nakładek (ang. overlay), złośliwe narzędzie wykrada dane logowania do popularnych aplikacji. Overlay’e są pobierane z zewnętrznego serwera w trakcie działania trojana – warunek stanowi zainstalowana na urządzeniu aplikacja, na którą przestępcy posiadają przygotowaną nakładkę.
Złośliwe oprogramowanie posiada funkcjonalność dynamicznego ładowania modułów kodu, co utrudnia analizę i ewentualne wykrycie złośliwych działań – można zaobserwować to w pliku AndroidManifest.xml, zawierającym opis ładowanych klas (np. linia 20 – adult.weapon.shop…), których nie widać w dostarczonej próbce (drzewo po lewej stronie).
Pozostała część kodu znajduje się w zasobach aplikacji, podszywając się pod plik JSON. Moduł szyfrowany jest przy użyciu RC4, stałym kluczem o wartości: PUPn.
Ładowanie osadzonego w aplikacji kodu następuje po odszyfrowaniu za pomocą funkcji trophyalone() widocznej na poniższym zrzucie ekranu:
Fragment zdekompilowanego modułu po odszyfrowaniu:
Załadowany moduł dodatkowo szyfruje łańcuchy znakowe. Pierwotnie są one przechowywane w postaci {12-znakowy-klucz-RC4}
Cerberus poza kodem “ukrytym” w aplikacji, pobiera dodatkowy moduł z serwera dostawców oprogramowania. Ponownie, część programu jest szyfrowana za pomocą algorytmu RC4 (tym razem kluczem o wartości: ojsghOSFogewghdgsg widocznym powyżej). Interesującym faktem jest, że klucz jest osadzony pomiędzy łańcuchami znakowymi wykorzystywanymi przez złośliwe oprogramowanie i mogącymi wskazywać na jego potencjalne funkcjonalności.
Aplikacja komunikuje się z serwerem zarządzającym pod adresem badabinglalaland[.]com. Początkowa wymiana danych to rejestracja w botnecie. Dalsza komunikacja przebiega cyklicznie i złośliwe oprogramowanie przesyła dane identyfikujące ofiarę: wygenerowany identyfikator, numer telefonu (jeśli uda się go pozyskać), nazwę operatora GSM, model telefonu, wersję systemu Android, listę zainstalowanych aplikacji, kraj oraz wykradzione loginy i hasła.
Poufność danych płynących do serwerów przestępców jest gwarantowana przez algorytm RC4, który korzysta z tej samej wartości klucza (ojsghOSFogewghdgsg), która była wykorzystana przy pobieraniu z sieci dodatkowego modułu.
Po odszyfrowaniu bot przesyłał następujące dane w postaci JSON:
{„id”:”CERTPL”,”idSettings”:”CERTPL”,”number”:”+48CERTPL”,”statAdmin”:”1”,”statProtect”:”0”,”statScreen”:”0”,”statAccessibilty”:”1”,”statSMS”:”0”,”statCards”:”0”,”statBanks”:”1”,”statMails”:”1”,”activeDevice”:”0”,”timeWorking”:”688”,”statDownloadModule”:”1”,”batteryLevel”:”100”,”locale”:”pl”}
Podczas analizy aplikacji, nie została zaobserwowana komunikacja sieciowa dotycząca wykradania SMS-ów, kontaktów oraz działania keyloggera.
Zapobieganie infekcjiAplikacja, z uwagi na sposób dystrybucji poza sklepem Google, domyślnie nie powinna zainstalować się na urządzeniu. Standardowe polityki bezpieczeństwa w systemie Android nie zezwalają na instalację pakietów pochodzących z niezaufanych źródeł. Użytkownik może świadomie zrezygnować z tego mechanizmu, stanowczo jednak odradzamy takiego rozwiązania.
Nie można wykluczyć prób umieszczania tego typu złośliwych aplikacji w oficjalnych kanałach dystrybucji. W związku z tym, pobierając i instalując aplikacje warto zachować ostrożność i weryfikować, czy nie wymagają od użytkownika przydzielenia niebezpiecznych lub nieadekwatnych uprawnień. Również natarczywe domaganie się przydzielenia któregoś z dostępów powinno być odebrane jako sygnał alarmowy.