page.title=Application security
@jd:body

<!--
    Copyright 2014 The Android Open Source Project

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<div id="qv-wrapper">
  <div id="qv">
    <h2>In this document</h2>
    <ol id="auto-toc"></ol>
  </div>
</div>

<h2 id="elements-of-applications">Elements of Applications</h2>
<p>Android provides an open source platform and application environment for mobile
  devices. The core operating system is based on the Linux kernel. Android
  applications are most often written in the Java programming language and run in
  the Dalvik virtual machine. However, applications can also be written in native
  code. Applications are installed from a single file with the .apk file
  extension.</p>
<p>The main Android application building blocks are:</p>
<ul>
  <li>
    <p><strong>AndroidManifest.xml</strong>: The <a href="https://developer.android.com/guide/topics/manifest/manifes
t-intro.html">AndroidManifest.xml</a> file is the control file that tells the system what to do with
      all the top-level components (specifically activities, services, broadcast
      receivers, and content providers described below) in an application. This also
      specifies which permissions are required.</p>
  </li>
  <li>
    <p><strong>Activities</strong>: An <a href="https://developer.android.com/guide/topics/fundamentals/activities.htm
l">Activity</a> is, generally, the code for a single, user-focused task.  It usually
      includes displaying a UI to the user, but it does not have to -- some
      Activities never display UIs.  Typically, one of the application's Activities
      is the entry point to an application.</p>
  </li>
  <li>
    <p><strong>Services</strong>: A <a href="https://developer.android.com/guide/topics/fundamentals/services.html">Service</a> is a body of code that runs in the background. It can run in its own process,
      or in the context of another application's process. Other components "bind" to
      a Service and invoke methods on it via remote procedure calls. An example of a
      Service is a media player: even when the user quits the media-selection UI, the
      user probably still intends for music to keep playing. A Service keeps the
      music going even when the UI has completed.</p>
  </li>
  <li>
    <p><strong>Broadcast Receiver</strong>: A <a href="https://developer.android.com/reference/android/content/Broad
castReceiver.html">BroadcastReceiver</a> is an object that is instantiated when an IPC mechanism
      known as an <a href="https://developer.android.com/reference/android/content/Intent.html">Intent</a> is issued by the operating system or another application.  An application may
      register a receiver for the low battery message, for example, and change its
      behavior based on that information.</p>
  </li>
</ul>
<h2 id="the-android-permission-model-accessing-protected-apis">The Android Permission Model: Accessing Protected APIs</h2>
<p>All applications on Android run in an Application Sandbox, described earlier in this document.
  By default, an Android application can only access a limited range of system
  resources. The system manages Android application access to resources that, if
  used incorrectly or maliciously, could adversely impact the user experience,
  the network, or data on the device.</p>
<p>These restrictions are implemented in a variety of different forms.  Some
  capabilities are restricted by an intentional lack of APIs to the sensitive
  functionality (e.g. there is no Android API for directly manipulating the SIM
  card).  In some instances, separation of roles provides a security measure, as
  with the per-application isolation of storage. In other instances, the
  sensitive APIs are intended for use by trusted applications and protected
  through a security mechanism known as Permissions.</p>
<p>These protected APIs include:</p>
<ul>
  <li>Camera functions</li>
  <li>Location data (GPS)</li>
  <li>Bluetooth functions</li>
  <li>Telephony functions</li>
  <li>SMS/MMS functions</li>
  <li>Network/data connections</li>
</ul>
<p>These resources are only accessible through the operating system.  To make use
  of the protected APIs on the device, an application must define the
  capabilities it needs in its manifest.  When preparing to install an
  application, the system displays a dialog to the user that indicates the
  permissions requested and asks whether to continue the installation.  If the
  user continues with the installation, the system accepts that the user has
  granted all of the requested permissions. The user can not grant or deny
  individual permissions -- the user must grant or deny all of the requested
  permissions as a block.</p>
<p>Once granted, the permissions are applied to the application as long as it is
  installed.  To avoid user confusion, the system does not notify the user again
  of the permissions granted to the application, and applications that are
  included in the core operating system or bundled by an OEM do not request
  permissions from the user. Permissions are removed if an application is
  uninstalled, so a subsequent re-installation will again result in display of
  permissions.</p>
