Janus Exploit lader angribere ændre apps uden at påvirke signaturer

Janus-sårbarheden giver angribere mulighed for at ændre apps uden at påvirke deres signaturer. Det blev opdaget af GuardSquare og er blevet rettet af Google.

Android er installeret på et stort antal enheder, og det gør det til et mål for ondsindede angribere. Sårbarheder i Googles mobiloperativsystem bliver fortsat opdaget hver måned, men den gode nyhed er, at Google er normalt flittig med at rette dem i almindelige sikkerhedsrettelser, som derefter tilbydes til OEM'er, som derefter sender det til enheder.

For nylig afslørede sikkerhedsforskere en sårbarhed som narrede brugere til at tillade angribere at optage deres enheds skærm. Den særlige udnyttelse blev rettet i Android Oreo, men analytikere på GuardSquare rapporterede for nylig en anden alvorlig sårbarhed, som påvirker Android-apps, der er underskrevet af en ældre signaturordning.

GuardSquaredet fremgår af rapporten, at Janussårbarhed (CVE-2017-13156) i Android giver angribere mulighed for at ændre koden i applikationer uden at påvirke deres signaturer. Rapporten siger videre, at roden til sårbarheden er, at en fil kan være en gyldig APK-fil og en gyldig DEX-fil på samme tid.

Janus udnytter det faktum, at ekstra bytes går ubemærket hen i APK-filer og DEX-filer. Det GuardSquare rapporten forklarer, at en APK-fil er et ZIP-arkiv, som kan indeholde vilkårlige bytes i starten, før og mellem dets ZIP-poster. JAR-signaturskemaet tager kun højde for ZIP-posterne og ignorerer eventuelle ekstra bytes, når der beregnes eller verificeres applikationens signatur.

Det fortsætter med at forklare, at en DEX-fil på den anden side kan indeholde vilkårlige bytes i slutningen - efter de almindelige sektioner af strenge, klasser, metodedefinitioner osv. Derfor kan en fil være en gyldig APK-fil og en gyldig DEX-fil på samme tid.

GuardSquare nævner også, at et centralt element i sårbarheden er en "harmløs" funktion ved den virtuelle Dalvik/ART-maskine. Rapporten siger, at i teorien indlæser Android-runtime APK-filen, udtrækker dens DEX-fil og kører derefter dens kode. Men i praksis kan den virtuelle maskine (VM) indlæse og udføre både APK-filer og DEX-filer. Problemet er, at når VM'en får en APK-fil, ser den stadig på de magiske bytes i headeren for at afgøre, hvilken type fil det er: DEX eller APK. Når den finder en DEX-header, indlæser den filen som en DEX-fil. Hvis den ikke finder en header, indlæser den filen som en APK-fil, der indeholder en zip-indgang med en DEX-fil. Således kan den fejlfortolke dobbelte DEX/APK-filer.

GuardSquare siger, at en angriber kan udnytte denne dualitetsfunktion i VM'en til at tilføje en ondsindet DEX-fil til en normal APK-fil uden at påvirke dens signatur. Android runtime vil acceptere APK-filen som en gyldig opdatering til en legitim tidligere appversion, men Dalvik VM vil indlæse koden fra DEX-filen, som er blevet injiceret med skadelig kode.

Normalt, når en bruger installerer en opdateret version af en app, verificeres appens signatur af Android-runtime for at sikre, at den matcher den ældre version. Når verifikationen er positiv, får den opdaterede applikation de tilladelser, der var givet til den oprindelige applikation. På denne måde kan angribere bruge Janus-sårbarheden til at omgå signaturbekræftelsesprocessen og få ubekræftet kode installeret på intetanende brugeres enheder.

Hvad der er endnu værre er, at denne ubekræftede kode kan få adgang til kraftfulde tilladelser. Dette giver anledning til nogle alvorlige muligheder. GuardSquare anfører:

"En angriber kan erstatte en betroet applikation med høje privilegier (for eksempel en systemapp) med en ændret opdatering for at misbruge dens tilladelser. Afhængigt af den målrettede applikation kan dette gøre det muligt for hackeren at få adgang til følsomme oplysninger, der er gemt på enheden, eller endda overtage enheden fuldstændigt. Alternativt kan en angriber sende en modificeret klon af et følsomt program som en legitim opdatering [der] kan se ud og opføre sig som den originale applikation, men injicere ondsindet adfærd."

Virksomheden tilføjede, at de indtil nu ikke havde set nogen applikationer, der udnyttede Janus i naturen. Den anden gode nyhed er, at sårbarheden kræver, at en bruger installerer en ondsindet opdatering fra en kilde uden for Google Play Butik. Derfor er brugere, der begrænser appinstallationer til Play Butik, beskyttet.

Janus-sårbarheden påvirker enheder, der kører Android 5.0+. Programmer, der er blevet signeret med APK-signaturskema v1, er berørt. APK'er, der er signeret med signaturskema v2, er beskyttet mod sårbarheden. Dette kræver, at APK'erne kører på enheder, der understøtter det seneste signaturskema (Android 7.0 og nyere). Scheme v2 er beskyttet, fordi i modsætning til skema v1, tager det hensyn til alle bytes i APK-filen.

"Ældre versioner af applikationer og nyere applikationer, der kører på ældre enheder, er fortsat modtagelige. Udviklere bør i det mindste altid anvende signaturskema v2," GuardSquare stater.

GuardSquare rapporterede dette problem til Google den 31. juli 2017 og modtog en bekræftelse samme dag. Virksomhedens rapport siger, at Google udgav en patch til sine partnere i november og offentliggjorde fejlen (CVE-2017-13156) i Android Security Bulletin den 4. december 2017. Sårbarheden har blevet rettet i Android-sikkerhedspatchen fra december 2017. Separat er F-Droid-applikationer fra deres officielle lager blevet bekræftet for at være sikre. Endelig er det blevet bekræftet, at sårbarheden er blevet rettet APKMirror.


Kilde: GuardSquare