在 macOS 中安全延伸核心
從 macOS 11 開始,如果第三方核心延伸功能(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 Developer Program 的開發者或使用者執行流程,在簽署 kext 之前先進行測試。
建立 AuxKC 之後,其測量值將傳送到「安全隔離區」,以進行簽署並納入 Image4 資料結構中,LLB 可以在開機時對其進行評估。作為 AuxKC 結構的一部分,也會產生一個 kext 收據。這個收據包含實際上納入 AuxKC 中的 kext 列表,因為如果遇到遭禁用的 kext,該集合可能為 UAKL 的子集。LocalPolicy 中包含 AuxKC Image4 資料結構的 SHA384 雜湊和 kext 收據。LLB 在開機時會使用 AuxKC Image4 雜湊進行額外的驗證,以協助確保無法透過較新的 LocalPolicy 來啟動由「安全隔離區」簽署的較舊 AuxKC Image4 檔案。ApplePay 等子系統使用 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,且已透過「Apple 校務管理」、「Apple 商務管理」,或用使用者完成的 MDM 註冊,來在 MDM 中註冊的 Mac。