敏感信息安全主要檢查客戶端是否保存明文(或者容易被破解)的敏感信息,以及敏感信息的非授權訪問。
目前安卓實現數據持久化的方式有4種:文件存儲、SharedPreferences存儲、數據庫存儲、SD卡存儲。因此咱們得先學習下安卓的數據存儲(持久化)相關的知識。本着光說不練假把式,只看不練一用就廢的原則,還是結合具體代碼例子來學習。前面說了,咱除了安卓手機之外對安卓一無所知,所以每次看安卓安全方面的東西,都會自己改app代碼來做實驗,這樣更直觀,更容易理解,也不容易忘~
1. 文件存儲權限
文件存儲是將所有數據原封不動的保存到文件中,適合簡單文本和二進制數據,下面的代碼是將輸入內容保存到名為save_data的文件中:

運行app輸入內容:
 
在android-sdk\tools\lib\monitor-x86_64目錄下找到monitor.exe並啟動,找到data/data/com.example.persistencetest/file文件夾下的文件,就是我們寫入的文件了:

將文件導出來:

用root用戶進入adb shell查看save_data文件,該文件所屬用戶是:u0_a56,權限為:-rw-rw----
 
代碼中Context設置的是MODE_PRIVATE,表明該數據只能被應用本身(或者root)訪問:
 
Context.MODE_PRIVATE:默認模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容,如果想把新寫入的內容追加到原文件中。
Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件。
Context.MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取。
Context.MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入。
接下來開啟另一個應用drozer,並且用drozer連接模擬器進入adb shell,此時的用戶是u0_a57,根據MODE_PRIVATE的設置,此時是無法訪問save_data文件的:

現在將文件的context改為MODE_WORLD_READABLE,這個屬性在高版本的安卓已經被拋棄了666~

再開drozer就能讀取這個文件了

用root用戶查看該文件的權限變成了-rw-rw-r--

雖然高版本的Android已經棄用了MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE,但不妨礙之前低版本已經使用過這兩個屬性的App,以及因為特殊需求仍然在高版本使用的App。因此在開發APP時應盡量避免設置此類權限,以免造成安全隱患。在做APP檢查時,應注意檢查賦予此類權限的APP相關文件,具體問題具體分析
2. logcat 日志
我們在寫程序時為了方便調試,或者發布后方便記錄數據或者排查問題,一般都會生成日志文件(包括操作日志、錯誤日志等)。但是一些敏感數據,比如用戶密碼、配置密碼、IP、github地址、JWT Token等敏感信息最好不要存儲(或者明文存儲)在日志中,在很多攻擊案例中,日志就是突破點~
Android也支持寫入日志,並且可以通過命令直接查看日志。假設在代碼中將密碼寫入日志:

運行一下:

然后進入adb shell查看日志,執行:logcat -d
輸出日志,發現密碼:

也可以輸出日志文件到本機:adb shell logcat -d > D:\1.txt

 
本文僅用於技術學習和交流,嚴禁用於非法用途,否則產生的一切后果自行承擔。
如需轉載,請注明出處,這是對他人勞動成果的尊重。
