iOS安全攻防(二十一):廢除應用程式的ASLR特性
阿新 • • 發佈:2019-02-02
原文地址: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工具,來檢視任意應用程式二進位制檔案的屬性,以支付寶為例:
- otool -hv Portal
有PIE標識,表示該程式在啟動時會產生隨機地址佈局。
removePIE 是個去掉PIE
flag的工具。
壞訊息是,年久失修,它不支援iOS7。
好訊息是,我們還有2個變通方法可以走。
- 利用Theos編譯removePIE
- 改編一個Mac版的MyRemovePIE
建立一個Command Line Tool工程,
然後複製 程式碼到main.c中,並且修改第43行: if
利用我們編譯生成的MyRemovePIE來處理應用程式:
- ./MyRemovePIE Portal
這樣以後支付寶Portal再被啟動執行就不會具有ASLR特性了
如何驗證一下結果呢?
把處理過的Portal二進位制拷貝回iPhone,啟動支付寶錢包應用,然後gdb該程序,利用info sh命令檢視偏移:
偏移量為0,嗯,這下就好了。一些手動處理的過程可以升級為自動了~