Analiza polskiego BankBota

Data publikacji: 16/01/2018, Agnieszka Bielec


    Analiza polskiego BankBota

    Niedawno zaobserwowaliśmy kampanie z wykorzystaniem złośliwego oprogramowania na systemy Android skierowane do polskich użytkowników. Malware stanowi wariant popularnej rodziny BankBot, różniący się od oryginalnego oprogramowania kilkoma szczegółami. Do infekcji dochodziło przez instalację aplikacji z serwisu Google Play Store. W Google Play Store zostały umieszczone co najmniej 3 próbki, które obeszły jego zabezpieczenia antywirusowe. Nazwy złośliwych aplikacji to:

    • Crypto Monitor
    • StorySaver
    • Cryptocurrencies Market Prices

    Zgodnie z analizą firmy ESET dwie pierwsze próbki z samego Google Play Store zostały pobrane od 1000 do 5000 razy. Niemniej za każdym razem malware kamuflował się jako niegroźna aplikacja.

    Jedną z podstawowych funkcji bota jest wykradanie danych logowania do kont bankowych. Dane te zawarte są w wewnętrznej liście aplikacji pod które trojan próbuje się podszywać. Na celowniku znalazło się wiele polskich banków takich jak PKO Bank Polski, mBank, ING Bank Śląski czy Bank Pekao SA (pełny spis aplikacji znajduje się niżej). Przeanalizowany wariant nie atakuje obcojęzycznych serwisów. Jedna z próbek o nazwie „Cryptocurrencies Market Prices” jest starszą wersją opisywanego oprogramowania i trafiła do serwisu VirusTotal dnia 13.10.2017.

    Dodatkowo BankBot potrafi również przechwytywać SMS-y i wyświetlać fałszywe powiadomienia, rzekomo od prawdziwych aplikacji.

    Podstawowe informacje

    Jak do tej pory nie została zaobserwowana żadna próba zaciemniania kodu. Złośliwe oprogramowanie korzysta z biblioteki Firebase, która jest platformą pozwalającą na tworzenie aplikacji z wykorzystaniem chmury. Pozwala wielu klientom korzystającym z tej samej bazy synchronizować dane bez potrzeby tworzenia pośredniczącego serwera. Jednak autor korzysta jedynie z generowania tokenów i otrzymywania wiadomości z Firebase Cloud Messaging, a skradzione dane logowania wysyłane są do własnego serwera C&C za pomocą protokołu HTTP. Firebase do tego się nie nadaje, ponieważ mając link do bazy danych, byłoby możliwe odczytywanie i zapisywanie danych przez strony trzecie.

    Link identyfikujący bazę danych w chmurze tej biblioteki można znaleźć w pliku res/values/strings.xml. Dla aplikacji „Crypto Monitor” jest to:

    Aplikacja korzysta z następujących uprawnień:

    Celem ataku są następujące aplikacje bankowości elektronicznej:

    Jak BankBot kradnie pieniądze

    Złośliwa aplikacja generuje token Firebase ID, który służy do identyfikacji użytkowników. Podczas odświeżenia tokenu pobierana jest lista zainstalowanych aplikacji na telefonie i porównywana z listą nazw aplikacji bankowych, z których mają być kradzione dane logowania. Jest to przedstawione na poniższym kodzie, który został uzyskany z dekompilacji:

    Funkcja get$holder prezentuje się następująco:

    Jeśli któraś z aplikacji będących celem zainteresowania malware jest zainstalowana, jest tworzony obiekt WebView, który pozwala na osadzanie stron internetowych w aplikacji. W nim wyświetlana jest strona phishingowa odpowiadająca danemu bankowi, na przykład:

    Po wprowadzeniu danych logowania nie są one w tym momencie zapamiętywane po stronie serwera strony, jak to ma miejsce w przypadku zwyczajnych stron phishingowych. Zamiast tego, strona wyświetla okno typu prompt, które zawiera podane dane (na przykład po wpisaniu my_password w polu hasło na fałszywej stronie iPKO, wartość w polu okna prompt wynosi pl.pkobp.iko user: my_password). Okna te nie są widoczne, jeśli logujemy się przez złośliwą aplikacje, ponieważ są one „hookowane” przez nadpisanie funkcji onJsPrompt w klasie dziedziczącej po WebChromeClient. Wartość z pola okna jest odczytywana przez złośliwą aplikację i dopiero teraz jest wysyłana na serwer C&C przez protokół HTTP. Przedstawia to poniższy kod:

    Aby operator botnetu mógł wyprowadzić pieniądze z banku, potrzebuje jeszcze kodu autoryzacyjnego wysłanego SMS-em przez bank. Malware kradnie wszystkie odebrane SMS-y za pomocą klasy, która dziedziczy po BroadcastReceiver. Treści wiadomości są wysyłane na serwer podobnie jak w przypadku pozostałych danych. Kod odpowiedzialny za tę część funkcji jest przedstawiony poniżej:

    Wyświetlanie fałszywych okien logowania uaktywnia się również po otrzymaniu wiadomości z Firebase Cloud Messaging, która zawiera informacje, pod jaką aplikacje trojan powinien się podszyć. Zaimplementowane jest to w klasie dziedziczącej po FirebaseMessagingService. W takiej sytuacji jest wyświetlone fałszywe powiadomienie od serwisu bankowego. Jeśli zostanie ono otwarte, to zostanie wyświetlone podrobione okno aplikacji. Trojan implementuje również komendę „lock”, która ustawia BankBota jako domyślną aplikację otrzymującą wiadomości SMS.

    Komunikacja z C&C

    Przed wysyłaniem skradzionych danych na serwer, ma miejsce rejestracja zarażonego telefonu. Zostaje wysłane żądanie HTTP, które zawiera następujące informacje:

    • numer IMEI
    • nazwa operatora sieci
    • numer telefonu
    • wersja systemu Android
    • kraj, w którym aktualnie telefon się znajduje
    • lista zainstalowanych aplikacji bankowych
    • model telefonu
    • stała 1.0 (prawdopodobnie wersja malware)
    • token wygenerowany za pomocą Firebase
    • server_id – stała, inna w każdej próbce

    Następne zapytania zawierają numer IMEI, który zostaje użyty jako identyfikator bota. Za pomocą poniższego skryptu można komunikować się z serwerem C&C:

    Jak zapobiec infekcji?

    Należy pamiętać o tym, aby nie instalować aplikacji z nieznanych źródeł. Jak się okazało, aplikacje na Google Play Store również mogą być niebezpieczne. Aby się przed tym uchronić, możemy skorzystać z podstawowych mechanizmów bezpieczeństwa systemu Android na przykład zwracać uwagę na listę wymaganych uprawnień, które wyświetlają się przy instalacji aplikacji. Przykładowo, jeżeli aplikacja monitorująca kursy walut prosi o możliwość odczytywania wiadomości SMS, jest spora szansa, że wykorzysta te uprawnienia do wysłania treści wiadomości na zewnętrzny serwer. Oczywiście warto mieć na względzie, że nadmiar wymaganych uprawnień nie zawsze wskazuje na złośliwość aplikacji i często jest efektem błędu programisty – nadal jest to jednak cenna wskazówka.

    Reguła Yara

    IoC

    • 91.226.11.200
    • nelis.at
    • sdljfkh1313.win

    Hashe

    86aaed9017e3af5d1d9c8460f2d8164f14e14db01b1a278b4b93859d3cf982f5 204f2e5e18691156036cbcfc69fa759272a2180fba77a74415ccb2c7469a670b 75759cc9af54e71ac79fbdc091e30b4a6e5d5862d2b1c0decfb83c9a3d99b01b

    Inne analizy