Fortnite Installer kan worden misbruikt om stilletjes apps op Galaxy-telefoons te installeren

Fortnite Mobile op de Android-installatieapp kon in de eerste release worden misbruikt. Er kan misbruik worden gemaakt om in stilte een app op Samsung Galaxy-telefoons te installeren.

De lancering van Fortnite Mobile op Android was niet zo geweldig, vooral sindsdien veel van de ondersteunde apparaten Echt moeite hebben om het spel met acceptabele framesnelheden te spelen. Het spel werd gelanceerd als een Samsung Galaxy exclusief voor slechts 3 dagen. Het Fortnite-installatieprogramma was voor het eerst beschikbaar op Samsung Galaxy-apps voordat Epic Games niet-Samsung-spelers toestond de volledige game te downloaden en te installeren via de Fortnite Installer die op de website van Epic werd verkregen. Kort nadat de Fortnite Installer beschikbaar kwam, pushte Epic Games stilletjes een update naar de Installer. Nu weten we waarom: ze hebben een patch gepatcht Man-in-de-schijf exploit die het voor een kwaadaardige app mogelijk maakte om stil installeren welke app ze maar wilden op Samsung Galaxy-smartphones

. Omdat er enige verwarring bestaat over de werking van deze fout, zullen we proberen de zaken op te helderen. Eerst moeten we de basisprincipes van app-installatie op Android uitleggen.


App-installatiestroom op Android-smartphones

Stille installaties van bronnen van eerste partijen

Als u stil een APK op Android wilt installeren zonder de gebruiker om toestemming te vragen, heeft u een applicatie op systeemniveau nodig met de INSTALL_PAKKETTEN toestemming verleend. Voorbeelden van applicaties met deze toestemming zijn de Google Play Store op de meeste Android-apparaten. Aan eigen applicatiewinkels op apparaten van Samsung, Huawei en andere apparaatfabrikanten is mogelijk ook de INSTALL_PACKAGES-toestemming verleend. Als u een app uit de Google Play Store wilt installeren, wordt de download afgehandeld en automatisch geïnstalleerd de app voor u zonder verdere tussenkomst nadat u op "Installeren" hebt gedrukt. (De Google Play Store zelfs automatisch verleent bepaalde runtime-rechten zoals die voor overlays, terwijl apps die van buiten de Play Store zijn geïnstalleerd de gebruiker moeten vragen deze toestemming te verlenen.)

Als u benieuwd bent of een app op uw apparaat de machtiging INSTALL_PACKAGES heeft, kunt u dit achterhalen via een ADB-opdracht.

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

De pakketnaam van de Google Play Store is bijvoorbeeld 'com.android.vending". Een andere app met deze toestemming is Shell met de pakketnaam com.android.shell. Voor degenen onder u die gebruiken rootless Substratum via de Andromeda-plug-in op Android Oreo zorgt het Andromeda-script dat vanaf uw pc wordt uitgevoerd ervoor dat het shell-proces blijft draaien, zodat Substratum het kan gebruiken om pakketten te installeren (de thema-overlays) en vervolgens de OverlayManager-opdrachten om de overlays in te schakelen.

Side-loading van apps van bronnen van derden

Als u probeert een app te downloaden en te installeren van buiten een appstore van een eerste partij, moet u eerst onbekende installatiebronnen inschakelen. Hierdoor kan de Pakketbeheerservice binnen het Android-framework (dat de INSTALL_PACKAGES-toestemming heeft) weet dat u de risico's erkent van het side-loaden van apps van bronnen van derden. Op pre-Android Oreo-apparaten is er één schakelaar in de beveiligingsinstellingen om installatie vanaf onbekende bronnen toe te staan. Op Android Oreo en latere versies, moet een app die vraagt ​​om de installatie van een APK de REQUEST_INSTALL_PAKKETTEN toestemming en de gebruiker moet die app op de witte lijst zetten, zodat deze app-installaties kan aanvragen via de Package Manager Service. Omdat REQUEST_INSTALL_PACKAGES een "appop"-machtiging is, is dit een van de machtigingen die kan worden beheerd vanuit de machtigingenbeheerder van Instellingen of via de cmd appops shell-commando.

