◆吳中超 許國祥 王 瑜
(信息工程大學(xué) 河南 450001)
安卓應(yīng)用中的信息泄露問題探究
◆吳中超 許國祥 王 瑜
(信息工程大學(xué) 河南 450001)
作為當(dāng)今世界最流行的新興移動操作系統(tǒng),安卓系統(tǒng)的應(yīng)用安全重要性日益提高。安卓應(yīng)用通信架構(gòu)由服務(wù)器、客戶端兩部分構(gòu)成,均存在敏感信息泄露的安全隱患。本文從這兩方面入手,分析安卓應(yīng)用生態(tài)目前出現(xiàn)較多的信息泄露問題及導(dǎo)致危害,并分別探討了針對主要漏洞類型的應(yīng)對手段。
安卓系統(tǒng);移動互聯(lián)網(wǎng);應(yīng)用安全;信息泄露
移動操作系統(tǒng)的生態(tài)鏈正從智能手機拓展到諸如平板電腦、智能家居、可穿戴智能設(shè)備、車聯(lián)網(wǎng)、嵌入式系統(tǒng)等多種衍生產(chǎn)品中,日益驅(qū)動著互聯(lián)網(wǎng)技術(shù)的改變和發(fā)展。作為移動互聯(lián)網(wǎng)時代的突出標(biāo)志之一,移動應(yīng)用 APP聚集了大量的高附加值信息和資源。這些信息和資源不僅包含個人手機信息、身份信息、經(jīng)緯度地理位置等,還包含了多個應(yīng)用或網(wǎng)站的賬號密碼信息、個人電子郵件、隱私文件等諸多信息。
在過去的2016年中,國內(nèi)個人信息泄露事件頻發(fā)。中國互聯(lián)網(wǎng)協(xié)會2016年發(fā)布的《中國網(wǎng)民權(quán)益保護(hù)調(diào)查報告》中指出,在整個2016年,中國網(wǎng)民因個人信息泄露、垃圾信息、詐騙信息等現(xiàn)象導(dǎo)致總體損失約915億元。其中,78.2%的網(wǎng)民個人身份信息被泄露過,包括網(wǎng)民的姓名、學(xué)歷、家庭住址、身份證號及工作單位等;63.4%的網(wǎng)民個人網(wǎng)上活動信息被泄露過,包括通話記錄、網(wǎng)購記錄、網(wǎng)站瀏覽痕跡、IP地址、軟件使用痕跡及地理位置等。在個人信息泄露帶來的不良影響上,82.3%的網(wǎng)民親身感受到了個人信息泄露對日常生活造成的影響。近年爆發(fā)的多個安卓系統(tǒng)漏洞,其影響力動輒覆蓋過億安卓手機用戶,造成大量用戶隱私泄露風(fēng)險。
面對移動互聯(lián)網(wǎng)用戶隱私保護(hù)的嚴(yán)峻形勢,隱私泄露的檢測和保護(hù)近年來頗受關(guān)注。本文結(jié)合本人在清華大學(xué)網(wǎng)絡(luò)與信息安全實驗室參與的安卓APP滲透測試項目、全國高校校園網(wǎng) APP測試項目及正在進(jìn)行的研究工作,揭示了移動應(yīng)用隱私泄露檢測和防護(hù)的總體進(jìn)展,并針對影響范圍較廣的典型問題給出針對性修復(fù)方案。
Android應(yīng)用程序運行中必然涉及數(shù)據(jù)的輸入、輸出。例如應(yīng)用程序各個參數(shù)設(shè)置、程序運行中的狀態(tài)等數(shù)據(jù)都需要保存到外部存儲器上,否則系統(tǒng)關(guān)機之后數(shù)據(jù)將會丟失。
若應(yīng)用程序中需要保存的數(shù)據(jù)較少,且數(shù)據(jù)格式簡單(字符串、整型值等),可使用 SharedPreferences進(jìn)行保存。若應(yīng)用程序有大量數(shù)據(jù)需要存儲、訪問,就需要用到數(shù)據(jù)庫。如果SharedPreferences創(chuàng)建時模式設(shè)為可讀可寫,則文件中內(nèi)容極易被其他應(yīng)用獲取。如果文件中內(nèi)容為明文或明文編碼(base64等),則會造成敏感信息泄露。
例如,在某app中,應(yīng)用會將使用過的用戶信息(包括用戶資料、id等)以明文的形式存儲在SharedPreferences文件中(如圖1所示),內(nèi)容可直接被獲取。
改進(jìn)方式:避免使用 MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE模式創(chuàng)建Shared Preferences文件;避免把密碼等敏感數(shù)據(jù)信息明文存放在 Shared Preferences文件中。

