OS X 10.11中Rootless的實現與解釋以及關閉方法
為了解釋OS X 10.11中引入的Rootless機制,我翻譯了Quora使用者Eldad Eilam的答案,原文連結見這裡。
定義問題
Rootless討論的前提是假定root賬戶是OS X(或者其他Unix系統)中對抗惡意程式保護作業系統的最後一道防線。意思是一個應用程式一旦獲得了root賬戶許可權,將會獲得系統的無限的許可權。就可以進行實時修改、修改磁碟、替換任何系統檔案等。
目前,許多傳統的Unix作業系統中,root賬戶都是被強密碼保護著的。這裡的問題在於大部分的OS X系統基本上是單使用者系統,也就是不存在單獨的root賬戶密碼,root密碼就是管理員賬戶的密碼。簡單來說,蘋果通過以下途徑來獲取root許可權:
大部分使用者會毫不猶豫的輸入密碼,都不會想他們到底授權了什麼行為。更重要的是,授權給了什麼應用程式。可以說,對於一般的無經驗使用者,他們沒有時間和專業知識來考慮這個問題。他們不會意識到他們一旦輸入了密碼,請求的程序就會獲得root許可權。
什麼是系統整合保護(System Integrity Protection)?
使用了系統整合保護,蘋果決定第三方應用有一些永遠不會被允許的事情。從某些層面來講,這種保護和iOS更像了。第三方應用相比起來更受限制。這就是rootless一詞的由來,系統在某種程度上限制了管理員賬號的許可權。
rootless特性使得某些操作只有蘋果的應用可以被許可(通過程式碼簽名來判斷)。所以第三方應用即使是執行在root許可權中,有一些操作也無法完成。在我的測試中我注意到了以下幾點:
1./System資料夾下的所有檔案都不能被蘋果應用以外的程式修改(例如各種安裝器和升級部件)
2.當前的API例如task_for_pid不能在系統程序下被呼叫了。這意味著以前注入系統程序(Finder、Messages或者系統核心)的程式都不能用了。
3.有意思的是,rootless依然允許已簽名的KEXT核心拓展被載入。問題是KEXT可以進行許多無限制的系統及操作。
總結
Rootless機制的目的很明顯是改進安全性和可靠性,使得惡意軟體以及木馬很難滲透進系統。我很確信他將成為許多惡意軟體開發者的一個挑戰,不過我也很確定人們會發現這一機制很多薄弱的環節。
這個特性對於一些合法的軟體有很多副作用。對此,蘋果提供了一種方法使得使用者可以關閉這個特性,但這需要使用者以恢復模式啟動(開機按住Command+R)
如果想了解更多,可以參考蘋果的WWDC session視訊。
更新關閉方法,相容Beta7:
開機按住Command+R,進入恢復模式,開啟terminal,鍵入:
csrutil disable
回車,重新啟動即可。要重新恢復,只需將disable改為enable。