Zodra de installatie vanuit onbekende bronnen globaal of specifiek voor een aanvragende applicatie is ingeschakeld, kan de gebruiker een app side-loaden. Pakketbeheer staat echter niet toe dat de app op de achtergrond wordt geïnstalleerd. In plaats daarvan wordt de gebruiker gevraagd of hij de app wil installeren en worden eventuele gevoelige machtigingen vermeld die tijdens de installatie moeten worden verleend. Als de gebruiker dit accepteert, wordt de app geïnstalleerd met de gevraagde niet-runtime-machtigingen. OEM's kunnen de Package Manager ook aanpassen: bijvoorbeeld de Package Manager in de Chinese versie van Huaweis EMUI 5 heeft een functie om de APK te scannen om te beslissen of deze veilig is en om te bepalen welke rechten er zijn toegekend voor installatie. Ik heb dit waargenomen op de Honor Note 8 met EMUI 5 geïmporteerd uit China, hoewel ik zeker weet dat andere Chinese Huawei- en Honor-apparaten deze functie ook in hun pakketbeheerders hebben.

Hoe dan ook, dat is ongeveer het verschil tussen het installeren van een app vanaf een goedgekeurde bron van de eerste partij en een bron van derden. Als u probeert een app uit de Play Store of een gelijkwaardige app store te installeren met de INSTALL_PACKAGES toestemming, zal het de installatie in stilte zelfstandig afhandelen zonder verdere tussenkomst van de gebruiker nadat u bent gestart het downloaden. Maar als u een APK downloadt van XDA Labs, APKMirror of andere bronnen van derden, zal het standaardpakketinstallatieprogramma de installatie afhandelen en de gebruiker vragen dat pakket te installeren. Dus waar komt de Fortnite Installer binnen en waarom is dit allemaal relevant?

Een fout in het installatieproces van Fortnite

Eerder vandaag Google een kwetsbaarheid onthuld ontdekten ze met de eerste versie van de Fortnite Installer. De kwetsbaarheid werd gedemonstreerd op de Exynos Samsung Galaxy S8+ (dream2lte), maar trof ook alle andere Samsung Experience-toestellen, waaronder de Samsung Galaxy Note 9 en Samsung Galaxy Tab S4. De kwetsbaarheid maakt een reeds geïnstalleerde kwaadaardige applicatie om te profiteren van de manier waarop de Fortnite Installer Fortnite probeert te installeren Voor de eerste keer op Samsung Galaxy-apparaten. Door een privé-API in Samsung Galaxy Apps te gebruiken, omzeilt de Fortnite Installer de noodzaak om de gebruiker via het standaardpakketinstallatieprogramma te vragen Fortnite te installeren. Dat komt omdat Galaxy Apps de benodigde toestemming heeft om de installatie stil af te handelen. Er zou niets mis zijn met dit stille installatieproces als de app die stil wordt geïnstalleerd de echte Fortnite is. Maar vanwege de locatie waar het Fortnite-installatieprogramma het gedownloade APK-bestand voor de Fortnite-game opsloeg, was het gemakkelijk te exploiteren.

Uit het AndroidManifest van Samsung Galaxy Apps blijkt dat Galaxy Apps de toestemming heeft om zelf andere apps te installeren, waarbij de standaardpakketinstallatie wordt omzeild.

Volgens het rapport over de Issue Tracker zou de Fortnite Installer de Fortnite Mobile APK downloaden naar /sdcard/Android/data/com.epicgames.portal/files/downloads/. Dit wordt op Android beschouwd als "externe opslag" omdat /sdcard een symbolische link is naar /data/media/CURRENT_USER, en /sdcard was de naam die werd gebruikt in de begindagen van Android toen app-gegevens opgeslagen op fysieke SD-kaarten. Tegenwoordig worden app-gegevens meestal opgeslagen in app-specifieke mappen in /data/data/, en elke app heeft alleen toegang tot de bestanden in zijn eigen map /data/data. Dus als het Fortnite-installatieprogramma de gedownloade Fortnite APK in zijn eigen map /data/data/ zou opslaan, zou het voor geen enkele app zonder leesrechten (bijv. zonder root-toegang) om te weten wat er in deze map gebeurt.

