Ewolucja złośliwego oprogramowania na Androida – historia kolegi ZitMo

Data publikacji: 12/06/2013, Łukasz Siewierski

malware-icon

Niedawno pisaliśmy o nowym zagrożeniu dla polskich użytkowników elektronicznej bankowości – E-Security. Przypominając, wchodząc na już zainfekowanym komputerze na stronę banku wyświetlany został komunikat o potrzebie instalacji „certyfikatu bezpieczeństwa” na swoim telefonie z systemem Android. „Certyfikat” był w rzeczywistości aplikacją, która pozwalała przechwytywać wiadomości SMS. W ten sposób przestępcy posiadali login i hasło (ponieważ komputer był zainfekowany) oraz mogli przechwycić hasło SMSowe. Prowadziło to do możliwości wykonania przelewu, o którym użytkownik nie wiedział.

W poprzednim wpisie spekulowaliśmy na temat innego kanału komunikacji – zamiast przesyłać polecenia za pomocą wiadomości SMS, trojan ma możliwość połączenia się z C&C za pomocą protokołu HTTP. W tym artykule chcemy przedstawić historię rozwoju aplikacji E-Security, którą udało nam się odtworzyć na podstawie 10 próbek przedstawiających się czterema różnymi wersjami na platformę Android.

Wersja 1.2.3

Pierwszą wersję, do której udało nam się dotrzeć oznaczona została jako 1.2.3 i pochodziła sprzed roku, a konkretnie z 7 czerwca 2012. Zamiast udawać certyfikat bezpieczeństwa, nosiła nazwę Android Security Suite Premium i miała inną grafikę. Wspierane języki to: hiszpański, portugalski i angielski. Aplikacja wykorzystywała protokół HTTP do komunikacji z serwerem C&C. Adres serwera jest zaciemniony za pomocą dodatkowych znaków, które są usuwane przy każdej próbie komunikacji. Ma to najprawdopodobniej zapobiec automatycznemu wyszukiwaniu adresów URL w aplikacjach.

Proponowana jest również druga wersja kontroli telefonu, zwana „AlternativeControl”, która została dokładnie opisana w naszym ostatnim artykule. Polega ona na wysyłaniu wiadomości SMS zaczynających się od znaków specjalnych i przestankowych (przecinek, wykrzyknik, procent etc.). W tej wersji znakami kontrolnymi były: procent (GET INFO), dwukropek (new number), gwiazdka (fin), i kropka (uninstall). Już w tej wersji wymagane były wszystkie uprawnienia. Po lewej stronie prezentujemy grafikę, która ukazywała się użytkownikowi po uruchomieniu aplikacji. W środku znajduje się unikalny numer instalacji (zwany „kodem aktywacyjnym”) powstający z numeru IMEI.

Wersja 1.2.7

W wersji 1.2.7 wprowadzono kilka ulepszeń. Dodano język włoski do tłumaczeń. Została poprawiona funkcja generująca „kod aktywacyjny”. W poprzedniej wersji znajdował się błąd, który powodował, że aplikacja nie działała na telefonach CDMA (jest to, razem z GSM, jeden ze standardów sieci telekomunikacyjnych). Telefony te nie mają standardowych numerów IMEI, tylko ich inne wersje zwane ESN (starszy) lub MEID. Problem w kodzie polegał na tym, że numery ESN lub MEID są reprezentowane jako liczba w systemie szesnastkowym. W kodzie źródłowym na czerwono zaznaczono fragment, który powodował problemy.

Zmieniono również znaki kontrolne przesyłane za pomocą wiadomości SMS na te same, które są stosowane w wersji wcześniej przez nas opisywanej. Aby utrudnić analizę poprzez przekierowanie ruchu na inną domenę, dodano obliczenie sumy kontrolnej CRC32 adresu URL C&C i porównanie jej z wartością zapisaną w aplikacji.

Wersja 1.2.8 oraz 1.2.9

