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 支援的第三方 App。
Execute Never 功能
iOS 和 iPadOS 使用 ARM 的 Execute Never(XN)功能來提供進一步的保護,該功能會將記憶體頁面標示為不可執行。App 如要使用標示為可寫入和可執行的記憶體頁面,須符合以下受嚴格控制的條件:核心會檢查 Apple 專屬的動態程式碼簽署授權是否存在。即使如此,也只有單個 mmap
呼叫能用於要求一個可執行且可寫入的記憶體頁面(系統為其指定了隨機地址)。Safari 就是將此功能用於 JavaScript just-in-time(JIT)編譯器。