Echter, sinds de Fortnite Installer heeft de gedownloade APK opgeslagen in externe opslag, kan het worden gecontroleerd en overschreven door elke app met leesrechten voor externe opslag. Normaal gesproken schrijven apps naar /data/media, de ‘virtuele SD-kaart’, wanneer ze bestanden opslaan die toegankelijk moeten zijn voor de gebruiker via MTP of voor andere apps. Als een app /data/media wil lezen of schrijven, moeten ze de READ_EXTERNAL_STORAGE en WRITE_EXTERNAL_STORAGE machtigingen respectievelijk (beide vallen onder dezelfde machtigingsgroep en zijn daarom samen verleend). Vóór Android 4.4 KitKat vroegen de meeste apps tijdens de installatie om deze machtigingen, omdat dit anders niet het geval zou zijn in staat zijn om de bestanden in de aangewezen externe opslagmap van hun pakket te lezen of ernaar te schrijven /data/media/.../Android/. Met de introductie van FUSE om mapmachtigingen in FAT-op-sdcard-stijl te emuleren in Android 4.4 KitKat hebben apps geen rechten meer nodig om toegang te krijgen tot bestanden in de aangewezen map in externe opslag. Voor toegang tot bestanden in een andere map zijn nog steeds de externe opslagrechten nodig, wat een kwaadaardige app kan doen om het Fortnite-installatieproces te kapen.

Zoals te zien is in de onderstaande video, controleert een kwaadaardige app met de toestemming READ_EXTERNAL_STORAGE de downloadmap van de Fortnite Installer in de externe opslag. Wanneer het detecteert dat de download voltooid is en de vingerafdruk is geverifieerd, vervangt het de Fortnite-pakket gedownload met zijn eigen kwaadaardige pakket dankzij de WRITE_EXTERNAL_STORAGE toestemming. Echter vanwege de manier waarop Samsung Galaxy Apps de Fortnite APK verifieert vóór installatie (...het controleert alleen of de pakketnaam "com.epicgames.fortnite" is), het is mogelijk om Galaxy Apps installeer het kwaadaardige pakket stil op de achtergrond zonder tussenkomst of melding van de gebruiker—zolang de naam van het kwaadaardige pakket "com.epicgames.fortnite" is. Erger nog, als dit kwaadaardige pakket SDK-niveau 22 of lager zou targeten (Android 5.1 Lollipop en eerder), zou het krijgen automatisch alle machtigingen die in het manifest zijn gedefinieerd, omdat runtime-machtigingen alleen verplicht zijn voor apps die SDK-niveau 23 en hoger targeten (Android 6.0 Marshmallow en later).

Maar wat zou er gebeuren op niet-Samsung-apparaten? Omdat Samsung Galaxy Apps niet op niet-Samsung-apparaten is geïnstalleerd, wordt de kwaadaardige APK wordt niet stil op de achtergrond geïnstalleerd. Fortnite Installer is een app van derden en moet de gebruiker daarom eerst vragen deze in te schakelen installatie vanaf onbekende bronnen en stuur vervolgens een verzoek naar het installatieprogramma van het pakket om de nep te installeren Fortnite-APK. Het hangt dan af van de gebruiker die op "Installeren" tikt wanneer hem wordt gevraagd of hij de app wil installeren of niet. Dit is problematisch, ongeacht het feit dat niet-Samsung-telefoons niet het risico lopen dat een kwaadaardige app stilletjes op de achtergrond wordt geïnstalleerd. De gemiddelde gebruiker zou er niets wijzer van worden als een kwaadaardige APK met "Fortnite" in de naam en het Fortnite-app-pictogram aan hen wordt aangeboden voor installatie.

