細數iOS上的那些安全防護

2021-07-17 11:39:57 字數 2153 閱讀 3523

隨著蘋果對ios系統多年的研發,ios上的安全防護機制也是越來越多,越來越複雜。這對於剛接觸ios安全的研究人員來說非常不友好,往往不知從何入手。因此,為了讓大家能夠更加系統性的了解ios上的安全機制,我們從三個方面著眼:**簽名(codesign)、沙盒機制(sandbox) 和利用緩解(exploit mitigation),對ios的系統安全機制做了乙個總結。希望能夠給大家的學習以及研究帶來一定的幫助。注意,以下內容是以最新版的ios 9.3.4做為標準進行講解。

ios在執行**前,都會對即將執行的**進行簽名校驗。簽名的校驗機制是執行在核心裡的。因此想要關閉這個校驗的話,需要對系統進行越獄才行。核心在vm_fault_enter中規定了絕大部分情況下,具有執行位的頁需要進行簽名有效性檢查,如果檢查到該頁簽名無效會為程序設定kill flag。簽名校驗分兩種情況;如果binary是platform binary,系統會直接校驗binary的雜湊值是否存在於trustcache中。如果binary是第三方應用程式,會先在核心在檢查執行頁對應hash值,而頁hash對應的簽名由使用者態程序amfid校驗其正確性。

很多系統都有沙盒機制,但是像ios這麼複雜的卻很少。ios從uid/gid permission,mac和entitlement三個維度實現了整個系統的沙盒機制:

對於系統程序,一般情況下蘋果會為不同的系統程序配備不同的sandbox profile,既滿足業務需求,又遵循許可權最小化原則。

entitlement的出現主要是為了上面兩個維度都無法解決的許可權檢查問題。

假設有這樣的場景:

程序 a 是 service 、程序 b 是 client,兩者通過ipc通訊。

程序a提供的服務介面分別有:a1 , a2 ,其中只希望介面a1能被b訪問。

除了常見的stack canaries、 aslr和dep等利用緩解技術之外,ios還有很多高階的或者獨有的利用緩解技術:

棧金絲雀保護是已知的放置在緩衝器和控制資料之間的乙個隨機值。當緩衝器溢位時,最先被破壞通常是金絲雀值。因此當金絲雀的資料的驗證失敗的時候,就表示出現了緩衝區溢位,從而觸發保護機制,並使程式停止執行。

為了增加攻擊者**目的位址的難度,防止攻擊者直接定位攻擊**位置,使用者態程序在每次啟動時的執行檔案基址都是隨機生成的。並且,在每次手機重啟後,核心kernel mach-o的基址也是隨機的。

dep是為了防止資料頁執行**。通常情況下,預設不從堆和棧執行**。dep會檢測從這些位置執行的**,並在發現執**況時引發異常。在mprotect對應的核心實現中,不允許page被同時賦予執行和寫這兩種許可權。當page的許可權發生變化或乙個新的page mmap到記憶體中的時候,vm_fault_enter會檢查這個頁是否有執行位,如果有執行位,會對這個頁做簽名檢查。

在ios中,如果修改乙個zone中已釋放的free element,當記憶體管理器再次分配記憶體到這個free element的時候會發生隨機panic。具體的邏輯是,當element被釋放後,核心會根據重啟時建立的token生成一些內容填充在element中。這樣一方面使用者態無法得知填充的內容是什麼,另一方面核心在分配記憶體的時候可以根據token知道這個element有沒有被修改,如果被修改就產生panic。

ios系統在釋放記憶體塊的過程中,會對記憶體釋放後在free佇列中的順序進行隨機化處理,這個安全措施主要是使用攻擊者無法根據堆噴介面呼叫的時序來**對應元素在核心的布局。

armv8-a架構定義了四個例外層級,分別為el0到el3,其中數字越大代表特權(privilege)越大:

el0: 無特權模式(unprivileged)

el1: 作業系統核心模式(os kernel mode)

el2: 虛擬機器監視器模式(hypervisor mode)

漫談ios程式的證書和簽名機制

細數iOS上的那些安全防護

隨著蘋果對ios系統多年的研發,ios上的安全防護機制也是越來越多,越來越複雜。這對於剛接觸ios安全的研究人員來說非常不友好,往往不知從何入手。因此,為了讓大家能夠更加系統性的了解ios上的安全機制,我們從三個方面著眼 簽名 codesign 沙盒機制 sandbox 和利用緩解 exploit ...

細數iOS上的那些安全防護

隨著蘋果對ios系統多年的研發,ios上的安全防護機制也是越來越多,越來越複雜。這對於剛接觸ios安全的研究人員來說非常不友好,往往不知從何入手。因此,為了讓大家能夠更加系統性的了解ios上的安全機制,我們從三個方面著眼 簽名 codesign 沙盒機制 sandbox 和利用緩解 exploit ...

iOS開發 資料加密安全防護

開發中,客戶端開發,密碼加密!伺服器不知道使用者的密碼!所以現在沒有 找回密碼 的功能,只有重置密碼!從業務邏輯來講,非對稱加密要比對稱加密要相對安全,但是效率不高,不提倡大量資料的加密的使用,而僅僅對關鍵資料進行使用。import viewcontroller.h import nsstring ...