Android SELinux——基础介绍(一)

        Android 系统的安全策略是保护用户的隐私和数据不受侵害的重要保证,一个相对安全的计算环境对于确保移动设备的安全至关重要。随着新的威胁不断出现,Android 的安全策略也在不断发展和完善,以应对新的挑战。

一、概念介绍

1、SELinux

        SELinux(Security-Enhanced Linux)是一种基于强制访问控制 MAC 的安全增强模块,最初由美国国家安全局(NSA)开发,用于提高 Linux 操作系统的安全性。

        它基于 FLASK(Flux Advanced Security Kernel)模型,这是一个由美国国防部门开发的安全内核模型。SELinux 通过 LSM 接口集成到 Linux 内核中,提供了比传统的自主访问控制 DAC 更强的安全性和灵活性。SELinux 的安全策略定义了系统中的所有对象(如文件、目录、网络端口等)和主体(如进程)之间的访问关系,确保只有经过授权的操作才能被执行。

DAC

        DAC 即 Discretionary Access control,⾃主访问控制,即系统只提供基本的验证,特定资源的所有者 可以控制与该资源关联的访问权限。这种系统通常⽐较粗放,并且容易出现⽆意中提权的问题。

  • Linux DAC 采⽤了⼀种⾮常简单的策略,将资源访问者分成三类,分别是Owner、Group 和 Other,资源针对这三类访问者设置不同的访问权限。⽽访问权限⼜分成 read、write 和 execute。
  • 访问者通常是进程,有⾃⼰的 uid/gid,通过 uid/gid 和⽂件权限匹配,来确定是否可以访问。将 root 权限根据不同的应⽤场景划分成许多的 Root Capabilities,其中如果CAP_DAC_OVERRIDE 这项的话,可以直接绕过 Linux DAC 限制。
  • Linux DAC 有明显的不⾜,其中⼀个重要点就是 root 权限“⽆法⽆天”,⼏乎可以做任意情,⼀旦⼊侵者拿到 root 权限,即已经完全掌控了系统。另外,每⼀个进程默认都拿到对应这个⽤⼾的所有权限,可以改动/删除这个⽤⼾的所有⽂件资源,很明显,这个难以防⽌恶意软件。

MAC

        MAC 即 Mandatory Access control,强制性访问控制, 即系统针对每⼀项访问都进⾏严格限制,每次收到访问请求时都先咨询核⼼机构,再做出决定。

  • Linux MAC 针对 DAC 的不⾜,要求系统对每⼀项访问进⾏检查,每访问⼀个⽂件资源都需要进⾏对性的验证。⽽这个针对性的验证是根据已经定义好了的策略进⾏的。在 Linux Kernel,所有 MAC 机制都是搭建在 Linux Security Modules(LSM)基础上,包括有:SELinuxApparmor、Smack 和 TOMOYO Linux 等。 ⽬前 SELinux 已经成了事实上的⾏业标准。
  • 针对 Linux DAC,MAC 可以明显弥补 DAC 的缺陷,⼀⽅⾯限制 root 权限,即使你有 root 权限,如果⽆法通过 MAC 验证,那么⼀样的⽆法真正执⾏相关的操作。另外对每⼀项权限进⾏了更加整的细化,可限制⽤⼾ 对资源的访问⾏为。

2、SEAndroid

        SEAndroid (Security-Enhanced Android) 是 SELinux 在 Android 系统上的应用,它是在 Android 4.4 版本中正式引入的。

        SEAndroid 为 Android 提供了一种基于 SELinux 的强制访问控制系统,增强了移动设备的安全性。它同样使用了 SELinux 的 MAC 模型来限制应用程序和服务的权限,从而防止恶意软件或误操作导致的数据泄露或其他安全问题。SEAndroid 的实现允许 Android 系统中的每个应用程序运行在一个受限的安全环境中,这样即使某个应用程序被攻破,攻击者也难以访问其他应用程序或系统数据。