Wersja 1.2.8 nieznacznie różni się od wersji 1.2.7 – poprawka dotyczy tylko sposobu liczenia sumy kontrolnej adresu URL oraz dodania wsparcia dla języka niemieckiego. Natomiast wersja 1.2.9 to zmiana schematu graficznego aplikacji. Z „Android Security Suite Premium” aplikacja staje się „Certyfikatem E-Security” (jak widać po prawej) i jest wycelowana tylko w polskich klientów bankowości elektronicznej. Pomimo tego rebrandingu, nazwy zmiennych wciąż odwołują się do wcześniejszych „antywirusowych” funkcji aplikacji. W niektórych próbkach wyłączono także komunikację po HTTP, pozostawiając komunikację SMS jako jedyną formę kontaktu z C&C. W innych wersjach podano adres URL, ale tym razem nie zaciemniając go za pomocą dodatkowych znaków, pomimo że funkcja dekodująca wciąż jest obecna w kodzie źródłowym.

 

Komunikacja HTTP i czytanie wiadomości SMS

W poprzednim artykule opisaliśmy dokładnie komunikację za pomocą wiadomości SMS. Ciekawą funkcją jest ukrywanie numeru telefonu C&C w treści SMSa. Wystarczyło, aby wiadomość zaczynała się od znaku specjalnego, a następnie gdzieś w treści (obojętnie w którym miejscu) występował numer telefonu (ciąg cyfr). Do tego ciągu cyfr dodawano zawsze znak plus, co utrudniało analizę aplikacji w emulatorze Androida.

Pierwotnym kanałem komunikacji był jednak protokół HTTP. Urządzenie rejestruje się w C&C za pomocą żądania HTTP GET:

?to=[numer telefonu]&i=[IMEI/ESN/MEID]&m=[model urządzenia]&aid=["kod aktywacyjny"]&h=[stan aplikacji]&v=[wersja]

Następnie każda wiadomość SMS jest raportowana co pewien czas do serwera C&C, również za pomocą żądania HTTP GET. W odpowiedzi aplikacja oczekuje kodu 200. Polecenia przekazywane są za pomocą nagłówków HTTP Uninstall oraz ForgetMessages. Nagłówki te zawierają tekst true bądź inny. W przypadku gdy w odpowiedzi nagłówek Uninstall zawiera true aplikacja jest odinstalowywana z telefonu. W przypadku nagłówka ForgetMessages zbieranie wiadomości jest zawieszane. Gdy zbieranie wiadomości jest włączone są one przesyłane najpierw za pomocą wiadomości SMS (jak opisano w poprzednim artykule), a gdy to nie jest możliwe to następuje przesłanie za pomocą HTTP. Żądanie GET ma ustawione parametry from, text oraz last. Pierwszy mówi o tym od kogo jest wiadomość, drugi jaka jest jej treść, a trzeci określa czy to jest ostatnia wiadomość w tej puli.

Jeśli niemożliwe jest przesłanie wiadomości poprzez HTTP (nie ma połączenia lub serwer zwraca kod inny niż 200) wiadomość jest zapisywana w tabeli w bazie SQLite o nazwie secsuite.db. Następnie, co określony czas, wysyłane są raporty z tej bazy danych do serwera C&C, jeśli oczywiście jest on już dostępny.

Podsumowanie i dane próbek

Złośliwe oprogramowanie ewoluuje cały czas i jego przeznaczenie może się łatwo zmienić. Ten malware, mimo bardzo prostej budowy i ogromnej liczby wpisów do logów, spełnia swoje zadanie już od roku. Posiada zabezpieczenie na wypadek braku połączenia internetowego i mechanizm, który umożliwia ukrycie numeru telefonu osoby kontrolującej trojana.

Skróty MD5 wszystkich próbek oprogramowania z artykułu znajdują się poniżej.

02462f235a01a6f8287900d04598b4a4
11c6792518c1389173ee626b87c44bd1
1b497b1ddfcbb5457f4c8ba41d412b44
2dfccca5a9cdf207fb43a54b2194e368
5884d1134c636cdc8421d76fb288e37d
5db475e2c0bd711ad9614d0ebff0c36f
7197d23e61909aa16cd637cdba818ae7
847a4bc724d6b095e50b9e576e56c481
b1ae0d9a2792193bff8c129c80180ab0
cdfe596086d5949f686c11e0e79b8aba