<p>Within the device settings, users are able to view permissions for applications
  they have previously installed. Users can also turn off some functionality
  globally when they choose, such as disabling GPS, radio, or wi-fi.</p>
<p>In the event that an application attempts to use a protected feature which has
  not been declared in the application's manifest, the permission failure will
  typically result in a security exception being thrown back to the application.
  Protected API permission checks are enforced at the lowest possible level to
  prevent circumvention. An example of the user messaging when an application is
  installed while requesting access to protected APIs is shown in <em>Figure 2</em>.</p>
<p>The system default permissions are described at <a href="https://developer.android.com/reference/android/Manifest.permission.html">https://developer.android.com/reference/android/Manifest.permission.html</a>.
  Applications may declare their own permissions for other applications to use.
  Such permissions are not listed in the above location.</p>
<p>When defining a permission a protectionLevel attribute tells the system how the
  user is to be informed of applications requiring the permission, or who is
  allowed to hold a permission. Details on creating and using application
  specific permissions are described at <a href="https://develo
per.android.com/guide/topics/security/security.html">https://developer.android.com/guide/topics/security/security.html</a>.</p>
<p>There are some device capabilities, such as the ability to send SMS broadcast
  intents, that are not available to third-party applications, but that may be
  used by applications pre-installed by the OEM. These permissions use the
  signatureOrSystem permission.</p>
<h2 id="how-users-understand-third-party-applications">How Users Understand Third-Party Applications</h2>
<p>Android strives to make it clear to users when they are interacting with
  third-party applications and inform the user of the capabilities those
  applications have.  Prior to installation of any application, the user is shown
  a clear message about the different permissions the application is requesting.
  After install, the user is not prompted again to confirm any permissions.</p>
<p>There are many reasons to show permissions immediately prior to installation
  time. This is when user is actively reviewing information about the
  application, developer, and functionality to determine whether it matches their
  needs and expectations.  It is also important that they have not yet
  established a mental or financial commitment to the app, and can easily compare
  the application to other alternative applications.</p>
<p>Some other platforms use a different approach to user notification, requesting
  permission at the start of each session or while applications are in use. The
  vision of Android is to have users switching seamlessly between applications at
  will. Providing confirmations each time would slow down the user and prevent
  Android from delivering a great user experience. Having the user review
  permissions at install time gives the user the option to not install the
  application if they feel uncomfortable.</p>
<p>Also, many user interface studies have shown that over-prompting the user
  causes the user to start saying "OK" to any dialog that is shown. One of
  Android's security goals is to effectively convey important security
  information to the user, which cannot be done using dialogs that the user will
  be trained to ignore. By presenting the important information once, and only
  when it is important, the user is more likely to think about what they are
  agreeing to.</p>
<p>Some platforms choose not to show any information at all about application
  functionality. That approach prevents users from easily understanding and
  discussing application capabilities. While it is not possible for all users to
  always make fully informed decisions, the Android permissions model makes
  information about applications easily accessible to a wide range of users.  For
  example, unexpected permissions requests can prompt more sophisticated users to
  ask critical questions about application functionality and share their concerns
  in places such as <a href="htts://play.google.com">Google Play</a> where they
  are visible to all users.</p>
<table>
  <tr>
    <td><strong>Permissions at Application Install -- Google Maps</strong></td>
    <td><strong>Permissions of an Installed Application -- Gmail</strong></td>
  </tr>
  <tr>
    <td><img alt="Permissions at Application Install -- Google Maps" width=250
src="../images/image_install.png" /></td>
    <td><img alt="Permissions of an Installed Application -- Gmail" width=250
src="../images/image_gmail_installed.png" id="figure1" /></td>
  </tr>
</table>
<p class="img-caption">
  <strong>Figure 1.</strong> Display of permissions for applications
</p>
<h2 id="interprocess-communication">Interprocess Communication</h2>
<p>Processes can communicate using any of the traditional UNIX-type mechanisms.
  Examples include the filesystem, local sockets, or signals. However, the Linux
  permissions still apply.</p>
<p>Android also provides new IPC mechanisms:</p>
<ul>
  <li>
    <p><strong>Binder</strong>: A lightweight capability-based remote procedure call mechanism
      designed for high performance when performing in-process and cross-process
      calls. Binder is implemented using a custom Linux driver. See <a href="https://developer