演变过程

        SELinux 在 Android 平台上的演变经历了多个阶段,逐步加强了系统的安全性。以下是各个版本的主要变化:

  • 低于 Android 4.3:默认不支持 SELinux。在 Android 4.3 之前的版本中,默认情况下不启用 SELinux。SELinux 可能作为一个可选组件存在,但大多数设备并未启用。
  • Android 4.3:宽容模式(Permissive Mode)。在 Android 4.3 中,SELinux 被引入并默认处于宽容模式。在宽容模式下,SELinux 会记录所有违反安全策略的行为,但不会阻止这些行为。这主要是为了让开发者和系统管理员逐渐适应 SELinux,并检查现有系统是否存在潜在的安全问题。
  • Android 4.4:部分强制模式(Partial Enforcing Mode)。在 Android 4.4 中,SELinux 默认仍然是宽容模式,但在某些设备上开始尝试部分强制模式。在部分强制模式下,SELinux 对某些关键系统组件和资源进行强制访问控制。大多数设备依然处于宽容模式,但部分设备开始逐步过渡到强制模式。
  • Android 5.1:默认强制模式(Enforcing Mode)。在 Android 5.1 中,SELinux 默认启用强制模式。在强制模式下,SELinux 会严格地执行安全策略,阻止所有未授权的访问。这标志着 SELinux 在 Android 平台上全面启用,并成为默认的安全机制。
  • Android 8.0:强制模式且 Sepolicy 规则被分成多个部分。在 Android 8.0 中,SELinux 继续强化其安全性,并对 Sepolicy(安全策略)进行了改进。Sepolicy 规则被分成多个部分,以更好地组织和管理复杂的策略。这种拆分有助于提高策略的可读性和可维护性,同时也便于开发者和系统管理员进行更细粒度的控制。

        通过这些演变,SELinux 在 Android 平台上逐步成为了重要的安全机制,显著提升了系统的安全性。

3、二者区别

  • 应用场景:SELinux 主要应用于桌面和服务器环境的 Linux 系统,而 SEAndroid 是 SELinux 在移动操作系统 Android 上的具体实现。
  • 定制化:SEAndroid 针对移动设备的特点进行了定制,例如,它考虑了移动设备特有的硬件组件和服务,如相机、GPS、Wi-Fi 等,以及移动应用生态系统的需求。
  • 策略配置:虽然两者都基于 SELinux 的 MAC 模型,但是 SEAndroid 的安全策略可能更侧重于移动设备的安全需求,包括应用程序隔离、用户数据保护等方面。
  • 兼容性:SEAndroid 在设计时考虑到了与 Android 系统的兼容性,确保在不影响用户体验的情况下提供安全增强功能。

        总的来说,SEAndroid 是 SELinux 在 Android 平台上的特定实现,它继承了 SELinux 的许多特性,同时针对移动设备进行了优化和调整。 

命名习惯

        在 Android 平台上,尽管技术基础是 SELinux,但我们通常听到的是 SELinux 而不是 SEAndroid,这是因为:

  • 命名习惯:SELinux 已经是一个广为人知的品牌和技术名词,在技术社区中有很高的知名度。因此,即使是 Android 中使用的版本,也倾向于沿用这个名称,以便于理解和沟通。
  • 技术一致性:SEAndroid 实际上就是 SELinux 在 Android 系统中的一个实例化应用。它的架构和机制与 SELinux 完全相同,只是针对 Android 系统进行了一些必要的调整和适配,以适应移动设备的特殊需求。
  • 品牌统一:Google 在推广 Android 安全性时,可能会选择使用更为人熟知的 SELinux 名称,而不是创造一个新的品牌 SEAndroid。这样可以利用 SELinux 的声誉来增强用户对 Android 安全性的信任。
  • 文档和资料:由于 SELinux 的文档和资料非常丰富,使用 SELinux 这个术语也有助于开发者更容易地找到相关的文档和支持资料。

        尽管如此,在某些场合下,特别是在讨论 Android 安全特性的具体实现时,SEAndroid 这个术语仍然会被提及,以强调这是 SELinux 在 Android 上的应用。然而,在日常交流中,SELinux 这个术语更加通用。

