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

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

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

ASLR 的存在,給 iOS 系統(tǒng)越獄造成了很大的困難,某些不完美越獄方案就是因?yàn)楣テ撇涣嘶蛘呃@不開 ASLR ,所以每次重新啟動(dòng)后地址再度隨機(jī)偏移,需要重新進(jìn)行越獄操作。與此同時(shí),ASLR 也給應(yīng)用層攻擊帶來了一些困難,不同進(jìn)程會(huì)造成不同的地址空間偏移,而且在運(yùn)行時(shí)才可確定其偏移量,不易鎖定攻擊地址。

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

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

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

有 PIE 標(biāo)識(shí),表示該程序在啟動(dòng)時(shí)會(huì)產(chǎn)生隨機(jī)地址布局。

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

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

  • 利用 Theos 編譯 removePIE
  • 改編一個(gè) Mac 版的 MyRemovePIE

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

創(chuàng)建一個(gè) 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 再被啟動(dòng)執(zhí)行就不會(huì)具有 ASLR 特性了

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

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

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

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

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

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