Z?o?liwe oprogramowanie szpieguj?ce, które wci?? pozostaje w fazie tworzenia, jest w stanie odczytywa? wiadomo?ci oraz inne poufne dane przesy?ane przez u?ytkowników za po?rednictwem aplikacji WhatsApp.
Jeden z u?ytkowników Twittera odkry? nowy przyk?ad z?o?liwego oprogramowania na system Android, o którym natychmiast poinformowa? w tweecie. Oprogramowanie to wyposa?one jest w wiele funkcji szpieguj?cych, jak na przyk?ad przesy?anie historii przegl?darki, zdj??, bazy danych aplikacji WhatsApp, w której przechowywane s? wszystkie wiadomo?ci. Nie jest na razie jasne, do jakich celów zosta?o stworzone. Z?o?liwe oprogramowanie sk?ada si? z funkcji MainActivity.class uruchamiaj?cej now? us?ug? – OwnMe.class. Kod ?ród?owy powi?zanych plików jest odnajdowany w tym miejscu na stronie Github u?ytkownika earthshakira. OwnMe.class to rozszerzenie klasy Android Service. Chwil? po przywo?aniu startService() wykonana zostaje funkcja onStartCommand().
onStartCommand
Najpierw pojawia si? wyskakuj?ce okienko adresowane do u?ytkownika z informacj? „Service started” (co pozwala s?dzi?, ?e ten przyk?ad z?o?liwego oprogramowania jest nadal w fazie rozwoju). Przest?pcy bowiem d??? do tego, by ich dzia?ania by?y jak najbardziej ukryte po to, by nie wzbudza? w?ród u?ytkowników ?adnych podejrze?.
Ponadto funkcja definiuje wiele zmiennych, takich jak upLoadServerUri, android_id, username (nazwa u?ytkownika), obiekty JSON ping i handshake. Obiekt handshake zawiera informacj? o pustym polu baterii oraz pustym polu cpu. Puste pola, nieprzypisane nigdzie indziej, równie? potwierdzaj? stwierdzenie, i? ten przyk?ad z?o?liwego oprogramowania jest nadal dopracowywany i w danej chwili nie jest aktywnie wykorzystywany. Po zako?czeniu tej procedury z?o?liwe oprogramowanie przechodzi dalej, do funkcji startExploit().
startExploit i connectWebSocket
Gdy z?o?liwe oprogramowanie ma dost?p do Internetu, w nast?pnej kolejno?ci uruchamia funkcj? connectWebSocket(), która przy dost?pie do Internetu ??czy z ws://ipofthec2:8080. Po otrzymaniu informacji z serwera wykonywana jest funkcja onMessage() z otrzyman? informacj? jako parametrem. Nast?pnie tworzy ona obiekt JSON v8, nast?pnie przypisywany do uzyskanego parametru wiadomo?ci. Je?li przypisanie v8 si? nie powiedzie, do serwera przesy?ana jest wiadomo?? null.
Funkcjonalno?ci z?o?liwego oprogramowania
Screenshot
W przypadku, gdy wiadomo?? zawiera s?owo „screenshot”, element response (odpowied?) uzyskuje warto?? none (brak), a elementowi type (typ) przypisywana jest warto?? response (odpowied?) obiektu JSON v8. Na tym etapie nie dochodzi jednak do przywo?ania faktycznej funkcji screenshot i w tym momencie nic nie zostaje przes?ane do serwera, co jeszcze mocniej potwierdza za?o?enie o ci?g?ym doskonaleniu tej funkcji.
W przypadku, gdy wiadomo?? zawiera s?owo “whatsapp”, przywo?ana zostaje funkcja uploadWhatsApp(), która wykonuje to, co sugeruje jej nazwa: ?aduje baz? danych WhatsApp do web c2 w oparciu o nast?puj?ce zapytanie: “ipofthec2/db/upload_whatsapp.php.
username i android_id pochodz? z uprzednio zdefiniowanych zmiennych ramach funkcji onStartCommand().
Browserhistory (Historia przegl?darki)
W przypadku, gdy wiadomo?? zawiera s?owo “browserhistory”, element response z obiektu JSON v8 otrzymuje zwrotn? warto?? funkcji getHistory().
Funkcja getHistory() wysy?a string zawieraj?cy warto?ci id, tytu?, czas, url i wizyty z zak?adek u?ytkownika. GetHistory() obecnie dostarcza jedynie zachowane zak?adki, a nie faktyczn? histori? przegl?darki mobilnej, co mog?aby sugerowa? nazwa funkcji.
Contacts (Kontakty)
W przypadku, gdy wiadomo?? zawiera s?owo “ contacts”, element response z obiektu JSON v8 otrzymuje zwrotn? warto?? funkcji getContacts().
getContacts() zczytuje kontakty z telefonu i dostarcza odpowiedzi w postaci _id kontaktu, wy?wietlanej nazwy (display_name) oraz numerów telefonu, je?li s? one dost?pne.
Calllog (Historia po??cze?)
W przypadku, gdy wiadomo?? zawiera s?owo “calllog”, element response z obiektu JSON v8 otrzymuje zwrotn? warto?? funkcji getCallLogs().
Je?li aplikacja nie posiada zezwolenia android.permission.READ_CALL_LOG, funkcja getCallLogs() odpowie komunikatem „No permission” (brak zezwolenia). W przeciwnym razie kontakty zostan? przeszukane i zostan? dodane warto?ci nazwa, numer, typ, data i czas trwania do obiektu JSON, nast?pnie odes?ane w postaci stringu.
Fetch
W przypadku, gdy wiadomo?? zawiera s?owo „fetch”, element response z obiektu JSON v8 otrzymuje zwrotn? warto?? funkcji getBase64(v8.get(“path)).
getBase64() tworzy now? bitmap? w oparciu o dostarczony parametr, któr? powinna by? lokalna ?cie?ka pliku obrazu. Gdy obraz przekracza szeroko?? 480, zostanie on przeskalowany i skompresowany. Wynik zostanie przes?any w postaci stringu w formacie base64.
Gallery (Galeria)
W przypadku, gdy wiadomo?? zawiera s?owo „gallery”, element response z obiektu JSON v9 otrzymuje zwrotn? warto?? funkcji v4.get(v5).toString(). Ta zwrotna warto?? zawiera ?cie?k?, folder i stron? z karty SD. Element id uzyskuje warto?? android_id, element page warto?? bie??cej strony, a total ilo?? dost?pnych stron.
Funkcja mWebSocketClient.send() przesy?a te dane do po??czenia WebSocket. Proces powtarza si? do momentu, gdy p?tla osi?gnie maksymaln? liczb? dost?pnych stron.
Camera (Aparat)
W przypadku, gdy wiadomo?? zawiera s?owo “camera”, przywo?ana zostaje funkcja openCameraVideo() wraz z parametrem typu kamery (tylna lub przednia) i liczb? ramek.
Gdy aktywna wersja SDK urz?dzenia jest mniejsza ni? 21, otwarty zostaje konkretny aparat, który robi zdj?cie (to zdj?cie nie jest przesy?ane na serwer). W przeciwnym razie przywo?ana zostaje funkcja takePictureR().
Funkcja takePictureR() zasadniczo wykonuje zdj?cie na urz?dzeniu z systemem Android posiadaj?cym wersj? SDK wy?sz? ni? 21. Zdj?cie to jest nast?pnie kodowane w oparciu o base64 i umieszczane w obiekcie JSON, a w dalszej kolejno?ci przesy?ane do po??czenia WebSocket.
UpdateBattery
Ta funkcja dostarcza informacji o aktualnym poziomie baterii i zu?yciu procesora. Jednak nie ma ona zastosowania przy sprawdzaniu tre?ci wiadomo?ci, jak mia?o to miejsce w przedstawionych powy?ej przypadkach komend, dlatego nie jest jeszcze w aktywnym u?yciu.
Brak komendy
W przypadku, gdy w wiadomo?ci nie zostanie znaleziona ?adna komenda, obiekt JSON v8 dodaje warto?? „error” (b??d) i „no command found” (nie znaleziono komendy), a nast?pnie odsy?a do po??czenia WebSocket.
Trwa?o??
Klasa BootCompletedIntentReceiver.java extends rozszerza klas? BroadCastReceiver. W przypadku otrzymania nowej transmisji funkcja onReceive() sprawdza, czy string “android.intent.action.BOOT_COMPLETED” jest to?samy z zak?adanym dzia?aniem. Je?li tak faktycznie jest, OwnMe.class zostaje uruchomione jako us?uga. Oznacza to, ?e za ka?dym razem, gdy urz?dzenie sko?czy si? uruchamia?, zainicjowana zostanie z?o?liwa aplikacja.