当前位置: 首页 > news >正文

[终端安全]-5 移动终端之操作系统安全

1 可信体系构建

移动终端可信体系基于可信计算思想,以硬件芯片为信任根,通过可信度量、可信存储和可信报告等机制,确保移动终端操作系统在启动和运行过程中的各个部件都是可信的。

1)可信启动

1.1)硬件信任根

- 硬件信任根是可信体系构建的基础,可使用集成在SoC芯片中TrustZone,或使用硬件安全芯片(如SE、TPM)作为信任根,存储设备唯一的密钥和其他安全信息。

- eFUSE熔断机制:通过eFUSE熔断机制防止固件回退和篡改,确保系统启动时使用最新的、未被篡改的固件。

1.2)安全启动

移动终端启动过程中,各个阶段逐一进行签名验证建立信任链:

- BL1:Boot ROM加载BL1(Boot Loader Stage 1),是信任链第一环节初始化最基本的硬件,并对BL2进行数字签名验证。

【BL1通常存储在片上ROM中,默认不可更改、安全性较高,通过加载到RAM中执行。】

- BL2:负责从BL1接管后,进一步初始化硬件,如内存控制器、时钟、GPIO等,使得系统能进入更高级的引导阶段;配置安全相关的设置,如安全内存区域、访问控制列表等,确保后续阶段的安全性。此外BL2执行数字签名验证安全性检查,校验后续加载组件(如BL3)的完整性和真实性。

【BL2通常存储在闪存或非易失性存储器中,在BL1初始化后加载到RAM中执行。】

- BL3(U-Boot):负责从BL2接管后,进行系统硬件的全面初始化,包括网络设备、存储设备、显示设备等;提供引导配置选项和命令行接口,允许用户和系统管理员配置引导参数、环境变量等;支持多种文件系统(如FAT、EXT4等),可用于加载内核镜像和其他必要的引导文件;支持网络引导功能,通过TFTP、NFS等协议可从网络服务器加载内核。此外BL3执行安全性验证,通过后从存储设备或网络加载操作系统内核或虚拟机监视器,并将控制权移交给其入口点。

【BL3通常存储在闪存或非易失性存储器中,在BL2初始化后加载到RAM中执行。】

备注:如果移动终端支持OP-TEE,则TEE内核一般在BL2或BL3阶段加载,如果TEE固件是作为BL2的一部分,则BL2会在其初始化过程中加载并启动OP-TEE OS;如果TEE固件是BL3的一部分,则U-Boot负责加载启动OP-TEE OS。

- 虚拟机监视器(Hypervisor):加载并切换至虚拟机监视器,对后续加载组件主系统内核进行完整性度量验证。

备注:TIE(可信隔离环境)的加载和初始化通常发生在虚拟机监视器加载之后,负责提供一个隔离的环境,用于运行安全关键的应用和服务,确保它们在一个受保护的区域中执行。

- 主系统内核(OS Kernel):启动主系统内核,根据需要对应用程序执行安全性检查。

在整个启动过程中,每一级引导程序在加载下一级之前,都会对其进行完整性度量和数字签名验证,确保整个启动过程是可信的。

1.3)初次启动完整性扫描

完整性度量值生成:在第一次开机运行时,对移动终端系统的可执行文件、脚本文件、安装包(APK)等进行扫描,生成完整性度量值并安全存储。

后续启动过程校验:后续启动过程中使用之前生成的度量值进行可信链校验,确保系统完整性。

2)可信运行

运行时的信任链依赖于内核中的动态度量可信根服务,该服务通常在系统启动时建立,并持续负责定期或在特定事件触发时对系统运行中的各个组件进行度量。系统内核需要支持对内存、文件系统等进行度量,并将度量结果存储在安全区域;动态度量的结果可以触发安全响应机制,如隔离可疑进程或触发系统报警

- 调度度量:在进程调度过程中,对新加载的进程和动态链接库进行度量和验证,确保每个运行的进程和库都是可信的。

- 定时度量:定期对系统中的关键组件(如内核模块、关键进程)进行度量和验证,确保其在运行过程中未被篡改。

2 应用隔离机制

每个应用进程在其独立的沙箱环境中运行,操作系统通过进程隔离和用户权限控制,确保每个应用进程只能访问其自身的资源和数据。

假设我们有两个应用程序:应用A和应用B。

1)安装过程中的隔离

1.1)APK 签名和验证

- 签名:每个应用程序(APK文件)在发布前由开发者进行数字签名。

- 验证:安装时操作系统会验证应用的签名,确保其未被篡改。

