在 macOS 中安全延伸核心
從 macOS 11 開始,如果第三方核心延伸功能(kext)已啟用,就不能按照要求載入核心中。相反地,這些 kext 會合併到一個會在開機程序期間載入的輔助核心集合(AuxKC)中。對於配備 Apple 晶片的 Mac,AuxKC 的測量值已簽署到 LocalPolicy 中(而對於先前的硬件,AuxKC 則會留在資料卷宗上)。如要重建 AuxKC,需要用户許可並重新啟動 macOS,以將變更載入核心中,且需要將安全啟動設為「較低保安」。
重要事項:我們已不建議在 macOS 中使用 kext。kext 會對作業系統帶來完整性和可靠性風險,Apple 建議用户應選擇不需要延伸核心的解決方案。
配備 Apple 晶片的 Mac 上的核心延伸功能
配備 Apple 晶片的 Mac 必須直接啟用 kext,方式為在開機時按住電源按鈕進入 One True Recovery(1TR)模式,然後降級為「較低保安」,並剔選該剔選框來啟用核心延伸功能。此動作還需要輸入管理員密碼以授權降級。1TR 和密碼需求的結合讓純軟件攻擊者很難從 macOS 內部開始將 kext 注入 macOS(他們隨後可藉此取得核心權限)。
在用户授權 kext 載入後,上述「用户許可的核心延伸功能載入」流程會用於授權 kext 的安裝。用於上述流程的授權也會用於在 LocalPolicy 中截取用户授權 kext 列表(UAKL)的 SHA384 雜湊值。之後核心管理服務程式(kmd
)僅負責驗證在 UAKL 中找到的那些包含在 AuxKC 中的 kext。
如果啟用了「系統完整保護」(SIP),則會在將每個 kext 的簽署納入 AuxKC 前,對其進行驗證。
如果 SIP 已停用,則不會強制執行 kext 簽署。
這個作法允許「寬鬆保安」為沒有參與 Apple 開發者計劃的開發者或用户執行流程,在簽署 kext 之前先進行測試。
建立 AuxKC 之後,其測量值將傳送到「安全隔離區」,以進行簽署並納入 Image4 資料結構中,LLB 可以在開機時對其進行評估。作為 AuxKC 結構的一部份,也會產生一筆 kext 收據。這個收據包含實際上納入 AuxKC 中的 kext 列表,因為如果遇到遭禁用的 kext,該集合可能為 UAKL 的子集。LocalPolicy 中包含 AuxKC Image4 資料結構的 SHA384 雜湊值和 kext 收據。iBoot 在開機時會使用 AuxKC Image4 雜湊值進行額外的驗證,以協助確保無法使用更新的 LocalPolicy 啟動由「安全隔離區」簽署的較舊 AuxKC Image4 檔案。ApplePay 等子系統使用 kext 收據來確定目前是否載入了任何 kext,這些 kext 可能會干擾 macOS 的可信度。如果有 kext 已載入,那麼 Apple Pay 功能可能會遭停用。
系統延伸功能
macOS 10.15 可讓開發者能藉由安裝和管理在用户空間中(而非核心層級)執行的系統延伸功能來延伸 macOS 的功能。透過在用户空間運行,系統延伸功能提高了 macOS 的穩定性和保安。即使 kext 本質上具有整個作業系統的完全存取權,在用户空間中執行的延伸功能只會獲得執行其指定功能所需的權限。
開發者可使用框架(包含 DriverKit、EndpointSecurity 和 NetworkExtension)來寫入 USB 及人性化介面驅動程式、端點安全工具(例如防止資料遺失或其他端點代理程式)及 VPN 和網絡工具,而不需要編寫 kext。只有當第三方保安代理程式採用這些 API,或具有移入第三方保安代理程式和移出核心延伸功能的完備藍圖時,才應使用這類代理程式。
用户許可的核心延伸功能載入
為改進保安,需要用户同意來載入核心延伸功能(其於 macOS 10.13 安裝的同時或之後安裝)。這個程序稱為用户許可的核心延伸功能載入。亦需要管理員授權來允許核心延伸功能。在以下情況核心延伸功能無需取得授權:
在執行 macOS 10.12 或較早版本時已安裝在 Mac 上
用以取代先前允許的延伸功能
如使用 Mac 從 RecoveryOS 開機時可用的
spctl
命令列工具,無需取得用户同意便可載入允許使用流動裝置管理(MDM)設定來載入
從 macOS 10.13.2 起,用户可使用 MDM 來指定無需用户同意亦能載入的核心延伸功能列表。此選項僅適用於系統為 macOS 10.13.2 且已在 MDM 中註冊的 Mac,包括透過 Apple School Manager、Apple Business Manager 或由用户完成註冊的 MDM。