söndag 1 augusti 2010

Android-malware utan permissions

Anthony Lineberry, David Richardson och Tim Wyatt höll en grymt intressant presentation och demo om Android-säkerhet. Otroligt hur de kunde kringå alla begränsningar som egentligen ska finnas för appar.

Lite om Androids säkerhets- och processmodell
Varje Android-app har en AndroidManifest.xml som deklarerar
pakettillhörighet, komponenter och tillstånd (permissions) som appen behöver på mobilen.

En körande app är en aktivitet som ligger på aktivitetsstacken. Aktiviteten på toppen är den som kör, de andra är i pausläge.

En applikation kan starta andra appar som då körs i appens process. Anroparen har dock inte alltid tillgång till den startade aktivitetens data eller tillstånd.

När man laddar ner en app från Google Market så får man först reda på vilka tillstånd den kräver. På det viset kan användaren undvika skumma appar. Men om appen inte kräver några tillstånd så laddas den hem direkt. Det låter intressant – vad kan en attackerare göra med noll tillstånd?

En hel del!

Reboot utan tillstånd
En app utan tillstånd får inte anropa REBOOT. Men det går att tömma ut Androids minnesresurser och tvinga fram en ombootning. Genom att skapa osynliga views. Efter 2001 st views som alla skapar globala referenser så får telefonen en SIGSEGV och bootar om.

Starta automatiskt vid boot utan tillstånd
Applikationer får inte begära att de ska startas vid omstart av telefonen. Specifikt så krävs receive_boot_complete-tillstånd. Men det tillståndet kollas inte!

Starta efter installation utan tillstånd
Applikationer får allmänt inte starta automatiskt efter nedladdning. Därför förväntar sig inte användaren det utan kommer att tolka det som att Android OS:et ber om uppmärksamhet om något händer direkt efter att han/hon laddat ner en app.

Tänk dig att du installerar en app från Google Market som automatiskt startar en phising-attack som begär ditt lösenord. Det kan man åstadkomma genom att utnyttja hur Google Analytics används. Analytics ska nämligen få logga vad och hur du har laddat ner. Kolla Googles dokumentation, kopiera koden och peka ut din egen phising-app.

Internetaccess utan tillstånd
En applikation måste be om tillstånd för att få kommunicera med Internet. Så kan attackerarens app göra det utan tillstånd? Jajamen. Låt oss börja med uppladdning av data.

Appen har inte uppladdningstillstånd själv. Men det har webbläsaren och appen har rätt att öppna sidor via webbläsaren. Risken är dock att användaren upptäcker det och stänger av ("Ehh ... varför drogs webbläsaren igång och gick till den där skumma sidan?"). Så hur gör attackeraren? Jo, han/hon gör alla uppladdningar när telefonens skärm är släckt! Och så fort uppladdningen är klar så går webbläsaren vidare till exempelvis google.com så att det inte ser skumt ut när användaren startar skärmen igen.

Nedladdning då?

Ja, det går ju att hämta med webbläsaren. Alla filer lagras då på SD-kortet och där får appen läsa utan tillstånd. Men det skapar en massa notifieringar som användaren kommer se i en lista plus att det blir skumma filer som skräpar.

Istället utnyttjar Androids funktionalitet för att mappa specialprotokoll med appar. T ex så startar geo:-protkollet Google Maps direkt. Attackeraren kan deklarera och mappa sitt eget protokoll (android:scheme="nethack" adroid:host="data") och anger sen bara nethack: istället för http i URL:en. Voilà -- nedladdning som skickar data direkt till appen!

Inga kommentarer: