開發的App在安全檢測工具上監測到一些問題,故特開security欄研究android app 安全問題,此文爲檢測到的一些安全問題
-
AllowBackup 配置
Android API Level 8 及其以上 Android 系統提供了爲應用程序數據的備份和恢復功能
此功能的開關決定於該應用程序中 AndroidManifest.xml 文件中的Application節點 allowBackup 屬性值,其屬性值默認是 True。當 allowBackup 標誌爲 true 時,用戶即可通過 adb backup 和 adb restore 來進行對應用數據的備份和恢復,這可能會帶來一定的安全風險。
-
WebView JS交互問題
調用了高危API addJavascriptInterface,Android系統版本4.2以下可以導致遠程命令執行
安全檢測給出的修復建議:不使用addJavascriptInterface進行javascript層與java層的通信,可以使用shouldOverrideUrlLoading或着onConsoleMessage等函數進行通信
-
第三方平臺授權信息寫在了本地
微信登陸授權信息secret與appid寫在了本地
檢測平臺修復建議:將信息放在服務器端,由服務器端來中轉接口調用請求
-
BroadCastReceiver組件的數據接受
使用registerReceiver(mReceiver,intentFilter)的方式動態註冊的BroadCastReceiver是公開的組件,外部應用可以給該動態註冊的BroadCastReceiver發送惡意數據
檢測平臺修復建議:建議使用registerReceiver(BroadCastReceiver receiver,IntentFilter filter,String broadcastPermission,Handler scheduler)增加權限或使用LocalBroadCastManger
-
Intent劫持風險安全
使用隱式Intent來發送廣播,惡意程序可以通過註冊收聽同樣的action的broadcastreceiver來劫持Intent,如果Intent中有敏感信息,會造成敏感信息泄露
檢測平臺修復建議:如果Intent中包含敏感信息,那麼在sendBoadcast之前需要顯式指定component
-
Intent附帶數據漏洞
如果getIntent()的intent附帶空數據、異常或畸形數據,在處理getXXXExtra()獲取數據時沒進行異常捕獲,會出現ClassNotFoundException異常導致應用Crash
-
阿里聚安全建議
-
將不必要的導出的組件設置爲不導出,防止引起拒絕服務,尤其是殺毒、安全防護、鎖屏防盜等安全應用; 在AndroidMenifest.xml文件中,將相應組件的“android:exported”屬性設置爲“false”,如下示例:
<activity android:name="XXXActivity" android:exported="false"/>
Intent處理數據時進行捕獲異常通過Intent.getXXXExtra()獲取的數據時進行以下判斷,以及用try catch方式進行捕獲所有異常,以防止應用出現拒絕服務漏洞:空指針異常 類型轉換異常 數組越界訪問異常 類未定義異常 其他異常
-
-
數據存儲安全問題
存在安全問題的數據存儲 Shared Preferences、Intentnal Storage、Android Database
-
風險條件
- 使用MODE_WORLD_READABLE模式創建存儲文件或使用MODE_WORLD_WRITEABLE模式創建存儲文件並含有"android:shareUserId" 屬性值和測試簽名
-
風險原理
- 使用MODE_WORLD_READABLE模式創建Shared Preferences文件,使得其他應用對該Shared Preferences文件具備可讀的權限;
- 使用MODE_WORLD_WRITEABLE模式創建Shared Preferences文件並含有“android:sharedUserId”屬性值,使得其他應用對該應用的Shared Preferences文件具備可寫的權限。
- 在具備root權限的程序或用戶對任何應用程序通過任意模式創建的的Shared Preferences文件都具有可讀可寫的權限
-
修復建議
- 避免使用MODE_WORLD_WRITEABLE和MODE_WORLD_READABLE模式創建進程間通信的文件
- 避免將密碼等敏感數據信息明文存儲在Shared Preferences中
- 避免濫用“Android:sharedUserId”屬性
-
Content Provider 文件目錄遍歷漏洞
- 風險觸發條件
- 對外暴露的Content Provider組件實現了opneFile()的接口
- 且沒有對文件的Uri進行有效的判斷和過濾
- 漏洞原理
- 對外暴露的Content Provider實現了openFile()接口,其它應用可以調用該Content Provider 並調用它的openFile()方法進行數據訪問,如果沒有對訪問權限和目標文件Uri進行有效的判斷,就可以遍歷訪問任意可讀文件
- 修復建議
- 將不必要導出的Content Provider設置爲不導出
- 去除沒有必要的OpenFile()接口
- 對openFile訪問的文件路徑進行有效判斷
- 使用簽名驗證來控制Content
- Provider共享數據的訪問權限:設置protectionLevel=”signature”
- 風險觸發條件