使用加密:應(yīng)該使用DPAPI和Keychain加密所有的文件、密碼和令牌。Guido用一些時(shí)間介紹了DPAPI提供的選項(xiàng):
加密文件:NSFileProtectionComplete、NSFileProtectionCompleteUnlessOpen、NSFileProtectionCompleteUntilFirstAuth; 將NSData寫到磁盤:NSDataWritingProtectionComplete、NSDataWritingProtectionCompleteUnlessOpen、NSDataWritingProtectionCompleteUntilFirstAuth。Stack Overflow上有個(gè)帖子提供了有關(guān)它們的一些值得注意的細(xì)節(jié)。
清理:這是避免留下敏感數(shù)據(jù)的基本步驟。雖然幾乎所有存儲(chǔ)在磁盤上的文件都是加密的,但是Guido警告說(shuō)要提防若干不容易察覺的危險(xiǎn)。特別地,iTunes備份的存儲(chǔ)是不加密的,因此,通過(guò)攻擊桌面操作系統(tǒng)而不是iOS竊取敏感數(shù)據(jù)就成為一種可能。Guido提到,你可以禁止使用NSURLIsExcludedFromBackupKey密鑰向iCloud或iTunes同步。此外,在UIPasteboard、URL或者鍵盤緩存、iOS自動(dòng)獲取的應(yīng)用后臺(tái)快照、cookies、NSLog記錄等地方,應(yīng)用通常會(huì)留下一定量未加密的潛在敏感數(shù)據(jù)。所有這些風(fēng)險(xiǎn)都可以通過(guò)遵循恰當(dāng)?shù)牟呗詠?lái)避免,例如,重寫applicationDidEnterBackground,將hidden設(shè)為YES;使用secureTextEntry,禁用自動(dòng)更正,從而規(guī)避鍵盤緩存,等等。Guido總結(jié)道,做完這些基本工作后,就可以考慮消除其他層面的風(fēng)險(xiǎn),比如自定義URL處理器、UIWebView中的XSS、XML解析、SQL注入,等等。
不過(guò),當(dāng)應(yīng)用運(yùn)行在已經(jīng)越獄的手機(jī)上時(shí),所有那些配置就都不是很有效了。越獄是禁用了基本安全機(jī)制的漏洞利用程序。它們可以被用來(lái)攻擊手機(jī),并取得手機(jī)的控制權(quán),但有趣的是,用戶因?yàn)榉N種原因自愿越獄,比如訪問(wèn)第三方應(yīng)用商店,替換默認(rèn)應(yīng)用,自定義操作系統(tǒng)外觀,解鎖設(shè)備。按照Guido的說(shuō)法,多達(dá)700萬(wàn)iPhone用戶已經(jīng)越獄了他們的手機(jī),也就是說(shuō),運(yùn)行在這些手機(jī)上的惡意應(yīng)用可以繞過(guò)所有的設(shè)備安全機(jī)制,比如Keyraider就竊取了225000臺(tái)設(shè)備的Apple ID證件用于應(yīng)用內(nèi)購(gòu)買。
對(duì)于運(yùn)行在已經(jīng)越獄的手機(jī)上的應(yīng)用,有幾種方法可以提升它的安全性。
當(dāng)運(yùn)行在已經(jīng)越獄的設(shè)備上時(shí),檢測(cè)成功越獄后留下的系統(tǒng)工件。通常,這可以歸結(jié)為實(shí)現(xiàn)若干檢查,比如是否存在ssh、Cydia.app文件、fork()系統(tǒng)調(diào)用,等等。 拒絕調(diào)試或鉤掛應(yīng)用程序的嘗試,防止繞過(guò)越獄檢查的攻擊者使用調(diào)試器或者特定的工具,如tsProtector或xCon。通常,這可以通過(guò)在運(yùn)行時(shí)使用sysctl找出誰(shuí)是應(yīng)用的屬主來(lái)實(shí)現(xiàn):如果它不是launchd或內(nèi)核,就可以退出或更改執(zhí)行。 增加理解由IDA Pro、Hopper或Binary Ninja生成的拆解應(yīng)用代碼的難度。其實(shí)現(xiàn)可以借助一些迷惑技術(shù)將不使用的代碼增加100倍,加密符號(hào),使用謂詞,等等。最后一點(diǎn),Guido強(qiáng)調(diào)了全面實(shí)施上述所有配置的重要性,借助一個(gè)LLVM的修改版本在編譯時(shí)修改代碼,不依賴個(gè)體程序員在必要的地方增加檢查。