李艷
摘要:與安卓系統(tǒng)的應(yīng)用相比,iOS系統(tǒng)的封閉性和蘋果應(yīng)用商店的審查機(jī)制保證了iOS應(yīng)用相對安全,但是開發(fā)者往往會忽視保護(hù)用戶的像銀行賬戶、密碼以及秘鑰等敏感數(shù)據(jù)的重要性。分析了iOS應(yīng)用面臨的基本的三種威脅,逐一依次提供了避免這些問題的策略,讓用戶的隱私不容易由于開發(fā)者的不小心而被輕易地泄露。
關(guān)鍵詞:iOS應(yīng)用開發(fā);隱私泄露;SSL鎖定;逆向工程;應(yīng)用安全
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)07-0053-02
Abstract: As compared with the Android, the closure property of iOS and strict audit mechanisms ensure a relative safety of iOS applications. However, iOS developers frequently despise the importance of protecting users sensitive data such as bank accounts, passwords, and tokens. Three potential threats are analyzed in this paper, and corresponding solutions are provided respectively. Therefore, users sensitive information will not be leaked due to the careless of developers.
Key words: security of iOS App; private information leakage; SSL pinning; reverse engineering; security of App
1 背景
世界各國的公司和政府越來越重視普通用戶的數(shù)據(jù)安全和隱私,最近,英國數(shù)據(jù)研究公司劍橋分析(Cambridge Analytica)利用美國社交網(wǎng)站Facebook數(shù)據(jù)震驚了全世界[1],有研究認(rèn)為這次泄露直接影響了美國2016年大選和英國脫歐兩大影響世界政治格局的事件。當(dāng)今絕大部分人的日常生活已經(jīng)離不開智能手機(jī),為了滿足用戶的頻繁使用需求,移動應(yīng)用通常會存儲用戶重要的私人數(shù)據(jù)于用戶的手機(jī)中,這給用戶手機(jī)中的惡意軟件有機(jī)可乘。
相對安卓系統(tǒng)而言,iOS作為一個封閉的系統(tǒng),加上蘋果一些開發(fā)限制,iOS系統(tǒng)的安全性通常被認(rèn)為是比安卓強(qiáng)很多[2],因此,部分公司在開發(fā)iOS應(yīng)用程序時候也就往往忽視了安全性,國家互聯(lián)網(wǎng)監(jiān)測中心的相關(guān)數(shù)據(jù)表明,iOS平臺的病毒增長非常迅猛[3]。
2 iOS應(yīng)用可能的安全風(fēng)險
iOS安全問題涉及很多個方面,本文僅僅介紹三種基本的威脅:用戶數(shù)據(jù)被泄露、用戶數(shù)據(jù)被攔截、應(yīng)用被逆向。
用戶數(shù)據(jù)泄露。用戶在面臨各種各樣的網(wǎng)站和應(yīng)用需要注冊的時候,往往希望用同一個一個賬號,比如QQ或者微信登錄,一些應(yīng)用程序可能要求用戶通常輸入他們的私人數(shù)據(jù),如果設(shè)備落入未經(jīng)授權(quán)的人手中,則以不安全的方式存儲的用戶隱私數(shù)據(jù)會產(chǎn)生泄露的風(fēng)險。
用戶數(shù)據(jù)被攔截。在iOS應(yīng)用程序中,攔截http/https請求和響應(yīng)比較容易。即使采用SSL不足以確保所開發(fā)應(yīng)用的安全性[4]。網(wǎng)絡(luò)上有很多類似Charles Proxy這樣的工具,不需要太多的網(wǎng)絡(luò)知識也可以通過發(fā)送篡改請求來獲得應(yīng)用的請求、相應(yīng)服務(wù)器的響應(yīng),或者操縱提供給用戶不同的網(wǎng)絡(luò)結(jié)果[5]。
應(yīng)用被逆向工程。借助逆向工程,攻擊者可以獲取應(yīng)用程序中使用的URL地址、標(biāo)識符、密鑰,了解應(yīng)用的業(yè)務(wù)邏輯[6]。這樣他就可以修改應(yīng)用程序的行為,比如后臺發(fā)送用戶隱私數(shù)據(jù)、省略登錄屏幕的過程、打開用戶的攝像機(jī)等。
3 保護(hù)策略
3.1 用戶數(shù)據(jù)保護(hù)
為了保護(hù)用戶數(shù)據(jù),需要考慮兩個方面:(1)使用正確的數(shù)據(jù)存儲解決方案;(2)在輸入數(shù)據(jù)時保護(hù)數(shù)據(jù)。鑰匙串(Keychain)是蘋果公司開發(fā)的密碼管理系統(tǒng),存在于蘋果公司的macOS電腦操作系統(tǒng)和iOS移動操作系統(tǒng)。蘋果公司嚴(yán)格規(guī)定不允許在不同iOS應(yīng)用程序之間共享鑰匙串項(xiàng)目,這意味著iOS 鑰匙串項(xiàng)目只能由創(chuàng)建它們的應(yīng)用程序訪問。因此在iOS開發(fā)者在開發(fā)應(yīng)用時候,用戶的登錄、密鑰和密碼應(yīng)存儲在鑰匙串中。核心數(shù)據(jù)(Core Data)是蘋果公司為開發(fā)者的提供的持久性數(shù)據(jù)庫開發(fā)接口框架,具有基礎(chǔ)SQLite數(shù)據(jù)庫的功能。有些開發(fā)者會將用戶的敏感數(shù)據(jù)存放在核心數(shù)據(jù),這是很危險的,因?yàn)槟J(rèn)情況下,當(dāng)應(yīng)用程序解鎖時SQLite不會加密。蘋果公司提供的“數(shù)據(jù)保護(hù)”的功能僅僅在設(shè)備被密碼鎖定時候,它才會對沙箱進(jìn)行加密。
另一方面要保護(hù)用戶的輸入。如果用戶使用簡體中文輸入法鍵盤,輸入英文字符和數(shù)字字符的用戶名和密碼時,會自動啟動系統(tǒng)輸入法自動更正提示,然后用戶的輸入記錄會被以明文的形式緩存下來,其他應(yīng)用可以很方便讀取從手機(jī)相關(guān)目錄,獲得字符串輸入記錄[7],開發(fā)者應(yīng)注意關(guān)閉自動更正,屏幕截圖存在類似的情況,當(dāng)應(yīng)用程序進(jìn)入后臺時,系統(tǒng)會截取屏幕截圖。如果用戶輸入敏感數(shù)據(jù)并且在屏幕上可見,需要在應(yīng)用程序進(jìn)入后臺之前實(shí)現(xiàn)屏蔽屏幕的機(jī)制。
3.2 SSL鎖定(Pinning)
蘋果公司采用了App Transport Security迫使開發(fā)人員必須使用SSL(Secure Socket Layer)。SSL雖讓相對安全,但是通過ARP緩存投毒(cache poisoning) 或者DNS污染的方法也可以實(shí)現(xiàn)中間人攻擊[8]。移動用戶每天都會接觸到很多不安全的無線網(wǎng)絡(luò),SSL鎖定確保應(yīng)用程序僅與指定的服務(wù)器本身通信。SSL鎖定的先決條件之一是在應(yīng)用程序包中保存目標(biāo)的服務(wù)器的SSL證書[9]。應(yīng)用程序在配置SSL鎖定會話時可以用兩種方式:利用蘋果提供的網(wǎng)絡(luò)訪問接口NSURLSession、第三方庫AlamoFire或者AFNetworking。
使用NSURLSession鎖定SSL有點(diǎn)麻煩,開發(fā)者沒有辦法把已經(jīng)鎖定的證書放到一個數(shù)組中以便于讀寫操作,也不能自動終止與本地證書不匹配的響應(yīng),而且,需要手動地檢查每一個由NSURLSession建立的SSL鎖定。多數(shù)開發(fā)者目前會使用前面提到的兩個庫,它們已經(jīng)封裝了很多功能,使用更為簡單方便。以使用AlamoFire庫為例,先創(chuàng)建一個將域名映射到ServerTrustPolicy實(shí)例,用這個實(shí)例初始化一個ServerTrustPolicyManager對象,由這個對象創(chuàng)建SSL鎖定的管理者(Manager)實(shí)例,最后調(diào)用ServerTrustPolicy.certificatesInBundle()一個方法就可以返回所有的證書。
3.3 防止逆向工程
防止逆向工程一個方法就是盡量采用Swift語言開發(fā)應(yīng)用程序。 Swift是一種比Objective-C更新的語言[10],因此逆向工程工具的做得不是很好。還應(yīng)該使用安全的方法來存儲特定環(huán)境的應(yīng)用程序密鑰,比如使用Cocoapods密鑰。其他的方法包括使用代碼混淆、代碼反調(diào)試技術(shù)、誤導(dǎo)性方法名稱、為攻擊者創(chuàng)建陷阱和偽造方法等等。這種方法是一把雙刃劍:迷惑了敵人的同時,使得自己的代碼更難維護(hù),開發(fā)更慢,更容易出錯。
4 結(jié)束語
在iOS應(yīng)用發(fā)布到蘋果應(yīng)用商店之前,必須對應(yīng)用進(jìn)行安全審核。并不一定非得花大量資金聘請外部黑客團(tuán)隊(duì)做攻防測試。開發(fā)者在開發(fā)過程中重視上述三個常見的“坑”,可以大大減少用戶敏感數(shù)據(jù)泄露的風(fēng)險。
參考文獻(xiàn):
[1] 王小俠, 李暢. 從“Facebook”數(shù)據(jù)泄露事件淺析個人信息權(quán)利保護(hù)[J]. 長春理工大學(xué)學(xué)報: 社會科學(xué)版, 2019, 32(1): 35-38.
[2] 湯文兵, 田忠彬. 基于iOS的停車場找車應(yīng)用的設(shè)計與實(shí)現(xiàn)[J]. 電腦知識與技術(shù), 2018, 14(4): 59-61, 66.
[3] 韓玉會. iOS系統(tǒng)應(yīng)用安全性研究[J]. 電腦知識與技術(shù), 2017, 13(11): 64-72.
[4] 李勇. iOS系統(tǒng)與應(yīng)用安全分析方法研究[D]. 上海: 上海交通大學(xué), 2015.
[5] Hubbard J, Weimer K, Chen Y. A study of SSL Proxy attacks on Android and iOS mobile applications[C]. Las Vegas, NV, USA: IEEE 11th CCNC, 2014: 86-91.
[6] 姚佳瑋. iOS平臺應(yīng)用程序逆向分析技術(shù)研究[D]. 哈爾濱: 哈爾濱工程大學(xué), 2016.
[7] 李柏嵐, 谷大武, 李卷孺, 等. iOS備份機(jī)制中隱私威脅問題的分析[J]. 通信技術(shù), 2012(2): 25-28.
[8] 王蕾, 李豐, 李煉, 等. 污點(diǎn)分析技術(shù)的原理和實(shí)踐應(yīng)用[J]. 軟件學(xué)報, 2017(4): 860-882.
[9] DOrazio, Christian J, Choo K K R. A technique to circumvent SSL/TLS validations on iOS Devices[J]. Future Generation Computer Systems, 2016(74): 366-374.
[10] 李亞欣, 蔡永香, 鄧舒穎. 基于Swift對Objective-C開發(fā)的移動應(yīng)用程序優(yōu)化[J]. 軟件導(dǎo)刊, 2018, 17(10): 178-182.
【通聯(lián)編輯:謝媛媛】