Sustav za višezadaćnost operativnog sustava Android pruža bogate značajke za poboljšanje korisničkog iskustva i nudi veliku fleksibilnost za programere aplikacija za promicanje personalizacije aplikacija. Međutim, sigurnosne implikacije Androidovog sustav za višezadaćnost ostaje nedovoljno istražena. Pojedina istraživanja su pokazala nedostatke u dizajnu Androidovog sustav za višezadaćnost koji sve nedavne verzije Androida čine ranjivim na napade otmica zadataka. Jedna od ovih ranjivosti je i ranjivost nazvana StrandHogg koja omogućuje zlonamjernoj aplikaciji da traži dopuštenja, pretvarajući se da je legitimna aplikacija. Napadač može zatražiti pristup bilo kojem odobrenju, uključujući SMS, fotografije, mikrofon i GPS, omogućujući napadaču da čita poruke, pregledava fotografije, prisluškuje i prati kretanja žrtve. U vrijeme pisanja ovog rada Android tim je obaviješten o ranjivosti ali još nisu popravili sustav za višezadaćnost kako bi bio otporan na ovaj napad.
Keywords: Android; višezadaćnost; ranjivost; activity
U svijetu računala, računalno višezadaćnost znači da se višestruki procesi izvode u istom vremenu. Međutim, u Android sustavima je višezadaćnost jedinstven i posve drugačiji koncept, kako je definirano u Androidovoj dokumentaciji: “Zadatak(engl. task) je skup aktivnosti(engl. activity) s kojima korisnici reagiraju u određenom poslu”. Drugim riječima, zadatak sadrži aktivnosti, koje su ujedno i UI komponente, koje mogu pripadati jednoj ili više aplikacija, a svaka se aplikacija može pokrenuti u jednom ili u više procesa. Jedinstveni dizajn višezadaćnog sistema u operativnom sustavu Android pomaže korisnicima da organiziraju korisničke sesije putem naknadnih zadataka i pruža bogate značajke kao što su prikladno prebacivanje aplikacije, održavanje stanja aplikacije u pozadini, glatka navigacija kroz zadatke pomoću gumba “natrag” itd.
Unatoč svojim prednostima, otkriveno je da upravo taj mehanizam ima ozbiljne sigurnosne rizike. Kada se zloupotrijebe, ove praktične značajke za obavljanje više zadataka mogu pokrenuti imati i mnogo neželjenih posljedica i pokrenuti širok spektar napada otimanja zadataka a jedan od takvih je i StrandHogg.
Kako bi opisao napad potrebno je prvo reći nešto malo o sustavu Android i kako radi sustav za višezadaćnost. Osnovne komponente su:
Aktivnost je vrsta komponente aplikacije. Instanca aktivnosti pruža grafički korisničko sučelje na ekranu. Tipično ima više aktivnosti za različite korisničke interakcije, poput biranja telefonskih brojeva i čitanja popisa kontakata. Sve aktivnosti moraju biti definirane u manifest datoteci aplikacije.
Kako bi aktivnost prešla granice procesa i omogućila komunikaciju između komponenti aplikacije, Android pruža interkomponentnu komunikaciju podržanu IPC mehanizmom koji se zove vezivo(engl. binder). Za izvođenje ICC-a s drugim komponentama, komponenta koristi namjeru, apstraktni opis operacija koje treba izvesti. Namjenski objekt je objekt koji se koristi za zahtijevanje radnje od druge komponente, npr. pokretanje instance aktivnosti pozivanjem funkcije startActivity()
. Imamo dvije vrste namjera: eksplicitna namjera određuje komponentu po imenu dok implicitna namjera umjesto toga određuje opću vrstu akcije, kategoriju ili podatke za komponentu koju ta komponenta treba obraditi. Sustav će pokrenuti komponentu sposobnu za rukovanje ovom namjerom a ako u sustavu postoji više ciljnih aktivnosti, od korisnika će se zatražiti da odabere željenu aktivnost.
AMS je Android sustav koji nadgleda sve instance aktivnosti koje se izvode u sustavu i kontrolira njihove životne cikluse (stvaranje, pauziranje, nastavak i uništavanje). Dok WMS(Window Manager Service) upravlja svim prozorima u sustavu i šalje korisničke unose iz prozora, AMS organizira sve aktivnosti u sustavu u zadatke i odgovoran je za upravljanje zadacima i podržavanje funkcija više zadataka. Osim toga, AMS je zadužen za nadzor nad uslugama(engl. services), usmjervanjem namjera, emiterima(engl. broadcasters), pristupa dobavljačima sadržaja(engl. content providers), upravljanje procesima, itd. što čini AMS jednu od najkritičnijih sistemskih usluga u sustavu Android.
Kao što vidimo na slici iznad očekivano ponašanje sustava koji dodaje aktivnosti jednu na drugu unatar istog zadatka. Programerima, kako bi imali više kontrole nad ovim postupkom, Android sustav daje par načina za izmjenu ovog procesa.
NEW_TASK
, SINGLE_TOP
,CLEAR_TOP
, itd. daju programerima mogućnost da</font> mijenaju zadanu povezanost aktivnosti sa svojim zadatkom i način na koji se aktivnosti kreirajuonBackPressed()
koja će mu omogućiti da preduhitri taj događaj i tako utječe na aktivnostStrandHogg je jedinstven jer omogućuje sofisticirane napade bez potrebe za tzv. “root” uređajem, koristi slabost u sustavu višezadaćnosti kako bi izveo napade koji omogućuje zlonamjernim aplikacijama da se maskiraju kao i bilo koja druga aplikacija na uređaju. Taj se rad temelji na Androidovoj kontrolnoj postavci pod nazivom taskAffinity koja omogućava bilo kojoj aplikaciji, uključujući zlonamjernoj, da slobodno preuzme bilo koji identitet u sustavu višezadaćnosti koji želi.
Tvrtka Promon je provela istraživanje i pronašala je svih 500 najpopularnijih aplikacija u riziku, a sve verzije Androida su pogođene od prve pa do najnovijeg Androida 10. Ovo istraživanje je znatno proširenje na istraživanje koje je 2015. provelo Sveučilište Penn, gdje su istraživači teoretski opisali određene aspekte ranjivosti. Google je tada odbacio ozbiljnost ranjivosti, ali kako su daljnja istraživanja pokazala hakeri iskorištavaju StrandHogg kako bi dobili pristup uređajima i aplikacijama.
Utjecaj:
Mogućnosti napadača:
Kako bi napravili malware dovoljno je u manifestu zloćudne aplikacije moramo postavi taskAffinity
na jednoj ili više aktivnosti kako bi odgovarala imenu paketa(engl. package name) bilo koje aplikacije treće strane. Zatim kombiniranjem s allowTaskReparenting=“true”
u manifestu ili pokretanjem aktivnosti s zastavicom namjere Intent.FLAG_ACTIVITY_NEW_TASK
zlonamjerna aktivnost bit će smještena unutar i na vrh zadatka cilja. Tako zlonamjerna aktivnost otima zadatak cilja. Sljedeći put kad se ciljna aplikacija pokrene iz launchera, “oteti” zadatak će biti naprijed i zlonamjerna aktivnost bit će vidljiva korisniku. Tada je dovoljno da zlonamjerna aplikacija izgleda kao ciljana aplikacija kako bi se uspješno pokrenuli napadi na korisnika. Moguće je oteti takav zadatak prije nego je ciljna aplikacija uopće instalirana.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="hr.fer.racfor.strandhogg"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:exported="true" android:allowTaskReparenting="true" android:taskAffinity="##VULNERABLE_APP##" android:name=".MaliciousActivity"> </activity> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Ono što posebno čini ovaj napad još učinkovitijim je da napadač može steći značajnu kontrolu nad žrtvinim zadatkom kombinirajući s Intent.FLAG_ACTIVITY_NEW_TASK
i Intent.FLAG_ACTIVITY_CLEAR_TASK
, napadač prvo briše ciljani zadatak, a zatim se lansira u njega. Ta aktivnost tada može dovršiti ciljani zadatak pomoću funkcije android.app.Activity.finishAndRemoveTask
i pokrenuti novi zadatak s istim afinitetom s Intent.FLAG_ACTIVITY_NEW_TASK
i Intent.FLAG_ACTIVITY_MULTIPLE_TASK
i tako stvoriti novi ciljni zadatak za koji je zajamčeno da će biti pod kontrolom napadača. Nakon toga napadač može pokrenuti stvarnu aktivnost ciljane aplikacije i pustiti aplikaciju da pokrene svoj put kao i obično. U međuvremenu, budući da napadač i dalje zadržava kontrolu nad zadaćom žrtve, sada ima puno više informacija o stanju mete. Tada može presresti i ubrizgati phishing aktivnosti duboko u tok ciljane aplikacije, na mjesto koje je prirodnije za korisnika i protok ciljane aplikacije.
Dizajn Androidovog mehanizma upravljanja zadacima ima velike pogreške u smislu sigurnosti. Trenutno on ostavlja napadaču obilje mogućnosti otmice zadataka za izvođenje različitih napada koji mogu prouzrokovati ozbiljne sigurnosne posljedice. Kako ove opasnosti po sigurnost mogu utjecati na sve nedavne verzije Androida, čini se da rješenje nije trivijalno i da bi vjerovatno trebalo doći do potpunog zaokreta u pristupanju mehanizma za upravljanje zadatcima. Tim s Pennsylvania State Sveučilišta je testirala više od 6,8 milijuna aplikacija i utvrdili da postoji rizik preuzimanja zadataka kod velike većine kao što je i ustvrdilo naknadno istraživanje tvrtke Promon. Za sada jedina mogućnost korisnicima je da pažljivo instaliraju apliakcije od provjerenih tvrtki i sa službene trgovine aplikacijama.