
作業系統完整性
Apple 設計的作業系統以保安為重點。這樣的設計包括硬件信任根,可讓系統安全啟動,並確保保安軟件更新程序快速且安全。Apple 作業系統也採用特製的晶片式硬件功能,可協助防止作業系統執行期間遭到惡意利用。這些執行階段功能可保護受信任程式碼在執行時的完整性。Apple 作業系統軟件可幫助緩解攻擊和善用技術,無論源自於惡意 App、網絡或經由任何其他管道都能應付。這些防護措施可於採用受支援 Apple 設計 SoC 的裝置上使用,包含 iOS、iPadOS、配備 Apple 晶片的 Mac 上的 macOS、tvOS、visionOS,以及 watchOS。
功能 | A10 | A11、S3 | A12-A14 S4-S10 | A15-A18 | M1 | M2-M4 | A19 M5 |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
1 |
2 |
|
| |
|
|
|
|
|
2 |
2 | |
|
|
|
|
|
|
|
1:A15 或較新 SOC 和 M2 或較新 SOC 支援「安全頁表監視器」(SPTM),並在支援的平台上取代「頁面保護層」。
2:「頁面保護層」(PPL)和「安全頁表監視器」(SPTM)會在所有平台上強制執行已簽署和受信任的程式碼,但在 macOS 上除外(因為 macOS 的設計允許執行任何程式碼)。所有其他保安屬性(包括頁表的保護)都會在所有受支援的平台上提供。
核心完整保護
作業系統核心完成初始化後,會啟用「核心完整保護」(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 | 儲存地址 |
區塊描述指標 | DA | 儲存地址 + 0xC0BB |
Objective-C 方法快取 | IB | 儲存地址 + 類別 + 選擇器 |
Objective-C Isa 指標 | DA | 儲存地址 + 0x6AE1 |
Objective-C 父類別指標 | DA | 儲存地址 + 0xB5AB |
選擇器類型的 Objective-C ivar | DB | 儲存地址 + 0x57C2 |
Objective-C 唯讀類別資料指標 | DA | 儲存地址 + 0x61F8 |
C++ V-Table 輸入項目 | IA | 儲存地址 + 雜湊值 (雜湊值方法名稱) |
C++ V-Table 指標 | DA | 儲存地址 + 雜湊值 (雜湊值基礎 V-Table 名稱) |
計算 Goto 標籤 | IA | 雜湊值(函式名稱) |
核心討論串狀態 | GA | • |
用户討論串狀態暫存器 | IA | 儲存地址 |
簽署值儲存於 64 位元指標上方的未使用填充位元。使用前系統會驗證簽署,亦會還原填充位元來協助確認指標地址可以執行。驗證失敗會導致中止。此驗證增加了多種攻擊的難度,例如會試圖操縱儲存在疊放上的函式傳回地址、藉此惡意誘使裝置執行現有程式碼的返回導向程式設計(ROP)攻擊。
頁面保護層
iOS、iPadOS、visionOS 和 watchOS 的「頁面保護層」(PPL)的設計用意是防止用户空間程式碼在簽署驗證完成後遭修改。PPL 建置在 KIP 和「快速權限取用限制」 之上,可管理分頁表權限覆蓋,以便確保只有 PPL 可變更包含用户程式碼和分頁表的受保護頁面。系統可藉由支援全系統程式碼完整性之執行來大幅減少攻擊面,即使當面對遭入侵的核心也適用。這個防護機制並未在 macOS 上提供,因為 PPL 只適用於所有執行的程式碼都必須經過簽署的系統。
「安全頁表監視器」和「受信任執行監視器」
根據設計,在 iOS、iPadOS、watchOS 和 visionOS 中的「安全頁表監視器」(SPTM)和「受信任執行監視器」(TXM)需配搭使用,以協助保護用户和核心程序的頁表免遭修改。這涵蓋攻擊者可寫入核心和繞過控制流程防護機制的情況。SPTM 落實此機制的方式是利用比核心還高的權限層級,並利用權限較低的 TXM,以實際強制執行管控程式碼執行的規則。由於如此區隔權限及管控兩者間的信任,此系統的設計旨在讓 TXM 入侵不會被自動轉譯為 SPTM 略過。在 A15 或較新晶片以及 M2 或較新的 SOC 中,SPTM(配搭 TXM)會取代 PPL,從而縮小攻擊面,且不會依賴核心的信任,即使在開機程序的早期階段也一樣。SPTM 依賴新的晶片原型,這是 PPL 採用的「快速權限取用限制」之革新技術,只適用於以上表格中列出的處理器。
記憶體完整性強制執行
「記憶體完整性強制執行」(MIE)是一項針對 Apple 平台的全面記憶體安全防禦,適用於 A19 和 M5 或較新版本的處理器。MIE 建基於 Apple 安全記憶體分配器所提供的穩固基礎,結合同步模式下的「增強型記憶體標記延伸功能」(EMTE),並由廣泛的「標記機密性強制執行」規則支援。MIE 內置在 Apple 晶片,為包括核心在內的關鍵攻擊面提供無與倫比且總是開啟的記憶體安全保護,同時維持用户期待的電力表現和效能。如需更多資料,請參閲 Apple 安全研究網誌中的記憶體完整性強制執行:Apple 裝置記憶體安全完整願景。
記憶體標記延伸功能
Arm 在 2019 年發佈了「記憶體標記延伸功能」(MTE)規範,作為協助硬件找出記憶體損壞錯誤的工具。MTE 是一個記憶體標記和標記檢查系統,每次分配記憶體時都會以密鑰標記。硬件確保之後的記憶體存取要求只會在包括正確密鑰的情況下才會獲准執行。如果密鑰不相符,App 會發生故障,且系統會記錄該事件。這讓開發者能夠在記憶體損壞錯誤發生時立即將其識別。
增強型記憶體標記延伸功能
EMTE 填補了令 MTE 無法成為主動防禦機制的漏洞,包括只支援更安全的同步模式。此外,從已標記的記憶體區域存取未標記的記憶體時,需要知道該區域的標記,這令攻擊者極難將動態標記記憶體中的越界錯誤,轉化為直接修改未標記分配空間來繞過 EMTE 的手段。
標記機密性強制執行
「標記機密性強制執行」保護安全分配器的實作免受技術威脅,並保護 EMTE 標記的機密性(包括抵禦從旁攻擊和推測執行攻擊)。「安全頁表監視器」會保護核心分配器的後端儲存和標記儲存空間。系統亦會確保當核心代表應用程式存取記憶體時,須遵循與用户空間相同的標記檢查規則。「標記機密性強制執行」的設計用意亦是為了減少因計時或推測攻擊導致的標記洩露,其甚至包括針對 Spectre V1 的防禦。