android 手机操作系统培训课件 浅入浅出 Android 安全 (二) Android Linux 内核层安全
2024-02-09 17:03:19发布 浏览470次 信息编号:96640
友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。
android 手机操作系统培训课件 浅入浅出 Android 安全 (二) Android Linux 内核层安全
作为最广为人知的开源项目之一,Linux 已被证明是一种安全、值得信赖且稳定的软件,全球有成千上万的人在研究、攻击和修补它。 毫不奇怪,Linux 内核是操作系统的基础。 它不仅依赖Linux进行进程、内存和文件系统管理,而且也是安全架构中最重要的组件之一。 在Linux内核中,Linux内核负责配置应用程序沙箱并调节一些权限。
2.1 应用沙箱
让我们考虑一个应用程序安装过程。 应用程序作为软件包 (.apk) 文件分发。 包由可执行文件、资源、本机库和清单文件组成,并由开发人员签名。 在具有操作系统的设备上安装软件包的主要介质有以下三种:
1. 玩
2. 软件包安装程序
3.adb工具
Play是一款特殊的应用程序,它为用户提供了查找第三方开发者上传到市场的应用程序并安装应用程序的能力。 尽管它也是第三方应用程序,但 Play 应用程序(因为它使用与操作系统相同的签名进行签名)可以访问其他第三方应用程序缺乏的受保护组件。
如果用户从其他来源安装应用程序,则通常会隐式使用包安装程序。 该系统应用程序提供了用于启动包安装过程的界面。 提供的adb工具主要供第三方应用程序开发人员使用。 前两种媒介要求用户在安装过程中同意权限列表,而后者则以静默方式安装应用程序。 这就是为什么它主要用作开发工具,旨在在设备上安装应用程序以进行测试。 这个过程如图2.1的上半部分所示。 该图显示了安全架构的更详细概述。 我们将在本文中引用它来解释该操作系统的功能。
Linux内核层配置应用程序沙箱的流程如下。 在安装过程中,每个包都会分配一个唯一的用户标识符 (UID) 和组标识符 (GID),这些标识符在设备的应用程序生命周期中不会更改。 因此,每一个应用程序都有一个对应的Linux用户。 用户名遵循app_x格式,用户的UID等于.D + x,其中.D常量对应于10000。例如,在图2.1中,ex1.apk包在安装过程中获取了用户名app 1,其UID 等于 10001。
图2.1:安全架构
在 Linux 中,内存中的所有文件都受 Linux 自定义访问控制 (DAC) 的约束。 访问权限由文件的创建者或所有者为三种用户类型设置:文件的所有者、与所有者位于同一组中的用户以及所有其他用户。 对于每种类型的用户,都会分配一个读、写和执行 (rwx) 权限的元组。 因此,由于每个应用程序都有自己的UID和GID,Linux内核强制应用程序在自己的隔离地址空间内执行。 除此之外,Linux 内核还使用应用程序唯一的 UID 和 GID 来实现不同应用程序之间设备资源(内存、CPU 等)的公平分离。 每个应用程序在安装过程中也会获得自己的主目录,例如/data/data/,其中是包的名称,例如com.ex.ex1,其中该文件夹是应用程序将私有数据存放在内部的存储目录放置在里面。 分配给该目录的 Linux 权限仅允许“所有者”应用程序写入和读取该目录。 有一些例外情况需要提及。 使用相同证书签名的应用程序可以相互共享数据,可以具有相同的 UID,甚至可以在同一进程中运行。
这些架构决策在 Linux 内核级别建立了高效的应用程序沙箱。 这种类型的沙箱很简单,并且基于 Linux 可选访问控制模型 (DAC) 身份验证。 幸运的是,由于沙箱在 Linux 内核级别执行,因此本机代码和操作系统应用程序也受到本章中描述的约束。
2.2 Linux内核层的权限约束
通过将 Linux 用户和组所有者分配给实现此功能的组件,可以限制对某些系统功能的访问。
这种类型的限制可以应用于系统资源,例如文件、驱动程序和套接字。 使用文件系统权限和特定的内核补丁(称为 )来限制对低级系统功能的访问,例如网络套接字、摄像头设备、外部存储、日志读取功能等。
使用文件系统权限访问文件和设备驱动程序可以限制进程对设备某些功能的访问。 例如,此技术用于限制应用程序对设备相机的访问。 /dev/cam 设备驱动程序的权限设置为 0660,属于 root 所有者和相机所有者组。 这意味着只有以 root 身份运行或包含在相机组中的进程才能读取和写入此设备驱动程序。 因此,只有相机组中包含的应用程序才能与相机交互。 权限标签和相应组之间的映射在文件框架 /base/data/etc/.xml 中定义,其摘录如清单 2.1 所示。 因此,在安装过程中,如果应用程序请求访问相机功能并且用户批准了该应用程序,那么该应用程序还将被分配一个相机Linux组GID(请参见清单2.1中的第8行和第9行)。 因此,该应用程序可以从/dev/cam设备驱动程序读取信息。
清单 2.1:权限标签和 Linux 组之间的映射
您可以在多个位置设置文件、驱动程序和 Unix 套接字的文件系统权限:init 程序、init.rc 配置文件、.rc 配置文件和系统 ROM 文件系统配置文件。 第 3 章详细讨论了它们。
在传统的Linux发行版中,所有进程都被允许发起网络连接。 同时,对于移动操作系统,必须控制对网络功能的访问。 为了在 中实现这种控制,需要添加特殊的内核补丁,将网络设施的访问限制为属于特定 Linux 组或具有特定 Linux 功能的进程。 Linux 内核的这些补丁已经获得了网络名称。 例如,对于负责网络通信的套接字地址族,此检查是在 /net/ipv4/.c 文件中执行的(参见清单 2.2 中的代码片段)。 Linux 组和网络的权限标签之间的映射也在 .xml 文件中设置(例如,参见清单 2.1 中的第 4 行)。
清单 2.2:网络修补
类似的网络补丁也适用于限制对 IPv6 和蓝牙的访问。
这些检查中使用的常量被硬编码在内核中并在 //linux/.h 文件中指定(参见清单 2.3)。
清单 2.3:Linux 内核中硬编码的 ID 常量
因此,在Linux内核层面,权限是通过检查应用程序是否属于特定的预定义组来实现的。 只有该组的成员才能访问受保护的功能。 在应用程序安装过程中,如果用户同意所请求的权限,则该应用程序将包含在相应的 Linux 组中,从而获得对受保护功能的访问权限。
本文由飞龙信使整理
来源:尤里 |
提醒:请联系我时一定说明是从星空网上看到的!