Tapjacking gjorde en återkomst i Android Marshmallow, och ingen märkte

Vissa Marshmallow-enheter är mottagliga för tapjacking, där en app lägger över text ovanpå en behörighetsdialog för att lura användaren.

Medan många av oss saliverar över den nyligen släppta Android Nougat för Nexus-enheter, använder de allra flesta användare fortfarande Android Marshmallow. En exploatering vars existens har dokumenterats sedan dess åtminstone mitten av 2015 påverkar fortfarande många moderna Android-enheter.

Skadliga program kan tapjack dina handlingar in i ge dem ett tillstånd som du aldrig uttryckligen gett. Så här fungerar exploateringen.


Tapjackingens återkomst

Föreställ dig att du öppnar Instagram och försöker dela en bild du nyligen tog när du var på semester. När du väljer att bläddra i ditt galleri efter en bild, ber Instagram dig att ge det tillstånd att komma åt din lagring. Men när du trycker på "ja" möts du av ett felmeddelande.

Du kan inte bevilja lagringstillstånd för Instagram eftersom du har en aktiv skärmöverlagring aktiverad - in det här fodralet, ett av de många applikationerna som färgar din skärm så att du kan använda din telefon på natten utan att bli bländande själv. Detta är ett fall av Android-behörighetssystemet

fungerar som det är tänkt: för att ge en applikation en känslig behörighet måste du inaktivera alla skärmöverlagringar du har på din enhet.

Marshmallow Permission Tapjacking. Om du trycker på "Tillåt" visas alla mina kontakter.

Applikationer som har förmågan att rita över din skärm kan potentiellt lura dig att mata in känslig data. Till exempel kan en skärmöverlagring placera ett falskt lösenordsinmatning ovanpå en riktig inloggningsskärm för att samla in dina lösenord. Ett sådant här utnyttjande kallas "tappjacking" och har dykt upp och lappats på olika Android-versioner genom åren, med ett av de värsta exemplen som varar fram till Android 4.0.3. Men nyligen gjorde bedriften en återkomst med Android Marshmallows runtime-tillståndsmodell.

En utvecklare vid namn Iwo Banaś skapade en Ansökan demonstrerar utnyttjandet. Sättet det fungerar på är ganska enkelt - när ett program visar en behörighetsdialogruta, det skadliga programmet du installerade kommer att visa ett systemöverlägg för att dölja behörighetsdialogrutans textblock med vilken text som helst vill ha. En ovetande användare som klickar på "tillåt" på behörighetsdialogrutan kommer att luras att ge en behörighet som de ombads om - men för vilken begäran var dolt från användarens synvinkel. En sådan exploatering motverkar fullständigt syftet med Android Marshmallows tillståndssystem, sedan introduktionen av den nya modellen var tänkt att säkerställa att användarna endast skulle ha tillstånd som de uttryckligen samtyckte till.

Nu vet jag vad du tänker på. Om Android upptäckte en systemöverlagring och hindrade mig från att ge Instagram-lagringsbehörigheter, skulle det inte förhindra att detta utnyttjande inträffade? Svaret är nej, i mina tester verkar det som att på vissa enheter att visa en textöverlagring ovanpå en behörighetsdialog inte utlöser säkerhetsmekanismen. Utvecklaren av proof-of-concept tapjacking-applikationen säger att utnyttjandet är effektivt eftersom det förlitar sig på att användaren installerar ett sekundärt skadligt program som är inriktat på API-nivå 22 och lägre (före Marshmallow). Detta beror på det faktum att före Android Marshmallow beviljas alla applikationer behörigheter under installationen.

Okej, så om du är på Marshmallow behöver du bara undvika att installera appar som du inte litar på som begär tillstånd att rita en överlagring, eller hur? Om Androids tillståndsmodell fungerade som den ursprungligen lades ut, skulle du ha rätt. Men sedan upptäckten av denna exploatering, även appar som är inriktade på API-nivå 23 (Marshmallow) som begär överlagringstillstånd är en potentiell risk.


En lucka i tillståndsmodellen?

