1. 程式人生 > >Android靜態安全檢測 -> 檔案任意讀寫

Android靜態安全檢測 -> 檔案任意讀寫

檔案任意讀寫 -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】避免把密碼等敏感資料資訊明文存放在內部儲存檔案中