Android APP安全防護總結 [復制鏈接]

2020-4-28 16:39
_luhua_ 閱讀:103 評論:0 贊:0
Tag:  安全

1. 資源混淆(從文件資源下手)

使用Lint對無用資源進行清理,而Lint則可以檢查所有無用的資源文件,只要使用命令./gradlew lint或者在Android Studio工程中點擊Analyze->Inspect Code,選擇Whole Project點擊ok就行。它在檢測完之后會提供一份詳細的資源文件清單,并將無用的資源列在“UnusedResources: Unused resources” 區域之下。只要你不通過反射來反問這些無用資源,你就可以放心地移除這些文件了。

https://www.jianshu.com/p/3ba16f34bba9  --  AndResGuard教程

https://github.com/shwenzhang/AndResGuard  --  AndResGuard項目

https://www.cnblogs.com/lsdb/p/9340761.html

https://blog.csdn.net/wei11556/article/details/83275469


2. 代碼混淆(從代碼優化)

提高代碼可讀性,使得程序更加難以理解。此方法基本都要做,用的最多的當Proguard莫屬。

https://www.jianshu.com/p/e9d3c57ab92f?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=qq Android 代碼混淆 混淆方案

 

3. 簽名校驗

檢查APP中自己寫入的私鑰hash值與當前簽名中的私鑰hash值是否相一致。一致則說明APP沒有被改動,允許APP運行;不一致則說明APP被二次打包,APP就自我銷毀進程。

簽名驗證可以在兩個地方做,一個是在MainActivity.java的OnCreate函數中做一個是在原生代碼文件的JNI_OnLoad函數中做

https://www.cnblogs.com/lsdb/p/9340761.html


4. 反調試

第一:因為一個進程同時最多只能被一個進程所調試,那么我們就給自己附加進程,假裝自己在調試自己,占住調試位置,用該方法來拒絕別的進程的調試請求。

第二:輪訓檢查自身status中的TracerPid字段值,如果發現TracerPid的值不等于0則代表有進程在調試,就要殺死自己。

第三:簽名校驗是不可或缺的一個選擇,本地校驗(前端)和服務器端校驗雙管齊下。

第四:借助系統API判斷應用調試狀態和調試屬性,這是最基礎最基本的防護。

第五:輪訓檢查Android_server調試端口信息和進程信息, 防護IDA動態調試的一種有效方式。

http://www.520monkey.com/archives/1000

 

5. 組件安全

四大組件的安全防護其實無非就是訪問權限控制

在創建組件時,如果是私有的組件,android:exported屬性一律設置為false。如果是公有的,就設置android:exported為true。不管公有的還是私有的組件,處理接收的intent時都應該進行驗證的數據驗證。公有組件防止信息泄露和接收外部數據時進行嚴格的處理。如果對私有組件沒有進行相應的配置,可能導致組件被其他程序調用,敏感信息泄露,拒絕服務器攻擊和權限繞過等漏洞。

這里對LocalBroadcastManager說明一下,其基于Handler實現的,擁有更高的效率與安全性。安全性主要體現在數據僅限于應用內部傳輸,避免廣播被攔截、偽造、篡改的風險。但是LocalBroadcastManager不支持Sticky、order特性,多線程并發性能不高,在某些需要后注冊Receiver也可以收到信息的特殊需求無法實現。

 

6. WebView的代碼執行漏洞

WebView遠程代碼執行相關的漏洞主要有CVE-2012-6336、CVE-2014-1939、CVE-2014-7224,這些漏洞中最核心的漏洞是CVE-2012-6336,另外兩個CVE只是發現了幾個默認存在的接口,下面就具體說明這些漏洞的情況。

CVE-2012-6336  Android <= 4.1.2  受影響

CVE-2014-1939  Android <= 4.3.1  受影響

CVE-2014-7224  Android <= 4.4.0  受影響

可以發現其實都是些低版本系統漏洞,目前已經發展到Android 10了,理論上說不存在WebView漏洞,屬于老漏洞。修復方法就是升級最新系統版本。

 

