Tapjacking kom tilbake i Android Marshmallow, og ingen la merke til

Enkelte Marshmallow-enheter er utsatt for tapjacking, der en app legger tekst på toppen av en tillatelsesdialog for å lure brukeren.

Mens mange av oss spytter over den nylig utgitte Android Nougat for Nexus-enheter, er de aller fleste brukere fortsatt på Android Marshmallow. En utnyttelse som har blitt dokumentert siden i hvert fall midten av 2015 påvirker fortsatt mange moderne Android-enheter.

Ondsinnede applikasjoner er i stand til tapjack handlingene dine inn i gi dem en tillatelse du aldri har gitt eksplisitt. Her er hvordan utnyttelsen fungerer.


Tapjackingens retur

Tenk deg at du åpner Instagram og prøver å dele et bilde du nylig tok mens du var på ferie. Når du velger å bla gjennom galleriet ditt etter et bilde, ber Instagram deg om å gi det tillatelse til å få tilgang til lagringsplassen din. Men når du trykker "ja" blir du møtt med en feilmelding.

Du kan ikke gi lagringstillatelsen for Instagram fordi du har et aktivt skjermoverlegg aktivert dette dekselet, en av de mange applikasjonene som farger skjermen din slik at du kan bruke telefonen om natten uten å blende deg selv. Dette er et tilfelle av Android-tillatelsessystemet

fungerer etter hensikten: For å gi et program en sensitiv tillatelse, må du deaktivere alle skjermoverlegg du har på enheten.

Marshmallow Permission Tapjacking. Hvis du trykker på «Tillat», vises alle kontaktene mine.

Apper som har muligheten til å tegne over skjermen din kan potensielt lure deg til å mate den med sensitive data. For eksempel kan et skjermoverlegg plassere et falskt passord på toppen av en ekte påloggingsskjerm for å samle inn passordene dine. En utnyttelse som dette kalles "tapjacking" og har dukket opp og blitt lappet på forskjellige Android-versjoner gjennom årene, med et av de verste eksemplene som varer til Android 4.0.3. Men nylig kom utnyttelsen tilbake med Android Marshmallows kjøretidstillatelsesmodell.

En utvikler ved navn Iwo Banaś opprettet en applikasjon demonstrerer utnyttelsen. Måten det fungerer på er ganske enkel - når en applikasjon viser en tillatelsesdialog, den ondsinnede applikasjonen du installerte vil vise et systemoverlegg for å dekke over tillatelsesdialogboksens tekstblokk med hvilken som helst tekst ønsker. En uvitende bruker som klikker "tillat" i tillatelsesdialogboksen vil bli lurt til å gi en tillatelse som de ble bedt om - men som forespørselen ble skjult for brukerens syn. En slik utnyttelse beseirer fullstendig formålet med Android Marshmallows tillatelsessystem, siden introduksjonen av den nye modellen skulle sikre at brukere bare ville ha tillatelser som de uttrykkelig samtykket til.

Nå vet jeg hva du tenker på. Hvis Android oppdaget et systemoverlegg og forhindret meg i å gi Instagram lagringstillatelser, ville det ikke forhindre at denne utnyttelsen skjer? Svaret er nei, i min testing ser det ut til at det på visse enheter ikke utløser sikkerhetsmekanismen ved å vise et tekstoverlegg på toppen av en tillatelsesdialog. Utvikleren av proof-of-concept tapjacking-applikasjonen sier at utnyttelsen er effektiv fordi den er avhengig av at brukeren installerer en sekundær ondsinnet applikasjon som retter seg mot API-nivå 22 og lavere (pre-Marshmallow). Dette skyldes det faktum at før Android Marshmallow, får alle applikasjoner tillatelser under installasjonen.

Ok, så hvis du er på Marshmallow, trenger du bare å unngå å installere apper du ikke stoler på som ber om tillatelse til å tegne et overlegg, ikke sant? Hvis Androids tillatelsesmodell fungerte som opprinnelig lagt ut, ville du ha rett. Men siden oppdagelsen av denne utnyttelsen, til og med apper som er målrettet mot API-nivå 23 (Marshmallow) som ber om overleggstillatelse er en potensiell risiko.


Et gap i tillatelsesmodellen?

