作業系統完整性
Apple 設計的作業系統以保安為重點。這樣的設計包硬件信任根(用來啟用安全啟動)以及快速且安全的保安軟件更新程序。Apple 作業系統也採用特製的晶片式硬件功能,可協助防止系統執行期間遭到惡意利用。這些執行階段功能可保護受信任程式碼在執行時的完整性。簡而言之,Apple 作業系統軟件可幫助緩解攻擊和善用技術,—無論源自於惡意 App、網絡或經由任何其他管道都能應付。此處列出的防護措施可於採用受支援 Apple 設計 SoC 的裝置上使用,包含 iOS、iPadOS、tvOS、watchOS,現在還有配備 Apple 晶片的 Mac 上的 macOS。
功能 | A10 | A11、S3 | A12、A13、A14 S4–S9 | A15、A16、A17 | M1、M2、M3 |
請參閲下方的附註 1。 | |||||
請參閲下方的附註 2。 |
附註 1:「頁面保護層」(PPL)要求平台只執行已簽署且受信任的程式碼;此保安模式不適用 macOS。
附註 2:A15、A16 和 A17 支援「安全頁表監視器」(SPTM),並在支援的平台上取代「頁面保護層」。
核心完整保護
作業系統核心完成初始化後,會啟用「核心完整保護」(KIP)以協助防止核心與驅動程式程式碼遭修改。記憶體控制器提供一個受保護的實體記憶體區域,iBoot 會用此區域來載入核心與核心延伸功能。啟動完成後,記憶體控制器會拒絕對受保護的實體記憶體區域進行寫入。「應用程式處理器」的「記憶體管理單元」(MMU)已設定為協助防止從受保護記憶體區域外的實體記憶體對映特權碼,以及協助防止核心記憶體區域內的實體記憶體可寫入對映。
為了防止重新設定,用於啟用 KIP 的硬件會在開機程序完成後被鎖定。
快速權限取用限制
自 Apple A11 仿生晶片和 S3 SoC 開始,引入了全新的硬件原語。這個原語(「快速權限取用限制」)包含一個 CPU 暫存器,可快速限制每個執行緒的權限。透過「快速權限取用限制」(又稱為 APRR 暫存器),支援的作業系統可以移除記憶體中的執行權限,而不會造成系統呼叫的額外負荷和分頁表清查或排清。這些暫存器提供了額外一層減緩機制,可應付來自網絡的攻擊,尤其是任何即時編譯(just-in-time compiled)程式碼,因為記憶體在遭讀取和可寫入的同時無法有效執行。
系統協同處理器完整保護
協同處理器韌體處理許多重要系統任務,例如「安全隔離區」、影像感應器處理器以及動作協同處理器。因此其保安是整套系統保安的關鍵所在。為避免協同處理器韌體遭修改,Apple 採用系統協同處理器完整保護(SCIP)機制。
SCIP 的運作方式很類似「核心完整保護」(KIP):在開機時,iBoot 會將每個協同處理器的韌體載入受保護的記憶體區域(此記憶體區域是預先保留且與 KIP 區域隔離)。iBoot 會設定每個協同處理器的記憶體單元,以協助防止以下情況:
受保護的記憶體區域部份外的可執行對映
受保護的記憶體區域部份內的可寫入對映
在開機時,如要設定「安全隔離區」的 SCIP,系統會使用「安全隔離區」的作業系統。開機程序完成後,用於啟用 SCIP 的硬件會被鎖定。其設計用意是防止重新設定。
指標認證碼
指標認證碼(PAC)用於防止記憶體損毀錯誤遭惡意利用。系統軟件和內置的 App 會使用 PAC 來協助防止修改函式指標和傳回地址(程式碼指標)。PAC 使用五個秘密的 128 位元值來簽署核心指示和資料,且每個用户空間程序都有自己的 B 密鑰。系統會對項目進行「加鹽」處理和簽署,如下所示。
項目 | 索引鍵 | 鹽值 |
---|---|---|
函式傳回地址 | IB | 儲存地址 |
函式指標 | IA | 0 |
區塊調用函式 | IA | 儲存地址 |
Objective-C 方法快取 | IB | 儲存地址 + 類別 + 選擇器 |
C++ V-Table 輸入項目 | IA | 儲存地址 + 雜湊值 (雜湊值方法名稱) |
計算 Goto 標籤 | IA | 雜湊值(函式名稱) |
核心討論串狀態 | GA | • |
用户討論串狀態暫存器 | IA | 儲存地址 |
C++ V-Table 指標 | DA | 0 |
簽署值儲存於 64 位元指標上方的未使用填充位元。使用前系統會驗證簽署,亦會還原填充位元來協助確認指標地址可以執行。驗證失敗會導致中止。此驗證增加了多種攻擊的難度,例如會試圖操縱儲存在疊放上的函式傳回地址、藉此惡意誘使裝置執行現有程式碼的返回導向程式設計(ROP)攻擊。
頁面保護層
iOS、iPadOS 和 watchOS 的「頁面保護層」(PPL)的設計用意是防止用户空間程式碼程式碼在簽署驗證完成後遭修改。PPL 建置在「核心完整保護」和「快速權限取用限制」 之上,可管理分頁表權限覆蓋,以便確保只有 PPL 可變更包含用户程式碼和分頁表的受保護頁面。系統可藉由支援全系統程式碼完整性之執行來大幅減少攻擊面,即使當面對遭入侵的核心也適用。這個防護機制並未在 macOS 上提供,因為 PPL 只適用於所有執行的程式碼都必須經過簽署的系統。
「安全頁表監視器」和「受信任執行監視器」
根據設計,「安全頁表監視器」(SPTM)和「受信任執行監視器」(TXM)需配搭使用,以協助在即使攻擊者可寫入核心和繞過控制流程防護機制的情況下,為用户和核心程序保護頁表免遭修改。SPTM 落實此機制的方式是利用比核心還高的權限層級,並利用權限較低的 TXM,以實際強制執行管控程式碼執行的規則。由於如此區隔權限及管控兩者間的信任,此系統的設計旨在讓 TXM 入侵不會被自動轉譯為 SPTM 略過。在 A15、A16 和 A17 SOC 中,SPTM(配搭 TXM)會取代 PPL,從而縮小攻擊面,且不會依賴核心的信任,即使在開機程序的早期階段也一樣。SPTM 亦依賴新的晶片原型,這是 PPL 採用的「快速權限取用限制」之革新技術。