Typiska appar som använder överlägg. Via: Medium

Om du är en av de många miljoner människor som använder Facebook Messenger för att chatta med dina vänner, då har du stött på en av Androids bästa funktioner – möjligheten för appar att rita ovanpå andra skärmar. Hur coolt är det att du kan ha en bubbla med din favoritgruppchatt på Facebook och följa användaren ovanpå vilken applikation de öppnar? Även om Facebooks Messenger tog med idén om "flytande appar" till mainstream, har konceptet funnits en tid i Android. Applikationer har kunnat skapa överlägg ovanpå dina appar under en tid, tack vare förekomsten av TYPE_SYSTEM_OVERLAY i Androids WindowManager.

"Rita över andra appar" Behörighetsmeny

Innan Android Marshmallow skulle applikationer behöva begära ett tillstånd som kallas SYSTEM_ALERT_WINDOW under installationen innan den kunde visa överlägg ovanpå din skärm. Men detta förändrades i och med introduktionen av 6.0:s granulära körtidstillståndsmodell. Användare skulle nu behöva ge behörigheter till applikationer när de faktiskt kör appen, vilket förhoppningsvis skulle stimulera genomsnittet användare att skydda sina egna privata data från applikationer som misstänkt begär till synes funktionellt orelaterade behörigheter.

SYSTEM_ALERT_WINDOW är dock inte som andra behörigheter. Utvecklare kan inte visa en dialogruta för att programmässigt begära att tillståndet ska beviljas av slutanvändaren, som de flesta andra behörigheter för alla appar som är inriktade på Marshmallow. Istället måste du manuellt navigera till inställningsskärmen och aktivera behörigheten själv. Naturligtvis kommer vissa appar som Facebook Messenger att hjälpa dig längs processen.

Google kräver detta av utvecklare eftersom de har ansett att tillståndet är "särskilt känslig."

Särskilda behörigheter

Det finns ett par behörigheter som inte beter sig som vanliga och farliga behörigheter. SYSTEM_ALERT_WINDOW och WRITE_SETTINGS är särskilt känsliga, så de flesta appar bör inte använda dem. Om en app behöver en av dessa behörigheter måste den deklarera behörigheten i manifestet och skicka en avsikt som begär användarens auktorisering. Systemet svarar på avsikten genom att visa en detaljerad hanteringsskärm för användaren.

Med tanke på vad vi vet ovan om tapjacking är detta vettigt. Men här är grejen. Google följer inte ens sina egna regler. Skärmbilderna av Facebook Messenger som vägleder dig genom processen att ge den SYSTEM_ALERT_WINDOW-tillståndet som jag visade dig ovan? Det händer bara om du installerar APK-filen utanför Google Play Butik. Om du installerar en applikation från Google Play Butik, SYSTEM_ALERT_WINDOW-behörighet beviljas automatiskt.

Facebook Messengers manifestfil. Appen får automatiskt överlagringsbehörighet trots inriktning på API-nivå 23.

Google har offrat säkerhet för bekvämlighet

Under en lång tid innan Android Marshmallow ansågs SYSTEM_ALERT_WINDOW vara en "farlig" lov. Med Android Marshmallow 6.0 ändrades behörigheten till signatur|system|appop vilket är vad som från början krävde att utvecklare skulle leda användaren till inställningsskärmen för att ge tillstånd. Men med Android version 6.0.1, SYSTEM_ALERT_WINDOW har ändrats så att Google Play Butik kan automatiskt ge tillståndetutan att meddela användaren. Varför Google gjorde denna förändring är oklart för oss. Google har själva inte gått ut och berättat varför de gjorde denna förändring, vilket är särskilt märkligt med tanke på språket om SYSTEM_ALERT_WINDOW som fortfarande finns på deras webbsidor.