1.2)分配唯一的用户ID(UID)

- UID分配:每个安装的应用程序都会被分配一个唯一的用户ID(UID)。例如应用A可能被分配UID 10001,应用B被分配UID 10002。

- 文件权限:每个应用程序的私有文件和数据目录只对其UID可访问。这样应用A的UID 10001无法访问应用B的UID 10002的数据目录。

2)应用运行时的隔离

2.1)进程创建和隔离

当用户启动应用A时,操作系统会为其创建一个新的进程,该进程由应用A的UID 10001运行;同样当启动应用B时,会为其创建一个由UID 10002运行的独立进程。每个应用程序被分配一个唯一的用户ID(UID),确保应用程序运行在不同的权限上下文中。

每个应用程序运行在一个独立的进程中,通过操作系统的内存管理单元(MMU)实现自己独立的虚拟地址空间,通常从0开始到某个最大值(例如,32位系统上为4GB),这个空间是进程私有的,MMU负责将虚拟地址转换为物理地址。当操作系统在不同进程之间切换时,会切换当前的页表,通过改变MMU中存储的页表基地址(通常存储在寄存器中)来实现,这样进程A和进程B即使使用相同的虚拟地址,也会映射到不同的物理地址。

2.2)文件访问隔离

应用程序只能访问特定的文件夹和目录,通常位于自己的专有存储空间内,即使获得存储权限,也只能访问公共存储区或共享存储区的特定部分。另外,操作系统可以通过重定向技术,将应用程序试图访问的资源重定向到其私有空间。例如当一个应用程序尝试创建或修改文件时,系统可以将这个操作重定向到应用程序的私有文件夹中,这种机制确保应用程序无法对系统的关键文件或其他应用程序的数据进行未授权的修改。

2.3)应用权限管理

- 权限声明:在应用A的声明文件中,开发者声明应用需要的权限(如访问相机、读取联系人等)。

- 用户授权:安装或首次运行时,系统会提示用户授予这些权限。如果用户同意,应用A就可以使用这些权限。

- 权限限制:即使应用A获得了某些权限(如访问相机),这些权限也仅限于应用A本身,应用B无法使用这些权限,除非用户明确授予。

- 系统调用拦截和监控:系统服务(如剪贴板、位置服务)也通过UID进行访问控制,确保应用A只能访问和操作它有权限的系统资源。操作系统可以在应用程序试图访问系统资源时,通过检查是否符合安全策略拦截应用程序的系统调用来限制它们的行为。例如安卓系统中,Binder机制用于进程间通信(IPC),在进行关键系统调用时,Binder会进行权限检查。

2.4)安全通信和数据传输

- 数据加密:应用A可以使用加密API对敏感数据进行加密存储,防止其他应用或用户在没有正确解密密钥的情况下读取数据。

- 安全通信:当应用A通过网络传输数据时,使用TLS/SSL等加密协议,确保数据在传输过程中的机密性和完整性。

3 安全更新

安全更新对于移动终端操作系统至关重要,因为它们修复漏洞、提高系统安全性并保护用户数据免受新出现的威胁和攻击。

- 漏洞发现与修复

安全研究人员、开发者和厂商发现系统中的漏洞,漏洞被报告给相关的操作系统开发团队,开发团队进行漏洞分析、修复,并测试补丁。

- 更新发布

测试通过后,补丁被打包成安全更新。更新包通过官方渠道发布,通常通过OTA(Over-the-Air)方式推送到设备上。

- 用户通知与安装

用户设备会接收到更新通知,提示用户下载并安装更新,用户可以选择立即安装或延迟安装。安装过程中,设备可能会重启以完成更新。

- 更新验证

安装完成后,设备会进行验证,确保更新包完整且未被篡改;系统会检查更新后的版本信息,并记录更新日志。

4 安卓操作系统安全技术

1)安全启动

安卓设备通过安全启动来确保启动链的完整性和真实性,每个启动阶段都会验证下一个阶段的数字签名,确保系统未被篡改。

2)SELinux(Security-Enhanced Linux)

SELinux为安卓提供了强制访问控制(MAC),最初由美国国家安全局 (NSA) 开发,通过安全策略定义与每个对象和主体(例如文件和进程)相关联,限制进程对系统资源的访问,确保即使应用程序被攻破,恶意行为也会受到限制。

2.1)主要组件

- 安全上下文:每个对象(文件、进程等)都有一个安全上下文,包括用户、角色、类型和级别。

- 策略:定义哪些安全上下文可以访问哪些对象以及以何种方式访问。

- 安全策略库:包含所有定义的策略。

