iOS 和 iPadOS 的執行階段程序安全性
iOS 和 iPadOS 藉由使用沙盒、宣告授權及位址空間配置隨機載入(ASLR)來協助確保執行階段的安全性。
沙盒
所有第三方的 App 均會以沙盒技術限制,因此在存取其他 App 儲存的檔案或對裝置進行更動時會受到限制。沙盒的設計可防止 App 收集或修改其他 App 儲存的資訊。每個 App 都有用於存放其檔案的唯一主目錄,主目錄是在安裝 App 時隨機指定的。如果第三方的 App 需要存取除了本身資訊以外的其他資訊,只能透過 iOS 和 iPadOS 明確提供的服務來執行。
系統檔案和資源也會與使用者的 App 加以區隔。大部分的 iOS 和 iPadOS 系統檔案和資源會執行為非特權使用者「行動裝置」,如同所有第三方 App。整個作業系統分割區會裝載為唯讀。不必要的工具(如遠端登入服務)並未包含在系統軟體中,且 API 不允許 App 提升自己的特殊權限來修改其他 App 或 iOS 和 iPadOS 本身。
使用授權
系統使用宣告的授權來控制第三方 App 對使用者資訊,以及功能(如 iCloud)和延伸功能的存取權。授權(Entitlement)是簽署到 App 中的成對密鑰值,允許對執行階段因素以外的內容(如 UNIX 使用者 ID)進行認證。授權已經過數位簽章,因此無法更改。系統 App 和服務程式廣泛使用授權來執行特定權限的操作,如果不使用授權,則需要以根使用者身分執行程序。這大幅降低了遭入侵的系統 App 或服務程式提升權限的可能性。
此外,App 只能透過系統提供的 API 來執行背景處理。這讓 App 能夠繼續執行,而不會降低效能或大幅影響電池續航力。
位址空間配置隨機載入
位址空間配置隨機載入(ASLR)可協助防止利用記憶體損壞錯誤發動的攻擊。內建 App 會使用 ASLR 來協助確保啟動時隨機安排所有記憶體區域。除了在啟動時運作,ASLR 會隨機安排可執行檔程式碼、系統資源庫和相關程式設計結構的記憶體位址,進一步降低遭到許多攻擊的可能性。例如,「return-to-libc」攻擊試圖藉由操縱堆疊和系統資源庫的記憶體位址來誘使裝置執行惡意的程式碼。隨機安排這些項目的位置便大幅增加執行攻擊的難度,尤其是對多部裝置的攻擊。Xcode 和 iOS 或 iPadOS 開發環境,可在開啟 ASLR 支援的狀態下自動編譯第三方程式。
Execute Never 功能
iOS 和 iPadOS 使用 ARM 的 Execute Never(XN)功能來提供進一步的保護,該功能會將記憶體頁面標示為不可執行。App 若要使用標示為可寫入和可執行的記憶體頁面,須符合以下受嚴格控制的條件:核心會檢查 Apple 專屬的動態程式碼簽署授權是否存在。即使如此,也只有單個 mmap
呼叫能用於要求一個可執行且可寫入的記憶體頁面(系統為其指定了隨機位址)。Safari 就是將此功能用於 JavaScript just-in-time (JIT) 編譯器。