Andreas Bauer and Jan-Christoph Küster
RV 2015
MonitorMe
MonitorMe
(Requires root and Linux kernel with kprobes)Platform-centric | |
---|---|
What they modify | Android platform components:
|
Strengths |
|
Weaknesses |
|
Example tools |
|
App-centric | |
---|---|
What they modify | Only apps, e.g.:
|
Strengths |
|
Weaknesses |
|
Example tools |
|
Interface | # of events |
---|---|
IMountService | 1164 |
android.accessibilityservice.IAccessibilityServiceConnection | 223 |
android.accounts.IAccountManager | 727 |
android.app.IActivityContainer | 118 |
android.app.IActivityManager | 88940 |
android.app.IAlarmManager | 1974 |
android.app.IApplicationThread | 60211 |
android.app.INotificationManager | 429 |
android.app.ISearchManager | 8 |
android.app.IUiModeManager | 117 |
android.app.admin.IDevicePolicyManager | 14 |
android.app.backup.IBackupManager | 8 |
android.bluetooth.IBluetooth | 42 |
android.bluetooth.IBluetoothA2dp | 1 |
android.bluetooth.IBluetoothHeadset | 1 |
android.bluetooth.IBluetoothManager | 17 |
android.content.IBulkCursor | 8632 |
android.content.IClipboard | 2 |
android.content.IContentProvider | 12941 |
android.content.IContentService | 10483 |
android.content.ISyncContext | 19 |
android.content.pm.IPackageManager | 15996 |
android.database.IContentObserver | 87 |
android.drm.IDrm | 42 |
android.gui.DisplayEventConnection | 38724 |
android.gui.IProducerListener | 156 |
android.gui.SensorEventConnection | 1151 |
android.gui.SensorServer | 399 |
android.hardware.ICamera | 50 |
android.hardware.ICameraService | 48 |
android.hardware.display.IDisplayManager | 11369 |
android.hardware.input.IInputManager | 248 |
android.location.ILocationManager | 507 |
android.media.IAudioFlinger | 478 |
android.media.IAudioPolicyService | 34837 |
android.media.IAudioService | 68 |
android.media.IAudioTrack | 456 |
android.media.IMediaCodecList | 1463 |
android.media.IMediaMetadataRetriever | 2092 |
android.media.IMediaPlayer | 850 |
android.media.IMediaPlayerService | 417 |
android.media.IMediaRouterService | 35 |
android.media.session.ISession | 273 |
android.media.session.ISessionManager | 36 |
android.net.IConnectivityManager | 14195 |
android.net.INetworkStatsService | 91 |
android.net.wifi.IWifiManager | 1042 |
android.nfc.INfcAdapter | 7 |
android.os.IMessenger | 113 |
android.os.IPowerManager | 2620 |
android.os.IServiceManager | 43057 |
android.os.IUserManager | 344 |
android.os.IVibratorService | 50 |
android.ui.IGraphicBufferAlloc | 57 |
android.ui.ISurfaceComposer | 165 |
android.utils.IMemory | 115 |
android.utils.IMemoryHeap | 5 |
android.view.IAssetAtlas | 198 |
android.view.IWindowManager | 17710 |
android.view.IWindowSession | 2930 |
android.view.accessibility.IAccessibilityInteractionConnectionCallback | 1 |
android.view.accessibility.IAccessibilityManager | 20611 |
android.webkit.IWebViewUpdateService | 71 |
com.android.internal.app.IAppOpsService | 744 |
com.android.internal.appwidget.IAppWidgetService | 365 |
com.android.internal.os.IResultReceiver | 3 |
com.android.internal.telecom.ITelecomService | 34722 |
com.android.internal.telephony.IPhoneSubInfo | 225 |
com.android.internal.telephony.ISms | 1 |
com.android.internal.telephony.ISub | 2861 |
com.android.internal.telephony.ITelephony | 480 |
com.android.internal.telephony.ITelephonyRegistry | 22 |
com.android.internal.textservice.ISpellCheckerSession | 15 |
com.android.internal.textservice.ISpellCheckerSessionListener | 11 |
com.android.internal.textservice.ITextServicesManager | 264 |
com.android.internal.view.IInputContext | 2121 |
com.android.internal.view.IInputContextCallback | 262 |
com.android.internal.view.IInputMethodManager | 1419 |
com.android.internal.view.IInputMethodSession | 686 |
com.android.internal.view.IInputSessionCallback | 86 |
com.android.vending.billing.IInAppBillingService | 64 |
com.facebook.fbservice.observer.IBlueServiceObserver | 2 |
com.facebook.fbservice.service.IBlueService | 2 |
com.facebook.fbservice.service.ICompletionHandler | 2 |
com.google.android.auth.IAuthManagerService | 35 |
com.google.android.finsky.services.IMarketCatalogService | 1 |
com.google.android.gms.ads.identifier.internal.IAdvertisingIdService | 650 |
com.google.android.gms.ads.internal.gservice.IGservicesValueService | 10 |
com.google.android.gms.ads.internal.request.IAdRequestService | 23 |
com.google.android.gms.analytics.internal.IAnalyticsService | 129 |
com.google.android.gms.appdatasearch.internal.IAppDataSearch | 153 |
com.google.android.gms.clearcut.internal.IClearcutLoggerService | 196 |
com.google.android.gms.common.internal.IGmsServiceBroker | 373 |
com.google.android.gms.fitness.internal.IGoogleFitnessService | 14 |
com.google.android.gms.http.IGoogleHttpService | 466 |
com.google.android.gms.location.internal.IGoogleLocationManagerService | 863 |
com.google.android.gms.location.reporting.internal.IReportingService | 25 |
com.google.android.gms.maps.auth.IApiTokenService | 2 |
com.google.android.gms.mdm.internal.INetworkQualityService | 16 |
com.google.android.gms.people.internal.IPeopleService | 17 |
com.google.android.music.net.IDownloadabilityChangeListener | 1 |
com.google.android.music.net.INetworkChangeListener | 5 |
com.google.android.music.net.INetworkMonitor | 4 |
com.google.android.music.net.IStreamabilityChangeListener | 1 |
com.google.android.music.playback.IMusicPlaybackService | 87 |
com.google.android.music.preferences.IPreferenceChangeListener | 3 |
com.google.android.music.preferences.IPreferenceService | 5 |
com.google.android.music.store.IStoreService | 798 |
com.google.android.now.INowAuthService | 2 |
syscall | 1959 |
Information Stealing | Privilege Escalation |
Launching Malicious Payloads | Financial Charges |
$\psi_{16}$ | $\exists (intent, txt,\_):$system#scheduleReceiver@IApplicationThread. $regex(intent,$''.*BOOT_COMPLETED.*''$) \land regex(txt,$''.*< pkg> .*''$)$ |
$\psi_{17}$ | $\exists (intent, txt,\_):$system#scheduleReceiver@IApplicationThread. $regex(intent,$''.*SMS_RECEIVED.*''$) \land regex(txt,$''.*< pkg> .*''$)$ |
Refinement | Formulae | Pattern |
---|---|---|
$G \neg$$\psi_i$ | Absence globally | |
1st | $G ($$\psi_i$$\rightarrow \neg F $$\psi'$) | Absence after |
2nd | $G ($$\psi_i$$\land \neg $$\psi'$$\rightarrow (\neg $$\psi'$$W (\text{N/A@ISurfaceComposer} \land \neg $$\psi'$$)))$ | Existence between |
$\psi^{'}$ | $(\exists (\_): \text{sys_connect@syscall}.\ true) \lor (\exists (\_):\text{sendText@ISms}.\ true) \lor$ $ (\exists (x,intent,\_):\text{startActivity@IActivityManager}.\ regex(intent, \text{''action.SEND''})$ |
Helper formulae | |
---|---|
$\psi_1$ | getDeviceId@IPhoneSubInfo |
$\psi_2$ | getSubscriberId@IPhoneSubInfo |
$\psi_3$ | getIccSerialNumber@IPhoneSubInfo |
$\psi_4$ | getLine1Number@IPhoneSubInfo |
$\psi_5$ | getDeviceSvn@IPhoneSubInfo |
$\psi_6$ | $\exists (uri,\_):\text{QUERY@IContentProvider}.\ regex(uri,$''.*calls.*''$)$ |
$\psi_7$ | $\exists (uri,\_):\text{QUERY@IContentProvider}.\ regex(uri,$''.*contacts.*''$)$ |
$\psi_8$ | $\exists (uri,\_):\text{QUERY@IContentProvider}.\ regex(uri,$''.*phones.*''$)$ |
$\psi_9$ | $\exists (uri,\_):\text{QUERY@IContentProvider}.\ regex(uri,$''.*bookmarks.*''$)$ |
$\psi_{10}$ | $\exists (uri,\_):\text{QUERY@IContentProvider}.\ regex(uri,$''.*preferapn.*''$)$ |
$\psi_{11}$ | $\exists (uri,\_):\text{QUERY@IContentProvider}.\ regex(uri,$''.*sms.*''$)$ |
$\psi_{12}$ | $(\exists (\_):$getInstalledPackages@IPackageManager$.\ true) \lor$ $(\exists (\_):$getInstalledApplications@IPackageManager $.\ true)$ |
$\psi_{13}$ | $\exists (args):$do_execv@syscall$.\ regex(args,$''.*logcat.*''$)$ |
$\psi_{14}$ | $(\exists (\_):$notifyCellLocation@ITelephonyRegistry$.\ true) \lor$ $(\exists x:$getLastKnownLocation@ILocationManager $.\ regex(x,$''.*gps.*''$)$ |
Families | Information stealing | Privelege Escalation | Launching Malicious Payload | Financial charges | ||
---|---|---|---|---|---|---|
ADRD | ✔✔✔ | |||||
AnserverBot | ✔✔✔✔✔✔✔ | ! | ||||
Asroot | ! | |||||
BaseBridge | ✔✔ | ! | ✔ | ! | ! | |
BeanBot | ! | ! | ||||
Bgserv | ✔✔✔✔ | ✔ | ! | |||
CoinPirate | ✔✔ | ! | ! | |||
CruseWin | ✔ | ! | ! | |||
DogWars | ! | |||||
DroidCoupon | ✔✔✔✔✔✔ | ! | ✔ | |||
DroidDeluxe | ! | |||||
DroidDream | ✔✔ | ! | ||||
DroidDreamLight | ||||||
DroidKungFu1 | ! | |||||
DroidKungFu2 | ✔ | |||||
DroidKungFu3 | ✔✔✔ | ! | ||||
DroidKungFu4 | ✔✔✔✔ | ✔ | ||||
DroidKungFuSapp | ✔ | ! | ||||
DroidKungFuUpdate | ✔✔✔✔ | |||||
Endofday | ✔ | ! | ||||
FakeNetflix | ||||||
FakePlayer | ✔ | |||||
GamblerSMS (H) | ✔ | ✔ | ||||
Geinimi | ✔✔✔✔ | ✔ | ✔ | ! | ! |
Families | Information stealing | Privelege Escalation | Launching Malicious Payload | Financial charges | ||
---|---|---|---|---|---|---|
GGTracker | ✔✔✔ | ✔ | ✔ | ! | ! | |
GingerMaster | ✔✔✔✔✔ | ! | ✔ | |||
GoldDream | ✔ | ! | ||||
Gone60 | ✔✔✔✔✔ | |||||
GPSSMSSpy (H) | ✔ | ! | ||||
HippoSMS | ✔✔ | ✔ | ✔ | ! | ||
Jifake | ✔ | |||||
jSMSHider | ✔✔✔ | ✔ | ! | ! | ||
KMin | ! | ! | ||||
LoveTrap | ✔ | ✔ | ✔ | ! | ! | |
NickyBot | ✔✔✔ | ✔ | ! | |||
NickySpy (H) | ✔' | ✔ | ✔ | |||
Pjapps | ✔ | ! | ! | |||
Plankton | ✔ | ✔ | ||||
RogueLemon | ✔✔✔ | ✔ | ! | ! | ||
RogueSPPush | ✔✔✔ | ! | ! | |||
SMSReplicator (H) | ✔ | ✔ | ✔ | |||
SndApps | ✔✔ | |||||
Spitmo (H) | ✔ | ✔ | ! | ✔ | ||
Tapsnake (H) | ||||||
Walkinwat | ✔✔✔ | ✔ | ||||
YZHC | ✔✔✔✔ | ✔ | ! | ! | ||
zHash | ✔✔✔✔✔✔✔ | ! | ||||
Zitmo | ✔ | |||||
Zsone (H) | ✔ | ✔ | ! |
Interface | Method | Android | Kprobes | DroidTracer | ||
---|---|---|---|---|---|---|
(in ms) | (in ms) | Overhead | (in ms) | Overhead | ||
IPhoneSubInfo | getDeviceId | 5309 $\pm$ 15 | 5517 $\pm$ 18 | 3.92% | 5811 $\pm$ 11 | 9.46% |
IPhoneSubInfo | getIccSerialNumber | 5346 $\pm$ 16 | 5524 $\pm$ 16 | 5817 $\pm$ 7 | 8.81% | |
LocationManager | getLastKnownLocation | 3516 $\pm$ 13 | 3562 $\pm$ 13 | 4126 $\pm$ 5 | 17.35% | |
ISms | sendText | 9166 $\pm$ 13 | 9396 $\pm$ 13 | 2.51% | 10216 $\pm$ 10 | 11.46% |
IPackageManager | getInstalledApplications | 15730 $\pm$ 204 | 15514 $\pm$ 202 | 15422 $\pm$ 172 | ||
IConnectivityManager | getAllNetworkInfo | 5769 $\pm$ 53 | 5841 $\pm$ 60 | 5671 $\pm$ 7 | ||
syscall | sys_open | 15360 $\pm$ 72 | 15531 $\pm$ 67 | 15455 $\pm$ 38 |
Device | Nexus S | Nexus 7 | Nexus 5 | |
---|---|---|---|---|
Android version | 2.3.6 | 4.3 | 5.0.1 | |
Events | Total | 102,545 | 107,977 | 449,429 |
Interfaces | Unique | 58 | 89 | 108 |
Methods | Unique | 804 | 378 | 474 |
Unmarshalled | 368 | 236 | 326 | |
Success rate | 45.77% | 62.43% | 68.78% | |
Events with arguments |
Total | 54,596 | 70,746 | 264,058 |
Unmarshalled (totally) | 43,318 | 67,866 | 227,708 | |
Success rate | 79.34% | 95.93% | 86.23% | |
Unmarshalled (partially) | 47,923 | 69,474 | 255,263 | |
Success rate | 87.78% | 98.20% | 96.67% |