移動安全-APP安全加固

風險名稱 危害 解決方案
App防止反編譯 被反編譯的暴露客戶端邏輯,加密算法,密鑰,等等 加固
Java層代碼源代碼反編譯風險 被反編譯的暴露客戶端邏輯,加密算法,密鑰,等等 加固 ,混淆
so文件破解風險 導致核心代碼泄漏 so文件加固
篡改和二次打包風險 修改文件資源等,二次打包的添加病毒,廣告,或者竊取支付密碼,攔截短信等 資源文件混淆和校驗簽名的hash值
資源文件泄露風險 獲取圖片,js文件等文件,通過植入病毒,釣魚頁面獲取用戶敏感信息 資源混淆,加固等等
應用簽名未校驗風險 反編譯或者二次打包,添加病毒代碼,惡意代碼,上傳盜版App 對App進行簽名證書校驗
代碼未混淆風險 被反編譯的暴露客戶端邏輯,加密算法,密鑰,等等 混淆
webview明文存儲密碼風險 用戶使用webview默認存儲密碼到databases/webview.db root的手機可以產看webview數據庫,獲取用戶敏感信息 關閉wenview存儲密碼功能
明文數字證書風險 APK使用的數字證書用來校驗服務器的合法性,保證數據的保密性和完整性。明文存儲的證書被篡改可造成數據被獲取等 客戶端校驗服務器域名和數字證書等
調試日誌函數調用風險 日誌信息裏面含有用戶敏感信息等 關閉調試日誌函數,刪除打印的日誌信息
AES/DES加密方法不安全使用風險 在使用AES/DES加密使用了ECB或者OFB工作模式,加密數據被選擇明文攻擊破解等 使用CBC和CFB工作模式等
RSA加密算法不安全風險 密數據被選擇明文攻擊破解和中間人攻擊等導致用戶敏感信息泄露 密碼不要太短,使用正確的工作模式
密鑰硬編碼風險 用戶使用加密算法的密鑰設置成一個固定值導致密鑰泄漏 動態生成加密密鑰或者將密鑰進程分段存儲
動態調試攻擊風險 攻擊者使用GDB,IDA調試追蹤目標程序,獲取用戶敏感信息等 在so文件裏面實現對調試進程的監聽
應用數據任意備份風險 AndroidMainfest中allowBackup=true 攻擊者可以使用adb命令對APP應用數據進行備份造成用戶數據泄露 allowBackup=false
全局可讀寫內部文件風險 實現不同軟件之間數據共享,設置內部文件全局可讀寫造成其他應用也可以讀取或者修改文件等 (1)使用MODE_PRIVATE模式創建內部存儲文件(2) 加密存儲敏感數據 (3) 避免在文件中存儲明文和敏感信息
SharedPrefs全局可讀寫內部文件風險 被其他應用讀取或者修改文件等 使用正確的權限
Internal Storage數據全局可讀寫風險 當設置MODE_WORLD_READBLE或者設置android:sharedUserId導致敏感信息被其他應用程序讀取等 設置正確的模式等
getDir數據全局可讀寫風險 當設置MODE_WORLD_READBLE或者設置android:sharedUserId導致敏感信息被其他應用程序讀取等當設置MODE_WORLD_READBLE或者設置android:sharedUserId導致敏感信息被其他應用程序讀取等 設置正確的模式等
JAVA層動態調試風險 AndroidManifest中調試的標記可以使用jdb進行調試,竊取用戶敏感信息。 android:debuggable=“false”
內網測試信息殘留風險 通過測試的Url,測試賬號等對正式服務器進行攻擊等 將測試內網的日誌清除,或者測試服務器和生產服務器不要使用同一個
隨機數不安全使用風險 在使用SecureRandom類來生成隨機數,其實並不是隨機,導致使用的隨機數和加密算法被破解。 (1)不使用setSeed方法(2)使用/dev/urandom或者/dev/random來初始化僞隨機數生成器
Http傳輸數據風險 未加密的數據被第三方獲取,造成數據泄露 使用Https
Htpps未校驗服務器證書風險,Https未校驗主機名風險,Https允許任意主機名風險 客戶端沒有對服務器進行身份完整性校驗,造成中間人攻擊 (1).在X509TrustManager中的checkServerTrusted方法對服務器進行校驗(2).判斷證書是否過期(3).使用HostnameVerifier類檢查證書中的主機名與使用證書的主機名是否一致
webview繞過證書校驗風險 webview使用https協議加密的url沒有校驗服務器導致中間人攻擊 校驗服務器證書時候正確
界面劫持風險 用戶輸入密碼的時候被一個假冒的頁面遮擋獲取用戶信息等 (1).使用第三方專業防界面劫持SDK(2).校驗當前是否是自己的頁面
輸入監聽風險 用戶輸入的信息被監聽或者按鍵位置被監聽造成用戶信息泄露等 自定義鍵盤
截屏攻擊風險 對APP運行中的界面進行截圖或者錄製來獲取用戶信息 添加屬性getWindow().setFlags(FLAG_SECURE)不讓用戶截圖和錄屏
動態註冊Receiver風險 當動態註冊Receiver默認生命週期是可以導出的可以被任意應用訪問 使用帶權限檢驗的registerReceiver API進行動態廣播的註冊
Content Provider數據泄露風險 權限設置不當導致用戶信息 正確的使用權限
Service ,Activity,Broadcast,content provider組件導出風險 Activity被第三方應用訪問導致被任意應用惡意調用 自定義權限
PendingIntent錯誤使用Intent風險 使用PendingIntent的時候,如果使用了一個空Intent,會導致惡意用戶劫持修改Intent的內容 禁止使用一個空Intent去構造PendingIntent
Intent組件隱式調用風險 使用隱式Intent沒有對接收端進行限制導致敏感信息被劫持 1.對接收端進行限制 2.建議使用顯示調用方式發送Intent
Intent Scheme URL攻擊風險 webview惡意調用App 對Intent做安全限制
webview遠程代碼執行風險 風險:WebView.addJavascriptInterface方法註冊可供JavaScript調用的Java對象,通過反射調用其他java類等 建議不使用addJavascriptInterface接口,對於Android API Level爲17或者以上的Android系統,Google規定允許被調用的函數,必須在Java的遠程方法上面聲明一個@JavascriptInterface註解
zip文件解壓目錄遍歷風險 Java代碼在解壓ZIP文件時,會使用到ZipEntry類的getName()方法,如果ZIP文件中包含“…/”的字符串,該方法返回值裏面原樣返回,如果沒有過濾掉getName()返回值中的“…/”字符串,繼續解壓縮操作,就會在其他目錄中創建解壓的文件 (1). 對重要的ZIP壓縮包文件進行數字簽名校驗,校驗通過才進行解壓。 (2). 檢查Zip壓縮包中使用ZipEntry.getName()獲取的文件名中是否包含”…/”或者”…”,檢查”…/”的時候不必進行URI Decode(以防通過URI編碼”…%2F”來進行繞過),測試發現ZipEntry.getName()對於Zip包中有“…%2F”的文件路徑不會進行處理。
Root設備運行風險 已經root的手機通過獲取應用的敏感信息等 檢測是否是root的手機禁止應用啓動
模擬器運行風險 刷單,模擬虛擬位置等 禁止在虛擬器上運行
從sdcard加載Dex和so風險 未對Dex和So文件進行安全,完整性及校驗,導致被替換,造成用戶敏感信息泄露 (1).放在APP的私有目錄 (2).對文件進行完成性校驗。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章