開發(fā)的App在安全檢測工具上監(jiān)測到一些問題,故特開security欄研究android app 安全問題缤言,此文為檢測到的一些安全問題
-
AllowBackup 配置
Android API Level 8 及其以上 Android 系統(tǒng)提供了為應用程序數據的備份和恢復功能
此功能的開關決定于該應用程序中 AndroidManifest.xml 文件中的Application節(jié)點 allowBackup 屬性值,其屬性值默認是 True呆奕。當 allowBackup 標志為 true 時埋嵌,用戶即可通過 adb backup 和 adb restore 來進行對應用數據的備份和恢復,這可能會帶來一定的安全風險钢坦。
-
WebView JS交互問題
調用了高危API addJavascriptInterface,Android系統(tǒng)版本4.2以下可以導致遠程命令執(zhí)行
安全檢測給出的修復建議:不使用addJavascriptInterface進行javascript層與java層的通信,可以使用shouldOverrideUrlLoading或著onConsoleMessage等函數進行通信
-
第三方平臺授權信息寫在了本地
微信登陸授權信息secret與appid寫在了本地
檢測平臺修復建議:將信息放在服務器端啥酱,由服務器端來中轉接口調用請求
-
BroadCastReceiver組件的數據接受
使用registerReceiver(mReceiver,intentFilter)的方式動態(tài)注冊的BroadCastReceiver是公開的組件爹凹,外部應用可以給該動態(tài)注冊的BroadCastReceiver發(fā)送惡意數據
檢測平臺修復建議:建議使用registerReceiver(BroadCastReceiver receiver,IntentFilter filter,String broadcastPermission,Handler scheduler)增加權限或使用LocalBroadCastManger
-
Intent劫持風險安全
使用隱式Intent來發(fā)送廣播,惡意程序可以通過注冊收聽同樣的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模式創(chuàng)建存儲文件或使用MODE_WORLD_WRITEABLE模式創(chuàng)建存儲文件并含有"android:shareUserId" 屬性值和測試簽名
-
風險原理
- 使用MODE_WORLD_READABLE模式創(chuàng)建Shared Preferences文件项秉,使得其他應用對該Shared Preferences文件具備可讀的權限绣溜;
- 使用MODE_WORLD_WRITEABLE模式創(chuàng)建Shared Preferences文件并含有“android:sharedUserId”屬性值,使得其他應用對該應用的Shared Preferences文件具備可寫的權限娄蔼。
- 在具備root權限的程序或用戶對任何應用程序通過任意模式創(chuàng)建的的Shared Preferences文件都具有可讀可寫的權限
-
修復建議
- 避免使用MODE_WORLD_WRITEABLE和MODE_WORLD_READABLE模式創(chuàng)建進程間通信的文件
- 避免將密碼等敏感數據信息明文存儲在Shared Preferences中
- 避免濫用“Android:sharedUserId”屬性
-
Content Provider 文件目錄遍歷漏洞
- 風險觸發(fā)條件
- 對外暴露的Content Provider組件實現了opneFile()的接口
- 且沒有對文件的Uri進行有效的判斷和過濾
- 漏洞原理
- 對外暴露的Content Provider實現了openFile()接口怖喻,其它應用可以調用該Content Provider 并調用它的openFile()方法進行數據訪問底哗,如果沒有對訪問權限和目標文件Uri進行有效的判斷,就可以遍歷訪問任意可讀文件
- 修復建議
- 將不必要導出的Content Provider設置為不導出
- 去除沒有必要的OpenFile()接口
- 對openFile訪問的文件路徑進行有效判斷
- 使用簽名驗證來控制Content
- Provider共享數據的訪問權限:設置protectionLevel=”signature”
- 風險觸發(fā)條件