In the preceding chapters, we introduced Androidrsquo;s security model and discussed how integrating SELinux into Android has reinforced it.In this chapter, we take a bit of a right turn and introduce methods that can be used to circumvent Androidrsquo;s security model.
In order to perform a full OS update or to restore the device to its factory state, itrsquo;s necessary to escape the security sandbox and gain full access to a device, because even the most privileged Android components are not given complete access to all system partitions and storage devices.Additionally, while having full administrative (root) access at runtime is clearly against Androidrsquo;s security design, executing with root privileges can be useful in order to implement functionality not offered by Android, such
as the addition of custom firewall rules or full (including system partitions) device backup. Indeed, the wide availability of custom Android builds (often called ROMs) and apps that allow users to extend or replace OS functionality using root access (commonly known as root apps) has been one of the reasons for Androidrsquo;s success.
In this chapter, we explore the design of Androidrsquo;s bootloader and recovery OS, and show how they can be used to replace the system softwareof a device. We then show how root access is implemented on engineering builds and how Android production builds can be modified to allow executingcode with superuser privileges by installing a “superuser” application.Finally, we discuss how custom Android distributions implement and control
root access.
Bootloader
A bootloader is a low-level program that is executed when a device is powered. Its main purpose is to initialize the hardware and find and start the main operating system.
As briefly discussed in Chapter 10, Android bootloaders are usually locked and only allow booting or installing an operating system image that has been signed by the device manufacturer. This is an important step in establishing a verified boot path, because it ensures that only trusted and unmodified system software can be installed on a device. However, while most users are not interested in modifying the core OS of their devices,
installing a third-party Android build is a valid user choice and may even be the only way to run a recent version of Android on devices that have stopped receiving OS updates from their manufacturer. That is why most recent devices provide a way to unlock the bootloader and install thirdparty Android builds.
While Android bootloaders are typically closed source, the bootloaders of most ARM
devices based on Qualcomm SoCs are derived from the Little Kernel (LK) bootloader,1which is open source.2
In the following sections, wersquo;ll look at how to interact with Android bootloaders and how the bootloader can be unlocked on Nexus devices.We then describe the fastboot protocol used to update devices via the Bootloader.
Unlocking the Bootloader
The bootloaders of Nexus devices are unlocked by issuing the oem unlock command when the device is in fastboot mode (discussed in the next section). Therefore, in order to unlock a device, it must first be started in fastboot mode, either by issuing the adb reboot bootloader command (if the device already allows ADB access), or by pressing a special key combination while the device is booting. For example, holding down the Volume down, Volume up, and Power buttons simultaneously on a powered-down Nexus 5 interrupts the normal boot process and brings up the fastboot screen shown in Figure 13-1.
The bootloader has a simple UI that can be driven by the Volume up/down and Power buttons. It allows users to continue the boot process, restart the device in fastboot or recovery mode, and power down the device.
Connecting the device to a host machine via a USB cable allows additional commands to be sent to the device using the fastboot command-line tool (part of the Android SDK). Issuing the fastboot oem unlock command brings up the confirmation screen shown in Figure 13-2.
Figure 13-1: Nexus 5 Figure 13-2: Nexus 5
bootloaderScreen bootloader unlock screen
The confirmation screen warns that unlocking the bootloader allows installation of untested third-party OS builds and clears all user data. Because a third-party OS build might not follow Androidrsquo;s security model and might allow unrestricted access to data, clearing all user data is an important security measure; it ensures that existing user data cannot be extracted after the bootloader is unlocked.
The bootloader can be locked again by issuing the fastboot oem lock command. Relocking the bootloader returns it to its original state, and loading or booting third-party OS images is no longer possible. However, besides a locked/unlocked flag, some bootloaders keep an additional, “tampered” flag that is set when the bootloader is first unlocked. This flag allows the bootloader to detect if it has ever been locked and disallow some operations
or show a warning even if it is in a locked state.
Fastboot Mode
While the fastboot command and protocol can be used to unlock the bootloader, their original purpose was to make it easy to clear or overwrite device partitions by sending partition images to the bootloader, which are then written to the specified block device. This is particularly useful when porting Android to a new device (referred to as “device bring-up”) or restoring a device to factory state using partition images provided by the
device manufacturer.
Android Partition Layout
Android devices typicall
剩余内容已隐藏,支付完成后下载完整资料
在前面的章节中,我们介绍了Android的安全模型,并讨论了如何将SELinux集成到Android。在这一章,我们需要换个方向,介绍方法来规避Android的安全模型。
为了执行一个完整的操作系统更新或恢复设备到出厂状态,有必要充分利用设备来逃避安全沙箱,因为即使是最特权Android部件也没有给出完整的访问所有系统分区和存储设备的路径。此外,在运行时拥有完全的管理权限显然是针对Android的安全设计,为了实现不是Android提供的功能,就执行使用root特权,如添加自定义防火墙规则或完整的备份(包括系统分区)设备。事实上,定制Android的广泛可用性构建(通常称为ROM)和应用程序,允许用户扩展或替换系统功能使用root权限(通常被称为应用程序的根)一直是Android成功的原因之一。
在这一章中,我们探讨了Android的启动和恢复系统的设计,并展示它们如何能够被用来替代系统软设备。然后我们展示了如何实现工程建设上的root访问权限,Android生产建设怎样被修改为允许安装一个具有超级用户权限的executingcode“超级用户”应用。最后,我们将讨论如何定制Android分布实施和控制root访问。
引导装载程序
执行引导装载程序是一个低级的程序,当一个设备驱动。它的主要目的是初始化硬件,找到并启动主操作系统。
如简要地第10章中讨论的,Android引导装载程序通常被锁定,并只允许引导或安装已经由设备制造商签署了的操作系统映像。这是建立一个验证引导路径的重要一步,因为它确保只有受信任的和未修改的系统软件可在设备上安装。然而,大多数用户不感兴趣,自己修改其设备的核心操作系统,安装一个第三方的Android版本是一个有效的用户选择,甚至有可能在已停止从厂家获得操作系统更新的设备运行Android的最新版本的唯一途径。这就是为什么最近的设备提供了一种方法来解锁引导程序并安装第三方Android的基础之上。
而Android的引导程序通常是封闭源代码,大部分ARM的引导程序是基于高通的SoC设备的,均从微内核(LK)引导程序,这是开源的。
在下面的章节中,我们将看看如何与Android引导程序以及如何引导程序可以在Nexus设备解锁交互。然后,我们描述一下用于更新通过引导设备使用的fastboot协议。
解锁引导装载程序
Nexus设备的引导装载程序是由当设备处于FASTBOOT模式(在下一节讨论)发出OEM解锁指令解锁。因此,为了解锁一个设备,它必须先在FASTBOOT模式,通过发出adb的重启启动加载程序命令(如果设备已经使ADB访问),或者按一个特殊的按键组合,而设备启动开始。例如,在已关闭的Nexus5同时按住音量减小,音量增大,和电源按键中断正常启动过程,并提出了如图13-1所示的FASTBOOT屏幕。
引导程序有一个简单的用户界面,可通过音量加/减和电源按钮来驱动。它允许用户继续引导过程中,FASTBOOT或恢复模式,或关闭设备电源,重新启动设备。
通过USB电缆连接的设备到主机允许额外的命令使用FASTBOOT命令行工具(Android SDK的一部分)被发送到该设备。发出FASTBOOT OEM解锁命令将打开如图13-2所示的确认画面。
13-1 Nexus 5的引导程序屏幕 13-2 Nexus 5的引导程序屏幕解锁界面
确认屏幕警告解锁引导程序允许安装未经测试的第三方OS建立并清除所有用户数据。由于第三方OS版本可能不会跟随Android的安全模型,并可能允许数据无限制访问,清除所有的用户数据是一个重要的安全措施;它确保了引导程序被解锁后现有的用户数据不能被提取。
引导程序可以再次通过发出FASTBOOT OEM锁定命令锁定。重新锁定的bootloader它返回到原来的状态和装载或引导第三方操作系统映像是不再可能。然而,除了锁定/解锁标志,有的引导程序保留一个额外的“篡改”的时候,引导程序是第一个解锁被设置标志。此标志允许引导程序来检测,如果它曾经被锁定,禁止某些操作或显示,即使它处于锁定状态的警报。
快速启动
虽然FASTBOOT命令和协议可以用来解锁Bootloader,他们的初衷是可以很容易地清除或通过发送分区映像的引导程序,然后将其写入到指定的块设备覆盖设备的分区。Android的移植到新设备(简称“设备调高”)或使用由设备制造商提供的分区映像设备恢复到出厂状态时,这是非常有用的。
Android的分区布局
Android设备通常有几个分区,这FASTBOOT用名称引用(而不是所对应的Linux设备文件)。分区及其名称的列表可以通过列出相应的设备的SoC中的/ dev/块/平台/中按姓名/目录下的文件来获得。例如,因为Nexus的5基于高通公司的SoC,其包括移动台调制解调器(MSM)基带处理器,相应的目录称为msm_sdcc.1/如清单13-1(省略时间戳)
清单13-1分区上的Nexus5列表
# ls -l /dev/block/platform/msm_sdcc.1/by-name
lrwxrwxrwx root root DDR -gt; /dev/block/mmcblk0p24
lrwxrwxrwx root root aboot -gt; /dev/block/mmcblk0p6u
lrwxrwxrwx root root abootb -gt; /dev/block/mmcblk0p11
lrwxrwxrwx root root boot -gt; /dev/block/mmcblk0p19v
lrwxrwxrwx root root cache -gt; /dev/block/mmcblk0p27w
lrwxrwxrwx root root crypto -gt; /dev/block/mmcblk0p26
lrwxrwxrwx root root fsc -gt; /dev/block/mmcblk0p22
lrwxrwxrwx root root fsg -gt; /dev/block/mmcblk0p21
lrwxrwxrwx root root grow -gt; /dev/block/mmcblk0p29
lrwxrwxrwx root root imgdata -gt; /dev/block/mmcblk0p17
lrwxrwxrwx root root laf -gt; /dev/block/mmcblk0p18
lrwxrwxrwx root root metadata -gt; /dev/block/mmcblk0p14
lrwxrwxrwx root root misc -gt; /dev/block/mmcblk0p15x
lrwxrwxrwx root root modem -gt; /dev/block/mmcblk0p1y
lrwxrwxrwx root root modemst1 -gt; /dev/block/mmcblk0p12
lrwxrwxrwx root root modemst2 -gt; /dev/block/mmcblk0p13
lrwxrwxrwx root root pad -gt; /dev/block/mmcblk0p7
lrwxrwxrwx root root persist -gt; /dev/block/mmcblk0p16
lrwxrwxrwx root root recovery -gt; /dev/block/mmcblk0p20z
lrwxrwxrwx root root rpm -gt; /dev/block/mmcblk0p3
lrwxrwxrwx root root rpmb -gt; /dev/block/mmcblk0p10
lrwxrwxrwx root root sbl1 -gt; /dev/block/mmcblk0p2{
lrwxrwxrwx root root sbl1b -gt; /dev/block/mmcblk0p8
lrwxrwxrwx root root sdi -gt; /dev/block/mmcblk0p5
lrwxrwxrwx root root ssd -gt; /dev/block/mmcblk0p23
lrwxrwxrwx root root system -gt; /dev/block/mmcblk0p25|
lrwxrwxrwx root root tz -gt; /dev/block/mmcblk0p4
lrwxrwxrwx root root tzb -gt; /dev/block/mmcblk0p9
lrwxrwxrwx root root userdata -gt; /dev/block/mmcblk0p28
正如你所见,Nexus 5有29个分区,其中大部分存储特定于设备的和专有的数据,如Android引导装载程序aboot u,基带软件调制解调器y,sbl1第二阶段引导装载程序。 {Android操作系统是v驻留在引导分区,商店内核和rootfs RAM磁盘映像,和系统分区|商店所有其他系统文件。用户文件存储在用户数据分区},还有临时文件,如下载OTA图像和恢复操作系统命令和日志,存储在缓存分区w。最后,恢复操作系统映像驻留在恢复分区z。
Fastboot协议
该FASTBOOT协议的工作原理通过USB,由主机驱动。即,通信是由主机,其使用USB批量传送来发送基于文本的命令和数据,以引导程序启动。该USB客户端(引导程序),状态字符串,如OKAY或FAIL响应;开始INFO信息消息;或数据,其表示该引导程序已准备好接受来自主机的数据。当接收到的所有数据,引导程序与描述命令的最终地位OKAY,失败或INFO消息中的一个响应。
fastboot命令
该FASTBOOT命令行实用程序实现FASTBOOT协议,使您可以获取支持FASTBOOT(使用设备命令)连接的设备列表,获取有关引导程序(用getvar命令)的信息,重新启动在不同模式下设备(与继续,重新启动,重新启动 - 引导程序),并删除或格式化分区。
该FASTBOOT命令支持各种方式的磁盘映像写入分区。一个指定分区可以使用闪光灯分区映像文件名的命令一闪而过,并包含在一个ZIP文件多个分区映像可以一次使用update ZIP文件名的命令闪现。
分别flashall命令自动闪烁的boot.img和system.img在其工作目录的内容,并recovery.img文件到设备的引导,系统和恢复分区。最后,闪光:原始的引导内核ramdisk的命令会自动创建从指定的内核和RAM磁盘引导映像,并通过闪烁来引导分区。除了闪烁的分区映像,FASTBOOT,也可以不使用时开机引导映像或引导内核的ramdisk命令调用它写入设备引导的图像。
修改装置的分区,如各种闪光的变化,和命令该引导自定义内核,如引导命令的命令,当引导程序被锁定是不允许的。
恢复
恢复OS-也称为恢复控制台或简单地说,恢复,是用于那些无法从Android的直接执行任务,如恢复出厂设置(删除用户数据分区)或应用OTA更新最低限度的操作系统。
像引导程序FASTBOOT模式,恢复OS可以通过使用adb的重新启动恢复命令同时按下启动设备,或通过ADB特定的组合键来启动两种。一些引导程序还提供一个菜单界面(见图13-1),可用于启动恢复。在下面的章节中,我们来看看附带的Nexus设备和包含在AOSP的“股票”的Android回收,然后引入定制的恢复,它提供了更丰富的功能,但需要为了一个解锁引导程序安装或启动。
备份恢复
Android的备份恢复实现所需的最小功能满足的“可更新软件”部分Android兼容定义文档(CDD),它要求必须包括一种机制来取代“设备实现整个系统的软件hellip;”,“使用的更新机制必须支持更新没有清除用户数据”。3
这就是说,CDD没有指定要使用的具体的更新机制,让不同的方法对系统更新可能和股市复苏同时实现OTA更新和拴更新。对于OTA更新,主操作系统下载更新文件,并指示应用它的恢复。在系留更新的情况下,用户下载他们的PC上的更新包,并使用ADB侧向载荷otafile.zip命令将其推到复苏。对于这两种方法的实际更新过程是相同的;仅获得OTA包不同的方法。
备份恢复正在使用该设备的硬件按钮,一般的电源按钮和音量增大/减小操作简单的菜单界面(如图13-3所示)。然而,菜单默认是隐藏的,需要通过按下一个专门的键组合来激活。在Nexus设备,恢复菜单通常可以通过同时按住电源和音量减小按钮几秒钟显示。
系统恢复菜单有四个选项:重启,ADB应用更新,恢复出厂设置,擦拭缓存分区。ADB应用更新启动装置上的亚服务器并且使栓系更新(侧向载荷)模式。然而,正如你所看到的,有申请的OTA更新,因为一旦用户选择应用从主OS OTA更新(见图13-4)没有选项,它会自动应用,没有进一步的用户交互。 Android的通过发送控制命令恢复,恢复启动时自动执行实现这一目的。 (我们讨论用于控制在下一节恢复的机制。)
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[153878],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。