1. 程式人生 > >iOS安全攻防(二十一):廢除應用程式的ASLR特性

iOS安全攻防(二十一):廢除應用程式的ASLR特性

原文地址:http://blog.csdn.net/yiyaaixuexi/article/details/20391001

ASLR (Address Space Layout Randomization),即地址空間隨機佈局。大部分主流的作業系統都已實現了ASLR,以防範對已知地址進行惡意攻擊。iOS從4.3開始支援ASLR,Android從4.0也支援了ASLR機制。

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


Mach-O檔案的檔案頭會記錄二進位制的屬性標識,有個flag叫做PIE (Position Independent Enable)。開啟了PIE的二進位制檔案,在執行時會產生ASLR。


我們可以使用otool工具,來檢視任意應用程式二進位制檔案的屬性,以支付寶為例:

  1. otool -hv Portal  


有PIE標識,表示該程式在啟動時會產生隨機地址佈局。

removePIE 是個去掉PIE flag的工具。

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

  • 利用Theos編譯removePIE
  • 改編一個Mac版的MyRemovePIE 
非越獄開發者可能不熟悉Theos,低學習成本的做法是第二種,那麼讓我們來改編一個Mac版的MyRemovePIE吧。 (懶得動手的可以直接到這裡下載demo)


建立一個Command Line Tool工程,

然後複製 程式碼到main.c中,並且修改第43行: if
(currentHeader.magic == MH_MAGIC){ //little endian 新增iOS7的判斷條件: if(currentHeader.magic == MH_MAGIC || currentHeader.magic == 0xbebafeca ){ //little endian 編譯後生成可執行檔案MyRemovePIE.

利用我們編譯生成的MyRemovePIE來處理應用程式:
  1. ./MyRemovePIE Portal  


這樣以後支付寶Portal再被啟動執行就不會具有ASLR特性了

如何驗證一下結果呢?

把處理過的Portal二進位制拷貝回iPhone,啟動支付寶錢包應用,然後gdb該程序,利用info sh命令檢視偏移:

偏移量為0,嗯,這下就好了。一些手動處理的過程可以升級為自動了~