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
Apple SIP简介及在Clover中如何控制的更多相关文章
- SIP简介,第1部分:SIP初探
说明:以下内容来着之前下载的一份文档,现将概念部分摘录在BLog,完成文档将放在文件中. SIP简介,第1部分:SIP初探 时间:2006-04-07作者:Emmanuel Proulx浏览次数: 2 ...
- SIP简介
说明:以下内容来着之前下载的一份文档,现将概念部分摘录在BLog,如需要完整文档将放在文件中或留言. SIP简介,第1部分:SIP初探 时间:2006-04-07作者:Emmanuel Proulx浏 ...
- 浅谈Kotlin(一):简介及Android Studio中配置
浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 前言: 今日新闻:谷 ...
- Nginx的配置文件简介及在Nginx中配置基于不同ip的虚拟主机
Nginx的配置文件简介及在Nginx中配置基于不同ip的虚拟主机: #user nobody; worker_processes 1; #error_log logs/error.log; #err ...
- House of apple 一种新的glibc中IO攻击方法
目录 House of apple 一种新的glibc中IO攻击方法 前言 利用条件 利用原理 利用思路 思路一:修改tcache线程变量 思路二:修改mp_结构体 思路三:修改pointer_gua ...
- 04 Spring:01.Spring框架简介&&02.程序间耦合&&03.Spring的 IOC 和 DI&&08.面向切面编程 AOP&&10.Spring中事务控制
spring共四天 第一天:spring框架的概述以及spring中基于XML的IOC配置 第二天:spring中基于注解的IOC和ioc的案例 第三天:spring中的aop和基于XML以及注解的A ...
- 关于.NET中的控制反转(三)- 依赖注入之 Autofac
一.Autofac简介 Autofac和其他容器的不同之处是它和C#语言的结合非常紧密,在使用过程中对你的应用的侵入性几乎为零,更容易与第三方的组件集成.Autofac的主要特性如下: 组件侵入性为零 ...
- 轻松了解Spring中的控制反转和依赖注入(二)
紧接上一篇文章<轻松了解Spring中的控制反转和依赖注入>讲解了SpringIOC和DI的基本概念,这篇文章我们模拟一下SpringIOC的工作机制,使我们更加深刻的理解其中的工作. 类 ...
- 最近调试HEVC中码率控制, 发现HM里面一个重大bug
最近调试HEVC中码率控制, 发现里面一个重大bug! 码率控制中有这么一个函数: Int TEncRCGOP::xEstGOPTargetBits( TEncRCSeq* encRCSeq, Int ...
随机推荐
- java.lang.IllegalStateException: No instances www.xxxx.com available for localhost
在SpringCloud的项目中,我们使用了自动配置的OAuth2RestTemplate,RestTemplate,但是在使用这些restTemplate的时候,url必须是服务的名称,如果要调用真 ...
- 动态查找之二叉树查找 c++实现
算法思想 二叉搜索树(又称二叉查找树或二叉排序树)BST树 二叉查找树 二叉查找树,也称二叉搜索树,或二叉排序树.其定义也比较简单,要么是一颗空树,要么就是具有如下性质的二叉树: (1)若任意节点的左 ...
- 6条shell小技巧,让脚本显得不再业余【转】
如何能让自己的shell显得不那么业余?下面6点实践一定有用. 画外音:本篇文章源自Google的一篇实践,抽取了部分1分钟能读完的内容,加入了一些分析. 一.以下面的语句开场 set -o noun ...
- Policy Gradient Algorithms
Policy Gradient Algorithms 2019-10-02 17:37:47 This blog is from: https://lilianweng.github.io/lil-l ...
- kotlin基础 枚举
enum class WEEK {星期一,星期二,星期三,星期四,星期五,星期六,星期日} Kotlin 枚举类 枚举类最基本的用法是实现一个类型安全的枚举. 枚举常量用逗号分隔,每个枚举常量都是一个 ...
- (原)理解码率控制模式(x264,x265,vpx)
理解码率控制模式(x264,x265,vpx) 原文链接:https://slhck.info/video/2017/03/01/rate-control.html 翻译:lihaiping1603@ ...
- 爬虫相关-scrapy框架介绍
性能相关-进程.线程.协程 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢. 串行执行 import requests def fetc ...
- python安装 错误 “User installations are disabled via policy on the machine”
解决方法一: 1.在运行里输入 gpedit.msc 2.计算机配置管理>>管理模板>>windows组件>>windows Installer>> ...
- pom中parent和dependency区别以及dependencyManagement区别
真的很详细 很感动 1.在同一个pom文件下,如果<dependencies>和<dependencyManagement>中都对该jar做了依赖,以<dependenc ...
- js中常见字符串类型操作方法(2)
toLowerCase(),toLocalLowerCase(),toUpperCase(),toLocaleUpperCase() var stringValue = "hello wor ...