Apple SIP简介及在Clover中如何控制

Apple SIP简介及在Clover中如何控制

来源 http://www.yekki.me/apple-sip-overview-and-how-to-disable-it-in-clover/

什么是Apple SIP

Apple SIP(System Integrity Protection)机制是OSX 10.11开始启用的一套关键的安全保护技术体系。 SIP技术的整个体系主要分为:

  • 文件系统保护(Filesystem protection)

对于系统文件通过沙盒限制root权限,比如:就算你有root根限,也无法往/usr/bin目录写入。

  • 运行时保护(Runtime protection)

受保护的关键系统进程在运行状态下无法被代码注入,挂调试器调试,以及限制内核调试等

  • 内核扩展签名(Kext signing)

10.10中强制要求签名,要想绕过这个限制,就必需加入启动参数“kext-dev-mode=1”(10.11 DB5开始,”rootless=0”的启动参数也被废除了),这个启动参数在10.11中被废除。另外,10.11官方要求第三方kext必须被安装至/Library/Extensions。

Apple官方如何对SIP保护技术进行配置

  • 进入10.11的安装程序或Recovery HD

使用其中所带的终端进行相关操作。在此环境下,由于特殊启动标志位的存在,整个SIP保护技术处在完全关闭状态。可正常修改受保护文件的权限以及所有者。

  • Apple已经提供了csrutil程序来配置SIP

此程序在正常系统环境下只支持检查当前SIP开关状态,若需要开关或调整SIP状态必须前往Recovery或安装程序中执行。 注意:该工具修改SIP配置的功能仅在部分原生支持NVRAM写入的机子上有效。

csrutil命令行工具使用方法:

  • 完全启用SIP(csr-active-config=0x10)
csrutil enable
  • 也可以添加更多参数实现按需开关各项保护技术
csrutil enable [--without kext|fs|debug|dtrace|nvram] [--no-internal]
  • 禁用SIP(csr-active-config=0x77)
csrutil disable

等效命令:

csrutil enable --without kext --without fs --without debug --without dtrace --without nvram
  • 清除SIP标志位(将csr-active-config项从NVRAM中移除,等同于SIP完全开启):
csrutil clear
  • 检查并报告当前SIP开关详细状态
csrutil status

其它可以控制SIP方法

  • 借助Clover(版本>=3250)实现SIP控制
<key>RtVariables</key>
        <dict>
                <key>CsrActiveConfig</key>
                <string>0x13</string>
                <key>BooterConfig</key>
                <string>0x49</string>
        </dict>
  • 借助第三方应用(例如:SIPUtility.app) 这类应用一般需要在Recovery环境下使用,并且要求原生支持NVRAM写入,尽量避免使用。
  • 直接写入NVRAM

例如:

sudo nvram 7C436110-AB2A-4BBB-A880-FE41995C9F82:csr-active-config=%13%00%00%00

SIP自定义配置及各标志位的含义

举例:csr-active-config=0x13,0x13 = 0b00010011

____ ___1 (bit 0): [kext] 允许加载不受信任的kext(与已被废除的kext-dev-mode=1等效)
____ __1_ (bit 1): [fs] 解锁文件系统限制
____ _1__ (bit 2): [debug] 允许task_for_pid()调用
____ 1___ (bit 3): [n/a] 允许内核调试 (官方的csrutil工具无法设置此位)
___1 ____ (bit 4): [internal] Apple内部保留位(csrutil默认会设置此位,实际不会起作用。设置与否均可)
__1_ ____ (bit 5): [dtrace] 解锁dtrace限制
_1__ ____ (bit 6): [nvram] 解锁NVRAM限制
1___ ____ (bit 7): [n/a] 允许设备配置,用于Recovery/安装环境

更多示例及建议值:

  • Clover(需要修改原版kext但未使用kextpatch),建议仅解锁kext加载和文件系统限制:

