page.title=Implementing Security @jd:body
The Android Security Team regularly receive requests for more information about how to prevent potential security issues on Android devices. We also occasionally perform spot-checks of devices and let OEMs and affected partners know of potential issues.
This document provides OEMs and other partners with a number of security best practices based upon our own experiences. This is an extension of the Designing for Security documentation we've provided for developers, including best practices that are unique to those who are building or installing system-level software on devices.
Where possible, the Android Security Team will incorporate tests into the
Android Compatibility Test
Suite (CTS) and
Android Lint to facilitate adoption of
these best practices. We encourage partners to contribute tests that can help
other Android users. A partial list of security-related tests can be found at:
root/cts/tests/tests/security/src/android/security/cts
Source code review can detect a broad range of security issues, including those identified in this document. Android strongly encourages both manual and automated source code review.
Automated testing can detect a broad range of security issues, including many of those identified in this document.
The signature of the system image is critical for determining the integrity of the device. Specifically:
Application signatures play an important role in device security. They are used for permissions checks as well as software updates. When selecting a key to use for signing applications, it is important to consider whether an application will be available only on a single device or common across multiple devices. Consider:
Google Play provides OEMs with the ability to update applications without performing a complete system update. This can expedite response to security issues and delivery of new features. This also provides a way to make sure that your application has a unique package name.
External parties must have the ability to contact OEMs about device-specific security issues. We strongly recommend the creation of a publicly accessible email address for managing security incidents.
Root processes are the most frequent target of privilege escalation attacks, so reducing the number of root processes reduces risk of privilege escalation. CTS has been expanded with an informational test that lists root processes.
In general, apps pre-installed by OEMs should not be running with the shared UID of system. Realistically, however, sometimes this is necessary. If an app is using the shared UID of system or another privileged service (i.e., phone), it should not export any services, broadcast receivers, or content providers that can be accessed by third-party apps installed by users.
The Android Application Sandbox provides applications with an expectation of isolation from other processes on the system, including root processes and debuggers. Unless debugging is specifically enabled by the application and the user, no application should violate that expectation.
New setuid programs should not be accessible by untrusted programs. Setuid programs have frequently been the location of vulnerabilities that can be used to gain root access, and minimizing the availability of the program to untrusted applications is a security best practice.
The CTS verifier has been expanded with an informational test that lists SUID files. Certain setuid files are not permitted, per CTS tests.
CTS tests have been expanded to fail when a device is listening on any port, on any interface. In the event of a failure, Google will verify that the following best practices are being used:
Logging of data increases the risk of exposure of that data and reduces system performance. Multiple public security incidents have occurred as the result of logging of sensitive user data by applications installed by default on Android devices.
CTS has been expanded with a number of tests that check for the presence of potentially sensitive information in the system logs.
World-writable directories can introduce security weaknesses. Writable directories may enable an application to rename other trusted files, substituting their own files or conducting symlink-based attacks. By creating a symlink to a file, the attacker may trick a trusted program into performing actions it shouldn't.
Writable directories prevent the uninstall of an application from properly cleaning up all files associated with an application. Directories created by the system or root users should not be world writable.
CTS tests help enforce this best practice by testing known directories.
Many drivers and services rely on configuration and data files stored in directories like /system/etc and various other directories in /data. If these files are processed by a privileged process and are world writable, then it could be possible for an app to exploit a vulnerability in the process by crafting malicious contents in the world-writable file.
Any code used by privileged OEM processes must be in /vendor or /system; these filesystems are mounted read-only on boot. Any libraries used by system or other highly-privileged apps installed on the phone should also be in these filesystems. This can prevent a security vulnerability that could allow an attacker to control the code that a privileged process executes.
Only trusted code should have direct access to drivers. Where possible, the preferred architecture is to provide a single-purpose daemon that proxies calls to the driver and restrict access to the driver to that daemon.
Driver device nodes should not be world readable or writable. CTS tests help enforce this best practice by checking for known instances of exposed drivers.
ADB must be disabled by default and must require the user to turn it on before accepting connections.
Unlockable Android devices must securely erase all user data prior to being unlocked. The failure to properly delete all data on unlocking may allow a physically proximate attacker to gain unauthorized access to confidential Android user data. We've seen numerous instances where device manufacturers improperly implemented unlocking.
Many Android devices support unlocking. This allows the device owner to modify the system partition and/or install a custom operating system. Common use cases for this include installing a third-party ROM, and/or doing systems-level development on the device.
For example, on Google Nexus devices, an end user can run fastboot oem
unlock
to start the unlocking process. When an end user runs this command,
the following message is displayed:
Unlock bootloader?If you unlock the bootloader, you will be able to install custom operating system software on this phone.
A custom OS is not subject to the same testing as the original OS, and can cause your phone and installed applications to stop working properly.
To prevent unauthorized access to your personal data, unlocking the bootloader will also delete all personal data from your phone (a "factory data reset").
Press the Volume Up/Down buttons to select Yes or No. Then press the Power button to continue.
Yes: Unlock bootloader (may void warranty)
No: Do not unlock bootloader and restart phone.
A device that is unlocked may be subsequently relocked, by issuing the
fastboot oem lock
command. Locking the bootloader provides the same
protection of user data with the new custom OS as was available with the
original OEM OS. e.g. user data will be wiped if the device is unlocked again in
the future.
To prevent the disclosure of user data, a device that supports unlocking needs to implement it properly.
A properly implemented unlocking process will have the following properties:
ioctl(BLKSECDISCARD)
or equivalent SHOULD be used. For eMMC
devices, this means using a Secure Erase or Secure Trim command. For eMMC 4.5
and later, this means doing a normal Erase or Trim followed by a Sanitize
operation.BLKSECDISCARD
is NOT supported by the underlying block
device, ioctl(BLKDISCARD)
MUST be used instead. On eMMC devices,
this is a normal Trim operation.BLKDISCARD
is NOT supported, overwriting the block devices
with all zeros is acceptable.fastboot oem lock
command.These requirements ensure that all data is destroyed upon the completion of an unlock operation. Failure to implement these protections is considered a "moderate" level security vulnerability.