作業系統完整性
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 鍵。系統會對項目進行 Salt 處理和簽署,如下所示。
項目 | 索引鍵 | Salt |
---|---|---|
函式傳回位址 | IB | 儲存位址 |
函式指標 | IA | 0 |
區塊叫用函式 | IA | 儲存位址 |
Objective-C 方法快取 | IB | 儲存位址 + 類別 + 選取器 |
C++ 虛擬表格項目 | IA | 儲存位址 + 雜湊(混合方法名稱) |
運算 Goto 標籤 | IA | 雜湊(函式名稱) |
核心執行緒狀態 | GA | • |
使用者執行緒狀態暫存器 | IA | 儲存位址 |
C++ 虛擬表格指標 | 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 所採用「快速權限取用限制」的革新技術。