android 常見checklists

1.App防止反編譯
被反編譯的暴露客戶端邏輯,加密算法,密鑰,等等
加固

2.java層代碼源代碼反編譯風險
被反編譯的暴露客戶端邏輯,加密算法,密鑰,等等
加固
,混淆

3.so文件破解風險
導致核心代碼泄漏。
so文件加固

4.篡改和二次打包風險
修改文件資源等,二次打包的添加病毒,廣告,或者竊取支付密碼,攔截短信等
資源文件混淆和校驗簽名的hash值

5.資源文件泄露風險
獲取圖片,js文件等文件,通過植入病毒,釣魚頁面獲取用戶敏感信息
資源混淆,加固等等

6.應用簽名未交驗風險
反編譯或者二次打包,添加病毒代碼,惡意代碼,上傳盜版App
對App進行簽名證書校驗

7.代碼爲混淆風險
業務邏輯暴露,加密算法,賬號信息等等。
混淆(中文混淆)

8.webview明文存儲密碼風險
用戶使用webview默認存儲密碼到databases/webview.db
root的手機可以產看webview數據庫,獲取用戶敏感信息
關閉wenview存儲密碼功能

9.明文數字證書風險
APK使用的數字證書用來校驗服務器的合法性,保證數據的保密性和完成性
明文存儲的證書被篡改造成數據被獲取等
客戶端校驗服務器域名和數字證書等

10.調試日誌函數調用風險
日誌信息裏面含有用戶敏感信息等
關閉調試日誌函數,刪除打印的日誌信息

11.AES/DES加密方法不安全使用風險
在使用AES/DES加密使用了ECB或者OFB工作模式,加密數據被選擇明文攻擊破解等
使用CBC和CFB工作模式等

12.RSA加密算法不安全風險
密數據被選擇明文攻擊破解和中間人攻擊等導致用戶敏感信息泄露
密碼不要太短,使用正確的工作模式

13.密鑰硬編碼風險
用戶使用加密算法的密鑰設置成一個固定值導致密鑰泄漏
動態生成加密密鑰或者將密鑰進程分段存儲等

14.動態調試攻擊風險
攻擊者使用GDB,IDA調試追蹤目標程序,獲取用戶敏感信息等
在so文件裏面實現對調試進程的監聽

15.應用數據任意備份風險
AndroidMainfest中allowBackup=true
攻擊者可以使用adb命令對APP應用數據進行備份造成用戶數據泄露
allowBackup=false

16.全局可讀寫內部文件風險。
實現不同軟件之間數據共享,設置內部文件全局可讀寫造成其他應用也可以讀取或者修改文件等
(1).使用MODE_PRIVATE模式創建內部存儲文件(2).加密存儲敏感數據3.避免在文件中存儲明文和敏感信息

17.SharedPrefs全局可讀寫內部文件風險。
被其他應用讀取或者修改文件等
使用正確的權限

18.Internal
Storage數據全局可讀寫風險
當設置MODE_WORLD_READBLE或者設置android:sharedUserId導致敏感信息被其他應用程序讀取等
設置正確的模式等

19.getDir數據全局可讀寫風險
當設置MODE_WORLD_READBLE或者設置android:sharedUserId導致敏感信息被其他應用程序讀取等
設置正確的模式等

20.java層動態調試風險
AndroidManifest中調試的標記可以使用jdb進行調試,竊取用戶敏感信息。
android:debuggable=“false”

21.內網測試信息殘留風險
通過測試的Url,測試賬號等對正式服務器進行攻擊等
講測試內網的日誌清除,或者測試服務器和生產服務器不要使用同一個

22.隨機數不安全使用風險
在使用SecureRandom類來生成隨機數,其實並不是隨機,導致使用的隨機數和加密算法被破解。
(1)不使用setSeed方法(2)使用/dev/urandom或者/dev/random來初始化僞隨機數生成器

23.Http傳輸數據風險
未加密的數據被第三方獲取,造成數據泄露
使用Hpps

