Stan zagrożeń w internecie znajduje się obecnie na poziomie standardowym. Nie występują duże epidemie a eksperci z Kaspersky Lab nie zanotowali żadnych poważnych incydentów związanych z bezpieczeństwem. Poziom zagrożenia: 1

Ewolucja mobilnego trojana bankowego Asacub


Z rodziną trojanów bankowych Trojan-Banker.AndroidOS.Asacub zetknęliśmy się po raz pierwszy w 2015 r., gdy najwcześniejsze wersje tego szkodnika zostały wykryte, przeanalizowane i uznane za bardziej zorientowane na szpiegostwo niż kradzież środków. Od tego czasu trojan ten przeszedł ewolucję, wspomaganą przez szeroko zakrojoną kampanią dystrybucji, przeprowadzoną przez jego twórców (wiosną i latem 2017 r.), dzięki której uplasował się na pierwszym miejscu w zeszłorocznym rankingu według liczby ataków wśród mobilnych trojanów bankowych, prześcigając inne rodziny, takie jak Svpeng czy Faketoken.

Postanowiliśmy przyjrzeć się bliżej współczesnemu członkowi rodziny Asacub. Skoncentrowaliśmy się na najnowszej wersji tego trojana, którego celem jest kradzież pieniędzy właścicieli urządzeń z systemem Android połączonych z serwisem bankowości mobilnej jednego z największych banków Rosji. 

Wersje trojana Asacub

W ciele trojana zaszyty jest numer wersji, który składa się z dwóch lub trzech cyfr oddzielonych kropkami. Wygląda na to, że po wersji 9 numerowanie rozpoczęto od nowa.  

Nazwa Asacub pojawiła się w wersji 4 pod koniec 2015 r.; poprzednie wersje były znane jako Trojan-SMS.AndroidOS.Smaps. Wersje 5.X.X-8.X.X były aktywne w 2016 r., natomiast wersje 9.X.X-1.X.X w 2017 r. W 2018 r. najaktywniej rozprzestrzeniane były wersje 5.0.0 i 5.0.3.   

Komunikacja z centrum kontroli (C&C)

Mimo stopniowej ewolucji możliwości trojana Asacub jego zachowanie sieciowe oraz metoda komunikacji z serwerem kontroli (C&C) zmieniły się w niewielkim stopniu. To wyraźnie sugerowało, że te dwa trojany bankowe, mimo różnic pod względem możliwości, należą do tej samej rodziny. 

Dane były zawsze wysyłane do serwera kontroli za pośrednictwem protokołu HTTP w ciele żądania POST w formie zaszyfrowanej na adres względny /something/index.php. We wcześniejszych wersjach część something ścieżki względnej stanowiła częściowo czytelne, ale losowe połączenie słów oraz krótkich kombinacji liter i cyfr oddzielonych podkreślnikiem, np. „bee_bomb” lub „my_te2_mms”.     

180827-asacub-1.png

Przykład ruchu z wczesnej wersji trojana Asacub (2015)

Przesyłane i otrzymywane dane są szyfrowane przy użyciu algorytmu RC4 oraz zakodowywane przy pomocy standardu base64. Adres serwera kontroli oraz klucz szyfrowania (jeden dla różnych modyfikacji w wersji 4.x i 5.x, ale różny dla różnych serwerów kontroli w późniejszych wersjach) są zaszyte w ciele trojana. We wczesnych wersjach trojana Asacub jako domeny najwyższego poziomu wykorzystywano .com, .biz, .info, .in, .pw. W wersji z 2016 r. zmieniła się wartość nagłówka Użytkownik-Agent, podobnie jak metoda generowania względnej ścieżki w adresie URL: teraz część znajdująca się przed /index.php stanowi połączenie możliwego do wymówienia słowa oraz losowych liter i liczb, np. „muromec280j9tqeyjy5sm1qy71" lub „parabbelumf8jgybdd6w0qa0". Co więcej, ruch przychodzący z serwera kontroli zaczął wykorzystywać kompresję gzip, a domeną najwyższego poziomu dla wszystkich serwerów kontroli była domena .com:       

180827-asacub-2.png