二、SELinux架构

1、SELinux作⽤ 

        提⾼ Android 安全性。⾮法操作会被阻⽌,并且尝试进⾏的所有违规⾏为都会被内核记录到 dmesg 和 logcat 中。

        SELinux 使⽤类型强制来改进强制访问控制。所有的主体(程序进程)对客体(⽂件/socket等资源)的访问都有⼀条 TE 规则来许可。当程序访问⼀个资源的时候,系统会搜索所有的 TE 规则集,并根据结果进⾏处理。这个规则集是由访问向量规则(AV, Access Vector)来描述的。

        内核向外部暴露允许访问的资源权限,由 TE 来描述主体拥有什么样的访问权。

  • TE:即 Type Enforcement,它是根据 Security Label 中的 type 进⾏权限审查,审查 subject type 对 object type 的某个 class 类型中某种 permission 是否具有访问权限,是⽬前使⽤最为⼴泛的 MAC 审查机制,简单易⽤。
  • AVC:即Access Vector Cache,它是访问缓存,⽤来记录以往的访问验证情况,以便提⾼效率,快速处理。

2、SELinux架构

         SELinux 是典型的 MAC - Mandatory Access Controls 实现,对系统中每个对象都⽣成⼀个安全上下⽂ (Security Context),每⼀个对象访问系统的资源都要进⾏安全上下⽂审查。审查的规则包括类型强制检测(type enforcement),多层安全审查(Multi-Level Security),以及基于⻆⾊的访问控制(RBAC: Role Based Access Control)。

整体结构

        SELinux 包含五个基本组成:

  • Security Policy Database:这是 SELinux 安全策略的核心部分,包含了所有的安全策略规则。这些规则定义了系统中不同安全标签(security labels)之间的访问权限。策略数据库决定了哪些主体(如进程)可以访问哪些客体(如文件),并且规定了访问的方式。
  • selinuxfs:⽤于处理⽂件系统的辅助模块。它是一个虚拟文件系统,它允许 SELinux 存储和检索有关系统状态的信息,比如当前的策略设置、上下文信息等。开发者和系统管理员可以通过访问 selinuxfs 来获取或修改 SELinux 的状态和配置。
  • Access Vector Cache (AVC):访问向量缓存。AVC 是一种缓存机制,用于存储最近的访问决策结果,以加速未来的访问控制决策过程。当一个访问请求首次发生时,SELinux 会根据策略数据库做出决策并将结果缓存起来。如果同样的请求再次发生,SELinux 可以直接从 AVC 中获取结果,从而提高性能。
  • Policy enforcement server:⽤于验证 security context。这个组件负责实际执行安全策略,当一个进程尝试访问一个资源时,它会检查该进程的安全上下文(security context)是否允许它进行访问。如果访问请求违反了安全策略,policy enforcement server 将拒绝访问,并且可能记录 AVC 日志条目。
  • 集成 Linux Security Modules 的 hooks sets:SELinux 作为 LSM(Linux Security Module)框架的一部分,使用了一系列的 hook 函数,这些函数在关键的系统调用点被调用。这些 hook 函数允许 SELinux 在适当的时候介入并实施其安全策略,从而确保所有的访问请求都符合定义的安全规则。

