1[TOC] 2#Android Security Overview 3 4##Introduction 5 6Android is a modern mobile platform that was designed to be truly open. Android 7applications make use of advanced hardware and software, as well as local and 8served data, exposed through the platform to bring innovation and value to 9consumers. To protect that value, the platform must offer an application 10environment that ensures the security of users, data, applications, the device, 11and the network. 12 13Securing an open platform requires a robust security architecture and rigorous 14security programs. Android was designed with multi-layered security that 15provides the flexibility required for an open platform, while providing 16protection for all users of the platform. 17 18Android was designed with developers in mind. Security controls were designed 19to reduce the burden on developers. Security-savvy developers can easily work 20with and rely on flexible security controls. Developers less familiar with 21security will be protected by safe defaults. 22 23Android was designed with device users in mind. Users are provided visibility 24into how applications work, and control over those applications. This design 25includes the expectation that attackers would attempt to perform common 26attacks, such as social engineering attacks to convince device users to install 27malware, and attacks on third-party applications on Android. Android was 28designed to both reduce the probability of these attacks and greatly limit the 29impact of the attack in the event it was successful. 30 31This document outlines the goals of the Android security program, describes the 32fundamentals of the Android security architecture, and answers the most 33pertinent questions for system architects and security analysts. This document 34focuses on the security features of Android's core platform and does not 35discuss security issues that are unique to specific applications, such as those 36related to the browser or SMS application. Recommended best practices for 37building Android devices, deploying Android devices, or developing applications 38for Android are not the goal of this document and are provided elsewhere. 39 40# Background 41 42Android provides an open source platform and application environment for mobile 43devices. 44 45The main Android platform building blocks are: 46 47+ **Device Hardware**: Android runs on a wide range of hardware configurations 48including smart phones, tablets, and set-top-boxes. Android is 49processor-agnostic, but it does take advantage of some hardware-specific 50security capabilities such as ARM v6 eXecute-Never. 51 52+ **Android Operating System**: The core operating system is built on top of 53the Linux kernel. All device resources, like camera functions, GPS data, 54Bluetooth functions, telephony functions, network connections, etc. are 55accessed through the operating system. 56 57+ **Android Application Runtime**: Android applications are most often written 58in the Java programming language and run in the Dalvik virtual machine. 59However, many applications, including core Android services and applications 60are native applications or include native libraries. Both Dalvik and native 61applications run within the same security environment, contained within the 62Application Sandbox. Applications get a dedicated part of the filesystem in 63which they can write private data, including databases and raw files. 64 65Android applications extend the core Android operating system. There are two 66primary sources for applications: 67 68+ **Pre-Installed Applications**: Android includes a set of pre-installed 69applications including phone, email, calendar, web browser, and contacts. These 70function both as user applications and to provide key device capabilities that 71can be accessed by other applications. Pre-installed applications may be part 72of the open source Android platform, or they may be developed by an OEM for a 73specific device. 74 75+ **User-Installed Applications**: Android provides an open development 76environment supporting any third-party application. Google Play offers 77users hundreds of thousands of applications. 78 79Google provides a set of cloud-based services that are available to any 80compatible Android device. The primary services are: 81 82+ **Google Play**: Google Play is a collection of services that 83allow users to discover, install, and purchase applications from their Android 84device or the web. Google Play makes it easy for developers to reach Android 85users and potential customers. Google Play also provides community review, 86application [license 87verification](https://developer.android.com/guide/publishing/licensing.html), 88application security scanning, and other security services. 89 90+ **Android Updates**: The Android update service delivers new capabilities and 91security updates to Android devices, including updates through the web or over 92the air (OTA). 93 94+ **Application Services**: Frameworks that allow Android applications to use 95cloud capabilities such as ([backing 96up](https://developer.android.com/guide/topics/data/backup.html)) application 97data and settings and cloud-to-device messaging 98([C2DM](https://code.google.com/android/c2dm/index.html)) 99for push messaging. 100 101These services are not part of the Android Open Source Project and are out 102of scope for this document. But they are relevant to the security of most 103Android devices, so a related security document titled “Google Services for 104Android: Security Overview” is available. 105 106##Android Security Program Overview 107 108Early on in development, the core Android development team recognized that a 109robust security model was required to enable a vigorous ecosystem of 110applications and devices built on and around the Android platform and supported 111by cloud services. As a result, through its entire development lifecycle, 112Android has been subjected to a professional security program. The Android team 113has had the opportunity to observe how other mobile, desktop, and server platforms 114prevented and reacted to security issues and built a security 115program to address weak points observed in other offerings. 116 117The key components of the Android Security Program include: 118 119+ **Design Review**: The Android security process begins early in the 120development lifecycle with the creation of a rich and configurable security 121model and design. Each major feature of the platform is reviewed by engineering 122and security resources, with appropriate security controls integrated into the 123architecture of the system. 124+ **Penetration Testing and Code Review**: During the development of the 125platform, Android-created and open-source components are subject to vigorous 126security reviews. These reviews are performed by the Android Security Team, 127Google’s Information Security Engineering team, and independent security 128consultants. The goal of these reviews is to identify weaknesses and possible 129vulnerabilities well before the platform is open-sourced, and to simulate the 130types of analysis that will be performed by external security experts upon 131release. 132+ **Open Source and Community Review**: The Android Open Source Project enables 133broad security review by any interested party. Android also uses open source 134technologies that have undergone significant external security review, 135such as the Linux kernel. Google Play provides a forum for users and companies 136to provide information about specific applications directly to users. 137+ **Incident Response**: Even with all of these precautions, security issues 138may occur after shipping, which is why the Android project has created a 139comprehensive security response process. A full-time Android security team 140constantly monitors Android-specific and the general security community for 141discussion of potential vulnerabilities. Upon the discovery of legitimate 142issues, the Android team has a response process that enables the rapid 143mitigation of vulnerabilities to ensure that potential risk to all Android 144users is minimized. These cloud-supported responses can include updating the 145Android platform (over-the-air updates), removing applications from Google 146Play, and removing applications from devices in the field. 147 148##Android Platform Security Architecture 149 150Android seeks to be the most secure and usable operating system for mobile 151platforms by re-purposing traditional operating system security controls to: 152 153+ Protect user data 154+ Protect system resources (including the network) 155+ Provide application isolation 156 157To achieve these objectives, Android provides these key security features: 158 159+ Robust security at the OS level through the Linux kernel 160+ Mandatory application sandbox for all applications 161+ Secure interprocess communication 162+ Application signing 163+ Application-defined and user-granted permissions 164 165The sections below describe these and other security features of the Android 166platform. *Figure 1* summarizes the security components and considerations of 167the various levels of the Android software stack. Each component assumes that 168the components below are properly secured. With the exception of a small amount 169of Android OS code running as root, all code above the Linux Kernel is 170restricted by the Application Sandbox. 171 172 173 174*Figure 1: Android software stack.* 175 176#System and Kernel Level Security 177 178At the operating system level, the Android platform provides the security of 179the Linux kernel, as well as a secure inter-process communication (IPC) 180facility to enable secure communication between applications running in 181different processes. These security features at the OS level ensure that even 182native code is constrained by the Application Sandbox. Whether that code is 183the result of included application behavior or a exploitation of an application 184vulnerability, the system would prevent the rogue application from harming 185other applications, the Android system, or the device itself. 186 187##Linux Security 188 189The foundation of the Android platform is the Linux kernel. The Linux kernel 190itself has been in widespread use for years, and is used in millions of 191security-sensitive environments. Through its history of constantly being 192researched, attacked, and fixed by thousands of developers, Linux has become a 193stable and secure kernel trusted by many corporations and security 194professionals. 195 196As the base for a mobile computing environment, the Linux kernel provides 197Android with several key security features, including: 198 199+ A user-based permissions model 200+ Process isolation 201+ Extensible mechanism for secure IPC 202+ The ability to remove unnecessary and potentially insecure parts of the kernel 203 204As a multiuser operating system, a fundamental security objective of the Linux 205kernel is to isolate user resources from one another. The Linux security 206philosophy is to protect user resources from one another. Thus, Linux: 207 208+ Prevents user A from reading user B's files 209+ Ensures that user A does not exhaust user B's memory 210+ Ensures that user A does not exhaust user B's CPU resources 211+ Ensures that user A does not exhaust user B's devices (e.g. telephony, GPS, 212bluetooth) 213 214##The Application Sandbox 215 216The Android platform takes advantage of the Linux user-based protection as a 217means of identifying and isolating application resources. The Android system 218assigns a unique user ID (UID) to each Android application and runs it as that user 219in a separate process. This approach is different from other operating systems 220(including the traditional Linux configuration), where multiple applications 221run with the same user permissions. 222 223This sets up a kernel-level Application Sandbox. The kernel enforces security 224between applications and the system at the process level through standard Linux 225facilities, such as user and group IDs that are assigned to applications. By 226default, applications cannot interact with each other and applications have 227limited access to the operating system. If application A tries to do something 228malicious like read application B's data or dial the phone without permission 229(which is a separate application), then the operating system protects against 230this because application A does not have the appropriate user privileges. The 231sandbox is simple, auditable, and based on decades-old UNIX-style user 232separation of processes and file permissions. 233 234Since the Application Sandbox is in the kernel, this security model extends to 235native code and to operating system applications. All of the software above the 236kernel in *Figure 1*, including operating system libraries, application 237framework, application runtime, and all applications run within the Application 238Sandbox. On some platforms, developers are constrained to a specific 239development framework, set of APIs, or language in order to enforce security. 240On Android, there are no restrictions on how an application can be written that 241are required to enforce security; in this respect, native code is just as 242secure as interpreted code. 243 244In some operating systems, memory corruption errors generally lead to 245completely compromising the security of the device. This is not the case in 246Android due to all applications and their resources being sandboxed at the OS 247level. A memory corruption error will only allow arbitrary code execution in 248the context of that particular application, with the permissions established by 249the operating system. 250 251Like all security features, the Application Sandbox is not unbreakable. 252However, to break out of the Application Sandbox in a properly configured 253device, one must compromise the security of the the Linux kernel. 254 255##System Partition and Safe Mode 256 257The system partition contains Android's kernel as well as the operating system 258libraries, application runtime, application framework, and applications. This 259partition is set to read-only. When a user boots the device into Safe Mode, 260only core Android applications are available. This ensures that the user can 261boot their phone into an environment that is free of third-party software. 262 263##Filesystem Permissions 264 265In a UNIX-style environment, filesystem permissions ensure that one user cannot 266alter or read another user's files. In the case of Android, each application 267runs as its own user. Unless the developer explicitly exposes files to other 268applications, files created by one application cannot be read or altered by 269another application. 270 271##Cryptography 272 273Android provides a set of cryptographic APIs for use by applications. These 274include implementations of standard and commonly used cryptographic primitives 275such as AES, RSA, DSA, and SHA. Additionally, APIs are provided for higher level 276protocols such as SSL and HTTPS. 277 278Android 4.0 introduced the 279[KeyChain](http://developer.android.com/reference/android/security/KeyChain.html) 280class to allow applications to use the system credential storage for private 281keys and certificate chains. 282 283##Memory Management Security Enhancements 284 285Android includes many features that make common security issues harder to 286exploit. The Android SDK, compilers, and OS use tools to make common memory 287corruption issues significantly harder to exploit, including: 288 289**Android 1.5+** 290 291+ ProPolice to prevent stack buffer overruns (-fstack-protector) 292+ safe_iop to reduce integer overflows 293+ Extensions to OpenBSD dlmalloc to prevent double free() vulnerabilities and 294to prevent chunk consolidation attacks. Chunk consolidation attacks are a 295common way to exploit heap corruption. 296+ OpenBSD calloc to prevent integer overflows during memory allocation 297 298**Android 2.3+** 299 300+ Format string vulnerability protections (-Wformat-security -Werror=format-security) 301+ Hardware-based No eXecute (NX) to prevent code execution on the stack and heap 302+ Linux mmap_min_addr to mitigate null pointer dereference privilege 303escalation (further enhanced in Android 4.1) 304 305**Android 4.0+** 306 307+ Address Space Layout Randomization (ASLR) to randomize key locations in memory 308 309**Android 4.1+** 310 311+ PIE (Position Independent Executable) support 312+ Read-only relocations / immediate binding (-Wl,-z,relro -Wl,-z,now) 313+ dmesg_restrict enabled (avoid leaking kernel addresses) 314+ kptr_restrict enabled (avoid leaking kernel addresses) 315 316** Android 4.2+** 317 318+ FORTIFY_SOURCE for system code 319 320##Rooting of Devices 321 322By default, on Android only the kernel and a small subset of the core 323applications run with root permissions. Android does not prevent a user or 324application with root permissions from modifying the operating system, kernel, 325and any other application. In general, root has full access to all 326applications and all application data. Users that change the permissions on an 327Android device to grant root access to applications increase the security 328exposure to malicious applications and potential application flaws. 329 330The ability to modify an Android device they own is important to developers 331working with the Android platform. On many Android devices users have the 332ability to unlock the bootloader in order to allow installation of an alternate 333operating system. These alternate operating systems may allow an owner to gain 334root access for purposes of debugging applications and system components or to 335access features not presented to applications by Android APIs. 336 337On some devices, a person with physical control of a device and a USB cable is 338able to install a new operating system that provides root privileges to the 339user. To protect any existing user data from compromise the bootloader unlock 340mechanism requires that the bootloader erase any existing user data as part of 341the unlock step. Root access gained via exploiting a kernel bug or security 342hole can bypass this protection. 343 344Encrypting data with a key stored on-device does not protect the application 345data from root users. Applications can add a layer of data protection using 346encryption with a key stored off-device, such as on a server or a user 347password. This approach can provide temporary protection while the key is not 348present, but at some point the key must be provided to the application and it 349then becomes accessible to root users. 350 351A more robust approach to protecting data from root users is through the use of 352hardware solutions. OEMs may choose to implement hardware solutions that limit 353access to specific types of content such as DRM for video playback, or the 354NFC-related trusted storage for Google wallet. 355 356In the case of a lost or stolen device, full filesystem encryption on Android 357devices uses the device password to protect the encryption key, so modifying 358the bootloader or operating system is not sufficient to access user data 359without the user’s device password. 360 361#User Security Features 362 363##Filesystem Encryption 364 365Android 3.0 and later provides full filesystem encryption, so all user data can 366be encrypted in the kernel using the dmcrypt implementation of AES128 with CBC 367and ESSIV:SHA256. The encryption key is protected by AES128 using a key 368derived from the user password, preventing unauthorized access to stored data 369without the user device password. To provide resistance against systematic 370password guessing attacks (e.g. “rainbow tables” or brute force), the 371password is combined with a random salt and hashed repeatedly with SHA1 using 372the standard PBKDF2 algorithm prior to being used to decrypt the filesystem 373key. To provide resistance against dictionary password guessing attacks, 374Android provides password complexity rules that can be set by the device 375administrator and enforced by the operating system. Filesystem encryption 376requires the use of a user password, pattern-based screen lock is not supported. 377 378More details on implementation of filesystem encryption are available at 379[https://source.android.com/tech/encryption/android_crypto_implementation.html](/ 380tech/encryption/android_crypto_implementation.html) 381 382##Password Protection 383 384Android can be configured to verify a user-supplied password prior to providing 385access to a device. In addition to preventing unauthorized use of the device, 386this password protects the cryptographic key for full filesystem encryption. 387 388Use of a password and/or password complexity rules can be required by a device 389administrator. 390 391##Device Administration 392 393Android 2.2 and later provide the Android Device Administration API, which 394provides device administration features at the system level. For example, the 395built-in Android Email application uses the APIs to improve Exchange support. 396Through the Email application, Exchange administrators can enforce password 397policies — including alphanumeric passwords or numeric PINs — across 398devices. Administrators can also remotely wipe (that is, restore factory 399defaults on) lost or stolen handsets. 400 401In addition to use in applications included with the Android system, these APIs 402are available to third-party providers of Device Management solutions. Details 403on the API are provided here: 404[https://developer.android.com/guide/topics/admin/device-admin.html](https://devel 405oper.android.com/guide/topics/admin/device-admin.html). 406 407##Credential Storage 408 409By default, Android includes a set of predefined Certificate Authorities (CAs) 410that are trusted for operations such as establishing SSL connections within the 411browser. In Android 4.0 and later, users can disable preinstalled CAs within 412the system settings. Users can also add trusted CAs or certificates to the 413system by importing them from USB storage. Android 4.1 and later adds the 414ability for OEMs to add hardware-backed KeyChain storage which binds 415private keys to the device on which they are stored. 416 417##Virtual Private Network 418 419Android provides a built-in VPN client with support for PPTP, L2TP, and IPsec VPNs. 420In addition, Android 4.0 introduced the 421[VpnService](http://developer.android.com/reference/android/net/VpnService.html) class 422to support third-party VPN solutions. Android 4.2 introduced the ability for a 423user to configure the VPN as "always on" to indicate that applications can connect 424to the network only through the connected VPN. 425 426#Android Application Security 427 428##Elements of Applications 429 430Android provides an open source platform and application environment for mobile 431devices. The core operating system is based on the Linux kernel. Android 432applications are most often written in the Java programming language and run in 433the Dalvik virtual machine. However, applications can also be written in native 434code. Applications are installed from a single file with the .apk file 435extension. 436 437The main Android application building blocks are: 438 439+ **AndroidManifest.xml**: The 440[AndroidManifest.xml](https://developer.android.com/guide/topics/manifest/manifes 441t-intro.html) file is the control file that tells the system what to do with 442all the top-level components (specifically activities, services, broadcast 443receivers, and content providers described below) in an application. This also 444specifies which permissions are required. 445 446+ **Activities**: An 447[Activity](https://developer.android.com/guide/topics/fundamentals/activities.htm 448l) is, generally, the code for a single, user-focused task. It usually 449includes displaying a UI to the user, but it does not have to -- some 450Activities never display UIs. Typically, one of the application's Activities 451is the entry point to an application. 452 453+ **Services**: A 454[Service](https://developer.android.com/guide/topics/fundamentals/services.html) 455is a body of code that runs in the background. It can run in its own process, 456or in the context of another application's process. Other components "bind" to 457a Service and invoke methods on it via remote procedure calls. An example of a 458Service is a media player: even when the user quits the media-selection UI, the 459user probably still intends for music to keep playing. A Service keeps the 460music going even when the UI has completed. 461 462+ **Broadcast Receiver**: A 463[BroadcastReceiver](https://developer.android.com/reference/android/content/Broad 464castReceiver.html) is an object that is instantiated when an IPC mechanism 465known as an 466[Intent](https://developer.android.com/reference/android/content/Intent.html) 467is issued by the operating system or another application. An application may 468register a receiver for the low battery message, for example, and change its 469behavior based on that information. 470 471 472##The Android Permission Model: Accessing Protected APIs 473 474All applications on Android run in an Application Sandbox, described earlier in 475this document. By default, an Android application can only access a limited 476range of system resources. The system manages Android application access to 477resources that, if used incorrectly or maliciously, could adversely impact the 478user experience, the network, or data on the device. 479 480These restrictions are implemented in a variety of different forms. Some 481capabilities are restricted by an intentional lack of APIs to the sensitive 482functionality (e.g. there is no Android API for directly manipulating the SIM 483card). In some instances, separation of roles provides a security measure, as 484with the per-application isolation of storage. In other instances, the 485sensitive APIs are intended for use by trusted applications and protected 486through a security mechanism known as Permissions. 487 488These protected APIs include: 489 490+ Camera functions 491+ Location data (GPS) 492+ Bluetooth functions 493+ Telephony functions 494+ SMS/MMS functions 495+ Network/data connections 496 497These resources are only accessible through the operating system. To make use 498of the protected APIs on the device, an application must define the 499capabilities it needs in its manifest. When preparing to install an 500application, the system displays a dialog to the user that indicates the 501permissions requested and asks whether to continue the installation. If the 502user continues with the installation, the system accepts that the user has 503granted all of the requested permissions. The user can not grant or deny 504individual permissions -- the user must grant or deny all of the requested 505permissions as a block. 506 507Once granted, the permissions are applied to the application as long as it is 508installed. To avoid user confusion, the system does not notify the user again 509of the permissions granted to the application, and applications that are 510included in the core operating system or bundled by an OEM do not request 511permissions from the user. Permissions are removed if an application is 512uninstalled, so a subsequent re-installation will again result in display of 513permissions. 514 515Within the device settings, users are able to view permissions for applications 516they have previously installed. Users can also turn off some functionality 517globally when they choose, such as disabling GPS, radio, or wi-fi. 518 519In the event that an application attempts to use a protected feature which has 520not been declared in the application's manifest, the permission failure will 521typically result in a security exception being thrown back to the application. 522Protected API permission checks are enforced at the lowest possible level to 523prevent circumvention. An example of the user messaging when an application is 524installed while requesting access to protected APIs is shown in *Figure 2*. 525 526The system default permissions are described at 527[https://developer.android.com/reference/android/Manifest.permission.html](https://developer.android.com/reference/android/Manifest.permission.html). 528Applications may declare their own permissions for other applications to use. 529Such permissions are not listed in the above location. 530 531When defining a permission a protectionLevel attribute tells the system how the 532user is to be informed of applications requiring the permission, or who is 533allowed to hold a permission. Details on creating and using application 534specific permissions are described at 535[https://developer.android.com/guide/topics/security/security.html](https://develo 536per.android.com/guide/topics/security/security.html). 537 538There are some device capabilities, such as the ability to send SMS broadcast 539intents, that are not available to third-party applications, but that may be 540used by applications pre-installed by the OEM. These permissions use the 541signatureOrSystem permission. 542 543##How Users Understand Third-Party Applications 544 545Android strives to make it clear to users when they are interacting with 546third-party applications and inform the user of the capabilities those 547applications have. Prior to installation of any application, the user is shown 548a clear message about the different permissions the application is requesting. 549After install, the user is not prompted again to confirm any permissions. 550 551There are many reasons to show permissions immediately prior to installation 552time. This is when user is actively reviewing information about the 553application, developer, and functionality to determine whether it matches their 554needs and expectations. It is also important that they have not yet 555established a mental or financial commitment to the app, and can easily compare 556the application to other alternative applications. 557 558Some other platforms use a different approach to user notification, requesting 559permission at the start of each session or while applications are in use. The 560vision of Android is to have users switching seamlessly between applications at 561will. Providing confirmations each time would slow down the user and prevent 562Android from delivering a great user experience. Having the user review 563permissions at install time gives the user the option to not install the 564application if they feel uncomfortable. 565 566Also, many user interface studies have shown that over-prompting the user 567causes the user to start saying "OK" to any dialog that is shown. One of 568Android's security goals is to effectively convey important security 569information to the user, which cannot be done using dialogs that the user will 570be trained to ignore. By presenting the important information once, and only 571when it is important, the user is more likely to think about what they are 572agreeing to. 573 574Some platforms choose not to show any information at all about application 575functionality. That approach prevents users from easily understanding and 576discussing application capabilities. While it is not possible for all users to 577always make fully informed decisions, the Android permissions model makes 578information about applications easily accessible to a wide range of users. For 579example, unexpected permissions requests can prompt more sophisticated users to 580ask critical questions about application functionality and share their concerns 581in places such as [Google Play](htts://play.google.com) where they 582are visible to all users. 583 584<table> 585<tr> 586<td><strong>Permissions at Application Install -- Google Maps</strong></td> 587<td><strong>Permissions of an Installed Application -- gMail</strong></td> 588</tr> 589<tr> 590<td> 591<img alt="Permissions at Application Install -- Google Maps" width=250 592src="images/image_install.png"/> 593</td> 594<td> 595<img alt="Permissions of an Installed Application -- gMail" width=250 596src="images/image_gmail_installed.png"/> 597</td> 598</tr> 599</table> 600*Figure 2: Display of permissions for applications* 601 602##Interprocess Communication 603 604Processes can communicate using any of the traditional UNIX-type mechanisms. 605Examples include the filesystem, local sockets, or signals. However, the Linux 606permissions still apply. 607 608Android also provides new IPC mechanisms: 609 610+ **Binder**: A lightweight capability-based remote procedure call mechanism 611designed for high performance when performing in-process and cross-process 612calls. Binder is implemented using a custom Linux driver. See 613[https://developer.android.com/reference/android/os/Binder.html](https://developer 614.android.com/reference/android/os/Binder.html). 615 616+ **Services**: Services (discussed above) can provide interfaces directly 617accessible using binder. 618 619+ **Intents**: An Intent is a simple message object that represents an 620"intention" to do something. For example, if your application wants to display 621a web page, it expresses its "Intent" to view the URL by creating an Intent 622instance and handing it off to the system. The system locates some other piece 623of code (in this case, the Browser) that knows how to handle that Intent, and 624runs it. Intents can also be used to broadcast interesting events (such as a 625notification) system-wide. See 626[https://developer.android.com/reference/android/content/Intent.html](https://developer.android.com/reference/android/content/Intent.html). 627 628+ **ContentProviders**: A ContentProvider is a data storehouse that provides 629access to data on the device; the classic example is the ContentProvider that 630is used to access the user's list of contacts. An application can access data 631that other applications have exposed via a ContentProvider, and an application 632can also define its own ContentProviders to expose data of its own. See 633[https://developer.android.com/reference/android/content/ContentProvider.html](https://developer.android.com/reference/android/content/ContentProvider.html). 634 635While it is possible to implement IPC using other mechanisms such as network 636sockets or world-writable files, these are the recommended Android IPC 637frameworks. Android developers will be encouraged to use best practices around 638securing users' data and avoiding the introduction of security vulnerabilities. 639 640##Cost-Sensitive APIs 641 642A cost sensitive API is any function that might generate a cost for the user or 643the network. The Android platform has placed cost sensitive APIs in the list of 644protected APIs controlled by the OS. The user will have to grant explicit 645permission to third-party applications requesting use of cost sensitive APIs. 646These APIs include: 647 648+ Telephony 649+ SMS/MMS 650+ Network/Data 651+ In-App Billing 652+ NFC Access 653 654Android 4.2 adds further control on the use of SMS. Android will provide a 655notification if an application attempts to send SMS to a short code that uses 656premium services which might cause additional charges. The user can choose 657whether to allow the application to send the message or block it. 658 659##SIM Card Access 660 661Low level access to the SIM card is not available to third-party apps. The OS 662handles all communications with the SIM card including access to personal 663information (contacts) on the SIM card memory. Applications also cannot access 664AT commands, as these are managed exclusively by the Radio Interface Layer 665(RIL). The RIL provides no high level APIs for these commands. 666 667##Personal Information 668 669Android has placed APIs that provide access to user data into the set of 670protected APIs. With normal usage, Android devices will also accumulate user 671data within third-party applications installed by users. Applications that 672choose to share this information can use Android OS permission checks to 673protect the data from third-party applications. 674 675 677 678*Figure 3: Access to sensitive user data is only available through protected 679APIs* 680 681System content providers that are likely to contain personal or personally 682identifiable information such as contacts and calendar have been created with 683clearly identified permissions. This granularity provides the user with clear 684indication of the types of information that may be provided to the application. 685 During installation, a third-party application may request permission to 686access these resources. If permission is granted, the application can be 687installed and will have access to the data requested at any time when it is 688installed. 689 690Any applications which collect personal information will, by default, have that 691data restricted only to the specific application. If an application chooses to 692make the data available to other applications though IPC, the application 693granting access can apply permissions to the IPC mechanism that are enforced by 694the operating system. 695 696##Sensitive Data Input Devices 697 698Android devices frequently provide sensitive data input devices that allow 699applications to interact with the surrounding environment, such as camera, 700microphone or GPS. For a third-party application to access these devices, it 701must first be explicitly provided access by the user through the use of Android 702OS Permissions. Upon installation, the installer will prompt the user 703requesting permission to the sensor by name. 704 705If an application wants to know the user's location, the application requires a 706permission to access the user's location. Upon installation, the installer will 707prompt the user asking if the application can access the user's location. At 708any time, if the user does not want any application to access their location, 709then the user can run the "Settings" application, go to "Location & Security", 710and uncheck the "Use wireless networks" and "Enable GPS satellites". This will 711disable location based services for all applications on the user's device. 712 713##Device Metadata 714 715Android also strives to restrict access to data that is not intrinsically 716sensitive, but may indirectly reveal characteristics about the user, user 717preferences, and the manner in which they use a device. 718 719By default applications do not have access to operating system logs, 720browser history, phone number, or hardware / network identification 721information. If an application requests access to this information at install 722time, the installer will prompt the user asking if the application can access 723the information. If the user does not grant access, the application will not be 724installed. 725 726##Application Signing 727 728Code signing allows developers to identify the author of the application and to 729update their application without creating complicated interfaces and 730permissions. Every application that is run on the Android platform must be 731signed by the developer. Applications that attempt to install without being 732signed will rejected by either Google Play or the package installer on 733the Android device. 734 735On Google Play, application signing bridges the trust Google has with the 736developer and the trust the developer has with their application. Developers 737know their application is provided, unmodified to the Android device; and 738developers can be held accountable for behavior of their application. 739 740On Android, application signing is the first step to placing an application in 741its Application Sandbox. The signed application certificate defines which user 742id is associated with which application; different applications run under 743different user IDs. Application signing ensures that one application cannot 744access any other application except through well-defined IPC. 745 746When an application (APK file) is installed onto an Android device, the Package 747Manager verifies that the APK has been properly signed with the certificate 748included in that APK. If the certificate (or, more accurately, the public key 749in the certificate) matches the key used to sign any other APK on the device, 750the new APK has the option to specify in the manifest that it will share a UID 751with the other similarly-signed APKs. 752 753Applications can be signed by a third-party (OEM, operator, alternative market) 754or self-signed. Android provides code signing using self-signed certificates 755that developers can generate without external assistance or permission. 756Applications do not have to be signed by a central authority. Android currently 757does not perform CA verification for application certificates. 758 759Applications are also able to declare security permissions at the Signature 760protection level, restricting access only to applications signed with the same 761key while maintaining distinct UIDs and Application Sandboxes. A closer 762relationship with a shared Application Sandbox is allowed via the [shared UID 763feature](https://developer.android.com/guide/topics/manifest/manifest-element.htm 764l#uid) where two or more applications signed with same developer key can 765declare a shared UID in their manifest. 766 767##Application Verification 768 769Android 4.2 and later support application verification. Users can choose to 770enable “Verify Apps" and have applications evaluated by an application verifier 771prior to installation. App verification can alert the user if they try to 772install an app that might be harmful; if an application is especially bad, it 773 can block installation. 774 775 776##Digital Rights Management 777 778The Android platform provides an extensible DRM framework that lets 779applications manage rights-protected content according to the license 780constraints that are associated with the content. The DRM framework supports 781many DRM schemes; which DRM schemes a device supports is left to the device 782manufacturer. 783 784The [Android DRM 785framework](https://developer.android.com/reference/android/drm/package-summary.ht 786ml) is implemented in two architectural layers (see figure below): 787 788+ A DRM framework API, which is exposed to applications through the Android 789application framework and runs through the Dalvik VM for standard applications. 790 791+ A native code DRM manager, which implements the DRM framework and exposes an 792interface for DRM plug-ins (agents) to handle rights management and decryption 793for various DRM schemes 794 795 797 798*Figure 4: Architecture of Digital Rights Management on Android platform* 799 800#Android Updates 801 802Android provides system updates for both security and feature related purposes. 803 804There are two ways to update the code on most Android devices: over-the-air 805(OTA updates) or side-loaded updates. OTA updates can be rolled out over a 806defined time period or be pushed to all devices at once, depending on how the 807OEM and/or carrier would like to push the updates. Side-loaded updates can be 808provided from a central location for users to download as a zip file to their 809local desktop machine or directly to their handset. Once the update is copied 810or downloaded to the SD card on the device, Android will recognize the update, 811verify its integrity and authenticity, and automatically update the device. 812 813If a dangerous vulnerability is discovered internally or responsibly reported 814to Google or the Android Open Source Project, the Android security team will 815start the following process. 816 8171. The Android team will notify companies who have signed NDAs regarding the 818problem and begin discussing the solution. 8192. The owners of code will begin the fix. 8203. The Android team will fix Android-related security issues. 8214. When a patch is available, the fix is provided to the NDA companies. 8225. The Android team will publish the patch in the Android Open Source Project 8236. OEM/carrier will push an update to customers. 824 825The NDA is required to ensure that the security issue does not become public 826prior to availabilty of a fix and put users at risk. Many OHA members run their 827own code on Android devices such as the bootloader, wifi drivers, and the 828radio. Once the Android Security team is notified of a security issue in this 829partner code, they will consult with OHA partners to quickly find a fix for the 830problem at hand and similar problems. However, the OHA member who wrote the 831faulty code is ultimately responsible for fixing the problem. 832 833If a dangerous vulnerability is not responsibly disclosed (e.g., if it is 834posted to a public forum without warning), then Google and/or the Android Open 835Source Project will work as quickly as possible to create a patch. The patch 836will released to the public (and any partners) when the patch is tested and 837ready for use. 838 839At Google I/O 2011, many of the largest OHA partners committed to providing 840updates to devices for 18 months after initial shipment. This will provide 841users with access to the most recent Android features, as well as security 842updates. 843 844Any developer, Android user, or security researcher can notify the Android 845security team of potential security issues by sending email to 846security@android.com. If desired, communication can be encrypted using the 847Android security team PGP key available here: 848[https://developer.android.com/security_at_android_dot_com.txt](https://develope 849r.android.com/security_at_android_dot_com.txt). 850 851#Other Resources 852 853Information about the Android Open Source Project is available at 854[https://source.android.com](https://source.android.com). 855 856Information for Android application developers is here: 857[https://developer.android.com](https://developer.android.com). 858 859The Android Security team can be reached at 860[security@android.com](mailto:security@android.com). 861 862Security information exists throughout the Android Open Source and Developer 863Sites. A good place to start is here: 864[https://developer.android.com/guide/topics/security/security.html](https://develo 865per.android.com/guide/topics/security/security.html). 866 867A Security FAQ for developers is located here: 868[https://developer.android.com/resources/faq/security.html](https://developer.andr 869oid.com/resources/faq/security.html). 870 871A community resource for discussion about Android security exists here: 872[https://groups.google.com/forum/?fromgroups#!forum/android-security-discuss](https://groups.google.com/forum/?fromgroups#!forum/android-security-discuss). 873 874