Slide 1

Slide 1 text

Android Security Features Dave Smith, PE @devunwired

Slide 2

Slide 2 text

App Code Sandbox Encryption Permissions

Slide 3

Slide 3 text

App Code

Slide 4

Slide 4 text

App Manifest Compiled Code Resources Signature Info Application Package (APK)

Slide 5

Slide 5 text

App Manifest Compiled Code Resources Signature Info Application Package (APK) Authenticate Developer Identity Prevent APK Tampering

Slide 6

Slide 6 text

JAR Signer Hash Files Hash Hashes Sign w/ Private Key APK Signature

Slide 7

Slide 7 text

JAR Signer APK Signature Hash Files Hash Hashes Sign w/ Private Key Hash 1MB Chunks Sign w/ Private Key Hash Hashes

Slide 8

Slide 8 text

Sandbox

Slide 9

Slide 9 text

Application Sandbox Process Isolation Unique App UID SELinux Domains

Slide 10

Slide 10 text

# ps USER PID PPID ... NAME ... system 1723 1240 ... com.android.settings u0_a10 1803 1240 ... android.ext.services u0_a32 1824 1240 ... com.android.deskclock u0_a1 1896 1240 ... android.process.acore u0_a55 1914 1240 ... com.android.printspooler u0_a13 1942 1240 ... com.android.launcher3 system 1974 1240 ... com.android.keychain u0_a8 2000 1240 ... android.process.media u0_a26 2064 1240 ... com.android.calendar u0_a66 2096 1240 ... com.android.quicksearchbox u0_a67 2123 1240 ... com.android.messaging u0_a6 2189 1240 ... com.android.dialer u0_a35 2209 1240 ... com.android.email u0_a65 2229 1240 ... com.android.gallery3d

Slide 11

Slide 11 text

# ps USER PID PPID ... NAME ... system 1723 1240 ... com.android.settings u0_a10 1803 1240 ... android.ext.services u0_a32 1824 1240 ... com.android.deskclock u0_a1 1896 1240 ... android.process.acore u0_a55 1914 1240 ... com.android.printspooler u0_a13 1942 1240 ... com.android.launcher3 system 1974 1240 ... com.android.keychain u0_a8 2000 1240 ... android.process.media u0_a26 2064 1240 ... com.android.calendar u0_a66 2096 1240 ... com.android.quicksearchbox u0_a67 2123 1240 ... com.android.messaging u0_a6 2189 1240 ... com.android.dialer u0_a35 2209 1240 ... com.android.email u0_a65 2229 1240 ... com.android.gallery3d

Slide 12

Slide 12 text

# cd /data/data/com.android.launcher3 # ls -l total 24 drwxrwx--x 2 u0_a13 u0_a13 4096 2016-09-15 22:23 cache drwxrwx--x 2 u0_a13 u0_a13 4096 2016-09-15 22:23 databases drwxrwx--x 2 u0_a13 u0_a13 4096 2016-11-01 22:13 shared_prefs # cd /data/data/ # ls -l ... drwxr-x--x 6 u0_a6 u0_a6 4096 2016-09-15 22:23 com.android.dialer drwxr-x--x 6 u0_a35 u0_a35 4096 2016-09-15 22:23 com.android.email drwxr-x--x 5 u0_a13 u0_a13 4096 2016-09-15 22:23 com.android.launcher3

Slide 13

Slide 13 text

$ ps -Z LABEL USER ... NAME ... u:r:system_app:s0 system ... com.android.settings u:r:platform_app:s0:c512,c768 u0_a10 ... android.ext.services u:r:untrusted_app:s0:c512,c768 u0_a32 ... com.android.deskclock u:r:priv_app:s0:c512,c768 u0_a1 ... android.process.acore u:r:untrusted_app:s0:c512,c768 u0_a55 ... com.android.printspooler u:r:priv_app:s0:c512,c768 u0_a13 ... com.android.launcher3 u:r:system_app:s0 system ... com.android.keychain u:r:priv_app:s0:c512,c768 u0_a8 ... android.process.media u:r:untrusted_app:s0:c512,c768 u0_a26 ... com.android.calendar u:r:untrusted_app:s0:c512,c768 u0_a66 ... com.android.quicksearchbox u:r:platform_app:s0:c512,c768 u0_a67 ... com.android.messaging u:r:priv_app:s0:c512,c768 u0_a6 ... com.android.dialer u:r:untrusted_app:s0:c512,c768 u0_a35 ... com.android.email u:r:untrusted_app:s0:c512,c768 u0_a65 ... com.android.gallery3d

Slide 14

Slide 14 text

Data Encryption + Verified Boot

Slide 15

Slide 15 text

Disk Encryption Encrypts All Writable Data No Passcode Required /data dm-crypt Android

Slide 16

Slide 16 text

Verified Boot Halt Boot on Error Protect Runtime Reads /system dm-verity Android Hash System Blocks

Slide 17

Slide 17 text

Permissions

Slide 18

Slide 18 text


 …
 
 …


Slide 19

Slide 19 text


 ... 
 
 ...
 
 ...
 frameworks/base/core/res/AndroidManifest.xml

Slide 20

Slide 20 text


 ... 
 
 ...
 
 ...
 frameworks/base/core/res/AndroidManifest.xml

Slide 21

Slide 21 text

Permissions Enforcement Kernel Groups Binder IPC

Slide 22

Slide 22 text


 …
 
 
 
 …
 …
 #define AID_INET 3003 /* can create AF_INET and AF_INET6 sockets */
 …
 static const struct android_id_info android_ids[] = {
 …
 { "inet", AID_INET, },
 …
 };
 … frameworks/base/data/etc/platform.xml system/core/include/private/android_filesystem_config.h

Slide 23

Slide 23 text

# ps | grep browser u0_a17 2276 1212 ... com.android.browser # cat /proc/2276/status Name: android.browser State: S (sleeping) Tgid: 2276 Pid: 2276 PPid: 1212 TracerPid: 0 Uid: 10017 10017 10017 10017 Gid: 10017 10017 10017 10017 FDSize: 256 Groups: 3003 9997 50017 ...

Slide 24

Slide 24 text

Application System Server Manager Service Binder IPC

Slide 25

Slide 25 text

Application System Server Manager Service Binder IPC Binder.getCallingUid() Binder.getCallingPid()

Slide 26

Slide 26 text

Vibrator vib = (Vibrator) getSystemService(VIBRATOR_SERVICE);
 vib.vibrate(500); public class VibratorService extends IVibratorService.Stub {
 …
 public void vibrate(int uid, String packageName, long milliseconds, IBinder token) {
 if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.VIBRATE)
 != PackageManager.PERMISSION_GRANTED) {
 throw new SecurityException("Requires VIBRATE permission");
 }
 …
 }
 …
 }

Slide 27

Slide 27 text

public class VibratorService extends IVibratorService.Stub {
 …
 public void vibrate(int uid, String packageName, long milliseconds, IBinder token) {
 if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.VIBRATE)
 != PackageManager.PERMISSION_GRANTED) {
 throw new SecurityException("Requires VIBRATE permission");
 }
 …
 }
 …
 } Vibrator vib = (Vibrator) getSystemService(VIBRATOR_SERVICE);
 vib.vibrate(500);

Slide 28

Slide 28 text

Protect code integrity Prohibit unauthorized access Preserve data integrity Provide user control

Slide 29

Slide 29 text

@devunwired +DaveSmithDev milehighandroid.com wiresareobsolete.com