Od grudnia 2016 r. zmiany w metodach komunikacji serwera kontroli wpłynęły jedynie na sposób generowania względnej ścieżki w adresie URL: możliwe do wymówienia słowo zostało zastąpione dość długą losową kombinacją liter i cyfr, np. „ozvi4malen7dwdh" lub „f29u8oi77024clufhw1u5ws62". W momencie powstawania tego tekstu nie zauważono innych znaczących zmian w zachowaniu sieciowym trojana Asacub: 

180827-asacub-3.png

 

Pochodzenie trojana Asacub

Można śmiało stwierdzić, że rodzina Asacub to produkt ewolucji szkodnika Trojan-SMS.AndroidOS.Smaps. Komunikacja tych trojanów z ich serwerami kontroli opiera się w obu przypadkach na tej samej zasadzie, adresy względne, na które trojany wysyłają żądania sieciowe, są generowane w podobny sposób, a zestaw potencjalnych poleceń możliwych do wykonania przez te trojany jest zbieżny. Co więcej, numerowanie wersji trojana Asacub stanowi kontynuację systemu Smaps. Główna różnica polega na tym, że Smaps przesyła dane w postaci czystego tekstu, podczas gdy Asacub szyfruje dane przy pomocy algorytmu RC4, a następnie koduje je do formatu base64.    

Porównajmy przykłady dotyczące ruchu trojanów Smaps i Asacub — żądanie inicjujące do serwera kontroli z informacją o zainfekowanym urządzeniu oraz odpowiedź z serwera z poleceniem do wykonania:   

180827-asacub-4.png

żądanie trojana Smaps

180827-asacub-5_auto.png

żądanie trojana Asacub

Odszyfrowane dane z ruchu trojana Asacub:

{ "id":"532bf15a-b784-47e5-92fa-72198a2929f5","type":"get","info":"imei:365548770159066, country:PL, cell:Tele2, android:4.2.2, model:GT-N5100, phonenumber:+486679225120, sim:6337076348906359089f, app:null, ver:5.0.2"}

Dane wysyłane do serwera

[{ "command":"sent&&&","params":{ "to":"+79262000900","body":"\u0410\u0412\u0422\u041e\u041f\u041b\u0410\u0422\u0415\u0416 1000 50","timestamp":"1452272572"}},

{ "command":"sent&&&","params":{ "to":"+79262000900","body":"BALANCE","timestamp":"1452272573"}}]

Instrukcje otrzymywane z serwera

Można również porównać format, w którym Asacub i Smaps przesyłają przychodzące wiadomości SMS (zakodowane przy użyciu algorytmu base64) z urządzenia do serwera kontroli:

180827-asacub-6.png

format w przypadku trojana Smaps

180827-asacub-7.png

format w przypadku trojana Asacub

Zdeszyfrowane dane z ruchu związanego z trojanem Asacub:

{ "data":"2015:10:14_02:41:15","id":"532bf15a-b784-47e5-92fa-72198a2929f5","text":"SSB0aG91Z2h0IHdlIGdvdCBwYXN0IHRoaXMhISBJJ20gbm90IGh1bmdyeSBhbmQgbmU=","number":"1790","type":"load"}

Rozprzestrzenianie

Omawiany trojan bankowy jest rozprzestrzeniany za pośrednictwem phishingowej wiadomości SMS zawierającej odsyłacz oraz propozycję obejrzenia zdjęcia lub wiadomości MMS. Odsyłacz wskazuje na stronę internetową z podobnym zdaniem oraz przyciskiem umożliwiającym pobranie na urządzenie pliku APK trojana. 

180827-asacub-8.png

Okno pobierania trojana

 

Trojan Asacub podszywa się pod aplikację MMS lub klienta popularnego serwisu darmowych reklam. Trafiliśmy na takie nazwy jak Photo, Message, Avito Offer oraz MMS Message.

180827-asacub-9_auto.png

Ikonki aplikacji, pod którymi ukrywa się trojan Asacub

Pliki APK trojana są pobierane z takich stron jak mmsprivate[.]site, photolike[.]fun, you-foto[.]site oraz mms4you[.]me z nazwami w następującym formacie:

  • photo_[number]_img.apk,
  • mms_[number]_img.apk
  • avito_[number].apk,
  • mms.img_[number]_photo.apk,
  • mms[number]_photo.image.apk,
  • mms[number]_photo.img.apk,
  • mms.img.photo_[number].apk,
  • photo_[number]_obmen.img.apk.