csr-active-config=0x13或0x3(csrutil enable –without kext –without fs [–no-internal])

  • Clover(已正确配置kextpatch对原版kext进行修改),建议仅解锁kext加载限制以加载第三方未签名kext: csr-active-config=0x11或0x1 (csrutil enable –without kext [–no-internal])
  • Clover(愿意依赖Kext注入功能+已正确配置kextpatch对原版kext进行修改),可完全开启SIP:

csr-active-config=0x10或0x0 (csrutil enable [–no-internal] 或 curutil clear)

注:部分kext无法通过Clover的kext注入来正常工作,例如AppleHDA Injector,CodecCommander.kext等。

  • 关闭SIP中的所有防护,不推荐:

csr-active-config=0xff 在非必要的情况下,不要把提供的这些保护全部关闭,也尽量避免使用Clover默认注入的0x67参数。

至于系统启动标志位,即Clover的config.plist中BooterConfig的含义:

举例:BooterConfig=0x49, 0x0049 = 0b001001001

_ ____ ___1 (bit 0): RebootOnPanic,遇到内核崩溃自动重启
_ ____ __1_ (bit 1): HiDPI,在启动过程中使用HiDPI模式显示
_ ____ _1__ (bit 2): Black,在启动过程中不显示进度条
_ ____ 1___ (bit 3): CSRActiveConfig,将读取当前生效的SIP控制标志位
_ ___1 ____ (bit 4): CSRConfigMode,仅用于Recovery/安装环境,将允许对SIP进行配置
_ __1_ ____ (bit 5): CSRBoot,仅用于Recovery/安装环境,SIP将完全禁用
_ _1__ ____ (bit 6): BlackBg,在启动过程中使用黑色背景
_ 1___ ____ (bit 7): LoginUI,在启动过程中使用登陆界面作为背景
1 ____ ____ (bit 8): InstallUI

把需要的打开的启动标志位设置为1即可。BooterConfig设置为Clover自有设置,可能需要机器支持原生NVRAM读写方可生效。如无特殊需要建议可以不在config.plist中添加此项,等待Clover的后续更新。

SIP对于kext修改及安装的影响

这方面的影响主要体现在强制kext签名以及文件系统保护2个方面:

  • kext签名保护:由于10.10中可用的kext-dev-mode=1启动参数在10.11中已经废除,请参照上面配置SIP以关闭此项保护。 Clover的kext注入功能可绕过kext签名保护从而强制加载第三方kext,但部分kext使用注入功能可能无法正常工作,例如AppleHDA Injector,CodecCommander.kext等。
  • 文件系统保护:如不考虑安全性需求,也请参照上面配置SIP以关闭此项保护,关闭之后即可对任意系统文件进行修改,包括直接修改”/System/Library/Extensions”下的原版kext。 如希望此项技术保持开启,则”/System/Library/Extensions”目录中的kext受到保护,无法直接进行修改。Apple要求第三方kext必须安装至”/Library/Extensions”,此目录并不在保护列表中,因此可在root权限下自由操作。若有需要对SLE下原版kext进行修改也可通过充分利用Clover Kextpatch/kext Injector等技术实现。

============= End

原文地址:https://www.cnblogs.com/lsgxeva/p/11874774.html

时间: 2024-10-11 13:51:03

Apple SIP简介及在Clover中如何控制的相关文章

苹果发布新一代编程语言Swift,边写代码边看结果,Apple Swift 简介

每年进入夏至前一个月,便是各高校毕业生的忙碌的季节-毕业论文,经非权威的调查显示,有近百分之九十的学生不到三十天就完成了论文的写作,更有百分之四十五的人不到十天就完成了毕业论文的写作,由此声音:这毕业论文在这么短的时间内完成质量高吗?对毕业后的工作有大的价值吗,工作单位会在乎毕业论文的质量吗? 因此得观点:毕业论文要不要写? 对于很多即将毕业的同学来说,毕业论文做的好与坏结果都是同样的毕业证,实在没有必要花太多的精力,通过万岁,一切只是为了顺利毕业."如果毕业论文不是跟学位证挂钩的话,我想以大多

