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