史 楊
(鄖陽師范高等專科學校 湖北 442000)
Android系統手機一般存放著用戶個人的許多隱私數據,比如手機號碼、QQ、微信聊天記錄、通訊錄、短信及支付寶交易密碼等等。這些數據都是用戶非常有價值的隱私,一旦泄密將造成不可估量的后果。然而在現實中,這些數據的存儲并沒有我們想象中的那么安全,本文將從程序開發的角度來分析Android系統手機的安全性。
在Android系統手機中,內存一般在10G左右,經常不能滿足用戶的需求,所以大多數的手機在購買后都會加一個30G左右大小的SD卡,用于存儲照片、視頻及其它外部文件。而一些國內較早版本的 IM軟件,直接把聊天記錄保存在手機的外部SD卡中,但是在Android系統中的外部存儲的安全隱患最大,任何軟件只需要在AndroidManifest.xm1中聲明如下一行權限,即可讀寫外部存儲設備。
其它軟件只要擁有內存卡讀寫權限,就可以訪問它的內容,若即時聊天軟件的聊天記錄存放在SD卡中的話,就給了一些惡意軟件留下了可乘之機,從而造成用戶數據的悄無聲息的泄密。
所以在Android系統程序開發中,可以適當的采用外部存儲來保存數據,但是若涉及到用戶隱私的,即使加密了的數據,最好也不要放到外部存儲設備上,通過上面分析,只要是Android程序開發員掌握了軟件數據的解密方法,可以簡單的獲取用戶的隱私。
Android系統的內部存儲是所有軟件存放私有數據的位置,在 Android系統安裝包中提供了 openFi1eInput()和openFi1eOuput()方法來讀寫程序的私有數據目錄。如一段常見的存儲內部數據的代碼1片段如下:
openFi1eOutput()方法的MODE_PRIVATE參數指定了文件創建的模式,表明該文件是不能被其他程序訪問的,Android系統內部存儲的訪問是通過Linux文件訪問權限機制控制的。
若我們在程序開發時,將 MODE_PRIVATE參數更改為MODE_WORLD_READABLE,則文件允許其他用戶進行讀操作。當內部存儲文件可以被訪問時,程序開發者可以通過以下代碼2片段來獲取該數據的內容。

從上面程序代碼我們可以知道,createPackageContext()方法允許創建其他程序包的上下文,即 Context對象,通過這個對象,程序可以啟動其他程序的Activity,并且訪問其它程序的私有數據。經過Context.CONTEXT_IGNORE_SECURITY指定程序忽略創建Conetxt時的安全異常,將會始終創建Context對象,由于程序賦予了相應的權限,程序不會發生異常。
所以我們在程序代碼 1片段中,即使把參數設置為MODE_PRIVATE,惡意程序依然能夠通過其他途徑獲取高一級的訪問權限,從而通過系統漏洞來提升訪問權限,進一步來訪問軟件的內部存儲的隱私數據。
通過對Android系統外部存儲數據和內部存儲數據安全來看,無論我們采用什么樣的存儲方式,惡意程序都可以通過修改訪問權限,或者提升訪問權限來獲取Android系統的漏洞,從而獲取用戶的私密數據,所以對于程序開發者來說,務必要對存儲在內外部的數據進行加密,提升Android系統手機的數據安全。
[1]吳倩,趙晨嘯,郭瑩.Android安全機制解析與應用實踐.北京:機械工業出版社.2013.
[2]肖梓航.再談Android軟件的安全開發.程序員.2013.