鍍金池/ 教程/ iOS/ 廢除應(yīng)用程序的 ASLR 特性
Hack 實戰(zhàn)——支付寶 App 手勢密碼校驗欺騙
使用 Reveal 分析他人 App
后臺 daemon 非法竊取用戶 iTunesstore 信息
使用 iNalyzer 分析應(yīng)用程序
越獄檢測的攻與防
使用 introspy 追蹤分析應(yīng)用程序
廢除應(yīng)用程序的 ASLR 特性
使用 Cycript 修改支付寶 App 運行時
敏感邏輯的保護方案
Fishhook
使用 class-dump-z 分析支付寶 App
static 和被裁的符號表
iOS7 的動態(tài)庫注入
二進制和資源文件自檢
Hack 實戰(zhàn)——探究支付寶 App 手勢密碼
使用 Keychain-Dumper 導(dǎo)出 keychain 數(shù)據(jù)
數(shù)據(jù)擦除
Hack 實戰(zhàn)——解除支付寶 App 手勢解鎖錯誤次數(shù)限制
Objective-C 代碼混淆
阻止 GDB 依附
基于腳本實現(xiàn)動態(tài)庫注入
Hack 必備的命令與工具
鍵盤緩存與安全鍵盤
數(shù)據(jù)保護 API

廢除應(yīng)用程序的 ASLR 特性

ASLR (Address Space Layout Randomization),即地址空間隨機布局。大部分主流的操作系統(tǒng)都已實現(xiàn)了 ASLR,以防范對已知地址進行惡意攻擊。iOS 從 4.3 開始支持 ASLR,Android 從 4.0 也支持了 ASLR 機制。

ASLR 的存在,給 iOS 系統(tǒng)越獄造成了很大的困難,某些不完美越獄方案就是因為攻破不了或者繞不開 ASLR ,所以每次重新啟動后地址再度隨機偏移,需要重新進行越獄操作。與此同時,ASLR 也給應(yīng)用層攻擊帶來了一些困難,不同進程會造成不同的地址空間偏移,而且在運行時才可確定其偏移量,不易鎖定攻擊地址。

Mach-O 文件的文件頭會記錄二進制的屬性標(biāo)識,有個 flag 叫做 PIE (Position Independent Enable)。開啟了 PIE 的二進制文件,在執(zhí)行時會產(chǎn)生 ASLR 。

我們可以使用 otool 工具,來查看任意應(yīng)用程序二進制文件的屬性,以支付寶為例:
otool -hv Portal

http://wiki.jikexueyuan.com/project/ios-security-defense/images/aslr.png" alt="aslr" />

有 PIE 標(biāo)識,表示該程序在啟動時會產(chǎn)生隨機地址布局。

http://wiki.jikexueyuan.com/project/ios-security-defense/images/aslr1.jpeg" alt="aslr1" />removePIE 是個去掉 PIE flag 的工具。

壞消息是,年久失修,它不支持 iOS7 。 好消息是,我們還有 2 個變通方法可以走。

  • 利用 Theos 編譯 removePIE
  • 改編一個 Mac 版的 MyRemovePIE

非越獄開發(fā)者可能不熟悉 Theos ,低學(xué)習(xí)成本的做法是第二種,那么讓我們來改編一個 Mac 版的 MyRemovePIE 吧。 (懶得動手的可以直接到這里下載 demo )

創(chuàng)建一個 Command Line Tool 工程,

http://wiki.jikexueyuan.com/project/ios-security-defense/images/aslr2.png" alt="aslr2" />

然后復(fù)制 removePIE.c 代碼到 main.c 中,并且修改第 43 行: if(currentHeader.magic == MH_MAGIC){ //little endian

添加 iOS7 的判斷條件: if(currentHeader.magic == MH_MAGIC || currentHeader.magic == 0xbebafeca ){ //little endian

編譯后生成可執(zhí)行文件 MyRemovePIE .

利用我們編譯生成的 MyRemovePIE 來處理應(yīng)用程序:

./MyRemovePIE Portal

http://wiki.jikexueyuan.com/project/ios-security-defense/images/aslr3.png" alt="aslr3" />

這樣以后支付寶 Portal 再被啟動執(zhí)行就不會具有 ASLR 特性了

http://wiki.jikexueyuan.com/project/ios-security-defense/images/aslr4.png" alt="aslr4" />

如何驗證一下結(jié)果呢?

把處理過的 Portal 二進制拷貝回 iPhone ,啟動支付寶錢包應(yīng)用,然后 gdb 該進程,利用 info sh 命令查看偏移:

http://wiki.jikexueyuan.com/project/ios-security-defense/images/aslr5.png" alt="aslr5" />

偏移量為 0 ,嗯,這下就好了。一些手動處理的過程可以升級為自動了~ http://wiki.jikexueyuan.com/project/ios-security-defense/images/aslr6.jpeg" alt="aslr6" />

上一篇:Fishhook下一篇:鍵盤緩存與安全鍵盤