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 会强制执行安全策略。
      Android系统和开发--安全性和权限管理 SELinux 策略 安全架构_第1张图片

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

你可能感兴趣的:(android,安全架构,安全)