访问流程

        访问流程如下,展示了进程通过系统调用访问某个资源时,SELinux 的验证过程:

  • 进程发起系统调用:进程通过系统调用(System Call)尝试访问某个资源。
  • 内核基本检测:进入内核后,首先进行一些基本的检测(如参数合法性检查等)。如果发现异常,则直接返回错误给用户空间。
  • Linux Kernel DAC 审查:内核会对请求进行自主访问控制 DAC 审查。如果 DAC 检查失败,则直接返回错误给用户空间。
  • 调用 LSM hooks:如果 DAC 审查通过,内核会调用 LSM 的相关 hooks。这些 hooks 允许不同的安全模块介入访问控制流程。
  • SELinux hooks 进行 MAC 验证:SELinux 通过 LSM hooks 接收到访问请求,并进行强制访问控制 MAC 验证。SELinux 会检查请求的安全上下文(security context)是否允许访问目标资源。如果 MAC 验证失败,则直接返回错误给用户空间。
  • 访问真正的系统资源:如果所有检查都通过,内核将继续执行系统调用,并访问真正的系统资源。
  • 返回用户态,将结果反馈:内核将访问结果返回给用户态进程。

        这个流程确保了 SELinux 在整个访问过程中能够有效地进行安全控制。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/889136.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5款人声分离免费软件分享,从入门到精通,伴奏提取分分钟拿捏!

人声分离通常是音乐制作、混音和卡拉OK中常用的重要技术之一。它的核心是将乐器伴奏从原始音轨中分离出来,使得用户可以单独处理或重混音频,创造出清晰干净的伴奏轨道。若缺乏强大的音频剪辑软件或专业人声分离工具,这一过程往往会比较困难。…

知识图谱入门——4:Protégé 5.6.4安装和主要功能介绍、常用插件(2024年10月2日):知识图谱构建的利器