.android.com/reference/android/os/Binder.html">https://developer.android.com/reference/android/os/Binder.html</a>.</p>
  </li>
  <li>
    <p><strong>Services</strong>: Services (discussed above) can provide interfaces directly
      accessible using binder.</p>
  </li>
  <li>
    <p><strong>Intents</strong>: An Intent is a simple message object that represents an
      "intention" to do something. For example, if your application wants to display
      a web page, it expresses its "Intent" to view the URL by creating an Intent
      instance and handing it off to the system. The system locates some other piece
      of code (in this case, the Browser) that knows how to handle that Intent, and
      runs it. Intents can also be used to broadcast interesting events (such as a
      notification) system-wide. See
      [https://developer.android.com/reference/android/content/Intent.html](https://developer.android.com/reference/android/content/Intent.html.</p>
  </li>
  <li>
    <p><strong>ContentProviders</strong>: A ContentProvider is a data storehouse that provides
      access to data on the device; the classic example is the ContentProvider that
      is used to access the user's list of contacts. An application can access data
      that other applications have exposed via a ContentProvider, and an application
      can also define its own ContentProviders to expose data of its own. See <a href="https://developer.android.com/reference/android/content/ContentProvider.html">https://developer.android.com/reference/android/content/ContentProvider.html</a>.</p>
  </li>
</ul>
<p>While it is possible to implement IPC using other mechanisms such as network
  sockets or world-writable files, these are the recommended Android IPC
  frameworks. Android developers will be encouraged to use best practices around
  securing users' data and avoiding the introduction of security vulnerabilities.</p>
<h2 id="cost-sensitive-apis">Cost-Sensitive APIs</h2>
<p>A cost sensitive API is any function that might generate a cost for the user or
  the network. The Android platform has placed cost sensitive APIs in the list of
  protected APIs controlled by the OS. The user will have to grant explicit
  permission to third-party applications requesting use of cost sensitive APIs.
  These APIs include:</p>
<ul>
  <li>Telephony</li>
  <li>SMS/MMS</li>
  <li>Network/Data</li>
  <li>In-App Billing</li>
  <li>NFC Access</li>
</ul>
<p> Android 4.2 adds further control on the use of SMS. Android will provide a
  notification if an application attempts to send SMS to a short code that uses
  premium services which might cause additional charges.  The user can choose
  whether to allow the application to send the message or block it. </p>
<h2 id="sim-card-access">SIM Card Access</h2>
<p>Low level access to the SIM card is not available to third-party apps. The OS
  handles all communications with the SIM card including access to personal
  information (contacts) on the SIM card memory. Applications also cannot access
  AT commands, as these are managed exclusively by the Radio Interface Layer
  (RIL). The RIL provides no high level APIs for these commands.</p>
<h2 id="personal-information">Personal Information</h2>
<p>Android has placed APIs that provide access to user data into the set of
  protected APIs.  With normal usage, Android devices will also accumulate user
  data within third-party applications installed by users.   Applications that
  choose to share this information can use Android OS permission checks to
  protect the data from third-party applications.</p>
<img alt="Access to sensitive user data available only through protected
APIs" src="../images/permissions_check.png" id="figure2" />
<p class="img-caption">
  <strong>Figure 2.</strong> Access to sensitive user data is available only through protected APIs
</p>
<p>System content providers that are likely to contain personal or personally
  identifiable information such as contacts and calendar have been created with
  clearly identified permissions. This granularity provides the user with clear
  indication of the types of information that may be provided to the application.
  During installation, a third-party application may request permission to
  access these resources.  If permission is granted, the application can be
  installed and will have access to the data requested at any time when it is
  installed.</p>
<p>Any applications which collect personal information will, by default, have that
  data restricted only to the specific application.  If an application chooses to
  make the data available to other applications though IPC, the application
  granting access can apply permissions to the IPC mechanism that are enforced by
  the operating system.</p>
<h2 id="sensitive-data-input-devices">Sensitive Data Input Devices</h2>
<p>Android devices frequently provide sensitive data input devices that allow
  applications to interact with the surrounding environment, such as camera,
  microphone or GPS.  For a third-party application to access these devices, it
  must first be explicitly provided access by the user through the use of Android
  OS Permissions.  Upon installation, the installer will prompt the user
  requesting permission to the sensor by name.</p>
<p>If an application wants to know the user's location, the application requires a
  permission to access the user's location. Upon installation, the installer will
  prompt the user asking if the application can access the user's location. At
  any time, if the user does not want any application to access their location,
  then the user can run the "Settings" application, go to "Location &amp; Security",
  and uncheck the "Use wireless networks" and "Enable GPS satellites". This will
  disable location based services for all applications on the user's device.</p>
<h2 id="device-metadata">Device Metadata</h2>
<p>Android also strives to restrict access to data that is not intrinsically
  sensitive, but may indirectly reveal characteristics about the user, user
  preferences, and the manner in which they use a device.</p>
<p>By default applications do not have access to operating system logs,
  browser history, phone number, or hardware / network identification
  information.  If an application requests access to this information at install
  time, the installer will prompt the user asking if the application can access
  the information. If the user does not grant access, the application will not be
  installed.</p>
<h2 id="application-signing">Application Signing</h2>
<p>Code signing allows developers to identify the author of the application and to
  update their application without creating complicated interfaces and
  permissions. Every application that is run on the Android platform must be
  signed by the developer.  Applications that attempt to install without being
  signed will rejected by either Google Play or the package installer on
  the Android device.</p>
<p>On Google Play, application signing bridges the trust Google has with the
  developer and the trust the developer has with their application.  Developers
  know their application is provided, unmodified to the Android device; and
  developers can be held accountable for behavior of their application.</p>
<p>On Android, application signing is the first step to placing an application in
  its Application Sandbox. The signed application certificate defines which user
  id is associated with which application; different applications run under
  different user IDs. Application signing ensures that one application cannot
  access any other application except through well-defined IPC.</p>
<p>When an application (APK file) is installed onto an Android device, the Package
  Manager verifies that the APK has been properly signed with the certificate
  included in that APK.  If the certificate (or, more accurately, the public key
  in the certificate) matches the key used to sign any other APK on the device,
  the new APK has the option to specify in the manifest that it will share a UID
  with the other similarly-signed APKs.</p>
<p>Applications can be signed by a third-party (OEM, operator, alternative market)
  or self-signed. Android provides code signing using self-signed certificates
  that developers can generate without external assistance or permission.
  Applications do not have to be signed by a central authority. Android currently
  does not perform CA verification for application certificates.</p>
<p>Applications are also able to declare security permissions at the Signature
  protection level, restricting access only to applications signed with the same
  key while maintaining distinct UIDs and Application Sandboxes. A closer
  relationship with a shared Application Sandbox is allowed via the <a href="https://developer.android.com/guide/topics/manifest/manifest-element.html#uid">shared UID
    feature</a> where two or more applications signed with same developer key can
  declare a shared UID in their manifest.</p>
<h2 id="app-verification">Application Verification</h2>
<p> Android 4.2 and later support application verification. Users can choose to
  enable “Verify Apps" and have applications evaluated by an application verifier
  prior to installation.  App verification can alert the user if they try to
  install an app that might be harmful; if an application is especially bad, it
  can block installation. </p>
<h2 id="digital-rights-management">Digital Rights Management</h2>
<p>The Android platform provides an extensible DRM framework that lets
  applications manage rights-protected content according to the license
  constraints that are associated with the content. The DRM framework supports
  many DRM schemes; which DRM schemes a device supports is left to the device
  manufacturer.</p>
<p>The <a href="https://developer.android.com/reference/android/drm/package-summary.html">Android DRM
  framework</a> is implemented in two architectural layers (see figure below):</p>
<ul>
  <li>
    <p>A DRM framework API, which is exposed to applications through the Android
      application framework and runs through the Dalvik VM for standard applications.</p>
  </li>
  <li>
    <p>A native code DRM manager, which implements the DRM framework and exposes an
      interface for DRM plug-ins (agents) to handle rights management and decryption
      for various DRM schemes</p>
  </li>
</ul>
<p><img alt="Architecture of Digital Rights Management on Android
platform" src="/devices/images/ape_fwk_drm_2.png" id="figure3" /></p>
<p class="img-caption">
  <strong>Figure 3.</strong> Architecture of Digital Rights Management on Android platform
</p>
