最新消息:图 床

實現 macOS 內核監控的幾種方法

COOL IAM 352浏览 0评论

作者:keenjoy95

隨着 macOS / iOS 普及程度的提高,mac 平台的內核監控與攻防也漸漸地成為了熱門話題。

筆者近期實踐了一些可行的監控方案,這些方案將有助於構建完整的內核監控系統。

Kernel Authorization

首先值得關注的是 KAuth 機制,該機制於 12 年前引入 Mac OS X 10.4 Tiger 內核。這一可以稱得上是簡陋的回調接口由蘋果官方認可,我們可以在開發者中心找到詳細的示例代碼和文檔 [1]。

實踐后可發現 KAuth 機制很容易上手,但天花板也隨之而來。正如 Jonathan Levin 在《*OS Internals Volume III》[2] 一書中總結的那樣,作為 KPI (Kernel Programming Interface) 的 KAuth 機制缺乏細粒度的監控能力,基於它去設計安防軟件一定會捉襟見肘。

以進程監控回調 KAUTH_FILEOP_EXEC 為例,我們可以得到進程路徑,但無法取得命令行參數。類似的情況還有文件創建時的 fmodep 上下文等。

不過這種限制不應該難倒我們,通過反彙編引擎和動態棧回溯我們可以挖出這些信息。下圖是 Google Chrome 運行時那冗長的啟動參數:
實現 macOS 內核監控的幾種方法

Google Chrome 命令行參數Google Chrome 命令行參數

MAC (Mandatory Access Control) Framework

在 Mac OS X 10.5 Leopard 的 SDK 中蘋果“錯誤的”為大家引入了一種新的監控機制 —— Mandatory Access Control Policy Framework。很快蘋果公司糾正了這一錯誤,徹底將這一接口私有化。在文檔 QA1574 [3] 中蘋果明確的指出第三方不應該使用 MAC 機制,它不屬於 KPI 的一部分。

這意味着只有蘋果公司才能夠調用這套相對靈活而強力的接口,例如:Apple Seatbelt Sandbox [4]、TMSafetyNet (Safety net for Time Machine) [5]、AMFI (Apple Mobile File Integrity) [6] 等等。

MAC Version 47 的接口細節如下:

https://github.com/opensource-apple/xnu/blob/10.12/security/mac_policy.h#L6192

我依稀記得微軟公司也曾經有過類似的私貨,結果這些 Undocumented API 的使用差點讓微軟被起訴到分家,罪名是私用 Undocumented API 涉嫌不公平競爭。

言歸正傳,因為 XNU 源代碼公開,MAC Policy Framework 的使用非常容易上手。但另一個問題也隨之而來,如何監控系統或第三方使用 MAC Framework 的情況?

上述需求的一個隱含問題是:如何保證遍歷系統內部數據結構時的安全,即持有(不導出的)鎖是個關鍵。這種小問題也不應該難倒我們,通過閱讀 XNU 相關源代碼,我們可以很快找到一個解決方案:

在民風彪悍的參數檢查之後

https://github.com/opensource-apple/xnu/blob/10.12/security/mac_base.c#L652

https://github.com/opensource-apple/xnu/blob/10.12/security/mac_base.c#L655

https://github.com/opensource-apple/xnu/blob/10.12/security/mac_base.c#L658

https://github.com/opensource-apple/xnu/blob/10.12/security/mac_base.c#L661

是獲取 mac_policy_mtx 鎖的代碼

https://github.com/opensource-apple/xnu/blob/10.12/security/mac_base.c#L671

在釋放鎖之前

https://github.com/opensource-apple/xnu/blob/10.12/security/mac_base.c#L780

系統給了第三方驅動兩次回調的機會

https://github.com/opensource-apple/xnu/blob/10.12/security/mac_base.c#L770

https://github.com/opensource-apple/xnu/blob/10.12/security/mac_base.c#L774

這兩次寶貴的機會是持鎖的,我們可以用它來安全地 dump 相關內核數據結構。

下圖展示了 TMSafetyNet、Apple Mobile File Integrity 以及 Apple Seatbelt Sandbox 對於 MAC Policy 回調的使用情況:

[2] http://newosxbook.com/

[3] https://developer.apple.com/library/content/qa/qa1574/_index.html

[4] https://developer.apple.com/library/content/documentation/Security/Conceptual/AppSandboxDesignGuide/AboutAppSandbox/AboutAppSandbox.html

[5] https://support.apple.com/en-us/HT201250

[6] https://www.theiphonewiki.com/wiki/AppleMobileFileIntegrity

[7] https://www.synack.com/2015/11/17/monitoring-process-creation-via-the-kernel-part-i/

[8] https://www.fireeye.com/services/freeware/monitor.html

[9] https://msdn.microsoft.com/en-us/library/windows/hardware/ff541918(v=vs.85).aspx

[10] https://blogs.msdn.microsoft.com/windowsvistasecurity/2006/08/12/an-introduction-to-kernel-patch-protection/


转载请注明:IAMCOOL » 實現 macOS 內核監控的幾種方法

0 0 vote
Article Rating
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x