Protg 是斯坦福大学开发的一款开放源代码的本体编辑工具。它为构建、共享和管理本体(Ontologies)提供了一个强大的平台,广泛应用于语义网、知识管理、自然语言处理等领域,特别是知识图谱的开发和管理。Protg 支持 OWL(…

springboot开发网站-使用redis数据库定时特征限制指定ip的访问次数

springboot开发网站-使用redis数据库定时特征限制指定ip的访问次数。近期网站经常有人恶意访问,提交了很多垃圾信息。为了屏蔽这类灌水帖,打算屏蔽ip地址,限制24小时内只能访问1次某个接口。下面是测试的案例代码内容。 1:首先&am…

C语言预处理详解(上)(30)

文章目录 前言一、预定义符号二、#define定义标识符三、#define定义宏四、#define的替换规则五、带有副作用的宏六、宏和函数的对比七、#undef的作用八、# 和#的作用##的作用 总结 前言 C语言的入门学习差不多要到尾声了,感觉如何呢~   前文说编译的第一步就是预编…

Java入门:10.Java中的包

1 包 类似于OS中的文件夹。 用来存放一组含义类似或相同的java类(接口),方便分类和管理。 对应关系: java程序中的类 --- os中的.java文件 java程序中的包 --- os中的文件夹 如何指定包: 在os中创建对应的文件夹…

Java 方法的重载

1.重载:在一个类中,方法的函数名相同,但形参不同。 结果: 2.方法重载的规则: (1)方法名必须相同。(例如:重名的人有很多) (2&#x…

Aegisub字幕自动化及函数篇(图文教程附有gif动图展示)(二)

目录 template行 template pre-line template line template syl template syl noblank template char template notext template pre-line notext template syl noblank notext template keeptags ​编辑 template loop number 内联变量 ​编辑 remeber函数 re…

平台数据分类与聚类实验报告

参考书籍:《数据流挖掘与在线学习算法》 李志杰 1.6.1 实验目的 本书内容以及课程实验主要涉及Java程序设计语言、数据挖掘工具Weka和数据流机器学习平台MOA,因此,需要安装、配置并熟悉实验环境。Java、Weka和MOA都是开源小软件&#xff0…

SpringBoot在线教育平台:设计与实现的深度解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

SQL进阶技巧:Order by 中 NULLS LAST特性使用?

目录 1 需求描述 2 数据准备 3 问题分析 4 小结 如果觉得本文对你有帮助,想进一步学习SQL语言这门艺术的,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下: 数字化建设通关指南 专栏 原价99,现在活动价59…

ElasticSearch学习笔记(三)Ubuntu 2204 server elasticsearch集群配置

如果你只是学习elasticsearch的增、删、改、查等相关操作,那么在windows上安装一个ES就可以了。但是你如果想在你的生产环境中使用Elasticsearch提供的强大的功能,那么还是建议你使用Linux操作系统。 本文以在Ubuntu 2204 server中安装elasticsearch 8.…

MATLAB智能优化算法-学习笔记(4)——灰狼优化算法求解旅行商问题【过程+代码】

灰狼优化算法(Grey Wolf Optimizer, GWO)是一种基于灰狼社会行为的元启发式算法,主要模拟灰狼群体的捕猎行为(包括围攻、追捕、搜寻猎物等过程)。多旅行商问题(Multi-Traveling Salesman Problem, mTSP)是旅行商问题(TSP)的扩展,它涉及多个旅行商(车辆)从一个起点城…

使用AI编码,这些安全风险你真的了解吗?

前言 随着AI技术的飞速发展与普及,企业开发人员对AI编码助手工具如Copilot的依赖度日益增强,使用AI编码助手工具虽然能显著提升编程效率与质量,但同时也存在一系列的潜在风险。 许多开发人员可能未意识到,如果他们的现有代码库中…

CMSIS-RTOS V2封装层专题视频,一期视频将常用配置和用法梳理清楚,适用于RTX5和FreeRTOS(2024-09-28)

【前言】 本期视频就一个任务,通过ARM官方的CMSIS RTOS文档,将常用配置和用法给大家梳理清楚。 对于初次使用CMSIS-RTOS的用户来说,通过梳理官方文档,可以系统的了解各种用法,方便大家再进一步的自学或者应用&#x…

数据结构——七种排序(java)实现

文章目录 直接插入排序希尔排序选择排序冒泡排序快速排序归并排序计数排序 直接插入排序 思想: /*** 直接插入排序* 具有稳定性* 时间复杂度为:(计算时间复杂度的时候应计算执行次数最多的语句类,在直接插入排序中次数最多的语句…

Ajax ( 是什么、URL、axios、HTTP、快速收集表单 )Day01

AJAX 一、Ajax是什么1.1名词解释1.1.1 服务器1.1.2 同步与异步1. 同步(Synchronous)2. 异步(Asynchronous)3. 异步 vs 同步 场景4. 异步在 Web 开发中的常见应用: 1.2 URL 统一资源定位符1.2.1 URL - 查询参数1.2.2 ax…

maven打包常用命令

跳过tset打包 mvn package -Dmaven.test.skiptrue

什么是 ARP 欺骗和缓存中毒攻击?

如果您熟悉蒙面歌王,您就会明白蒙面歌王的概念:有人伪装成别人。然后,当面具掉下来时,您会大吃一惊,知道了这位名人是谁。类似的事情也发生在 ARP 欺骗攻击中,只是令人惊讶的是,威胁行为者利用他…

获取期货股票历史数据以及均线策略分析

【数据获取】银河金融数据库(yinhedata.com)能够获取国内外金融股票、期货历史行情数据,包含各分钟级别。 【搭建策略】均线策略作为一种广泛应用于股票、期货等市场的技术分析方法,凭借其简单易懂、操作性强等特点,深…

AI绘画Stable Diffusion WebUI 2个超好用的办法-实现图片光照调节,快速生成你想要的光感大片!

大家好,我是画画的小强 在摄影艺术中,灯光的运用对于照片的质量和情感表达至关重要。它不仅能够彰显主题,还能为画面增添深度与立体感,帮助传递感情,以及凸显细节之美。 下面,我将向大家展示如何用AI绘画…