關閉 OS X 10.11 的 System Integrity Protection 有哪些風險?


未經許可,禁止轉載

這個問題有點意思,

在了解風險之前,首先要了解 SIP 到底保護了些什麼,根據 Apple 官方文檔 System Integrity Protection Guide ,SIP 主要有以下保護功能:

  1. File System Protection (文件系統保護)

  2. Runtime Protection (運行時保護)
  3. Kernel Extensions (內核擴展保護)

了解這三點後,風險就從此而來:

1. 失去文件系統保護後,惡意軟體可以通過任何 OS X 的漏洞提權到 Root,更改任意它想要更改的文件,感染任意它想要感染的文件。由於 SIP 的文件系統保護拒絕 Root 用戶更改受保護文件的可能,所以在 SIP 下,即使惡意軟體通過漏洞提權到 Root,也無法修改系統文件。但是一旦關閉 SIP,則一但 OS X 出現漏洞,使得進程可以自行提權後,它可以暢所欲為。這種漏洞不是沒有,去年就有一個非常嚴重的 dyld 漏洞,軟體可以通過這個漏洞直接獲得 Root 許可權。往小了說,這個文件系統保護的功能也可以防止小白用戶手賤刪除系統文件導致系統崩潰的問題。

2. 失去運行時保護,則就等於給惡意軟體開了一個後門。OS X 所有進程都有一個對應的內核 Task ,通過 task_for_pid Mach 調用,則可以控制這個進程。Mach 同時也有很多主機特權介面,用於控制系統,嚴重的比如可以關閉 CPU 內核,直接掛掉系統等,如果一個系統軟體使用了這種特權介面,而又有漏洞的話,那麼攻擊可以棧溢出入手,然後 fork/exec ,即可獲得這個特權介面。SIP 運行時保護則避免了這種可能。另外,一票的動態注入程序,如 Cycript,SIMBL 等等,在 SIP 開啟的狀態下都無法使用,也就避免了利用這些動態注入手段非法獲取信息或修改系統、應用軟體動作,狀態的可能。

3. 內核擴展保護,這是以前版本 OS X 就已經擁有的功能,也就是拒絕載入任何未使用 Apple 簽名的內核擴展(驅動程序)。如果說前面提到了兩個還不是特別嚴重的話,這第三條應該是最為嚴重的。因為內核擴展絕對是完全掌握系統控制權的絕佳地點,它直接運行在內核態,也就是擁有幾乎全部的系統控制權。這時如果你不小心裝上了一個惡意 kext,而 SIP 又沒有開啟的話,理論上你的系統就不再屬於你了,你的任何隱私都會暴露在攻擊者面前。一個很好的例子就說明了這一點,我們都知道 SIP 的控制程序 csrutil 只能在 Recovery (System Install) 狀態下開啟關閉 SIP,但是如果你關閉了 SIP,那麼我就可以通過一個載入惡意的 Kext 並直接在用戶態通知該 Kext,關閉 SIP。

以上這些都不是任何危言聳聽,都是已經被證實,且被實現過的攻擊手段,所以如果你並不知道 SIP 到底有什麼用,到底能保護什麼,則不要隨意的關閉它。

另外,搞定 SIP 的手段其實並非只有 csrutil,SIP 的開啟關閉其實是由一個存在於 NVRAM 中的受保護的變數決定的,當系統啟動時,OS X 內核會收到這個由 EFI 讀取並傳遞過來的變數,決定是否啟用 SIP。那麼,如果你使用了類似 Clover 等三方 Boot Manager/Boot Loader 等,只要它夠惡意,他就可以從 Boot Loader 下手直接在 EFI 環境中更改這個 NVRAM 變數 (我自己已經實現該代碼),使得用戶在未知情況下失去 SIP 保護。

如果你有興趣了解 SIP,可以參考文檔:

1. fg (2015) Rootfool – a small tool to dynamically disable and enable SIP in El Capitan. Available at: Rootfool - a small tool to dynamically disable and enable SIP in El Capitan (Accessed: 9 February 2016).

(2015)

2. Bertin, R., Stephan, bradshaw, mike and io, E. (2015) System integrity protection - adding another layer to apple』s security model. Available at: System Integrity Protection (Accessed: 9 February 2016).

3. Apple (2015) System integrity protection GuidePDF companion file. Available at: https://developer.apple.com/library/prerelease/mac/documentation/Security/Conceptual/System_Integrity_Protection_Guide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40016462-CH1-DontLinkElementID_15 (Accessed: 9 February 2016).

4. gdbinit (2015) Gdbinit/rootfool. Available at: GitHub - gdbinit/rootfool: A small tool to dynamically disable and enable SIP in El Capitan (Accessed: 9 February 2016).

5. Deepak (2015) Guide: Details apple』s system integrity protection (SIP) for Hackintosh. Available at: Guide :: Details Apple"s System Integrity Protection (SIP) for Hackintosh (Accessed: 9 February 2016).*1

*1: 反對 Hackintosh,但是這篇文章真不錯


普通用戶。沒什麼機密的話。這些功能錦上添花。無所謂的啦。我還用這10.10呢!現在FileVault都不用。原來還有個安全傾倒廢紙簍。刪除文件搞很久。後來關掉這個功能。一點傾倒就沒有了。我寧願捨棄那點安全性。

對計算機來說。安全始終是一個tradeoff的事情。越安全必然越複雜!處理時間越長。


好多軟體功能受到 SIP 特性的限制,都宣稱其實關掉沒事兒,但關了就意味著某些安全問題不可控,能否為了軟體的使用而捨棄安全,或者說這個 SIP 的重要性到底對普通用戶意味著什麼?


對於普通用戶而言,只要你不亂裝應用,不手賤運行sudo rm -rf * 此類的命令,完全可以關閉SIP。由於SIP的存在,用時候用Mac反而會很麻煩。


個人感覺,OS X系統原來那種繼承自Unix的簡陋許可權系統,根本適應不了複雜的應用管理(事實上,普通用戶根本沒有這個概念),平時使用App Store上的軟體還好,一旦使用第三方軟體,甚至在一些不那麼保險的地方下載軟體,安裝時root密碼一輸入,什麼都遲了。

哪怕先前的情況注意到了,OS X本身的安全防護並不像Windows進化得那麼迅速和成熟,估計因為缺乏企業用戶的關係,補丁打得也沒那麼及時,在外面裸奔的時候仍然很容易中招。現在這個,算是遲到卻必要的功能吧。特別是要用到網上支付的,一定不要關。


推薦閱讀:

Mac自帶的Vim怎麼升級?
Mac環境eclipse無法運行,報「意外退出」,麻煩各位看看?
蘋果以前干過什麼讓用戶怨聲載道的事情?
學生 Surface 和 Mac 該選哪個?

TAG:Mac | macOS | MacOSX使用技巧 |