Nginx的配置文件简介及在Nginx中配置基于不同ip的虚拟主机

Nginx的配置文件简介及在Nginx中配置基于不同ip的虚拟主机: #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; defa

从头开始-04.C语言中流程控制

分支结构: if语句:当条表达式满足的时候就执行if后面大括号中语句 三种格式: if,if else , if else if else 特点:1.只有一个代码块会被执行 2.若有else那么必有一个代码会被执行 3.一个if语句中只能以if开头,最多只能有一个else,可以有任意个else if switch(表达式){ case 常量: ... break; case 常量1: ... break; default: ... break; } : 使用场景:当一个变量只有几个固定的取值的时

在JMeter测试计划中如何控制业务比例

性能测试混合场景中,我们需要组合多个业务操作到场景中来.比如有一个论坛的业务分布如下:开新帖与回复帖子的比例为2:3,那么我们在JMeter测试计划中如何控制其比例呢? 下面我们介绍两种方式: 1.多线程组方式 2.逻辑控制器控制 多线程组方式: 我们知道JMeter是用线程组来模拟虚拟用户的,JMeter还可以支持一个计划中多个线程组. 利用这个特性我们可以把开新帖业务放在一个线程组中,回帖业务放在另外一个线程组中. 为了制造出业务量的比例关系,我们通过控制线程数来达到效果.如下图: Repl

select标签中怎样控制option的显示数量

最近做项目,需要动态加载数据显示到下拉列表中. 刚开始用select标签,由于数据较多,一次性全部加载,下拉列表会拖得很长,不忍直视(默认会显示20个). 我想控制select中的option显示的个数,例如:只显示5个,其余的通过滚动条来控制显示. 经过反复折腾,发现直接操作select标签无法达到目的,于是改换策略,用input标签和ul标签来模拟select标签. 效果: Demo下载 select标签中怎样控制option的显示数量,布布扣,bubuko.com

百度 主页中在控制台中

try{ if(window.console&&window.console.log) {console.log("一张网页,要经历怎样的过程,才能抵达用户面前?\n 一位新人,要经历怎样的成长,才能站在技术之巅?\n 探寻这里的秘密:\n 体验这里的挑战:\n 成为这里的主人:\n 加入百度,加入网页搜索,你,可以影响世界.\n"); console.log("请将简历发送至 %c [email protected]( 邮件标题请以“姓名-应聘XX职位-来自

Python学习(二):入门篇:python中流程控制与函数编写

python中流程控制与函数编写 Last Eidt 2014/5/2 转载请注明出处http://blog.csdn.net/jxlijunhao 一,流程控制 1)布尔逻辑 Python中利用True来表示逻辑真,False来逻辑假 not :非 and:与 or   :或 ==  :逻辑等 >>> False==True False >>> False==False True >>> not False True >>> Fal

Hadoop中的控制脚本

1.提出问题 在上篇博文中,提到了为什么要配置ssh免密码登录,说是Hadoop控制脚本依赖SSH来执行针对整个集群的操作,那么Hadoop中控制脚本都是什么东西呢?具体是如何通过SSH来针对整个集群的操作?网上完全分布模式下Hadoop的搭建很多,可是看完后,真的了解吗?为什么要配置Hadoop下conf目录下的masters文件和slaves文件,masters文件里面主要记录的是什么东西,slaves文件中又记录的是什么东西,masters文件和slaves文件都有什么作用?好,我看到过一

PHP中一个控制字符串输出的函数

// php 中 一个控制字符串输出的函数(中英文),每行显示多少字数,避免英文的影响 // $str 字符串 // $len 每行显示的字数(汉字×2) function rep($str,$len) { $strlen=strlen($str); $i=0; $finstr=""; $pos=0; while($i<$strlen) { $s1=substr($str,$i,1); $s2=ord($s1); if($s2>0xa0){ $finstr.=substr(