Preface |
|
vii | |
|
|
1 | (12) |
|
Application Security: Why You Should Care |
|
|
2 | (1) |
|
The Current State of Mobile Application Security on Android |
|
|
3 | (1) |
|
Security: Risk = Vulnerability + Threat + Consequences |
|
|
4 | (3) |
|
Evolution of Information Security: Why Applications Matter the Most |
|
|
7 | (1) |
|
Your Role: Protect the Data |
|
|
8 | (1) |
|
Secure Software Development Techniques |
|
|
9 | (1) |
|
Unique Characteristics of Android |
|
|
10 | (2) |
|
|
12 | (1) |
|
|
13 | (12) |
|
Introduction to the Android Architecture |
|
|
14 | (1) |
|
|
15 | (1) |
|
The Resulting Android Security Model |
|
|
15 | (1) |
|
Application Signing, Attribution, and Attestation |
|
|
16 | (2) |
|
|
18 | (3) |
|
Android Filesystem Isolation |
|
|
21 | (1) |
|
Android Preferences and Database Isolation |
|
|
22 | (2) |
|
Moving up the Layers to System API and Component Permissions |
|
|
24 | (1) |
|
3 Application Permissions |
|
|
25 | (12) |
|
Android Permission Basics |
|
|
27 | (2) |
|
Using Restricted System APIs and the User Experience |
|
|
29 | (3) |
|
|
32 | (5) |
|
4 Component Security and Permissions |
|
|
37 | (16) |
|
The Types of Android Components |
|
|
37 | (1) |
|
Intercomponent Signaling Using Intents |
|
|
38 | (3) |
|
Public and Private Components |
|
|
41 | (1) |
|
Imposing Restrictions on Access to Components |
|
|
42 | (9) |
|
|
42 | (1) |
|
|
42 | (2) |
|
Securing Content Providers |
|
|
44 | (5) |
|
Securing Broadcast Intents |
|
|
49 | (2) |
|
Putting It All Together: Securing Communications in a Multi-Tier App |
|
|
51 | (2) |
|
|
53 | (20) |
|
The Threats and Vulnerabilities Against Stored Data |
|
|
53 | (2) |
|
Vulnerabilities of Stored Data |
|
|
53 | (1) |
|
Threats to, and Mitigations for, Stored Data |
|
|
54 | (1) |
|
|
55 | (1) |
|
Cryptography Primer: Encryption |
|
|
56 | (2) |
|
|
56 | (1) |
|
Asymmetric Key Encryption |
|
|
57 | (1) |
|
Cryptography Primer: Hashing |
|
|
58 | (2) |
|
Cryptographic Practicalities |
|
|
60 | (3) |
|
Computational Infeasibility |
|
|
60 | (1) |
|
Algorithm Choice and Key Size |
|
|
61 | (1) |
|
Cipher Operation Modes, Initialization Vectors, and Salt |
|
|
61 | (1) |
|
Public Keys and Their Management |
|
|
62 | (1) |
|
Key Derivation and Management |
|
|
63 | (5) |
|
|
64 | (1) |
|
|
64 | (3) |
|
Encryption Without User-Supplied Key Derivation |
|
|
67 | (1) |
|
Practical Cryptography: Applying a Technique Against a Threat |
|
|
68 | (5) |
|
6 Securing Server Interactions |
|
|
73 | (22) |
|
Confidentiality and Authentication |
|
|
73 | (1) |
|
SSL/TLS: The Industry Standard |
|
|
74 | (2) |
|
Authentication of the Entities |
|
|
74 | (2) |
|
|
76 | (1) |
|
Protecting Data En Route to Public Services |
|
|
76 | (5) |
|
Introducing the Android SSL/TLS Environment |
|
|
77 | (1) |
|
|
78 | (2) |
|
Handling SSL/TLS Connection Errors |
|
|
80 | (1) |
|
Protecting Data En Route to Private Services |
|
|
81 | (6) |
|
Using Only Specific Certificates for SSL/TLS |
|
|
81 | (4) |
|
One Step Further: Using Client-Side Authentication SSL/TLS |
|
|
85 | (2) |
|
Threats Against Devices Using Data in Transit |
|
|
87 | (3) |
|
Input Validation: The Central Tenant of Application Security |
|
|
90 | (1) |
|
|
90 | (1) |
|
|
90 | (1) |
|
Wrapping It Up: Input Validation |
|
|
91 | (1) |
|
Preventing Command Injection |
|
|
91 | (4) |
|
|
95 | |
|
|
95 | (2) |
|
|
95 | (1) |
|
The Principle of Least Privilege |
|
|
96 | (1) |
|
Use the Permissions System |
|
|
96 | (1) |
|
Android Is an Open Architecture |
|
|
96 | (1) |
|
Get the Cryptography Right |
|
|
96 | (1) |
|
|
97 | (1) |
|
|
97 | |