7. 加固:360加固、梆梆加固、網易加固、騰訊樂固

 

8. 編碼安全

編碼安全就是反編譯,反編譯不好防,只能提高破解難度,例如加固、混淆、so文件函數加密等等。反編譯后能干什么?當然是二次開發,冒充正版植入廣告或者惡意程序,一旦有用戶下載了山寨版的,那么就有極大概率獲取手機的控制權限及本人的敏感信息。

 

9. 使用HTTPS鏈接

避免被惡心的運營商劫持,插入廣告,影響用戶體驗。(比如我愛我家APP被掛博彩),我覺得這個很有必要,不僅僅是因為安全,包括微信公眾號,googleplay 都在強制要求開發者必須使用HTTPS。(這里為什么運營商會搞鬼呢,因為運營商看你的網站或者APP量大,想利用你的流量做廣告推廣,可能就幾分鐘)

 

10. 密碼明文保存漏洞

由于WebView默認開啟密碼保存功能,所以在用戶輸入密碼時,會彈出提示框,詢問用戶是否保存。若選擇保存,則密碼會以明文形式保存到/data/data/com.package.name/databases/webview.db中,這樣就有被盜取密碼的危險。所以我們應該禁止網頁保存密碼,設置WebSettings.setSavePassword(false)

 

11. 防抓包分析,兩個方案:

A. System.getProperty("http.proxyHost");System.getProperty("http.proxyPort"); //正常這兩行代碼獲取的是null,如果返回不為空,就是掛代理了,那么就可以考慮是否給數據了。

B. System.setProperty("key","value");

https://www.jianshu.com/p/4a99f524e0dc  

具體解釋可以看看這篇文章,這里不做過多筆墨,前輩們已經總結得很好。

 

12. 數據存儲安全

A. 隱藏數據存儲位置

B. 存儲內容不要使用明文

C. 代碼中禁止硬編碼重要信息內容

D. 存儲到手機內部存儲上

 

13. 慎重使用allowBackup屬性,設置是否支持備份,默認值為true,如無必要,將值設置為false,避免應用內數據通過備份造成的泄露問題。

 

14. 自定義鍵盤

關于這一點,其實筆者不知道此做法對安全性有多大作用,我也特意去下載了一些熱門應用做調查,發現還是比較多APP應用使用手機自帶的或默認的鍵盤,所以筆者不清楚其危害性有多大,個人覺得可有可無。若是各位師傅們對此理解深切,希望糾正~

 

15. 賬號與設備綁定

如果發現與常用設備不符合,增加短信登錄形式進行重新登錄。此做法筆者覺得很有效防止任意用戶登錄。

 

16. classes.dex哈希值存放在服務器端

為了防止被破解,軟件發布時的classes.dex哈希值應該存放在服務器端。

 

17. 檢測手機是否root

如果root了,就禁止某些核心功能。

檢測是否root代碼

 需要代碼請在公眾號內回復“root代碼

18. 檢測手機是否裝Xposed

若是檢測到有則隱藏核心功能模塊。代碼可以看看簡書的這篇文章

https://www.jianshu.com/p/c37b1bdb4757

 

    Android防護手段都有很多,具體還要結合業務的實際情況進行加固,畢竟產品的安全性和性能都同時兼顧是很難做到的,我們需要在這兩者之間做平衡。


我來說兩句
您需要登錄后才可以評論 登錄 | 立即注冊
facelist
所有評論(0)
領先的中文移動開發者社區
18620764416
7*24全天服務
意見反饋:[email protected]

掃一掃關注我們

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粵ICP備15117877號 )

时时彩改欢乐生肖 股票融资杠杆是多少 快乐10分助手 股票行情实时查询002455 怏3北京 炒股杠杆哪个平台好 陕西快乐10分平台 中国铁建股票分析 王中王资料精选大全 河南481开奖形态走势图 时时乐餐厅是自助吗 百期无错一波中特公式 内蒙体彩11选五开奖果 好运彩3官网 舟山体彩飞鱼开奖结果查询 最新福建体彩22选5 002529股票行情