注:原文---念茜的博客
在應(yīng)用開發(fā)過程中,我們希望知道設(shè)備是否越獄尽纽,正以什么權(quán)限運(yùn)行程序垒拢,好對應(yīng)采取一些防御和安全提示措施。
iOS7相比之前版本的系統(tǒng)而言荣恐,升級了沙盒機(jī)制液斜,封鎖了幾乎全部應(yīng)用沙盒可以共享數(shù)據(jù)的入口。即使在越獄情況下叠穆,限制也非常多少漆,大大增加了應(yīng)用層攻擊難度。比如痹束,在iOS7之前检疫,我們可以嘗試往沙盒外寫文件判斷是否越獄,但iOS7越獄后也無該權(quán)限祷嘶,還使用老方法檢測會導(dǎo)致誤判屎媳。
那么,到底應(yīng)該如何檢測越獄呢论巍?攻擊者又會如果攻破檢測呢烛谊?本文就著重討論一下越獄檢測的攻與防。
首先嘉汰,你可以嘗試使用NSFileManager判斷設(shè)備是否安裝了如下越獄常用工具:
/Applications/Cydia.app
/Library/MobileSubstrate/MobileSubstrate.dylib
/bin/bash
/usr/sbin/sshd
/etc/apt
但是不要寫成BOOL開關(guān)方法丹禀,給攻擊者直接鎖定目標(biāo)hook繞過的機(jī)會
攻擊者可能會改變這些工具的安裝路徑,躲過你的判斷鞋怀。
那么双泪,你可以嘗試打開cydia應(yīng)用注冊的URL scheme:
但是不是所有的工具都會注冊URL scheme,而且攻擊者可以修改任何應(yīng)用的URL scheme密似。
那么焙矛,你可以嘗試讀取下應(yīng)用列表,看看有無權(quán)限獲炔须纭:
越了獄的設(shè)備是可以獲取到的:
攻擊者可能會hook NSFileManager 的方法村斟,讓你的想法不能如愿。
那么抛猫,你可以回避 NSFileManager蟆盹,使用stat系列函數(shù)檢測Cydia等工具:
攻擊者可能會利用Fishhook原理hook了stat。
那么闺金,你可以看看stat是不是出自系統(tǒng)庫逾滥,有沒有被攻擊者換掉:
如果結(jié)果不是 /usr/lib/system/libsystem_kernel.dylib 的話,那就100%被攻擊了败匹。
如果 libsystem_kernel.dylib 都是被攻擊者替換掉的……
那也沒什么可防的大哥你隨便吧……
那么寨昙,你可能會想面哥,我該檢索一下自己的應(yīng)用程序是否被鏈接了異常動態(tài)庫。
列出所有已鏈接的動態(tài)庫:
通常情況下毅待,會包含越獄機(jī)的輸出結(jié)果會包含字符串: Library/MobileSubstrate/MobileSubstrate.dylib
攻擊者可能會給MobileSubstrate改名,但是原理都是通過DYLD_INSERT_LIBRARIES注入動態(tài)庫归榕。
那么尸红,你可以通過檢測當(dāng)前程序運(yùn)行的環(huán)境變量:
未越獄設(shè)備返回結(jié)果是null,越獄設(shè)備就各有各的精彩了刹泄,尤其是老一點(diǎn)的iOS版本越獄環(huán)境外里。