android apk反編譯安全檢查----shared_preferences任意讀寫漏洞
阿新 • • 發佈:2019-01-27
測試某apk時,使用http://appscan.360.cn進行首次分析,報出存在shred_prefs任意讀寫的問題。於是研究一下測試思路。此文純屬個人分析,若有不對指出,還請指出。
一、shared_prefs任意讀寫漏洞的檢查思路
1.apk進行反編譯成smali語言
使用apktool的命令apktool d XX.apk -o OutputFolder即可。
2.遍歷搜尋
遍歷OutputFolder資料夾中.samli檔案,搜尋裡面是否有 getSharedPreferences方法。
3.判斷getSharedPreferences方法傳入的引數值
檢查到getSharedPreferences方法後,進一步檢視該方法的引數值,是否為0x01\0x02\0x03,它們分別表示可讀、可寫、可讀可寫
一個smali語言例子:
const/4 v2, 0x3
invoke-virtual {p0, v1, v2}, Landroid/content/Context;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;
表示getSharedPreferences的mode為v2,即0x3,可讀可寫。
二、getSharedPreferences方法詳細分析
方法定義:getSharedPreferences(String name , int mode)
引數意義:
name ---- xml檔案的名字。該檔案所在路徑為/data/data/應用名字/shared_prefs/name.xml。
mode ---- 開啟xml檔案的方式,有如下五種:
Context.MODE_PRIVATE = 0 (0x0000):預設方式,表示僅本程式可用,其他程式不可訪問,寫入方式為覆蓋
Context.APPEND = 32768 (0x8000):表示僅本程式可用,其他程式不可訪問,寫入方式為追加
Context.MODE_WORLD_READABLE = 1 (0x0001):表示檔案可被其他程式讀取
Context.MODE_WORLD_WRITEABLE = 2 (0x0002):表示檔案可被其他程式寫入
Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE = 3 (0x0003):表示檔案可被其他程式讀取、寫入
由此可見,當mode的值為1、2、3時,是具有安全風險的。
三、風險
導致應用資訊洩露、篡改,嚴重的話,會導致應用崩潰、影響手機執行
四、修改方法
將mode的值改為Context.MODE_PRIVATE或者Context.APPEND,阻止其他程式的訪問。
在其他程式必須可以訪問的情況下,需要保證shared_prefs檔案中不存在使用者敏感資訊,在應用程式中,也要增加對該檔案讀操作時的異常處理。