Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Android Security Features
Search
Dave Smith
November 09, 2016
Programming
4
690
Android Security Features
Overview of the core platform elements that make up the Android security model for applications.
Dave Smith
November 09, 2016
Tweet
Share
More Decks by Dave Smith
See All by Dave Smith
ConstraintLayout, Inside and Out
devunwired
21
1.7k
Digging Into Android System Services
devunwired
8
1.5k
Flattening Layouts with Constraints
devunwired
3
280
Hello, Brillo: ELC Edition
devunwired
0
250
Mastering CoordinatorLayout Behaviors
devunwired
16
1.4k
Hello, Brillo
devunwired
1
2.1k
Google Proximity Beacons Overview
devunwired
4
230
Proximity Beacons and the Nearby API
devunwired
1
1.9k
Getting Your Act Together with CoordinatorLayout
devunwired
7
480
Other Decks in Programming
See All in Programming
PipeCDのプラグイン化で目指すところ
warashi
1
280
チームで開発し事業を加速するための"良い"設計の考え方 @ サポーターズCoLab 2025-07-08
agatan
1
420
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
290
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
5
790
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
6
2.1k
プロダクト志向ってなんなんだろうね
righttouch
PRO
0
190
Team operations that are not burdened by SRE
kazatohiei
1
310
5つのアンチパターンから学ぶLT設計
narihara
1
170
テストから始めるAgentic Coding 〜Claude Codeと共に行うTDD〜 / Agentic Coding starts with testing
rkaga
12
4.5k
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
900
初学者でも今すぐできる、Claude Codeの生産性を10倍上げるTips
s4yuba
16
11k
チームのテスト力を総合的に鍛えて品質、スピード、レジリエンスを共立させる/Testing approach that improves quality, speed, and resilience
goyoki
5
880
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.5k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Gamification - CAS2011
davidbonilla
81
5.4k
Adopting Sorbet at Scale
ufuk
77
9.5k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
820
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Transcript
Android Security Features Dave Smith, PE @devunwired
App Code Sandbox Encryption Permissions
App Code
App Manifest Compiled Code Resources Signature Info Application Package (APK)
App Manifest Compiled Code Resources Signature Info Application Package (APK)
Authenticate Developer Identity Prevent APK Tampering
JAR Signer Hash Files Hash Hashes Sign w/ Private Key
APK Signature
JAR Signer APK Signature Hash Files Hash Hashes Sign w/
Private Key Hash 1MB Chunks Sign w/ Private Key Hash Hashes
Sandbox
Application Sandbox Process Isolation Unique App UID SELinux Domains
# 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
# 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
# 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
$ 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
Data Encryption + Verified Boot
Disk Encryption Encrypts All Writable Data No Passcode Required /data
dm-crypt Android
Verified Boot Halt Boot on Error Protect Runtime Reads /system
dm-verity Android Hash System Blocks
Permissions
<manifest package="com.android.browser"> … <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> …
</manifest>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android"> ... <permission android:name="android.permission.INTERNET" android:description="@string/permdesc_createNetworkSockets" android:label="@string/permlab_createNetworkSockets" android:protectionLevel="normal"
/> ... <permission android:name="android.permission.ACCESS_FINE_LOCATION" android:permissionGroup="android.permission-group.LOCATION" android:label="@string/permlab_accessFineLocation" android:description="@string/permdesc_accessFineLocation" android:protectionLevel="dangerous" /> ... </manifest> frameworks/base/core/res/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android"> ... <permission android:name="android.permission.INTERNET" android:description="@string/permdesc_createNetworkSockets" android:label="@string/permlab_createNetworkSockets" android:protectionLevel="normal"
/> ... <permission android:name="android.permission.ACCESS_FINE_LOCATION" android:permissionGroup="android.permission-group.LOCATION" android:label="@string/permlab_accessFineLocation" android:description="@string/permdesc_accessFineLocation" android:protectionLevel="dangerous" /> ... </manifest> frameworks/base/core/res/AndroidManifest.xml
Permissions Enforcement Kernel Groups Binder IPC
<permissions> … <permission name="android.permission.INTERNET" > <group gid="inet" /> </permission> …
</permissions> … #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
# 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 ...
Application System Server Manager Service Binder IPC
Application System Server Manager Service Binder IPC Binder.getCallingUid() Binder.getCallingPid()
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"); } … } … }
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);
Protect code integrity Prohibit unauthorized access Preserve data integrity Provide
user control
@devunwired +DaveSmithDev milehighandroid.com wiresareobsolete.com