Fortnite Installer kan misbrukes til stille installasjon av apper på Galaxy-telefoner

Fortnite Mobile på Androids installasjonsapp kunne utnyttes i sin første utgivelse. Det kan misbrukes til å stille installering av apper på Samsung Galaxy-telefoner.

Lanseringen av Fortnite Mobile på Android har ikke vært for stor, spesielt siden mange av de støttede enhetene egentlig sliter med å spille spillet med akseptable bildefrekvenser. Spillet ble lansert som en Samsung Galaxy eksklusiv i bare 3 dager. Fortnite Installer var først tilgjengelig på Samsung Galaxy-apper før Epic Games tillot ikke-Samsung-spillere å laste ned og installere hele spillet fra Fortnite Installer hentet på Epics nettsted. Kort tid etter at Fortnite Installer ble tilgjengelig, presset Epic Games stille en oppdatering til installasjonsprogrammet. Nå vet vi hvorfor: De lappet en Mann-i-disken utnyttelse som gjorde det mulig for en ondsinnet app stille installasjon hvilken som helst app de ville ha på Samsung Galaxy-smarttelefoner. Fordi det har vært en del forvirring om hvordan denne feilen fungerer, vil vi prøve å rydde opp. Først må vi forklare det grunnleggende om appinstallasjon på Android.


Appinstallasjonsflyt på Android-smarttelefoner

Stille installasjoner fra førstepartskilder

For å stille installering av en APK på Android uten å spørre brukeren om tillatelse, må du ha en applikasjon på systemnivå med INSTALL_PACKAGES tillatelse gitt. Eksempler på apper med denne tillatelsen inkluderer Google Play Store på de fleste Android-enheter. Førsteparts applikasjonsbutikker på enheter fra Samsung, Huawei og andre enhetsprodusenter kan også ha INSTALL_PACKAGES-tillatelsen gitt. Hvis du vil installere en app fra Google Play Store, vil den håndtere nedlastingen og installere den automatisk appen for deg uten ytterligere intervensjon etter at du har trykket på "Installer". (Google Play Store til og med automatisk gir visse kjøretidstillatelser slik som den for overlegg, mens apper som er installert utenfor Play-butikken, må be brukeren om å gi disse tillatelsene.)

Hvis du er nysgjerrig på om en app på enheten din har INSTALL_PACKAGES-tillatelsen, kan du finne ut av det via en ADB-kommando.

adb shell
dumpsys packagepackage.name.here | grep "INSTALL_PACKAGES"

For eksempel er Google Play-butikkens pakkenavn "com.android.vending". En annen app med denne tillatelsen er Shell med pakkenavnet com.android.shell. For dere som bruker rotløst underlag via Andromeda plug-in på Android Oreo holder Andromeda-skriptet som kjøres fra PC-en din skallprosessen i gang slik at Substratum kan bruke den til å installere pakker (temaoverleggene) og deretter bruke OverlayManager-kommandoer for å aktivere overleggene.

Sidelaster apper fra tredjepartskilder

Hvis du prøver å laste ned og installere en app fra utenfor en førsteparts appbutikk, må du først aktivere ukjente installasjonskilder. Dette lar Pakkebehandlertjeneste innenfor Android-rammeverket (som har INSTALL_PACKAGES-tillatelsen) vet at du erkjenner risikoen ved sideinnlasting av apper fra tredjepartskilder. På pre-Android Oreo-enheter er det en enkelt bryter i sikkerhetsinnstillingene for å tillate installasjon fra ukjente kilder. På Android Oreo og nyere versjoner, må en app som krever installasjon av en APK deklarere REQUEST_INSTALL_PACKAGES tillatelse, og brukeren må godkjenne den appen slik at den kan be om appinstallasjoner via Package Manager-tjenesten. Siden REQUEST_INSTALL_PACKAGES er en "appop"-tillatelse, gjør det den til en av tillatelsene som kan kontrolleres fra Innstillingers tillatelsesbehandling eller via cmd appops shell-kommando.

Når installasjon fra ukjente kilder er aktivert enten globalt eller spesifikt for en applikasjon som ber om, kan brukeren sidelaste en app. Pakkebehandlingen tillater imidlertid ikke at appen installeres stille. Snarere vil den spørre brukeren om de vil installere appen og liste opp eventuelle sensitive tillatelser som den ber om å bli gitt ved installasjon. Hvis brukeren godtar, blir appen installert med de forespurte tillatelsene som ikke kjører. OEM-er kan også tilpasse Package Manager: For eksempel Package Manager i den kinesiske versjonen av Huaweis EMUI 5 har en funksjon for å skanne APK-en for å avgjøre om den er trygg og kontrollere hvilke tillatelser som er gitt før installasjon. Jeg har observert dette på Honor Note 8 som kjører EMUI 5 importert fra Kina, selv om jeg er sikker på at andre kinesiske Huawei- og Honor-enheter også har denne funksjonen i sine Package Managers.