- SELinux 内核模块:实现强制访问控制逻辑,检查和执行安全策略。

2.2)工作原理

- 标记对象和主体:每个对象和主体都被标记为安全上下文。

- 策略检查:当一个主体尝试访问一个对象时,SELinux 内核模块检查策略库中定义的规则。

- 决策:根据策略,决定是否允许访问,如果不允许,则阻止访问并记录事件。

3)应用沙箱

每个安卓应用运行在独立的用户空间(UID),通过Linux内核的用户和权限管理机制,防止应用互相访问彼此的数据和进程。

4)权限管理

安卓应用需要声明权限,并在安装时或运行时请求用户授权,确保用户对应用访问的敏感资源有控制权。

5)Google Play Protect

Google Play Protect 是安卓内置的防护机制,扫描应用和设备上的潜在威胁,提供恶意软件检测和阻止。

6)设备加密

安卓设备支持文件级和全盘加密,通过AES加密算法保护存储在设备上的数据,防止未经授权的访问。

7)安全更新

安卓提供定期安全更新,修复操作系统和应用中的漏洞,确保设备免受已知威胁的攻击。

8)Keystore

安卓的Keystore系统提供了一个安全环境,用于生成、存储和使用加密密钥。硬件支持的Keystore(如TEE)提供了更高的安全性。

5 iOS操作系统安全技术

1)安全启动

iOS设备通过硬件根信任和数字签名验证,确保从引导加载程序到内核的每个组件都未被篡改。

2)系统完整性保护(System Integrity Protection, SIP)

SIP限制系统关键部分的修改,包括系统文件、运行时保护等,防止恶意软件或用户无意中改变系统的完整性。

3)应用沙箱

iOS应用运行在受限的沙箱环境中,限制应用对文件系统、网络和其他应用的访问,确保即使应用被攻破,危害也会被最小化。

4)权限管理

iOS使用细粒度的权限管理,应用在运行时需要请求用户授权访问敏感数据和功能,如相机、位置、通讯录等。

5)App Store审核

所有iOS应用必须通过App Store审核,苹果会进行严格的安全和隐私检查,确保应用符合安全标准。

6)数据加密

iOS设备默认启用文件级加密,通过硬件和软件结合,确保存储在设备上的数据在锁定状态下无法被访问。

7)安全更新

苹果提供定期安全更新,通过OTA方式及时修补操作系统和内置应用的安全漏洞。

8)Keychain

Keychain提供了一个安全存储,保护用户的密码、证书和其他敏感数据。iOS通过硬件加密和访问控制,确保密钥和数据的安全。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数据库第三次作业
  • Java中toString()方法的理解使用及如何通过IDEA快速自动调用,重写toString()方法
  • Leetcode—97. 交错字符串【中等】
  • Doris数仓的最佳拍档ETLCloud数据集成平台
  • Git 快速上手
  • 下半年交火点:智驾全国都能开,智舱多模态大模型
  • gen_circle_contour_xld 创建XLD轮廓对应于圆或圆弧。
  • 【机器学习】机器学习与自然语言处理的融合应用与性能优化新探索
  • iOS 应用内存超过多少会收到系统内存警告 ?
  • Linux服务监控自动巡检脚本--推送钉钉告警
  • Python 插入、替换、提取、或删除Excel中的图片
  • 【初阶数据结构】深入解析队列:探索底层逻辑
  • 3Python的Pandas:数据选取
  • React 19 竞态问题解决
  • 从入门到精通:网络基础详解
  • .pyc 想到的一些问题
  • [nginx文档翻译系列] 控制nginx
  • const let
  • ECMAScript入门(七)--Module语法
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • express.js的介绍及使用
  • Java 最常见的 200+ 面试题:面试必备
  • Javascript弹出层-初探
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Map集合、散列表、红黑树介绍
  • nodejs实现webservice问题总结
  • Python - 闭包Closure
  • python 装饰器(一)
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 仿天猫超市收藏抛物线动画工具库
  • 利用DataURL技术在网页上显示图片
  • 马上搞懂 GeoJSON
  • 那些被忽略的 JavaScript 数组方法细节
  • 我有几个粽子,和一个故事
  • Spring第一个helloWorld
  • 阿里云服务器购买完整流程
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (5)STL算法之复制
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (pycharm)安装python库函数Matplotlib步骤
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (定时器/计数器)中断系统(详解与使用)
  • (每日一问)基础知识:堆与栈的区别
  • (七)Knockout 创建自定义绑定
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • .jks文件(JAVA KeyStore)
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .Net Redis的秒杀Dome和异步执行