Android security

Note: These lecture notes were slightly modified from the ones posted on the 6.858 course website from 2014.

Why this paper?

Threat model

CVE database

Overall plan

What does an Android application look like?

Activity: can draw on the screen, get user input, etc.

Intent: basic messaging primitive in Android.

Intent fields:

RPC to services

Networking -- accessing the Internet.

Why do we need a new app model? (Or, what's wrong with existing models?)

Android access control

How does Android's application model handle app interaction, user choosing app?

How does Android's application model handle app isolation?

What are per-app UIDs good for?

What's missing from UID isolation: access control to shared resources.

First, mechanism: how does Android control access to all of the above?

How does the reference monitor decide whether to allow an intent?

How does an application get permissions for a certain set of labels?

At one point, Android allowed users to set fine-grained permission choices.

Who defines permissions?

What do the three types of permission mean?

Why do this checking in the reference monitor, rather than in each app?

Who can register to receive intents?

Example:

  <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:scheme="http" android:host="web.mit.edu" />
  </intent-filter>

Controlling the distribution of broadcast intents.

How to authenticate the source of intents?

Can a sender rely on names to route intents to a specific component?

What happens if two apps define the same permission name?

If app names are not authenticated, why do applications need signatures?

How to give another app temporary permissions?

Where are apps stored?

How secure is the Android "platform"?

Other model for security in mobile phone apps: iOS/iPhone.

References