Typiske apper som bruker overlegg. Via: Medium

Hvis du er en av mange millioner mennesker som bruker Facebook Messenger for å chatte med vennene dine, da har du kommet over en av Androids beste funksjoner – muligheten for apper å tegne på toppen av andre skjermer. Hvor kult er det ikke at du kan ha en boble med din favoritt Facebook-gruppechat og følge brukeren på toppen av en hvilken som helst applikasjon de åpner? Selv om Facebooks Messenger brakte ideen om "flytende apper" inn i mainstream, har konseptet eksistert en stund i Android. Applikasjoner har vært i stand til å lage overlegg på toppen av appene dine i noen tid, takket være eksistensen av TYPE_SYSTEM_OVERLAY i Androids WindowManager.

"Tegn over andre apper" Tillatelsesmeny

Før Android Marshmallow, må applikasjoner be om en tillatelse kalt SYSTEM_ALERT_WINDOW under installasjonen før den kunne vise overlegg på toppen av skjermen. Men dette endret seg med introduksjonen av 6.0s granulære kjøretidstillatelsesmodell. Brukere må nå gi tillatelser til applikasjoner når de faktisk kjører appen, noe som forhåpentligvis vil stimulere gjennomsnittet brukeren til å beskytte sine egne private data fra applikasjoner som mistenkelig ber om tilsynelatende funksjonelt urelaterte tillatelser.

SYSTEM_ALERT_WINDOW er imidlertid ikke som andre tillatelser. Utviklere kan ikke vise en dialogboks for å be om at tillatelsen skal gis av sluttbrukeren, som de fleste andre tillatelser på alle apper som er målrettet mot Marshmallow. I stedet må du manuelt navigere til innstillingsskjermen og aktivere tillatelsen selv. Selvfølgelig vil noen apper som Facebook Messenger hjelpe deg med prosessen.

Google krever dette av utviklere fordi de har ansett at tillatelsen er "spesielt sensitiv."

Spesielle tillatelser

Det er et par tillatelser som ikke oppfører seg som vanlige og farlige tillatelser. SYSTEM_ALERT_WINDOW og WRITE_SETTINGS er spesielt sensitive, så de fleste apper bør ikke bruke dem. Hvis en app trenger en av disse tillatelsene, må den deklarere tillatelsen i manifestet og sende en intensjon som ber om brukerens autorisasjon. Systemet reagerer på intensjonen ved å vise en detaljert administrasjonsskjerm til brukeren.

Gitt det vi vet ovenfor om tapjacking, er dette fornuftig. Men her er saken. Google følger ikke engang sine egne regler. Skjermbildene av Facebook Messenger som veileder deg gjennom prosessen med å gi den SYSTEM_ALERT_WINDOW-tillatelsen som jeg viste deg ovenfor? Det skjer bare hvis du installerer APK-en fra utenfor Google Play-butikken. Hvis du installerer en app fra Google Play Store, SYSTEM_ALERT_WINDOW-tillatelse gis automatisk.

Facebook Messengers manifestfil. Appen får automatisk overleggstillatelsen til tross for målretting mot API-nivå 23.

Google har ofret sikkerhet for enkelhets skyld

I lang tid før Android Marshmallow ble SYSTEM_ALERT_WINDOW ansett som en "farlig"tillatelse. Med Android Marshmallow 6.0 ble tillatelsen endret til signatur|system|appop som i utgangspunktet krevde at utviklere skulle lede brukeren til innstillingsskjermen for å gi tillatelsen. Men med Android versjon 6.0.1, SYSTEM_ALERT_WINDOW ble endret slik at Google Play Store kunne automatisk gi tillatelsenuten å varsle brukeren. Hvorfor Google gjorde denne endringen er uklart for oss. Google har ikke selv kommet ut og oppgitt hvorfor de gjorde denne endringen, noe som er spesielt rart med tanke på språket om SYSTEM_ALERT_WINDOW som fortsatt eksisterer på nettsidene deres.

Det er mulig det nok utviklere ble sinte ved de innledende endringene i SYSTEM_ALERT_WINDOW som krevde at brukere manuelt måtte gi tillatelsen som Google i det stille avviste og bare ga den til enhver applikasjon som ba om det. Men ved å gjøre det, har Google ofret sikkerhet for enkelhets skyld. Det er en grunn til at Google selv anså tillatelsen for å være farlig i det lengste, for det er den. Og eksistensen av tapjacking-utnyttelsen til Marshmallow-tillatelsen er nok bevis på de iboende farene ved automatisk å gi denne tillatelsen til enhver app.

Denne tapjacking-utnyttelsen har bare nylig blitt gjort oppmerksom på, selv om den har eksistert i mange måneder nå. I vår interne testing av enheter blant XDA Portal-teamet har vi bekreftet det utnyttelsen fungerer på mange moderne enheter som kjører Android Marshmallow. Her er en rask oversikt over enhetene vi testet på de nyeste tilgjengelige programvareversjonene for hver respektive enhet og hvorvidt tapjacking-utnyttelsen fungerer eller ikke. Enhetene merket med "Sårbar" er utsatt for tapjacking, mens enhetene merket "Ikke Sårbare" er i stand til å oppdage en app som viser overlegget og be om at du deaktiverer den før fortsetter.

  • Nextbit Robin - Android 6.0.1 med sikkerhetsoppdateringer fra juni - Sårbar
  • Moto X Pure - Android 6.0 med sikkerhetsoppdateringer fra mai - Sårbar
  • Honor 8 - Android 6.0.1 med sikkerhetsoppdateringer for juli - Sårbar
  • Motorola G4 - Android 6.0.1 med sikkerhetsoppdateringer fra mai - Sårbar
  • OnePlus 2 - Android 6.0.1 med sikkerhetsoppdateringer fra juni - Ikke sårbar
  • Samsung Galaxy Note 7 - Android 6.0.1 med sikkerhetsoppdateringer fra juli - Ikke sårbar
  • Google Nexus 6 - Android 6.0.1 med sikkerhetsoppdateringer for august - Ikke sårbar
  • Google Nexus 6P - Android 7.0 med sikkerhetsoppdateringer fra august - Ikke sårbar

Så langt er det alle enhetene jeg klarte å få teamet til å teste. Jeg kunne ikke finne noen sammenheng mellom sikkerhetsoppdateringsversjonen og utnyttelsen. Som du kan se fra vår siste diskusjon om Android-sikkerhetsoppdateringer, mange mennesker kjører ikke på de nyeste sikkerhetsoppdateringene uansett, og er derfor muligens sårbare for denne utnyttelsen og andre som er beskrevet på Android sikkerhetsbulletin.


Går videre

Tapjacking-tjenesten har gitt overleggstillatelsen

Vi oppfordrer deg til å teste denne utnyttelsen på enheten din selv for å se om du er sårbar. Vi har samlet APK-ene fra kildekoden lenket ovenfor (du kan gjøre det selv også) og har lastet dem opp til AndroidFileHost. For å teste utnyttelsen, må du installere både hovedapplikasjon for tapjacking så vel som dens hjelpetjeneste. Deretter er det bare å kjøre hovedprogrammet og klikke på "test"-knappen. Hvis en tekstboks flyter på toppen av tillatelsesdialogen og når du klikker "tillat" vises en liste over enhetens kontakter, er enheten din sårbar for tapjacking. Ikke bekymre deg for at den flytende tekstboksen ikke helt dekker tillatelsesdialogen, denne proof-of-concept-appen er ikke ment å perfekt demonstrere hvordan man pent kaprer en tillatelsesdialog, men snarere å bevise at det faktisk er mulig.

Vi håper at en rettelse blir introdusert som retter denne utnyttelsen på alle Marshmallow-enheter, og at OEM-er oppdaterer alle enhetene sine til den nyeste sikkerhetsoppdateringen. Fordi realiteten er at det vil ta mange måneder før de fleste lovede enheter får Nougat, så den eneste måten for de fleste brukere for å holde seg unna skade er å enten installere de nyeste sikkerhetsoppdateringene eller ta tillatelser for overvåkingsapper dem selv. Men med Googles beslutning om å automatisk gi den potensielt farlige SYSTEM_ALERT_WINDOW-tillatelsen, er det mange brukere kjører ubevisst apper som potensielt kan kapre telefonene deres for å gi mer og mer farlig tillatelser.