Aby trojan został zainstalowany, użytkownik musi zezwolić w ustawieniach urządzenia na instalowanie aplikacji z nieznanych źródeł.

 

Infekcja

Podczas instalacji, w zależności od wersji trojana, Asacub prosi użytkownika o prawa administratora urządzenia lub o pozwolenie na wykorzystywanie AccessibilityService. Po uzyskaniu praw ustanawia się domyślną aplikacją SMS i znika z ekranu urządzenia. Jeśli użytkownik zignoruje lub odrzuci żądanie, okno będzie otwierało się na nowo co kilka sekund.

180827-asacub-10_auto.png

Trojan żąda praw administratora urządzenia

180827-asacub-11_auto.png

Trojan żąda pozwolenia na wykorzystywanie AccessibilityService

Po zainstalowaniu się trojan zaczyna komunikować się z serwerem kontroli cyberprzestępców. Wszystkie dane są przesyłane w formacie JSON (po odszyfrowaniu). Zawierają informacje dotyczące modelu smartfona, wersji systemu operacyjnego, operatora sieci komórkowej oraz wersji trojana.   

Przyjrzyjmy się dokładnie trojanowi Asacub 5.0.3, najbardziej rozpowszechnionej wersji w 2018 r.

Struktura danych wysyłanych do serwera:

 

{   
   "type":int,
   "data":{   
      data
   },
   "id":hex
}

 

Struktura danych otrzymywanych z serwera:

{   
   "command":int,
   "params":{   
      params,
      "timestamp":int,
      "x":int
   },
   "waitrun":int
}

Na początku trojan wysyła do serwera informacje dotyczące urządzenia:  

{   
   "type":1,
   "data":{   
      "model":string,
      "ver":"5.0.3",
      "android":string,
      "cell":string,
      "x":int,
      "country":int,    //optional
      "imei":int        //optional
   },
   "id":hex
}

W odpowiedzi serwer wysyła kod polecenia do wykonania (“command”), jego parametry ("params") oraz czas, jaki upłynie, zanim polecenie zostanie wykonane ("waitrun" w milisekundach).

Lista poleceń zaszytych w ciele trojana:

Kod polecenia

Parametry

Działania

2

-

Wysyłanie listy kontaktów z książki adresowej zainfekowanego urządzenia do serwera kontroli (C&C)

7

"to":int

Dzwonienie na określony numer

11

"to":int, "body":string

Wysyłanie wiadomości SMS z określonym tekstem na określony  numer

19

"text":string, "n":string

Wysyłanie wiadomości SMS z określonym tekstem na numery z książki adresowej zainfekowanego urządzenia, przy czym nazwa adresata z książki adresowej zostaje podstawiona do tekstu wiadomości

40

"text":string

Zamykanie aplikacji o określonych nazwach (aplikacji antywirusowych i bankowych)

 

Zestaw potencjalnych poleceń stanowi najistotniejszą różnicę pomiędzy różnymi odmianami trojana Asacub. W analizowanych tu wersjach z początku 2015 r. i 2016 r. instrukcje z serwera kontroli w formacie JSON zawierały nazwę polecenia w formacie tekstowym ("get_sms", "block_phone"). W późniejszych wersjach zamiast nazwy polecenia przesyłany był jego kod numeryczny. Ten sam kod numeryczny odpowiadał jednemu poleceniu w różnych wersjach, ale zestaw obsługiwanych poleceń różnił się. Na przykład wersja 9.0.7 (2017) zawierała następujący zestaw poleceń: 2, 4, 8, 11, 12, 15, 16, 17, 18, 19, 20.      

Po otrzymaniu polecenia trojan próbuje je wykonać, a następnie informuje centrum kontroli o statusie wykonania i wszelkich otrzymanych danych. Wartość “id” wewnątrz bloku “danych” odpowiada wartości “timestamp” odpowiedniego polecenia: 

{   
   "type":3,
   "data":{   
      "data":JSONArray,
      "command":int,
      "id":int,
      "post":boolean,
      "status":resultCode
   },
   "id":hex
}

Ponadto, trojan ustanawia się jako domyślna aplikacja SMS i, po otrzymaniu nowego SMS-a, przesyła cyberprzestępcy numer nadawcy i tekst wiadomości w formacie base64:    