圖1 SharedPreferences文件內(nèi)容
在安卓系統(tǒng)中,content Provider用來提供數(shù)據(jù)的統(tǒng)一訪問方式。如果某個應(yīng)用中有數(shù)據(jù)需要提供給其他應(yīng)用訪問,無論數(shù)據(jù)存儲在數(shù)據(jù)庫中,還是在文件甚至在網(wǎng)絡(luò)中,都可以通過content provider提供的接口來訪問。
如果在 AndroidManifest文件中將某個 Content Provider的exported屬性設(shè)置為true,則可在外界任意位置直接訪問其數(shù)據(jù)。如果此 Content Provider的實現(xiàn)有問題,則可能產(chǎn)生任意數(shù)據(jù)訪問、SQL注入、目錄遍歷等風(fēng)險。
例如,在某校園網(wǎng)圖書館app中,利用drozer查詢應(yīng)用中的provider信息,可發(fā)現(xiàn)該應(yīng)用中有兩個content provider組件,繼續(xù)查詢其中設(shè)計的 provider uri;逐個進(jìn)行查詢嘗試,發(fā)現(xiàn)其中存儲密碼值的uri可不需權(quán)限,直接查詢得到結(jié)果,如圖2所示。

圖2 用戶名、登錄密碼、郵箱等敏感信息
改進(jìn)措施:對于需要開放的組件應(yīng)設(shè)置合理的權(quán)限,如果只需要對同一個簽名的其它開放 content provider,則可以設(shè)置signature級別的權(quán)限。
SQL注入就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。它可以通過在Web表單中輸入惡意SQL語句得到一個存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫,而不是按照設(shè)計者意圖去執(zhí)行SQL語句。
若應(yīng)用對傳入的查詢參數(shù)不做處理或檢驗,而直接拼接進(jìn)sql查詢語句,則可能導(dǎo)致SQL注入。攻擊者可根據(jù)表中實際情況進(jìn)行手動或編寫腳本自動化遍歷,以獲取數(shù)據(jù)庫中當(dāng)前權(quán)限允許查詢的所有內(nèi)容。
例如,某款app均存在sql不規(guī)范查詢(如圖3所示),可能導(dǎo)致注入攻擊。

圖3 不規(guī)范的sql查詢
對app中的sql不規(guī)范查詢點進(jìn)行逐個注入嘗試,可獲取其中某應(yīng)用的數(shù)據(jù)庫內(nèi)容,如圖4所示。

