Namestitveno aplikacijo Fortnite Mobile za Android je bilo mogoče izkoristiti v prvi izdaji. Lahko bi ga zlorabili za tiho namestitev katere koli aplikacije na telefone Samsung Galaxy.
Predstavitev Fortnite Mobile v sistemu Android ni bila preveč dobra, še posebej od takrat številne podprte naprave res težko igrati igro s sprejemljivo hitrostjo sličic. Igra se je začela kot a Samsung Galaxy ekskluzivno samo 3 dni. Namestitveni program Fortnite je bil prvič na voljo na Aplikacije Samsung Galaxy preden je Epic Games dovolil igralcem, ki niso Samsung, da prenesejo in namestijo celotno igro iz namestitvenega programa Fortnite, pridobljenega na spletnem mestu Epic. Kmalu po tem, ko je namestitveni program Fortnite postal na voljo, je Epic Games tiho potisnil posodobitev namestitvenega programa. Zdaj vemo zakaj: zakrpali so a Človek na disku izkoriščanje, ki je zlonamerni aplikaciji omogočilo tiho namestite katero koli aplikacijo, ki so jo želeli na pametnih telefonih Samsung Galaxy. Ker je prišlo do zmede glede delovanja te napake, bomo poskušali stvari razjasniti. Najprej moramo razložiti osnove namestitve aplikacije v sistemu Android.
Potek namestitve aplikacije na pametne telefone Android
Tihe namestitve iz lastnih virov
Če želite tiho namestiti APK v Android, ne da bi uporabnika pozvali k dovoljenju, morate imeti aplikacijo na sistemski ravni z INSTALL_PACKAGES dovoljenje izdano. Primeri aplikacij s tem dovoljenjem vključujejo trgovino Google Play v večini naprav Android. Lastne trgovine z aplikacijami v napravah Samsung, Huawei in drugih proizvajalcev naprav imajo lahko tudi dovoljenje INSTALL_PACKAGES. Če želite namestiti katero koli aplikacijo iz trgovine Google Play, bo poskrbela za prenos in se samodejno namestila aplikacijo za vas brez nadaljnjega posredovanja, potem ko pritisnete »Namesti«. (Trgovina Google Play celo samodejno podeljuje določena dovoljenja za izvajanje kot je tista za prekrivanja, medtem ko morajo aplikacije, nameščene zunaj Trgovine Play, od uporabnika zahtevati odobritev teh dovoljenj.)
Če vas zanima, ali ima aplikacija v vaši napravi dovoljenje INSTALL_PACKAGES, lahko to ugotovite z ukazom ADB.
adb shell
dumpsys packagepackage.name.here | grep "INSTALL_PACKAGES"
Na primer, ime paketa trgovine Google Play je "com.android.vending
". Druga aplikacija s tem dovoljenjem je Shell z imenom paketa com.android.shell
. Za tiste, ki uporabljate Substratum brez korenin prek vtičnika Andromeda v sistemu Android Oreo skript Andromeda, ki se izvaja iz vašega računalnika, ohranja delovanje ukazne lupine, tako da ga lahko Substratum uporabi za namestitev paketov (prekrivne teme) in nato uporabi Ukazi OverlayManager da omogočite prekrivanja.
Stransko nalaganje aplikacij iz virov tretjih oseb
Če poskušate prenesti in namestiti aplikacijo izven lastne trgovine z aplikacijami, boste morali najprej omogočiti neznane vire namestitve. To omogoča Storitev upravitelja paketov znotraj okvira Android (ki ima dovoljenje INSTALL_PACKAGES) vedite, da se zavedate tveganja stranskega nalaganja aplikacij iz virov tretjih oseb. V napravah pred Androidom Oreo je v varnostnih nastavitvah en sam preklop, ki omogoča namestitev iz neznanih virov. V sistemu Android Oreo in novejših različicah, mora aplikacija, ki kliče namestitev APK-ja, prijaviti REQUEST_INSTALL_PACKAGES dovoljenje in uporabnik mora to aplikacijo dodati na seznam dovoljenih, da lahko zahteva namestitve aplikacije prek storitve upravitelja paketov. Ker je REQUEST_INSTALL_PACKAGES dovoljenje za "aplikacijo", je to eno od dovoljenj, ki jih je mogoče nadzorovati v upravitelju dovoljenj v nastavitvah ali prek cmd appops
lupinski ukaz.
Ko je namestitev iz neznanih virov omogočena globalno ali posebej za aplikacijo, ki zahteva, lahko uporabnik stransko naloži aplikacijo. Vendar pa upravitelj paketov ne dovoljuje tihe namestitve aplikacije. Namesto tega bo uporabnika pozval, ali želi namestiti aplikacijo, in navedel vsa občutljiva dovoljenja, ki jih zahteva odobritev ob namestitvi. Če uporabnik sprejme, je aplikacija nameščena z zahtevanimi dovoljenji, ki niso izvajalna. Proizvajalci originalne opreme lahko prilagodijo tudi upravitelja paketov: na primer upravitelja paketov v kitajski različici Huaweijev EMUI 5 ima funkcijo skeniranja APK-ja, da se odloči, ali je varen, in nadzira, katera dovoljenja so odobreno prej namestitev. To sem opazil pri Honor Note 8, ki uporablja EMUI 5, uvožen iz Kitajske, čeprav sem prepričan, da imajo tudi druge kitajske naprave Huawei in Honor to funkcijo v svojih upraviteljih paketov.
V vsakem primeru to približno povzema razliko med namestitvijo aplikacije iz odobrenega vira prve osebe in vira tretje osebe. Če poskušate namestiti aplikacijo iz Trgovine Play ali ustrezne trgovine z aplikacijami z INSTALL_PACKAGES dovoljenje, bo namestitev tiho izvedel sam brez nadaljnjega posredovanja uporabnika po vašem začetku prenos. Toda če prenesete APK iz XDA Labs, APKMirror ali drugih virov tretjih oseb, bo standardni namestitveni program za pakete opravil namestitev in pozval uporabnika, da namesti ta paket. Kje torej nastopi namestitveni program Fortnite in zakaj je vse to pomembno?
Napaka v postopku namestitve Fortnite
Prej danes, Google razkrila ranljivost so odkrili s prvo različico programa Fortnite Installer. Ranljivost je bila prikazana na Exynos Samsung Galaxy S8+ (dream2lte), vendar je vplivala tudi na vse druge naprave Samsung Experience, vključno s Samsung Galaxy Note 9 in Samsung Galaxy Tab S4. Ranljivost omogoča an že nameščeno zlonamerno aplikacijo da izkoristite način, kako Fortnite Installer poskuša namestiti Fortnite prvič na napravah Samsung Galaxy. Z uporabo zasebnega API-ja v aplikacijah Samsung Galaxy Apps namestitveni program Fortnite zaobide potrebo po pozivu uporabnika prek standardnega namestitvenega programa paketov za namestitev Fortnite. To je zato, ker ima Galaxy Apps dovoljenje, ki ga potrebuje za tiho namestitev. S tem postopkom tihe namestitve ne bi bilo nič narobe, če bi bila aplikacija, ki se tiho namešča, pravi Fortnite. Toda zaradi tega, kje je Fortnite Installer shranil preneseno datoteko APK za igro Fortnite, jo je bilo enostavno izkoristiti.
Po poročilu na Issue Tracker bi Fortnite Installer prenesel Fortnite Mobile APK v /sdcard/Android/data/com.epicgames.portal/files/downloads/
. To velja za "zunanji pomnilnik" v sistemu Android, saj je /sdcard simbolična povezava do /data/media/CURRENT_USER in /sdcard je bilo ime, uporabljeno v zgodnjih dneh Androida, ko so bili podatki aplikacij shranjene na fizičnih karticah SD. Dandanes so podatki aplikacij običajno shranjeni v imenikih, specifičnih za aplikacijo, v /data/data/ in vsaka aplikacija ima dostop samo do datotek v svojem imeniku /data/data. Če bi namestitveni program Fortnite shranil preneseni APK Fortnite v lastni imenik /data/data/, ne bi bilo mogoče za nobeno aplikacijo brez dovoljenj za branje (tj. brez korenskega dostopa), če želite vedeti, kaj se dogaja v tem imeniku.
Vendar, od Fortnite Installer preneseni APK shranil v zunanji pomnilnik, bi ga lahko spremljali in prepisali katera koli aplikacija z dovoljenji za branje zunanjega pomnilnika. Običajno aplikacije pišejo v /data/media, »navidezno kartico SD«, ko shranjujejo datoteke, do katerih mora uporabnik dostopati prek MTP ali drugih aplikacij. Da lahko aplikacija bere ali piše v /data/media, mora imeti READ_EXTERNAL_STORAGE in dovoljenja WRITE_EXTERNAL_STORAGE (obe sta pod isto skupino dovoljenj in sta zato podeljeno skupaj). Pred Androidom 4.4 KitKat je večina aplikacij ob namestitvi zahtevala ta dovoljenja, ker drugače ne bi lahko berejo ali pišejo datoteke v določenem imeniku zunanjega pomnilnika svojega paketa v /data/media/.../Android/. Z uvedbo FUSE za posnemanje dovoljenj imenika v slogu FAT-on-sdcard v sistemu Android 4.4 KitKat aplikacije ne potrebujejo več dovoljenj za dostop do datotek v svojem določenem imeniku v zunanjem pomnilniku. Za dostop do datotek v katerem koli drugem imeniku bi še vedno potrebovali dovoljenja za zunanjo shrambo, kar lahko naredi zlonamerna aplikacija, da ugrabi postopek namestitve Fortnite.
Kot je prikazano v spodnjem videoposnetku, zlonamerna aplikacija z dovoljenjem READ_EXTERNAL_STORAGE nadzoruje imenik za prenos namestitvenega programa Fortnite v zunanjem pomnilniku. Ko zazna, da je prenos končan in je prstni odtis preverjen, zamenja prenesel paket Fortnite z lastnim zlonamernim paketom zahvaljujoč WRITE_EXTERNAL_STORAGE dovoljenje. Vendar pa zaradi načina, na katerega Samsung Galaxy Apps preveri Fortnite APK pred namestitvijo (... samo preveri, ali je ime paketa "com.epicgames.fortnite"), možno je imeti Galaxy Aplikacije tiho namestite zlonamerni paket v ozadju brez posredovanja ali obvestila uporabnika— dokler je bilo ime zlonamernega paketa "com.epicgames.fortnite." Še huje, če bi ta zlonamerni paket ciljal na raven SDK 22 ali nižjo (Android 5.1 Lollipop in starejši), bi samodejno dodeli vsa dovoljenja, opredeljena v njegovem manifestu, ker so dovoljenja za čas izvajanja obvezna samo za aplikacije, ki ciljajo na raven SDK 23 in višje (Android 6.0 Marshmallow in kasneje).
Toda kaj bi se zgodilo na napravah, ki niso Samsung? No, ker Samsung Galaxy Apps ni nameščen v napravah drugih proizvajalcev, zlonamerni APK ne bo tiho nameščen v ozadju. Fortnite Installer je aplikacija drugega proizvajalca in mora zato najprej pozvati uporabnika, da jo omogoči namestitev iz neznanih virov in nato pošljite zahtevo namestitvenemu paketu za namestitev ponaredka Fortnite APK. Potem bi bilo odvisno od tega, ali se uporabnik dotakne »Namesti«, ko ga vpraša, ali želi namestiti aplikacijo ali ne. To je problematično ne glede na dejstvo, da telefoni, ki niso proizvajalci Samsung, niso v nevarnosti, da bi se v ozadju tiho namestila zlonamerna aplikacija. Povprečen uporabnik ne bi bil nič pametnejši, če bi mu za namestitev ponudili zlonamerni APK, ki ima v imenu »Fortnite« in ikono aplikacije Fortnite.
Kljub temu obstaja jasna razlika med izkoriščanjem te napake na pametnih telefonih Samsung Galaxy in pametnih telefonih drugih proizvajalcev. Prvi je napad Man-in-the-Disk, ki izkorišča tudi skrit sistemski API za tiho namestitev katere koli aplikacije v ozadje, s kakršnimi koli dovoljenji in brez potrebe, da bi uporabnika zavedli, da misli, da namešča lažni Fortnite APK. Slednji je a standardni napad Man-in-the-Disk, ki se lahko zgodi tudi drugim aplikacijam, ki shranjujejo APK-je ali druge pomembne podatke v zunanje imenike za shranjevanje, kot kaže nedavna CheckPoint post. Zgodi se, da je zaradi skritega API-ja Galaxy Apps ta napad Man-in-the-Disk bolj nevaren na napravah Samsung Galaxy.
Odpravljanje napake
Po zaslugi Epic Games so se zelo hitro odzvali na poročilo o Google Issue Trackerju in čim hitreje uvedli posodobitev na različico 2.1.0. Popravek je bil preprost – samo shranite preneseni Fortnite APK v imenik notranjega pomnilnika Fortnite Installer v /data/data namesto v njegov zunanji imenik za shranjevanje v /data/media. Inženir Epic Games je zahteval, da se napaka razkrije po 90 dneh, vendar je Google to zavrnil in javno objavil težavo 7 dni po uvedbi popravka. Tim Sweeney, izvršni direktor Epic Games, je bil ne zadovoljni s hitrim časom preobrata od začetnega varnostnega poročila do njegovega razkritja. Ponudil je naslednjo izjavo Android Central.
Epic je resnično cenil Googlovo prizadevanje za izvedbo poglobljene varnostne revizije Fortnite takoj po našem izdajo za Android in delijo rezultate z Epic, da lahko hitro izdamo posodobitev za odpravo napake odkriti.
Vendar je bilo neodgovorno s strani Googla, da je tako hitro javno razkril tehnične podrobnosti napake, medtem ko številne namestitve še niso bile posodobljene in so bile še vedno ranljive.
Varnostni inženir Epic je na mojo spodbudo zahteval, da Google odloži javno razkritje za tipičnih 90 dni, da bi imel čas za širšo namestitev posodobitve. Google je zavrnil. Vse lahko preberete na https://issuetracker.google.com/issues/112630336
Googlova prizadevanja za analizo varnosti so cenjena in koristijo platformi Android, vendar bi tako močno podjetje, kot je Google, moralo prakticirati več odgovoren čas razkritja, kot je ta, in ne ogrožati uporabnikov med njegovimi prizadevanji za boj proti PR zoper Epicovo distribucijo igre Fortnite zunaj Google Play.
Ne morem govoriti o tem, koliko obstoječih naprav Samsung Galaxy ima še starejši Fortnite Installer. Mogoče bi moral Epic Games tem uporabnikom povedati, naj posodobijo svojo namestitev s pošiljanjem sporočila v Fortnite Mobile. Odlična nova funkcija Firebase za pošiljanje sporočil v aplikaciji bi lahko naredil trik. Čeprav verjetno vseeno ni nič posebnega, ker če je uporabnik s starejšim namestitvenim programom že prenesel zakonito Fortnite, potem noben napad MITD ne bo deloval, ker zlonamernega APK-ja ni mogoče namestiti povrh obstoječega Fortniteja namestitev. V vsakem primeru je odkritje te napake tako zgodaj po izdaji igre Fortnite za Android – ko je še vedno toliko polemik o Epic Games odločitev o opustitvi Googla Play— zagotovo pomaga argumentu, da je bila odločitev Epic Games neprevidna. Nikoli ne bomo vedeli, ali je bil to namen Googla za tako hitro objavo te težave.