史 楊
(鄖陽師范高等??茖W校 湖北 442000)
Android系統(tǒng)手機一般存放著用戶個人的許多隱私數(shù)據(jù),比如手機號碼、QQ、微信聊天記錄、通訊錄、短信及支付寶交易密碼等等。這些數(shù)據(jù)都是用戶非常有價值的隱私,一旦泄密將造成不可估量的后果。然而在現(xiàn)實中,這些數(shù)據(jù)的存儲并沒有我們想象中的那么安全,本文將從程序開發(fā)的角度來分析Android系統(tǒng)手機的安全性。
在Android系統(tǒng)手機中,內(nèi)存一般在10G左右,經(jīng)常不能滿足用戶的需求,所以大多數(shù)的手機在購買后都會加一個30G左右大小的SD卡,用于存儲照片、視頻及其它外部文件。而一些國內(nèi)較早版本的 IM軟件,直接把聊天記錄保存在手機的外部SD卡中,但是在Android系統(tǒng)中的外部存儲的安全隱患最大,任何軟件只需要在AndroidManifest.xm1中聲明如下一行權(quán)限,即可讀寫外部存儲設(shè)備。
其它軟件只要擁有內(nèi)存卡讀寫權(quán)限,就可以訪問它的內(nèi)容,若即時聊天軟件的聊天記錄存放在SD卡中的話,就給了一些惡意軟件留下了可乘之機,從而造成用戶數(shù)據(jù)的悄無聲息的泄密。
所以在Android系統(tǒng)程序開發(fā)中,可以適當?shù)牟捎猛獠看鎯肀4鏀?shù)據(jù),但是若涉及到用戶隱私的,即使加密了的數(shù)據(jù),最好也不要放到外部存儲設(shè)備上,通過上面分析,只要是Android程序開發(fā)員掌握了軟件數(shù)據(jù)的解密方法,可以簡單的獲取用戶的隱私。
Android系統(tǒng)的內(nèi)部存儲是所有軟件存放私有數(shù)據(jù)的位置,在 Android系統(tǒng)安裝包中提供了 openFi1eInput()和openFi1eOuput()方法來讀寫程序的私有數(shù)據(jù)目錄。如一段常見的存儲內(nèi)部數(shù)據(jù)的代碼1片段如下:
openFi1eOutput()方法的MODE_PRIVATE參數(shù)指定了文件創(chuàng)建的模式,表明該文件是不能被其他程序訪問的,Android系統(tǒng)內(nèi)部存儲的訪問是通過Linux文件訪問權(quán)限機制控制的。
若我們在程序開發(fā)時,將 MODE_PRIVATE參數(shù)更改為MODE_WORLD_READABLE,則文件允許其他用戶進行讀操作。當內(nèi)部存儲文件可以被訪問時,程序開發(fā)者可以通過以下代碼2片段來獲取該數(shù)據(jù)的內(nèi)容。
從上面程序代碼我們可以知道,createPackageContext()方法允許創(chuàng)建其他程序包的上下文,即 Context對象,通過這個對象,程序可以啟動其他程序的Activity,并且訪問其它程序的私有數(shù)據(jù)。經(jīng)過Context.CONTEXT_IGNORE_SECURITY指定程序忽略創(chuàng)建Conetxt時的安全異常,將會始終創(chuàng)建Context對象,由于程序賦予了相應(yīng)的權(quán)限,程序不會發(fā)生異常。
所以我們在程序代碼 1片段中,即使把參數(shù)設(shè)置為MODE_PRIVATE,惡意程序依然能夠通過其他途徑獲取高一級的訪問權(quán)限,從而通過系統(tǒng)漏洞來提升訪問權(quán)限,進一步來訪問軟件的內(nèi)部存儲的隱私數(shù)據(jù)。
通過對Android系統(tǒng)外部存儲數(shù)據(jù)和內(nèi)部存儲數(shù)據(jù)安全來看,無論我們采用什么樣的存儲方式,惡意程序都可以通過修改訪問權(quán)限,或者提升訪問權(quán)限來獲取Android系統(tǒng)的漏洞,從而獲取用戶的私密數(shù)據(jù),所以對于程序開發(fā)者來說,務(wù)必要對存儲在內(nèi)外部的數(shù)據(jù)進行加密,提升Android系統(tǒng)手機的數(shù)據(jù)安全。
[1]吳倩,趙晨嘯,郭瑩.Android安全機制解析與應(yīng)用實踐.北京:機械工業(yè)出版社.2013.
[2]肖梓航.再談Android軟件的安全開發(fā).程序員.2013.