Toch is er een duidelijk onderscheid tussen het misbruiken van deze fout op Samsung Galaxy-smartphones en niet-Samsung-smartphones. De eerste is een Man-in-the-Disk-aanval die ook gebruik maakt van een verborgen systeem-API om elke app stilletjes te installeren. op de achtergrond, met alle rechten, en zonder de noodzaak om de gebruiker te laten denken dat hij een nep-Fortnite installeert APK. Dit laatste is een standaard Man-in-the-Disk-aanval die ook kan gebeuren met andere apps die APK's of andere belangrijke gegevens opslaan in externe opslagmappen, zoals blijkt uit de recente Controlepunt na. Het toeval wil dat deze Man-in-the-Disk-aanval, dankzij de verborgen Galaxy Apps API, gevaarlijker is op Samsung Galaxy-apparaten.

Het repareren van de fout

Het strekt Epic Games tot eer dat ze zeer snel reageerden op het rapport over de Google Issue Tracker en zo snel mogelijk een update naar versie 2.1.0 uitrolden. De oplossing was eenvoudig: sla de gedownloade Fortnite APK gewoon op in de interne opslagmap van het Fortnite-installatieprogramma in /data/data in plaats van in de externe opslagmap in /data/media. De ingenieur van Epic Games vroeg om de fout na 90 dagen openbaar te maken, hoewel Google weigerde en het probleem zeven dagen nadat een oplossing was uitgerold openbaar maakte. Epic Games-CEO Tim Sweeney was dat wel niet blij met de snelle doorlooptijd vanaf het eerste beveiligingsrapport tot de openbaarmaking ervan. Hij bood de volgende verklaring aan Android Centraal.

Epic waardeerde oprecht de inspanningen van Google om onmiddellijk na ons een diepgaande beveiligingsaudit van Fortnite uit te voeren release op Android en deel de resultaten met Epic, zodat we snel een update kunnen uitbrengen om de fout op te lossen ontdekt.

Het was echter onverantwoord van Google om de technische details van de fout zo snel openbaar te maken, terwijl veel installaties nog niet waren bijgewerkt en nog steeds kwetsbaar waren.

Een beveiligingsingenieur van Epic heeft, op mijn aandringen, Google verzocht de openbaarmaking met de typische 90 dagen uit te stellen, zodat de update op grotere schaal kan worden geïnstalleerd. Google weigerde. Je kunt het allemaal lezen op https://issuetracker.google.com/issues/112630336

De inspanningen van Google op het gebied van beveiligingsanalyse worden gewaardeerd en komen ten goede aan het Android-platform, maar een bedrijf dat zo machtig is als Google zou meer moeten oefenen verantwoorde timing van openbaarmaking dan dit, en geen gebruikers in gevaar brengen tijdens zijn tegen-PR-inspanningen tegen Epic's distributie van Fortnite buiten Google Spelen.

Ik kan niet zeggen hoeveel bestaande Samsung Galaxy-apparaten nog steeds de oudere Fortnite Installer hebben. Misschien moet Epic Games deze gebruikers vertellen hun installatie bij te werken door een bericht te sturen in Fortnite Mobile. De handige nieuwe functie voor in-app-berichten van Firebase zou de truc kunnen doen. Hoewel het waarschijnlijk toch geen probleem is, want als een gebruiker met het oudere installatieprogramma het legitieme al heeft gedownload Fortnite, dan zal elke MITD-aanval niet werken omdat de kwaadaardige APK niet bovenop de bestaande Fortnite kan worden geïnstalleerd installatie. Hoe dan ook, de ontdekking van deze fout zo vroeg na de release van Fortnite op Android – terwijl er nog steeds zoveel controverse bestaat over Epic Games’ beslissing om Google Play te dumpen– ondersteunt zeker het argument dat de beslissing van Epic Games onzorgvuldig was. Of dat de bedoeling van Google was om dit probleem zo snel bekend te maken, zullen we nooit weten.