I alle fall oppsummerer det forskjellen mellom å installere en app fra en godkjent førstepartskilde og en tredjepartskilde. Hvis du prøver å installere en app fra Play Store eller tilsvarende appbutikk med INSTALL_PACKAGES tillatelse, vil den i det stille håndtere installasjonen på egen hånd uten ytterligere brukerintervensjon etter at du starter nedlastingen. Men hvis du laster ned en APK fra XDA Labs, APKMirror eller andre tredjepartskilder, vil standardpakkeinstallasjonsprogrammet håndtere installasjonen og be brukeren om å installere den pakken. Så hvor kommer Fortnite Installer inn og hvorfor er alt dette relevant?

En feil i Fortnites installasjonsprosess

Tidligere i dag Google avslørte en sårbarhet de oppdaget med den første versjonen av Fortnite Installer. Sårbarheten ble demonstrert på Exynos Samsung Galaxy S8+ (dream2lte), men påvirket også alle andre Samsung Experience-enheter inkludert Samsung Galaxy Note 9 og Samsung Galaxy Tab S4. Sårbarheten tillater en allerede installert skadelig applikasjon for å dra nytte av måten Fortnite Installer prøver å installere Fortnite på for første gang på Samsung Galaxy-enheter. Ved å bruke en privat API i Samsung Galaxy Apps, omgår Fortnite Installer behovet for å be brukeren via standardpakkeinstallasjonsprogrammet om å installere Fortnite. Det er fordi Galaxy Apps har tillatelsen den trenger for å håndtere installasjonen stille. Det ville ikke være noe galt med denne stille installasjonsprosessen hvis appen som stilles installert er den ekte Fortnite. Men på grunn av hvor Fortnite Installer lagret den nedlastede APK-filen for Fortnite-spillet, var den lett å utnytte.

AndroidManifestet fra Samsung Galaxy Apps viser at Galaxy Apps har tillatelse til å installere andre apper på egen hånd, og omgår standardpakkeinstallasjonsprogrammet.

I følge rapporten om Issue Tracker, vil Fortnite Installer laste ned Fortnite Mobile APK til /sdcard/Android/data/com.epicgames.portal/files/downloads/. Dette regnes som "ekstern lagring" på Android som /sdcard er en symbolsk lenke til /data/media/CURRENT_USER, og /sdcard var navnet som ble brukt i de første dagene av Android da appdata ble lagret på fysiske SD-kort. I dag lagres appdata vanligvis i appspesifikke kataloger i /data/data/, og hver app har kun tilgang til filene i sin egen /data/data-katalog. Dermed, hvis Fortnite Installer lagret den nedlastede Fortnite APK i sin egen /data/data/-katalog, ville det være umulig for enhver app uten lesetillatelser (dvs. uten rottilgang) for å vite hva som skjer i denne katalogen.

Imidlertid siden Fortnite Installer lagret den nedlastede APK-en i ekstern lagring, kan det overvåkes og overskrives av alle apper med lesetillatelser for ekstern lagring. Vanligvis skriver apper til /data/media, det "virtuelle SD-kortet", når de lagrer filer som brukeren må få tilgang til via MTP eller andre apper. For at en app skal kunne lese eller skrive til /data/media, må de ha READ_EXTERNAL_STORAGE og WRITE_EXTERNAL_STORAGE tillatelser henholdsvis (begge er under samme tillatelsesgruppe og er derfor gitt sammen). Før Android 4.4 KitKat ba de fleste apper om disse tillatelsene ved installasjon fordi ellers ville de ikke være kan lese eller skrive til filene i pakkens utpekte eksterne lagringskatalog i /data/media/.../Android/. Med introduksjonen av FUSE for å emulere katalogtillatelser i FAT-on-sdcard-stil i Android 4.4 KitKat trenger ikke apper lenger noen tillatelser for å få tilgang til filer i den angitte katalogen i ekstern lagring. Å få tilgang til filer i en hvilken som helst annen katalog vil fortsatt trenge de eksterne lagringstillatelsene, som er hva en ondsinnet app kan gjøre for å kapre Fortnite-installasjonsprosessen.

Som vist i videoen nedenfor, overvåker en ondsinnet app med READ_EXTERNAL_STORAGE-tillatelsen nedlastingskatalogen til Fortnite Installer i ekstern lagring. Når den oppdager at nedlastingen er fullført og fingeravtrykket er bekreftet, erstatter det lastet ned Fortnite-pakke med sin egen ondsinnede pakke takket være WRITE_EXTERNAL_STORAGE tillatelse. Men på grunn av måten Samsung Galaxy Apps verifiserer Fortnite APK før installasjon (...det sjekker bare om pakkenavnet er "com.epicgames.fortnite"), det er mulig å ha Galaxy Apper installer den ondsinnede pakken stille i bakgrunnen uten brukerintervensjon eller varsling– så lenge den ondsinnede pakkens navn var "com.epicgames.fortnite." Enda verre, hvis denne ondsinnede pakken målrettet SDK-nivå 22 eller lavere (Android 5.1 Lollipop og tidligere), ville den automatisk gis alle tillatelser definert i manifestet fordi kjøretidstillatelser bare er obligatoriske for apper som målretter mot SDK-nivå 23 og høyere (Android 6.0 Marshmallow og seinere).

