详解SEAndroid以及Hack其规则(sepolicy)

之前我用Xpose遇到的问题是卸载Xpose最初需要root权限,但是Xposite的原理是破解zygote进程(以后有时间再写xpose的原理)而zygote本身就有root权限,所以Xpose应该能够rootzygote来卸载自身。
但实际操作过程中发现这是不可能的。
经过一番研究发现这与SEAndroid有关。
zygote的一些操作会受到SEAndroid的限制,它的root权限将不允许它做它想做的一切。
接下来我们会详细讲一下SEAndroid,然后我们会讲一下如何改变这个规则。
本文有三个目标:1.了解SEAndorid的工作原理2.能够了解SEAndroid的规则3.能够自己添加、删除和更改其规则(这个选项可能大多数人都不会使用,所以前两个是主要目标)SEAndroid这是Android上的SELinux端口。
SELinux是Linux中的一种系统安全机制。
SELinux的全称是SecurityEnhancedLinux(安全增强型Linux)。
这是MAC(MandatoryAccessControl,强制访问控制系统)的一种实现。
它的目的是清楚地表明进程可以访问哪些资源(文件、网络端口等)。
Android系统是在Linux上实现的。
针对传统Linux系统,NSA开发了SELinux安全机制来提高安全性。
然而,由于Android系统具有独特的用户空间运行时,SELinux可能并不完全适用于Android系统。
为此,NSA和Google为Android系统开发了基于SELinux的SEAndroid。
该机制在Android4.4中首次引入。
SEAndroid和SELinux最大的区别在于SEAndroid将Binder适配到了Android系统中。
登录adbshel​​l后,可以使用getenforce命令检查是否应用。
root后,可以通过setenforce0关闭SEAndroid。
但该功能目前似乎已被禁用。
要理解SEAndorid的概念,就不得不提到DAC和MAC。
DAC是传统的Linux访问控制方法。
DAC可以控制对文件、文件夹、共享等的访问。
在DAC模型中,文件对象的所有者(或管理员)负责访问控制管理。
DAC使用ACL(AccessControlList)向非管理员用户授予各种权限,root用户对文件系统拥有完全自由的控制权。
通俗地说,如果小明创建了一个文件,他就对该文件拥有绝对的控制权,可以独立控制其他人对该文件的访问权限。
文件权限分为三种类型:读(r)、写(w)和执行(x)。
我们可以使用ls-l命令查看每个文件的权限。
然后,您可以使用chmod命令更改其他人对此文件的权限。
(chmod7771.txt命令大家应该都知道,就不详细说了。
)但是这种机制的缺点是root用户可以控制任意文件的权限,为所欲为。
并且控制粒度比较粗。
如果我希望我的文件只能由另一个人读取,并且该人与我不在同一用户组中,我只能通过chmodXX4XX来实现此目的,但在这种情况下,任何人都可以读取我的文件。
文件。
所以它的粒度相对较粗。
因此,Linux引入了MAC机制来强制访问控制。
MAC背后的基本思想是,任何想要在SELinux系统上执行任何操作的进程都必须首先在安全策略配置文件中获得权限。
安全策略配置文件中未指定的任何权限都表明该进程没有权限。
这种机制相当于白名单。
所有进程的权限都配置在这个白名单中。
进程只能在白名单指定的权限范围内执行操作。
只要他想执行不属于他权限的操作,就会执行。
被拒绝了。
MAC不再像DAC那样简单地将进程划分为根进程。
相反,每个进程(Subject,主题)和文件(Object,object)在进程控制(读、写等)时使用类型(Type)进行配置。
文件时,系统将确定进程类型是否有权使用该文件类型。
您可以查看使用ps-Z命令查看进程的安全标签,使用ls-Z命令可以查看文件的标签(安全上下文)。
例如,进程安全上下文中的init进程是init类型,后面的进程是kernel类型。
(其实进程类型也叫Domain)文件安全。
上下文中的类型123.txt是tootfs。
(进程和文件安全上下文标签的格式为user:role:type:security_level。
不用担心其他列。
这适用于SELinux中的其他几种访问控制模型。
在SEAndroid中我们只需要关心它的类型比如初始化进程的u:r:init:s0,我们只需要知道它的类型是init)就可以知道进程和文件的安全上下文,那么如何通过它们的安全上下文来管理权限呢?手机有sepolicy。
该文件是SEAndroid安全策略配置文件。
它包含所有进程的权限配置。
进程只能在其权限范围内执行操作。
即使拥有root权限也无法删除该文件。
当你重置这个文件的内容时,你会发现里面有很多规则(我反转了魅族的4000条规则和三星的20000条规则)。
看两个例子。
alloweduntrusted_appsystem_app_data_file:file{read}allowzygotesdcard_type:file{readwritecreatrename}其具体格式为:allowDomainType:Class{Permission}(domain指的是进程类型)。
通过这种格式对上述三个规则的解释是:1.允许pair的untrusted_app类型的进程。
读取system_app_data_file类型的文件。
2.允许zygote类型进程读取、写入和创建名为sdcard_type的文件。
因此,MAC控制方法如下:当进程管理文件时,系统判断该进程和该文件的上下文,检查该进程所属的类型是否有管理该文件类型的权限。
例如:zygote要读取SD卡上的文件,文件类型为sdcard,zygote的类型(域)为zygote。
系统会检查并找到这条规则allowzygotesdcard_type:file{readwritecreatrename}。
然后该操作将被允许执行。
如果zygote想要删除SD卡上的某个文件,系统检测到对应的规则中没有删除,就会拒绝。
(上面的两条规则和这个例子我只是为了说明情况而编造的。
实际情况下,zygote有删除SD卡上文件的权限。
)DAC和MAC同时工作。
在DAC和MAC上。
经过MAC检测和后续执行后,如果不满足任何机制的条件,则申请将被拒绝。
上面的部分解释了SEAndroid的工作原理。
现在我们知道为什么zygoteroot不能做它想做的一切,以及如何更改SEAndroid规则和扩展zygote权限。
直接更改sepolicy是不行的,因为sepolicy在boot.img中,每次开机都会覆盖并读取sepolicy文件,所以更改无法成功。
因此,您需要立即解压boot.img,替换里面的sepolitics,然后重新打包。
Linux有一套用于解包和打包的工具。
Windows解压工具是Android-Image-Tools-windows.zip。
首先找到手机厂商的官方ROM固件包,找到boot.img并解压。
里面有一个sepolicy文件。
更换sepolitik并更换它,重新包装并将其闪存到手机上。
(好吧,这个其实挺复杂的,但是我想大多数人可能都不需要,所以就先这样写吧,如果需要的话,我稍后再详细写,本来是打算下载自己的工具的,但是没打扰我知道如何上传文件...我找不到它。
我的工具的链接在这里,你可以在这里找到它))https://github.com/xmikos/s。
etools-android1.sepolicy-inject:注入规则2.sesearch:反编译sepolicy3.seinfo:查看sepolicy版本。
修改sepolicy命令:点击phone,直接输入./(对应文件)就可以看到它的使用方法了(下面是我粘贴的命令之一)。
://forum.xda-developers.com/showthread.php?t=2073775博客是学习的起点,而不是终点。


本文是SEAndroid的介绍。
她有一个重要的目标。
只讲了主要部分,并没有涵盖太多内容。
如果你想了解更多关于SEAndroid的知识,可以阅读老罗的文章。
**最后,同学们,请给我们点个赞吧!!!请添加订阅者**。
链接链接:机制简介SEAndroid安全和培训计划。
老罗对SEAndroid策略的分析值得推荐。
深入了解SELinux。

selinux状态已停用对手机有没有影响

你还好吗?这是因为系统固件已停止。
如果系统没有停止运行,就没有问题。
如果关闭系统桌面并返回主屏幕,桌面将保持打开状态。
你明白我的意思吗?