Android系统和开发--安全性和权限管理 SELinux 策略 安全架构

学习android权限知识

SElinux

chmod -R 777 ./

setenforce 0

adb root

su

fastboot oem at-unlock-vboot

adb disable-verity

Android权限

Android系统是基于Linux内核构建的,因此它继承了Linux的权限管理机制。Android应用需要通过声明权限来访问系统的某些功能(如摄像头、存储、位置等)。开发者在AndroidManifest.xml中声明权限,用户在安装应用时或者运行时可以授予或拒绝这些权限。

1. SELinux(Security-Enhanced Linux)

  • 简介:SELinux 是一个 Linux 内核模块,提供了强制访问控制 (MAC)。它通过定义安全策略来控制进程和文件系统之间的交互,限制恶意软件和未经授权的访问。
  • 命令
    • setenforce 0: 将 SELinux 设置为"宽容模式 Permissive",此时系统会记录违反 SELinux 策略的行为但不实际阻止操作。
    • setenforce 1: 将 SELinux 设置为"强制模式 Enforcing",此时 SELinux 会强制执行安全策略。

2. chmod -R 777 ./

  • 简介chmod 是一个用于修改文件或目录权限的命令。

  • 含义

    • -R:递归更改权限,即对目录及其子目录下的所有文件应用更改。
    • 777:为文件或目录的所有用户(所有者、组、其他人)提供读、写、执行权限。
    • ./:表示当前目录。
  • 注意 :赋予 777 权限可能带来安全风险,因为它允许所有用户完全控制文件或目录。

3. adb root

  • 简介adb(Android Debug Bridge)是 Android 开发和调试工具。adb root 命令用于在有 root 权限的设备上,以 root 身份重新启动 adb 服务。
  • 注意 :并非所有设备都支持 adb root,且开启 root 可能会影响设备的安全性。

4. su

  • 简介su(substitute user)命令用于切换到另一个用户,通常是切换到 root 用户。执行此命令后,用户可以获得超级用户权限。
  • 在 Android 上的作用 :很多设备上的 su 命令是通过安装 SuperSU 或 Magisk 实现的,允许用户临时或永久获得 root 权限。

5. fastboot oem at-unlock-vboot

  • 简介fastboot 是一个可以通过 USB 连接与 Android 设备通信的工具。oem 是用于设备制造商自定义命令的子命令。

  • at-unlock-vboot:该命令通常用于解锁设备的 bootloader,以允许自定义固件或 ROM 的安装。不过,每个设备的具体命令可能不同,因此解锁 bootloader 命令因设备而异。

  • 警告:解锁 bootloader 可能会使设备失去保修,并且增加设备被恶意软件攻击的风险。

6. adb disable-verity

  • 简介adb disable-verity 命令用于禁用 Android 的验证 (verity) 机制。Verity 是一种保护机制,防止系统分区被修改。

  • 用途:在修改系统分区或安装自定义 ROM 之前,通常需要禁用 verity 才能使系统正常启动。

  • 注意:禁用 verity 可能会使设备更容易受到恶意攻击。

这些工具和命令在Android系统开发和调试中非常有用,但它们也有一定的风险,尤其是在处理系统级别的权限时,可能会影响设备的稳定性和安全性。因此,建议在充分了解这些命令的作用和后果之后再使用。

SELinux

安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。

SELinux 主要由美国国家安全局开发。linux 2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。Android4.4上正式推出以SELinux为核心的系统安全机制。

在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。

而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。

这种权限管理机制的主体是用户,也称为自主访问控制(DAC)。

2.1 SELinux 的作用

SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。

SELinux 策略有哪些? Permissive模式可以执行哪些操作?

SELinux 策略类型

SELinux 的策略主要有以下几种类型:

  1. Targeted Policy(目标化策略)

    • 这是最常见的SELinux策略,主要针对系统中重要的进程(如 initsystem_server 等)应用SELinux策略。非关键进程通常运行在非强制(permissive)模式下。
  2. MLS Policy(多级安全策略)

    • 多级安全策略(Multi-Level Security)被设计用于极高安全性需求的系统中,它基于敏感度和类别(如秘密、机密)进行访问控制。
  3. Strict Policy(严格策略)

    • 在严格策略下,系统中所有进程都受到SELinux的控制。它为每个进程定义了严格的访问权限,确保进程只能执行被允许的操作。

Permissive 模式下的操作

在SELinux的Permissive模式下:

  • 记录策略违规:系统仍然会检查SELinux策略,任何违反策略的操作都会被记录在审计日志中。开发者和管理员可以查看这些日志来调试SELinux策略。
  • 不阻止操作:尽管策略被违反,系统不会阻止这些操作,所有的操作都可以继续执行。也就是说,Permissive模式允许所有操作的执行,即使这些操作在Enforcing模式下会被阻止。

Permissive 模式的常见用途

  1. 调试和策略开发:开发者可以使用Permissive模式来调试SELinux策略,记录所有潜在的策略违规行为,而不实际阻止操作。

  2. 测试系统行为:在切换到Enforcing模式之前,使用Permissive模式来测试系统和应用在SELinux下的行为,确保一旦切换到Enforcing模式,系统仍然能够正常运行。

