什麼是Apple SIP
Apple SIP(System Integrity Protection)機制是OSX 10.11開始啟用的一套關鍵的安全保護技術體系。 SIP技術的整個體系主要分為:
- 文件系統保護(Filesystem protection)
對於系統文件通過沙盒限制root許可權,比如:就算你有root根限,也無法往/usr/bin目錄寫入。
- 運行時保護(Runtime protection)
受保護的關鍵系統進程在運行狀態下無法被代碼注入,掛調試器調試,以及限制內核調試等
10.10中強制要求籤名,要想繞過這個限制,就必需加入啟動參數「kext-dev-mode=1」(10.11 DB5開始,」rootless=0」的啟動參數也被廢除了),這個啟動參數在10.11中被廢除。另外,10.11官方要求第三方kext必須被安裝至/Library/Extensions。
Apple官方如何對SIP保護技術進行配置
使用其中所帶的終端進行相關操作。在此環境下,由於特殊啟動標誌位的存在,整個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方法
-
借助Clover(版本>=3250)實現SIP控制
RtVariables
CsrActiveConfig
0x13
BooterConfig
0x49
-
借助第三方應用(例如: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])
csr-active-config=0x10或0x0 (csrutil enable [–no-internal] 或 curutil clear)
注:部分kext無法通過Clover的kext注入來正常工作,例如AppleHDA Injector,CodecCommander.kext等。
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等技術實現。