{   
   "type":2,
   "data":{   
      "n":string,
      "t":string
   },
   "id":hex
}

Tak więc Asacub może pobrać środki z karty bankowej powiązanej z telefonem poprzez wysłanie SMS-a w celu przelania środków na inne konto przy użyciu numeru karty lub telefonu komórkowego. Co więcej trojan przechwytuje SMS z banku, który zawiera jednorazowe hasła oraz informacje dotyczące salda podpiętej karty bankowej. Niektóre wersje trojana potrafią autonomicznie pozyskiwać z takich SMS-ów kody potwierdzenia i wysyłać je na żądany numer. Co więcej, użytkownik nie może sprawdzić salda za pośrednictwem bankowości mobilnej czy zmienić tam jakichkolwiek ustawień, ponieważ po otrzymaniu polecenia z kodem 40 trojan uniemożliwia działanie aplikacji bankowej na telefonie.  

Wiadomości użytkownika tworzone przez trojana podczas instalacji zawierają zwykle błędy gramatyczne i literówki oraz łączą znaki cyrylicy i alfabetu łacińskiego.

Trojan stosuje również różne metody zaciemniania: od najprostszych, takich jak łączenie ciągów i zmiana nazw klas i metod po implementowanie funkcji w kodzie natywnym i osadzanie bibliotek systemu operacyjnego w C/C++ w pliku APK, co wymaga wykorzystania dodatkowych narzędzi lub dynamicznej analizy w celu odciemnienia (deobfuscation), ponieważ większość narzędzi do analizy statystycznej aplikacji z systemem Android obsługuje tylko kod bajtowy Dalvik. W niektórych wersjach Asacuba ciągi w aplikacji są szyfrowane przy użyciu tego samego algorytmu co dane wysyłane do centrum kontroli, ale przy użyciu różnych kluczy.       

180827-asacub-12.png

Przykład wykorzystywania natywnego kodu w celu zaciemniania

 

180827-asacub-13.png

Przykłady wykorzystania łączenia ciągów w celu zaciemniania

 

180827-asacub-14.png

Przykład szyfrowania ciągów w trojanie

Rozkład geograficzny trojana Asacub

Celem trojana Asacub są głównie użytkownicy rosyjscy: 98% infekcji (225.000) ma miejsce w Rosji, ponieważ cyberprzestępcy atakują w szczególności klientów największego banku rosyjskiego. Trojan uderza również w użytkowników z Ukrainy, Turcji, Niemiec, Białorusi, Polski, Armenii, Kazachstanu, Stanów Zjednoczonych oraz innych państw. 

Wniosek

Przypadek trojana Asacub pokazuje, że mobilne szkodliwe oprogramowanie może działać kilka lat z minimalnymi zmianami w modelu dystrybucji.

Rozprzestrzenianie odbywa się zasadniczo za pośrednictwem spamu SMS: wiele osób nadal klika podejrzane odsyłacze, instaluje oprogramowanie z zewnętrznych źródeł i bez namysłu udziela zezwoleń aplikacjom. Jednocześnie cyberprzestępcy nie są skłonni do zmiany metody komunikacji z serwerem kontroli, ponieważ wymagałoby to więcej wysiłku i przyniosłoby mniej korzyści niż modyfikacja pliku wykonywalnego. Najistotniejszą zmianą w historii tego trojana było szyfrowanie danych wysyłanych pomiędzy urządzeniem a centrum kontroli. W celu utrudnienia wykrywania nowych wersji plik APK trojana oraz domeny serwera kontroli są regularnie zmieniane.    

Oznaki infekcji (IOC)

Adresy IP serwerów kontroli (C&C):

  • 155.133.82.181
  • 155.133.82.240
  • 155.133.82.244
  • 185.234.218.59
  • 195.22.126.160
  • 195.22.126.163
  • 195.22.126.80
  • 195.22.126.81
  • 5.45.73.24
  • 5.45.74.130

Adresy IP, z których pobierany był trojan:

  • 185.174.173.31
  • 185.234.218.59
  • 188.166.156.110
  • 195.22.126.160
  • 195.22.126.80
  • 195.22.126.81
  • 195.22.126.82
  • 195.22.126.83