圖4 數(shù)據(jù)庫內(nèi)容
改進(jìn)措施:在查詢代碼中使用參數(shù)化查詢,杜絕用戶參數(shù)直接拼接入SQL語句,以防止SQL注入攻擊的產(chǎn)生。
服務(wù)器通過操作Cookie類對象對客戶端Cookie進(jìn)行操作。通過request.getCookie()獲取客戶端提交的所有Cookie(以Cookie[]數(shù)組形式返回),通過 response.addCookie(Cookiecookie)向客戶端設(shè)置Cookie。
HTTP協(xié)議不僅是無狀態(tài)的,而且是不安全的。使用 HTTP協(xié)議的數(shù)據(jù)不經(jīng)過任何加密就直接在網(wǎng)絡(luò)上傳播,有被截獲的可能。使用HTTP協(xié)議傳輸機密內(nèi)容是不合理的。如果不希望Cookie在HTTP等非安全協(xié)議中傳輸,可以設(shè)置Cookie的secure屬性為true。瀏覽器只會在HTTPS和SSL等安全協(xié)議中傳輸此類Cookie。如果cookie中設(shè)置了HttpOnly屬性,那么通過js腳本將無法讀取到cookie信息,這樣能有效的防止XSS攻擊,竊取cookie內(nèi)容,這樣就增加了cookie的安全性。
結(jié)合webview控件中對敏感字符過濾存在問題,導(dǎo)致xss問題的出現(xiàn)。攻擊者可以獲取受害者cookie等敏感信息,達(dá)到仿冒登錄等目的。
發(fā)生意外事件時,許多web應(yīng)用程序返回詳盡的錯誤信息。從僅僅披露錯誤類型的簡單內(nèi)置消息到泄露許多應(yīng)用程序狀態(tài)細(xì)節(jié)的詳細(xì)調(diào)試信息都涵蓋在錯誤消息中。
如果在解釋型web腳本語言中出現(xiàn)錯誤,應(yīng)用程序通常會返回一條簡單的錯誤消息以揭示錯誤本質(zhì),還可能會有發(fā)生錯誤的文件的行號。大多數(shù)Web應(yīng)用程序的語言編寫,例如Java、C#和 VB.NET等語言中如果出現(xiàn)無法處理的錯誤時,報錯信息中往往會顯示完整的棧追蹤。另外,數(shù)據(jù)庫、郵件服務(wù)器或SOAP服務(wù)器等后端組件也會返回詳盡的錯誤消息。
例如,在某app webview控件中,訪問服務(wù)器端提供web頁面時,查詢參數(shù)直接列在url中。若攻擊者沒有此項查詢權(quán)限,嘗試該查詢url使得缺失某項參數(shù)時,服務(wù)器會自動給出提示,提示如圖5所示。

圖5 服務(wù)器給出的提示
這實際上是暴露了服務(wù)器端數(shù)據(jù)庫中對應(yīng)表中的表項名稱。攻擊者只需補齊服務(wù)器提示的這項參數(shù),服務(wù)器就會再次提示下一參數(shù),如此反復(fù),最終給出服務(wù)器所需的所有參數(shù)。這給攻擊者帶來很大便利,能夠容易地掌握數(shù)據(jù)庫中各表項名稱,為 sql注入攻擊提供很大參考價值。
改進(jìn)方式:只要有可能,應(yīng)該禁止應(yīng)用程序公布對攻擊者有用的信息;如果某些用戶需要訪問這些信息,應(yīng)使用訪問控制對它們進(jìn)行有效保護(hù),并且只有在完全必要時才提供這些信息;如果必須向授權(quán)用戶透露敏感信息,那么在不必要時也不得披露現(xiàn)有數(shù)據(jù)。
SQL注入發(fā)生時,攻擊者將SQL代碼插入或添加到應(yīng)用的輸入?yún)?shù)中,之后再將這些參數(shù)傳遞給后臺的SQL服務(wù)器加以解析并執(zhí)行。如果應(yīng)用未對SQL語句使用的參數(shù)進(jìn)行正確性審查,未過濾其中的非法字符或敏感字等,尤其是如果直接將用戶輸入拼接到SQL語句執(zhí)行,而非執(zhí)行參數(shù)化查詢,則很可能會導(dǎo)致注入攻擊的產(chǎn)生。
例如,某app服務(wù)器存在sql注入漏洞,可構(gòu)造注入腳本進(jìn)行查詢。編寫腳本,對數(shù)據(jù)庫中相應(yīng)表做遍歷,可以得到數(shù)據(jù)庫中所有用戶名稱及密碼等敏感信息,如圖6所示。