24.Htpps未校驗服務器證書風險,Https未校驗主機名風險,Https允許任意主機名風險
客戶端沒有對服務器進行身份完整性校驗,造成中間人攻擊
(1).在X509TrustManager中的checkServerTrusted方法對服務器進行校驗(2).判斷證書是否過期(3).使用HostnameVerifier類檢查證書中的主機名與使用證書的主機名是否一致

25.webview繞過證書校驗風險
webview使用https協議加密的url沒有校驗服務器導致中間人攻擊
校驗服務器證書時候正確

26.界面劫持風險
用戶輸入密碼的時候被一個假冒的頁面遮擋獲取用戶信息等
(1).使用第三方專業防界面劫持SDK(2).校驗當前是否是自己的頁面

27.輸入監聽風險
用戶輸入的信息被監聽或者按鍵位置被監聽造成用戶信息泄露等
自定義鍵盤

28.截屏攻擊風險
對APP運行中的界面進行截圖或者錄製來獲取用戶信息
添加屬性getWindow().setFlags(FLAG_SECURE)不讓用戶截圖和錄屏

29.動態註冊Receiver風險
當動態註冊Receiver默認生命週期是可以導出的可以被任意應用訪問
使用帶權限檢驗的registerReceiver
API進行動態廣播的註冊

30.Content
Provider數據泄露風險
權限設置不當導致用戶信息
正確的使用權限

31.Service
,Activity,Broadcast,content
provider組件導出風險
Activity被第三方應用訪問導致被任意應用惡意調用
自定義權限

32.PendingIntent錯誤使用Intent風險
使用PendingIntent的時候,如果使用了一個空Intent,會導致惡意用戶劫持修改Intent的內容
禁止使用一個空Intent去構造PendingIntent

33.Intent組件隱式調用風險
使用隱式Intent沒有對接收端進行限制導致敏感信息被劫持
1.對接收端進行限制
2.建議使用顯示調用方式發送Intent

34.Intent
Scheme
URL攻擊風險
webview惡意調用App
對Intent做安全限制

35.Fragment注入攻擊風險
出的PreferenceActivity的子類中,沒有加入isValidFragment方法,進行fragment名的合法性校驗,攻擊者可能會繞過限制,訪問未授權的界面
(1).如果應用的Activity組件不必要導出,或者組件配置了intent
filter標籤,建議顯示設置組件的“android:exported”屬性爲false(2).重寫isValidFragment方法,驗證fragment來源的正確性

36.webview遠程代碼執行風險
風險:WebView.addJavascriptInterface方法註冊可供JavaScript調用的Java對象,通過反射調用其他java類等
建議不使用addJavascriptInterface接口,對於Android
API
Level爲17或者以上的Android系統,Google規定允許被調用的函數,必須在Java的遠程方法上面聲明一個@JavascriptInterface註解

37.zip文件解壓目錄遍歷風險
Java代碼在解壓ZIP文件時,會使用到ZipEntry類的getName()方法,如果ZIP文件中包含“../”的字符串,該方法返回值裏面原樣返回,如果沒有過濾掉getName()返回值中的“../”字符串,繼續解壓縮操作,就會在其他目錄中創建解壓的文件
(1).
對重要的ZIP壓縮包文件進行數字簽名校驗,校驗通過才進行解壓。
(2).
檢查Zip壓縮包中使用ZipEntry.getName()獲取的文件名中是否包含”../”或者”..”,檢查”../”的時候不必進行URI
Decode(以防通過URI編碼”..%2F”來進行繞過),測試發現ZipEntry.getName()對於Zip包中有“..%2F”的文件路徑不會進行處理。

38.Root設備運行風險
已經root的手機通過獲取應用的敏感信息等
檢測是否是root的手機禁止應用啓動

39.模擬器運行風險
刷單,模擬虛擬位置等
禁止在虛擬器上運行

40.從sdcard加載Dex和so風險
未對Dex和So文件進行安全,完整性及校驗,導致被替換,造成用戶敏感信息泄露
(1).放在APP的私有目錄
(2).對文件進行完成性校驗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章