Men hva ville skje på ikke-Samsung-enheter? Vel, fordi Samsung Galaxy Apps ikke er installert på ikke-Samsung-enheter, den ondsinnede APK vil ikke installeres stille i bakgrunnen. Fortnite Installer er en tredjepartsapp og må derfor først be brukeren om å aktivere installasjon fra ukjente kilder og send deretter en forespørsel til pakkeinstallasjonsprogrammet om å installere det falske Fortnite APK. Det vil da avhenge av brukeren å trykke på "Installer" når han blir spurt om de vil installere appen eller ikke. Dette er problematisk uavhengig av det faktum at ikke-Samsung-telefoner ikke er i fare for at en ondsinnet app installeres stille i bakgrunnen. Den gjennomsnittlige brukeren ville ikke vært desto klokere hvis en ondsinnet APK laget med "Fortnite" i navnet og Fortnite-appikonet blir presentert for dem for installasjon.

Likevel er det et klart skille mellom å utnytte denne feilen på Samsung Galaxy-smarttelefoner og ikke-Samsung-smarttelefoner. Førstnevnte er et Man-in-the-Disk-angrep som også drar nytte av en skjult system-API for å stille installering av apper i bakgrunnen, med eventuelle tillatelser, og uten behov for å lure brukeren til å tro at de installerer en falsk Fortnite APK. Sistnevnte er en standard Man-in-the-Disk-angrep som også kan skje med andre apper som lagrer APK-er eller andre viktige data i eksterne lagringskataloger, som vist av den siste Kontrollpunkt post. Det tilfeldigvis, takket være den skjulte Galaxy Apps API, er dette Man-in-the-Disk-angrepet farligere på Samsung Galaxy-enheter.

Å fikse feilen

Til ære for Epic Games, svarte de veldig raskt på rapporten om Google Issue Tracker og rullet ut en oppdatering til versjon 2.1.0 så raskt de kunne. Løsningen var enkel - bare lagre den nedlastede Fortnite APK til Fortnite Installer sin interne lagringskatalog i /data/data i stedet for den eksterne lagringskatalogen i /data/media. Ingeniøren til Epic Games ba om at feilen ble avslørt etter 90 dager, selv om Google avslo og offentliggjorde problemet 7 dager etter at en løsning ble rullet ut. Epic Games' administrerende direktør Tim Sweeney var ikke fornøyd med den raske behandlingstiden fra den første sikkerhetsrapporten til avsløringen. Han tilbød følgende uttalelse til Android sentral.

Epic satte oppriktig pris på Googles innsats for å utføre en grundig sikkerhetsrevisjon av Fortnite umiddelbart etter vår utgivelse på Android, og del resultatene med Epic slik at vi raskt kan utgi en oppdatering for å fikse feilen de oppdaget.

Det var imidlertid uansvarlig av Google å offentliggjøre de tekniske detaljene om feilen så raskt, mens mange installasjoner ennå ikke var oppdatert og fortsatt var sårbare.

En episk sikkerhetsingeniør, etter min oppfordring, ba Google om å utsette offentlig avsløring i de vanlige 90 dagene for å gi tid til å installere oppdateringen mer omfattende. Google nektet. Du kan lese alt på https://issuetracker.google.com/issues/112630336

Googles innsats for sikkerhetsanalyse er verdsatt og kommer Android-plattformen til gode, men et selskap som er så kraftig som Google burde øve mer ansvarlig avsløringstidspunkt enn dette, og ikke sette brukere i fare i løpet av sin mot-PR-innsats mot Epics distribusjon av Fortnite utenfor Google Play.

Jeg kan ikke snakke for hvor mange eksisterende Samsung Galaxy-enheter som fortsatt har den eldre Fortnite Installer. Kanskje Epic Games burde fortelle disse brukerne om å oppdatere installasjonen ved å sende en melding i Fortnite Mobile. Firebases smarte nye meldingsfunksjon i appen kunne gjøre susen. Selv om det sannsynligvis ikke er en stor sak uansett, fordi hvis en bruker med det eldre installasjonsprogrammet allerede har lastet ned den legitime Fortnite, da vil ikke ethvert MITD-angrep fungere fordi den skadelige APK-en ikke kan installeres på toppen av den eksisterende Fortnite installasjon. I alle fall, oppdagelsen av denne feilen så tidlig etter Fortnites utgivelse på Android - når det fortsatt er så mye kontrovers om Epic Games' beslutning om å droppe Google Play— hjelper absolutt argumentet om at Epic Games beslutning var uforsiktig. Om det var Googles intensjon bak å publisere dette problemet så raskt, får vi aldri vite.