圖6 泄露的用戶名
改進(jìn)方式:在SQL查詢語句中,應(yīng)始終將用戶輸入作為潛在威脅數(shù)據(jù),對其敏感操作符、敏感詞進(jìn)行嚴(yán)格校驗,并防止用戶輸入直接拼接入sql語句,而應(yīng)采用參數(shù)化查詢方式。
目錄遍歷是Http所存在的一個安全漏洞,它使得攻擊者能夠訪問受限制的目錄,并在服務(wù)器的根目錄以外執(zhí)行命令。這個漏洞可能存在于服務(wù)器軟件本身,也可能存在于應(yīng)用程序的代碼之中。利用目錄遍歷漏洞,攻擊者能夠跳出服務(wù)器的預(yù)定目錄,從而訪問到文件系統(tǒng)的其他部分,譬如攻擊者能夠看到一些受限制的文件,或者更危險的,攻擊者能夠執(zhí)行一些造成整個系統(tǒng)崩潰的指令。
如果目錄遍歷漏洞與文件下載相結(jié)合,可以導(dǎo)致任意文件下載漏洞,使得系統(tǒng)密碼、關(guān)鍵配置等文件被盜取。如果目錄遍歷漏洞與文件上傳相結(jié)合,可以導(dǎo)致任意文件上傳漏洞,使得攻擊者可上傳任意腳本,可能導(dǎo)致任意代碼執(zhí)行等。
例如,某app服務(wù)器中直接將用戶名稱拼接進(jìn)用戶文件夾路徑,且未對用戶名稱做合法性校驗。我們可以發(fā)包手動構(gòu)造一個名為../../../LY的用戶,則通過路徑拼接與跳轉(zhuǎn)可以訪問本來無權(quán)限訪問的文件。
手動ajax發(fā)包內(nèi)容如圖7所示。

圖7 手動ajax發(fā)包內(nèi)容
執(zhí)行完成后得到異常用戶名。訪問系統(tǒng)中規(guī)定的下載文件鏈接 DownloadZip.do?folderName=LY&zipFileName= 通 過zipFileName 進(jìn)行目錄跳轉(zhuǎn)從而實現(xiàn)任意文件讀。
zipFileName=../../../../../etc/passwd時,可以獲得記錄系統(tǒng)用戶密碼的關(guān)鍵文件:/etc/passwd
改進(jìn)方式:對用戶輸入進(jìn)行嚴(yán)格校驗,杜絕目錄跳轉(zhuǎn)字符拼接入目錄所在字符串。
目前的研究主要通過手工借助逆向分析或網(wǎng)絡(luò)抓包工具實現(xiàn),人工梳理應(yīng)用的代碼實現(xiàn)邏輯,再結(jié)合威脅模型,挖掘潛在的漏洞并實施攻擊。沒有嘗試漏洞挖掘的自動化實現(xiàn)方案,目前無法實現(xiàn)對大量Android應(yīng)用的安全性分析。接下來的工作,可以結(jié)合手動漏洞挖掘過程發(fā)現(xiàn)的漏洞特征,采用一些程序分析的方法,開發(fā)一款針對Android應(yīng)用登錄過程的自動化分析工具,實現(xiàn)對Android應(yīng)用的批量掃描,再結(jié)合掃描結(jié)果進(jìn)行針對性的人工分析,將大大提高漏洞挖掘效率。
[1]C.Gibler,J. Crussell, J. Erickson , and H. Chen.AndroidLeaks: Automatically Detecting Potential Privacy Leaks in Android Applications on a Large Scale, on International Conference on Trust & Trustworthy Computing,2012.
[2]E Chin,AP Felt ,K Greenwood ,D Wagner:Analyzing inter-application communication in Android,on International Conference on Mobile Systems,2011.
[3]Z Yang,M Yang:LeakMiner:Detect Information Leakage on Android with Static Taint Analysis,on Software Engineering,2013.
[4]L Lu,Z Li,Z Wu,W Lee,G Jiang:CHEX:statically vetting Android apps for component hijacking vulnerabilities,on Acm Conference on Computer & Communications Security,2012.