Android靜態安全檢測 -> 檔案任意讀寫 阿新 • • 發佈:2019-02-13 檔案任意讀寫 -openFileOutput方法 一、API 1. openFileOutput(String name , int mode) 示例:openFileOutput("text.txt" , Context.MODE_PRIVATE) 2. 第一引數:指定檔名稱,不能包含路徑分隔符“/”,如果檔案不存在,Android會自動建立,建立的檔案儲存在/data/data/<package name>/files目錄 3. 第二引數:指定操作模式 【1】Context.MODE_PRIVATE = 0 (0x0000) 預設操作模式,代表該檔案是私有資料,只能被應用本身訪問,同時寫入的內容會覆蓋原檔案的內容 【2】Context.APPEND = 32768 (0x8000) 同樣代表檔案是私有資料,寫入的方式是追加內容 【3】Context.MODE_WORLD_READABLE = 1 (0x0001) 表示當前檔案可以被其他應用讀取 【4】Context.MODE_WORLD_WRITEABLE = 2 (0x0002) 表示當前檔案可以被其他應用寫入 【5】Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE = 3 (0x0003) 表示檔案可被其他應用讀和寫 4. 參考連結: 二、觸發條件 1. openFileOutput("text.txt" , Context.MODE_WORLD_READABLE) 2. openFileOutput("text.txt" , Context.MODE_WORLD_WRITEABLE) 3. openFileOutput("text.txt" , Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE) 4. 對應到smali中的特徵 ;->openFileOutput(Ljava/lang/String;I)Ljava/io/FileOutputStream; 判斷對暫存器的賦值:const v1 0x1 / const v1 0x2 / const v1 0x3 三、漏洞原理 【1】內部儲存檔案沒有使用正確的建立模式,導致可被其他應用訪問,並執行讀寫操作,可能會導致敏感資訊的洩漏 【2】詳細的原理&POC ,參考連結: 四、修復建議 【1】避免使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE模式建立內部儲存檔案 【2】避免把密碼等敏感資料資訊明文存放在內部儲存檔案中