需要注意的风险

使用Permissive模式时,系统实际上处于无强制访问控制的状态。这意味着,如果系统中存在恶意软件或其他安全威胁,可能会利用这个状态来执行未经授权的操作。因此,Permissive模式通常仅在开发、调试或故障排除时使用,在生产环境中则应尽量避免。

android 安全架构

Android系统的安全架构设计具有多层次的防护机制,以确保用户数据和设备的安全。以下是对Android系统主要安全架构和机制的详细介绍:

1. 应用沙盒 (App Sandbox)

每个Android应用都在一个独立的用户空间中运行,这被称为"沙盒"机制。沙盒通过以下方式保护应用之间的隔离:

  • 用户ID (UID): 每个应用在安装时都会分配一个唯一的用户ID。这个UID确保每个应用只能访问其自身的数据和文件,除非明确通过权限授予或跨进程通信 (IPC) 来共享。
  • 进程隔离: 每个应用都运行在单独的进程中,通过Linux内核的进程隔离特性,防止应用直接访问其他应用的进程或数据。

2. 权限模型

Android应用通过声明权限来请求访问敏感的设备功能或用户数据。例如,访问相机、地理位置、联系人等。用户在安装应用时或运行时(针对特定权限,如危险权限)可以选择是否授予这些权限。这种模型确保应用只能访问用户明确授权的资源。

3. SELinux (Security-Enhanced Linux)

SELinux为Android增加了强制访问控制 (MAC) 层次,在应用和系统服务之间提供额外的安全保护。SELinux策略规定了哪些进程可以访问哪些资源,并在违反策略时阻止操作。在默认的"Enforcing"模式下,SELinux会严格执行这些策略,防止未授权的访问。

4. 加密

Android系统提供了设备级和文件级加密,以保护存储在设备上的数据。主要包括:

  • 全盘加密 (Full Disk Encryption, FDE): 对整个设备的存储进行加密,通常使用设备的硬件加速器来提高加密效率。
  • 文件加密 (File-based Encryption, FBE): 在Android 7.0及以上版本中引入,允许在文件级别进行加密,以便更灵活地管理加密密钥和加密策略。

5. 密钥库 (Keystore)

密钥库系统提供了一种安全存储加密密钥的方法。密钥库可以生成和存储密钥,这些密钥只在特定条件下(如设备解锁时)可用,确保应用程序即使遭到攻击,也无法直接访问密钥材料。

6. 应用签名

每个Android应用在发布时都必须由开发者使用私钥进行数字签名。应用签名提供了以下好处:

  • 身份验证: 通过签名,用户和系统可以验证应用的发布者身份,防止恶意软件伪装成合法应用。
  • 版本控制: 签名还用于管理应用更新,确保新版本应用只能由原发布者发布。

7. 安全启动 (Verified Boot)

安全启动机制在设备启动时验证引导加载程序、内核、系统映像等关键系统组件的完整性。它使用信任链和设备密钥确保这些组件没有被篡改,防止恶意软件在启动时加载。

8. Google Play Protect

Google Play Protect是Android设备内置的安全服务,它在后台自动扫描应用和设备,检测并移除潜在的恶意软件。它还包括以下功能:

  • 应用扫描: 定期扫描已安装的应用程序,以发现并删除有害应用。
  • 安全提示: 提供安全建议,如禁止安装来自未知来源的应用。

9. 安全更新

Android定期发布安全补丁来修复系统中的漏洞。厂商和运营商有责任将这些更新推送到用户设备,以确保设备始终受到最新安全防护。

10. TrustZone

TrustZone是一种硬件隔离技术,它将处理器划分为"安全世界"和"非安全世界"。安全世界用于处理敏感操作,如密钥管理、加密等,确保这些操作不受非安全世界的影响。

11. 应用隔离 (Isolated Processes)

对于一些敏感的应用或组件,Android支持在隔离进程中运行,这种进程没有直接访问系统资源的能力。通常用于处理敏感数据的任务,如WebView进程,避免数据泄露风险。

12. 网络安全

Android网络安全机制包括:

  • 网络安全配置: 开发者可以在应用中定义网络安全策略,如禁用明文流量、定义信任的CA证书等。
  • VPN和代理支持: Android支持虚拟专用网络 (VPN) 和代理服务,提供数据流量的加密和匿名访问。

这些机制共同构成了Android系统的多层次安全架构,为用户和开发者提供了强大的安全保障。这些机制的有效运作依赖于系统、应用和用户的协同,确保设备能够抵御各种潜在的安全威胁。

相关推荐
志旭10 分钟前
android15 vsync源码分析
android
志旭17 分钟前
Android 14 HWUI 源码研究 View Canvas RenderThread ViewRootImpl skia
android
whysqwhw34 分钟前
Egloo 高级用法
android
whysqwhw1 小时前
Egloo 架构设计
android
whysqwhw1 小时前
Egloo 快速入门指南
android
雨白2 小时前
精通 Android 通知
android
用户2018792831673 小时前
搜索算法故事:从图书馆找书到迷宫探险
android
用户2018792831673 小时前
计数排序故事:运动会的奖牌统计
android
vocal4 小时前
我的安卓第一课:四大组件之一Broadcast
android