Det är möjligt det tillräckligt många utvecklare var arga av de initiala ändringarna i SYSTEM_ALERT_WINDOW som krävde att användarna manuellt beviljade tillståndet som Google tyst tog bort och bara gav det till alla program som begärde det. Men genom att göra det har Google offrade säkerheten för bekvämligheten. Det finns en anledning till att Google själva ansåg tillståndet vara farligt i det längsta, eftersom det är det. Och förekomsten av Marshmallow tillstånd tapjacking exploateringen är tillräckligt bevis på de inneboende farorna med att automatiskt bevilja denna tillstånd till vilken app som helst.

Denna tappkapning har bara nyligen uppmärksammats även om den har funnits i många månader nu. I våra interna tester av enheter bland XDA Portal-teamet har vi bekräftat det utnyttjandet fungerar på många moderna enheter som kör Android Marshmallow. Här är en snabb genomgång av enheterna vi testade på de senaste tillgängliga programvaruversionerna för varje respektive enhet och huruvida tapjacking-exploatet fungerar eller inte. Enheterna som är märkta "Sårbara" är känsliga för en tappkapning, medan enheterna märkta "Ej Sårbara" kan upptäcka en app som visar överlagringen och begära att du inaktiverar den innan fortlöpande.

  • Nextbit Robin - Android 6.0.1 med säkerhetskorrigeringar för juni - Sårbar
  • Moto X Pure - Android 6.0 med säkerhetskorrigeringar i maj - Sårbar
  • Honor 8 - Android 6.0.1 med säkerhetskorrigeringar i juli - Sårbar
  • Motorola G4 - Android 6.0.1 med säkerhetskorrigeringar i maj - Sårbar
  • OnePlus 2 - Android 6.0.1 med säkerhetskorrigeringar i juni - Inte sårbar
  • Samsung Galaxy Note 7 - Android 6.0.1 med säkerhetskorrigeringar för juli - Inte sårbar
  • Google Nexus 6 - Android 6.0.1 med säkerhetskorrigeringar för augusti - Inte sårbar
  • Google Nexus 6P - Android 7.0 med säkerhetskorrigeringar för augusti - Inte sårbar

Hittills är det alla enheter jag kunde få teamet att testa. Jag kunde inte hitta någon korrelation mellan säkerhetsuppdateringsversionen och utnyttjandet. Som du kan se från vår senaste diskussionen om Android-säkerhetsuppdateringar, många människor använder inte de senaste säkerhetskorrigeringarna i alla fall och är därför möjligen sårbara för detta utnyttjande och andra som beskrivs på Android säkerhetsbulletin.


Går vidare

Tapjacking-tjänsten beviljade överläggstillståndet

Vi uppmanar dig att själv testa detta utnyttjande på din enhet för att se om du är sårbar. Vi har sammanställt APK-filerna från källkoden länkad ovan (du kan göra det själv också) och har laddat upp dem till AndroidFileHost. För att testa utnyttjandet måste du installera både huvudapplikation för tapjacking såväl som dess hjälpartjänst. Kör sedan bara huvudprogrammet och klicka på "test"-knappen. Om en textruta flyter ovanpå tillståndsdialogrutan och när du klickar på "tillåt" dyker upp en lista över din enhets kontakter, då är din enhet sårbar för avtappning. Oroa dig inte för att den flytande textrutan inte helt täcker tillståndsdialogrutan, den här proof-of-concept-appen är inte avsedd att perfekt demonstrera hur man snyggt kapar en behörighetsdialogruta, utan snarare att bevisa att det verkligen är möjlig.

Vi hoppas att en korrigering införs som korrigerar detta utnyttjande på alla Marshmallow-enheter, och att OEM-tillverkare uppdaterar alla sina enheter till den senaste säkerhetskorrigeringen. Eftersom verkligheten är att det kommer att ta många månader för de flesta utlovade enheter att få Nougat, så det enda sättet för de flesta användare att hålla sig borta från skada är att antingen installera de senaste säkerhetskorrigeringarna eller ta behörigheter för övervakningsappar sig själva. Men med Googles beslut att automatiskt ge det potentiellt farliga SYSTEM_ALERT_WINDOW-tillståndet, många användare kör omedvetet appar som potentiellt kan kapa deras telefoner för att ge allt farligare behörigheter.