江蘇聯(lián)合職業(yè)技術(shù)學(xué)院無錫機電分院 張靈芝
隨著社會經(jīng)濟和科學(xué)技術(shù)的飛速發(fā)展,安卓系統(tǒng)被應(yīng)用的越來越廣泛。安卓應(yīng)用系統(tǒng)的通信架構(gòu)由客戶端和服務(wù)器組成,作為當(dāng)下最為流行的操作系統(tǒng),其安全性成為社會各界人士關(guān)注的重點?;诖耍疚耐ㄟ^對安卓應(yīng)用中的信息泄露問題進行分析,從內(nèi)存信息泄露、敏感信息泄露、隱私信息泄露等方面入手,詳細(xì)的論述了安卓應(yīng)用中信息泄露問題的解決對策。
前言:隨著智能手機應(yīng)用越來越廣泛,安卓應(yīng)用發(fā)展愈發(fā)迅速,且很多安卓應(yīng)用都是不收費的,一部分開發(fā)者會在系統(tǒng)中嵌入廣告庫,以此來獲取更多的利潤。除此之外,智能手機功能越來越豐富,許多信息被儲存在手機中,如位置信息、設(shè)備標(biāo)識符等。為了對這些信息進行更好的保護,必須深入分析各種信息泄露的問題,制定合理的解決對策,這樣才能為安卓應(yīng)用的安全性提供保障。
1.1.1 內(nèi)存溢出
內(nèi)存溢出導(dǎo)致的內(nèi)存泄露主要包括兩方面,其一是注冊沒有取消出現(xiàn)的內(nèi)存泄露問題;其二是沒有關(guān)閉集合中對象而出現(xiàn)的內(nèi)存泄露問題。前者內(nèi)存泄露與純Java內(nèi)存泄露相比,情況更為嚴(yán)重。由于在注冊過程中,一些安卓程序會持續(xù)引用相關(guān)程序?qū)ο螅ㄗ詸C制),即使移動設(shè)備上的安卓程序停止運行,但是其他應(yīng)用程序也會繼續(xù)運行該程序,使得用戶注冊信息泄露,且泄露的內(nèi)存信息不能被當(dāng)做垃圾收回。后者是指人們在應(yīng)用程序?qū)ο髸r,會將其加入到一個集合中,當(dāng)應(yīng)用完成之后,卻沒有及時清理掉,長此以往,集合不斷增大,當(dāng)溢滿之后,會出現(xiàn)內(nèi)存泄露現(xiàn)象,如果集合處于靜態(tài)狀況下,其泄露程度更大。
1.1.2 沒有關(guān)閉資源對象的內(nèi)存泄露
在應(yīng)用資源對象過程中,通常會采用一定的緩沖手段,當(dāng)這些文件應(yīng)用完畢之后,相關(guān)人員要及時將它們關(guān)閉,為它們緩沖內(nèi)容及時、準(zhǔn)確的回收內(nèi)存提供保障。而這些緩沖內(nèi)容不僅僅是儲存于Java虛擬機里,同時還存儲于Java虛擬機之外。如果設(shè)置這些緩沖內(nèi)容的引用為空,但是不將它們關(guān)閉,這種情況下,會有一部分不良代碼使內(nèi)存出現(xiàn)更大的壓力,極易引起安卓應(yīng)用的內(nèi)存泄露情況(鄒明宇,Android應(yīng)用程序的隱私泄露檢測關(guān)鍵技術(shù)研究:燕山大學(xué),2017年)。不良代碼致使內(nèi)存出現(xiàn)壓力的原因主要有:Bitmap調(diào)用方法不當(dāng);在對Adapter構(gòu)造過程中,緩存應(yīng)用不當(dāng)甚至沒用。
1.2.1 短信泄露
短信是安卓用戶進行溝通的重要方式之一,短信中儲存著各種各樣的聯(lián)系人信息和用戶自身的信息。安卓應(yīng)用在獲取到智能手機發(fā)送短信的權(quán)限之后,通過短信發(fā)送用戶隱私信息,并將這些信息發(fā)送到目的號碼中。在此過程中,一些人會竊取這些隱私數(shù)據(jù),并進行惡意傳播。同時還有一些惡意程序會發(fā)送各式各樣的扣費信息,為用戶帶來了非常大的損失。除此之外,在安卓系統(tǒng)中短信被儲存到SQLite數(shù)據(jù)庫里,在查詢數(shù)據(jù)庫時,會使用戶隱私泄露并惡意傳播。
1.2.2 通話記錄和通訊錄泄露
安卓設(shè)備中的儲存的通信錄是用戶對聯(lián)系人信息進行記錄的主要方式之一,而且在通訊錄中,不但記錄著與聯(lián)系人相關(guān)的聯(lián)系方式,同時還記錄著非常多的其他信息,如與聯(lián)系人之間的關(guān)系、電子郵箱、家庭住址等等。一旦這些信息泄露出去,會為使用者帶來不必要的麻煩。此外,對于安卓系統(tǒng)中的通話記錄和通訊錄中的各種信息一般情況下是被儲存在SQlite數(shù)據(jù)庫里。安卓應(yīng)用在得到相關(guān)權(quán)限之后,能夠隨時隨地的泄露相關(guān)信息,并進行傳播等。
1.2.3 網(wǎng)絡(luò)泄露
網(wǎng)路泄露是安卓系統(tǒng)隱私泄露的主要途徑,同時也是危害范圍最廣的途徑。安卓應(yīng)用系統(tǒng)在請求URL過程中,會攜帶大連的用戶隱私信息,并將這些信息發(fā)送到相應(yīng)的服務(wù)器中,這使得用戶的隱私信息在無意識中受到威脅。同時網(wǎng)絡(luò)泄露形式多種多樣,在安卓系統(tǒng)中,進行網(wǎng)絡(luò)連接時,可以以不同的方式與網(wǎng)路相連。除此之外,由于Http請求類型比較多,如POST、GET等,這些請求類型使網(wǎng)咯連接方式多出了很多不確定性。
1.3.1 數(shù)據(jù)明文泄露
安卓應(yīng)用程序在正常運行過程中,會涉及到大量的數(shù)據(jù)輸入和輸出,如程序運行狀態(tài)以及各個參數(shù)的設(shè)置等數(shù)據(jù)都需要在外部儲存器中進行保存,如果不保存,在系統(tǒng)停止運行時,會丟失大量數(shù)據(jù)。同時Shared Preferences的創(chuàng)建即可讀又可寫,文件內(nèi)容的明文編碼或者是明文非常容易被其他應(yīng)用截取,出現(xiàn)敏感信息泄露現(xiàn)象。
1.3.2 cookie管理不當(dāng)
服務(wù)器在運行過程中,通過cookie類對象操作客戶端cookie,然后利用相應(yīng)的方法對客戶端發(fā)送的全部cookie數(shù)組進行獲取,隨后設(shè)置客戶端。在此過程中,HTTP協(xié)議是不安全的,且是無狀態(tài)的。與HTTP協(xié)議相關(guān)的數(shù)據(jù)沒有經(jīng)過任何加密措施直接上傳到網(wǎng)絡(luò)中,使得敏感數(shù)據(jù)被截獲的概率大大增加。
2.1.1 內(nèi)存溢出的解決辦法
一般情況下,內(nèi)存溢出導(dǎo)致內(nèi)存泄露的處理方法從以下幾方面進行:1)引用內(nèi)存過程中,直接進行處理,處理方法有弱引用、強引用以及軟引用等。首先,強引用。主要是指在heap堆中構(gòu)造一個新的Object對象,以“o”引用此對象,然后在利用“o”構(gòu)建上述對象與new Object()之間的引用關(guān)系。這個過程便是強引用,同時在進行強引用過程中,還要與弱引用和軟引用相互配合,使安卓程序呈現(xiàn)強弱隨時轉(zhuǎn)換的狀態(tài),這樣可以有效防止內(nèi)存泄露。其次,軟引用,軟引用主要用于高速緩存的內(nèi)存數(shù)據(jù)中,在jvm警報內(nèi)存不足之前將全部的軟引用清除出去,這樣對于gc來說,就可以收集軟類型對象,最大限度的解決內(nèi)存溢出問題。該解決方案主要參考Android內(nèi)存溢出解決方案(OOM)整理總結(jié)。2)對Dalvik虛擬機進行優(yōu)化。這種方法主要是對Dalvik虛擬機中的堆內(nèi)存進行合理分配,在此過程中,對安卓平臺而言,它的托管層主要應(yīng)用的是Dalvik JavaVM,對其進行優(yōu)化從手動處理GC考慮,從而解決內(nèi)存泄露問題(朱洪軍,韓洋,華保健,陳灝,移動應(yīng)用程序內(nèi)存泄露機制分析與檢測方案設(shè)計:計算機工程與應(yīng)用,2016年17期)。
2.1.2 沒有關(guān)閉資源對象問題的解決對策
解決沒有關(guān)閉資源對象引起的內(nèi)存泄露問題主要從以下幾方面進行:1)將Bitmap內(nèi)存及時回收。安卓系統(tǒng)中,有著獨立的回收垃圾機制,這個機制可以不定期的將無用的內(nèi)存空間進行回收,Bitmop屬于私有構(gòu)造。開發(fā)者在開發(fā)程序過程中,不能直接創(chuàng)建一個新的Bitmap對象,可以將Bitmap實例化。這時將Bitmap加載到內(nèi)存中,其內(nèi)存區(qū)域有兩部分,其一是Java部分,其二是C部分。系統(tǒng)在不運行過程中,Java部分會實現(xiàn)自動回收功能,而對于C部分來說,虛擬機不能實現(xiàn)直接回收功能,可以通過對底層功能進行調(diào)用,即調(diào)用recycle()將C部分內(nèi)存釋放,這樣便可以有效解決內(nèi)存泄露問題。詳見曹邦琴和徐昊的Android應(yīng)用中優(yōu)化Bitmap使用避免內(nèi)存溢出。2)避免Context超出范圍。如果開發(fā)者不想對內(nèi)部各個對象的生命周期進行控制,那么要避免在Activity中出現(xiàn)非靜態(tài)對象,從而有效的解決內(nèi)存泄露問題。
2.2.1 短信泄露的解決對策
在制定短信泄露的解決對策時,需要從以下幾方面考慮:1)嚴(yán)格控制安卓系統(tǒng)權(quán)限。用戶應(yīng)該具備一定的風(fēng)險意識,盡可能的避免將訪問網(wǎng)絡(luò)權(quán)限和訪問隱私權(quán)限同時對可以程序開放。在日常生活中,要將很少使用或者是不用的功能,如手機定位、紅外、高清攝像以及藍(lán)牙等停止使用或者是關(guān)閉,避免移動設(shè)備被病毒或者是遠(yuǎn)程攻擊搜索到,當(dāng)需要這些功能時,再將其打開。此外,在使用免費WIFI時,要選擇自身信任的網(wǎng)絡(luò),不能輕易對外界發(fā)送個人隱私信息。2)在正規(guī)平臺中對軟件進行下載。智能設(shè)備用戶在下載軟件過程中,要以軟件官方平臺為準(zhǔn),不要到論壇或者不知名的網(wǎng)站中下載。同時對于不明來路的軟件以及不良網(wǎng)頁都要禁止在手機中打開,到正規(guī)的手機營銷商處對手機進行維護,防止病毒程序植入。
2.2.2 通話記錄和通訊錄泄露問題的解決對策
針對這種問題來說,需要從以下幾方面考慮:嚴(yán)格遵守程序保密規(guī)定。安卓程序中的保密規(guī)定不但對保障國家安全、商業(yè)秘密保護以及企業(yè)數(shù)據(jù)保護有著巨大的作用。同時也對個人通話記錄和通訊錄的隱私信息保護起到非常大的作用。用戶在使用安卓應(yīng)用程序過程中,有時為了方便辦事,常常將通話記錄和聯(lián)系人保存到程序中,如電子郵件、QQ、微信、通信、通訊錄等等軟件程序中,常會保留大量的通話記錄。因此,為了防止各項通話記錄被竊取,嚴(yán)格遵守這些軟件中要求的保密規(guī)定,從根源上杜絕信息泄露。同時也可以使用代碼或者是簡寫的方式避免個人隱私信息泄露。
2.2.3 網(wǎng)絡(luò)泄露的解決對策
網(wǎng)絡(luò)信息泄露解決對策的制定需要從以下幾方面進行考慮:1)檢查Root權(quán)限。在安卓系統(tǒng)中,其底層內(nèi)核為Linux內(nèi)核,Root為Linux管理員,有著最高權(quán)限。它可以停止或者是啟動安卓應(yīng)用程序中的任何一個進程,以此來修改和訪問程序中的全部文件。為了防止惡意程序通過Bug獲取Root權(quán)限,可以使用Python語言,利用特征字符串掃描應(yīng)用程序的源碼,對代碼中與Root權(quán)線存在一定關(guān)系的操作進行查詢。以此來解決惡意程序入侵網(wǎng)絡(luò)導(dǎo)致信息泄露的問題。2)檢測組建間通訊。組件間的通訊主要是通過Intent和URLs進行的,安卓應(yīng)用程序根據(jù)URLs相關(guān)信息對目標(biāo)組件進行搜尋。這種情況下,可以先對xml文件進行解析,提取安卓系統(tǒng)申請的信息如組件信息、權(quán)限信息等。如果錨函數(shù)和源函數(shù)同時存在,那么需要參照Susi權(quán)限與錨、源函數(shù)之間的對應(yīng)關(guān)系,對源碼中兩種函數(shù)的存在與否進行判斷,從而找出泄露途徑,并更換相關(guān)代碼,解決泄露問題,整個隱私泄露的解決對策詳見燕山大學(xué)鄒明宇的Android應(yīng)用程序的隱私泄露檢測關(guān)鍵技術(shù)研究。
2.3.1 數(shù)據(jù)明文泄露的解決對策
數(shù)據(jù)明文泄露的解決對策主要從以下幾方面考慮:1)在安卓程序開發(fā)過程中,不能直接對相關(guān)文件進行創(chuàng)建。避免將敏感數(shù)據(jù)信息如密碼等明文儲存于Shared Preferences文件中,從而解決信息泄露問題。2)在代碼查詢過程中,要采取參數(shù)化方法進行查詢,避免在SQL語句中之間拼接上用戶參數(shù),以此來防止惡意軟件或者是黑客對SQL進行注入攻擊,從而確保敏感信息不外泄。同時還要禁止安卓程序大面積公布有用的信息,如果用戶需要對這些有價值的信息進行訪問,應(yīng)該利用訪問控制措施保護它們,從而保證敏感信息不外泄。
2.3.2 cookie管理不當(dāng)?shù)慕鉀Q對策
cookie管理不當(dāng)?shù)慕鉀Q對策主要從以下幾方面進行考慮:1)實現(xiàn)HTTPs。通常情況下,HTTP協(xié)議主要是用于服務(wù)器和客戶端的數(shù)據(jù)傳輸,在使用時,未對數(shù)據(jù)進行加密。因此,要使用協(xié)議的加密版本,也就是HTTPs。首先,利用HTTPs通信功能,使服務(wù)器具有連接HTTPs連接的處理功能。其次,在SSL/TLS非對稱結(jié)構(gòu)加密技術(shù)支持下,將客戶端請求發(fā)送到https協(xié)議地址中。在此過程中,客服端和服務(wù)器之間在構(gòu)建進程時會對參數(shù)進行加密,即“握手”,以此防止信息泄露。2)管理cookie。在管理時,需要設(shè)置中間變量對cookie進行管理。此外,在完成相關(guān)任務(wù)之后要及時的將cookie數(shù)據(jù)清理掉,這樣才能確保敏感信息不被泄露出去(羅亞玲,黎文偉,蘇欣,基于HTTP流量的安卓應(yīng)用敏感信息泄露檢測:計算機應(yīng)用研究,2017年第5期)。
結(jié)論:綜上所述,安卓應(yīng)用中信息的安全性非常重要,確保信息不外泄有著非常大的現(xiàn)實意義。經(jīng)過上文分析可得,基于安卓應(yīng)用中信息泄露問題,需要深入分析程序的內(nèi)存狀態(tài),避免內(nèi)存溢出問題出現(xiàn),且要確??蛻舳瞬槐粣阂馇?jǐn)_。同時在服務(wù)器端要采取有效措施管理cookie數(shù)據(jù)以及各類明文的儲存。這樣才能有效的解決信息泄露問題。