leader不要打我啊,我要借用一下我組app的安全測評檢查方案,這些最基本的安全防范措施應該是每個app都要注意的吧:
對了,首先,你的app得先混淆啊~:AndroidStudio 混淆打包
先來個checklist:
編號 |
檢查項目 |
測評結果 |
1 |
明文傳輸用戶名、密碼和驗證碼等敏感信息。 |
|
2 |
不安全的本地存儲。 |
|
3 |
泄漏后台服務器地址,導致服務器可控 |
|
4 |
邊信道信息泄漏 |
|
5 |
未使用有效的token機制,導致可以繞過鑒權 |
|
6 |
傳輸數據可修改,造成越權訪問 |
|
7 |
登錄設計缺陷,存在被暴力破解風險 |
|
8 |
利用業務邏輯缺陷制作短信炸彈 |
|
9 |
關鍵頁面存在釣魚劫持風險,導致用戶信息泄露 |
|
10 |
可以重新編譯打包 |
|
11 |
WebView漏洞 |
|
12 |
Web表單設計缺陷,存在SQL注入漏洞 |
|
13 |
組件Content Provider配置錯誤,導致數據泄漏 |
|
14 |
組件Activity配置錯誤,導致登錄頁面被繞過 |
|
15 |
組件Service配置錯誤,導致非法權限提升 |
|
16 |
組件Broadcast Receiver配置錯誤,導致拒絕服務、非法越權 |
|
17 |
開啟allowbackup備份權限,存在備份數據泄露風險 |
|
18 |
開啟Debuggable屬性,存在應用信息篡改泄露風險 |
|
19 |
下載非官方開發工具,導致IOS版本APP被植入惡意代碼 |
|
20 |
開發者證書不規范,導致開發者身份信息不明 |
|
具體的解釋:
1、明文傳輸用戶名、密碼和驗證碼等敏感信息
問題描述:用戶登錄過程中,在與服務器端交互時明文傳輸用戶名、密碼或者驗證碼等,可導致用戶敏感信息泄露。
檢測結果:手機連接Fiddler代理,在Fiddler代理中抓包測試。APP登錄操作: 賬號、登錄憑證不安全傳輸。
密碼雖然是MD5散列后的數值,但是傳輸使用的是http協議,存在被嗅探竊取的可能性,一旦泄漏,黑客能夠直接通過該用戶名和Password登錄。
整改建議:登錄憑證信息需加密傳輸,建議使用自定義加密協議或使用https方式傳輸。
2、 不安全本地存儲
問題描述:安卓開發者使用多種方法將數據存儲在安卓應用中,而存儲在本地的數據文件如果未加密,易造成敏感信息泄漏。
檢測結果:Shared Preferences用戶名和登錄憑證明文存儲在healthConfig.xml文件中。
SQLite 未發現敏感數據存儲
SD卡敏感數據存儲 未發現數據寫入。
整改建議:對存儲在本地的敏感數據進行加密。
3、泄漏后台服務器地址,導致服務器可控
問題描述:在使用BurpSuite等工具對應用進行監聽的過程中,發現后台服務器地址。對后台服務器進行測試,若后台服務器存在漏洞,則可控制后台服務器。
檢測結果:后台服務器地址為**********,未發現可導致服務器可控的安全漏洞。
4、邊信道信息泄漏
問題描述:當APP處理用戶或其它數據源輸入的數據時,可能會把數據放在不安全的位置,容易導致邊信道被攻擊者利用造成信息泄露。
檢查結果:用戶登錄憑證、設備ID等敏感數據出現在log中。
整改建議:對logcat的打印數據進行過濾,敏感數據不能出現在log中。
5、未使用有效的token機制,導致可以繞過鑒權
問題描述:如果被測應用沒有使用有效的token機制,對登陸響應中的服務器返回的鑒權信息進行修改,即可繞過服務器鑒權,直接訪問系統內部信息。
檢測結果:從代理抓包分析,APP登錄是會將一個deviceid和用戶憑證一起提交,用戶登錄成功后,該deviceid將作為后續接口調用的憑證,即Token。
經查,該deviceid為設備中某些公開信息(IMEI、設備型號、操作系統版本等)的Base64編碼結果,不具備隱私性,黑客可以通過獲取這些公開信息偽造用戶身份。
整改建議:在deviceid中加入隨機數據。
6、傳輸數據可修改,造成越權訪問
問題描述:利用已有的用戶名密碼登錄應用,當應用訪問某一模塊時,使用BurpSuite等代理工具進行監聽,對訪問該模塊時的關鍵信息進行替換,則可越權訪問他人的應用模塊。
檢測結果:同第5條。
7、登錄設計缺陷,存在被暴力破解風險
問題描述:用戶登錄過程中,未對同一用戶的登錄失敗次數做限制,導致存在被暴力破解的風險。
問題詳情:對登錄接口進行暴力破解,錯誤50次后,輸入正確用戶名和密碼仍然成功登錄,表明沒有對登錄接口做暴力破解防護。
整改建議:限制賬號登錄錯誤次數,超過閥值時需要提供驗證碼機制。
8、利用業務邏輯缺陷制作短信炸彈
問題描述:如果在用戶注冊過程中存在邏輯設計缺陷,可對指定手機號碼隨意發送短信,造成短信炸彈攻擊,可能造成用戶投訴或惡意軟件傳播等。
測試結果:用戶選擇注冊或忘記密碼功能時,會觸發短信驗證碼發送,多次調用驗證碼發送接口,每分鍾能收到多條短消息,且沒有發現總量限制。
整改建議:如果已經限制了每個用戶每分鍾的短信條數(如果沒有限制,請做限制處理),建議進一步限制每個用戶每天的短信條數。
9、關鍵頁面存在釣魚劫持風險,導致用戶信息泄露
問題描述:劫持釣魚,指惡意應用針對正常應用的特定界面進行仿冒替換,誘騙用戶在仿冒界面操作,達到釣魚目的。此類攻擊,多針對APP的鑒權或支付場景,誘騙用戶輸入關鍵隱私信息,如賬號、登陸密碼和支付密碼等,達到隱私竊取的目的。
檢測結果:惡意應用可以通過監測進程機制實現對APP的劫持,當APP啟動時,彈出偽造的登錄Activity,實現釣魚劫持。
整改建議:
- 建議在登錄Activity的onpause方法中實現釣魚劫持防護功能,如提示用戶當前登錄也已切換等。
- 使用HTML5架構或android+HTML5混合開發,實現登陸、支付等關鍵頁面,降低被劫持的風險。
10、可以重新編譯打包
問題描述:破解者通過反編譯后得到程序源代碼,修改后重新編譯、簽名並安裝。在重新打包的過程中,破解者可能注入惡意代碼,或者修改軟件邏輯繞過鑒權等。
檢測結果:通過反編譯工具對APP進行反編譯后,修改部分源代碼后,可以重新打包安裝,並成功安裝在手機中運行。
整改建議:通過檢查程序安裝后classes.dex文件的Hash值,判斷軟件是否被重打包並進行提示。(這個具體使用時判斷了打包keystore的SHA1值,不過前提是這個jks文件沒被劫持啊)
11、WebView漏洞
問題描述:在WebView下有一個非常特殊的接口函數addJavascriptInterface,能實現本地java和js的交互。被測應用中存在WebView漏洞,沒有對注冊JAVA類的方法調用進行限制,導致攻擊者利用addJavascriptInterface這個接口函數穿透webkit控制android本機。
檢測結果:通過反編譯源碼發現BrowserActivity中存在WebView組件,並使用了addJavascriptInterface接口,但是對該接口使用@JavascriptInterface進行了保護,無需整改。(說實話這個不太熟悉)
12、Web表單設計缺陷,存在SQL注入漏洞
問題描述:開發過程中未對特殊字符進行過濾,攻擊者可以通過把SQL命令插入到Web表單提交或者輸入域名或者頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令的目的,這樣攻擊者就能夠對內部數據庫進行增刪改操作。
檢測結果:未發現SQL注入漏洞
13、組件Content Provider配置錯誤,導致數據泄漏
問題描述: Content Provider是安卓應用組件,以表格的形式把數據展現給外部的應用。每個Content Provider都對應一個以”content://”開頭的特定URI,任何應用都可以通過這個URI操作Content Provider 應用的數據庫。如果應用對權限控制不當就會造成信息泄露。
檢測結果:使用drozer工具檢測,未發現可被非法訪問的URI。
14、組件Activity配置錯誤,導致登錄頁面被繞過
問題描述:Activity是安卓應用組件,提供與用戶進行交互的界面。如果應用對權限控制不當,可以繞過登錄界面直接顯示該界面。
檢測結果:使用drozer工具檢測,發現多個可被外部應用直接調用的Activity組件,其中有的Activity可以跳過登錄直接啟動,存在安全風險。
整改建議:對風險Activity顯式設置android:exported=false權限。
命令:dz> run app.activity.info -a <packageName>
15、組件Service配置錯誤,導致非法權限提升
問題描述:Service是Android中四大組件進行后台作業的主要組件,如果被測應用對權限控制不當,導致其他應用可以啟動被測應用的Service。
檢查結果:使用drozer工具檢測,發現可被外部應用直接調用的Service組件,但未發現非法調用風險。
整改建議:請自確認暴露出來的兩個Service是否存在非法調用風險,對風險Service顯式設置android:exported=false權限。
命令:dz> run app.service.info -a <packageName>
16、組件Broadcast Receiver配置錯誤,導致拒絕服務、非法越權
問題描述:Broadcast Receiver是Android中四大組件用於處理廣播事件的組件,若存在配置不當則其他應用可以偽裝發送廣播從而可造成信息泄露,拒絕服務攻擊等。
檢查結果:使用drozer工具檢測,發現多個暴露的Broadcast組件,通過drozer發送這些自定義的Receiver對應的廣播分別會造成系統彈框和程序奔潰,可能會被惡意應用利用,造成拒絕服務攻擊。
整改建議:對外暴露的Broadcast組件顯式設置android:exported=false權限。
命令:dz> run app.broadcast.send --component <packageName> <Customer Receiver Name>
17、開啟allowbackup備份權限,存在備份數據泄露風險
問題描述: 被測應用的AndroidManifest.xml文件中allowBackup屬性值被設置為true,可通過adb backup對應用數據進行備份,在無root的情況下可以導出應用中存儲的所有數據,造成用戶數據泄露。
檢測結果:反編譯查看AndroidManifest.xml,發現allowBackup屬性被設置為true
整改建議:如無特殊需求,將allowBackup設置為false
18、開啟Debuggable屬性,存在應用信息篡改泄露風險
問題描述:被測應用的AndroidManifest.xml文件中Debuggable屬性值被設置為true,可以設置斷點來控制程序的執行流程,在應用程序運行時修改其行為。
檢測結果:未發現開啟Debuggable屬性
19、下載非官方開發工具,導致IOS版本APP被植入惡意代碼
檢查結果:此項僅針對IOS客戶端。請項目組自檢,確保開發工具為官方下載。
(Xcode后門事件影響不小啊)
20、開發者證書開發者證書不規范,導致開發者身份信息不明
問題描述: 被測應用的開發者證書不規范,導致被測應用的開發者身份信息不是與本公司相關的信息。
(這個在生成jks或者keystore的時候要填寫公司或者個人合理的信息)