Aurasium: Practical Policy Enforcement for Android Applications
Rubin Xu
University of Cambridge
Hassen Saidi
SRI International
Ross Anderson
University of Cambridge
USENIX Security Symposium 2012
Aurasium: Practical Policy Enforcement for Android Applications - - PowerPoint PPT Presentation
Aurasium: Practical Policy Enforcement for Android Applications Rubin Xu Hassen Saidi Ross Anderson University of SRI International University of Cambridge Cambridge USENIX Security Symposium 2012 Goal Address the multiple threats
University of Cambridge
SRI International
University of Cambridge
USENIX Security Symposium 2012
Most checked in remote end i.e. system services A few (Internet, Camera) checked in Kernel, as
Applica'on ¡Code ¡
Ac%vity ¡ Service ¡ Broadcast ¡Receiver ¡ Content ¡Provider ¡
Framework ¡Code ¡
Kernel ¡Boundary ¡ Process ¡Boundary ¡
com.android.demo. ¡app ¡ Binder (IPC)
Telephony ¡Manger ¡ Loca'on ¡Manger ¡ Ac'vity ¡Manager ¡ Package ¡Manager ¡ …… ¡
Framework ¡Code ¡
Socket Camera System ¡Services ¡
Permission Check Permission Check
Android ¡Run%me ¡ ¡ (Dalvik ¡VM) ¡
Quire SELinux TainDroid AppFence CRePE
Information flow Access control Call chain IPC
Repackage Apps to intercept all Interactions with the OS
Information flow Access control Call chain IPC and many more!
Java Source Code Application Resource .class files Classes.dex javac dx Compiled Resources AndroidManifest.xml Application Package (.apk) aapt Other Files Zip & Sign
Application Resources .smali files Classes.dex Compiled Resources Textual AndroidManifest.xml Application Package Insert Our Java Code Other Files Insert Metadata Insert Our Native Library
Secured Application apktool
Applica'on ¡Code ¡
Ac%vity ¡ Service ¡ Broadcast ¡Receiver ¡ Content ¡Provider ¡
Framework ¡Code ¡
com.android.demo.SecuredApp ¡ Kernel
Aurasium ¡
Applica'on ¡Code ¡
Framework ¡Code ¡-‑ ¡Java ¡
Kernel
Framework ¡Code ¡-‑ ¡Na%ve ¡(C++) ¡
Java Native Interface libdvm.so libandroid_runtime.so libbinder.so ……. libm.so libstdc++.so libc.so
Applica'on ¡Code ¡
Framework ¡-‑ ¡Java ¡ Framework ¡-‑ ¡Na%ve ¡
Java Native Interface Native Libraries
ApkMonitorActivity.onClick() HttpURLConnectionImpl.makeConnection() HttpConnection.<init>() Socket.connect() PlainSocketImpl.connect() OSNetworkSystem.connect() OSNetworkSystem_connect() @ libnativehelper.so connect() @ libc.so
Applica'on ¡Code ¡
Framework ¡-‑ ¡Java ¡ Framework ¡-‑ ¡Na%ve ¡
Java Native Interface Native Libraries
ApkMonitorActivity.onClick() SmsManager.sendTextMessage() Isms$Stub$Proxy.sendText() BinderProxy.transact() transact() @ libbinder.so ioctl() @ libc.so
Applica'on ¡Code ¡
Framework ¡Code ¡– ¡Na%ve ¡(C++) ¡ Framework ¡Code ¡-‑ ¡Java ¡
Java Native Interface libdvm.so libandroid_runtime.so libbinder.so ……. libm.so libstdc++.so libc.so
Monitoring Code
Detour
libbinder.so libc.so
Indirect memory reference Control flow transfer
How to Intercept
Key: Dynamically linked shared object file Essence: Redo dynamic linking with pointers to our
somelib.so libc.so
Monitoring Code
Java code cannot modify arbitrary memory Java code cannot issue syscall directly Attempts to load native code is monitored
dlopen()
Internet connections
connect()
IPC Binder communications
ioctl()
File system manipulations
write(), read()
Access to resources
Ioctl(), read, write()
Linux system calls
fork(), execvp()
In Android, signature = authorship
Application Resources .smali files Classes.dex Compiled Resources Textual AndroidManifest.xml Application Package Insert Our Java Code Other Files Insert Metadata Insert Our Native Library
Secured Application apktool
Detour libc calls Point to Detour Activity GUI & Policy
Repackaging:
3476/1258 succeed (99.6%/99.8%) Failure mode: apktool/baksmali assembly crashes
Device runs
Nexus S under Monkey – UI Exerciser in SDK Intercept calls from all of 3189 runnable application.