說到APP的安全漏洞,身為程序猿的大家應該不陌生;如果拋開安卓自身開源的問題的話,其主要產(chǎn)生的原因就是開發(fā)過程中疏忽或者代碼不嚴謹引起的。但這些責任也不能怪在程序猿頭上,有時會因為BOSS時間催得緊等很多客觀原因。
下面由鼎源必安全實驗室(實驗室是由國內(nèi)知名移動安全廠商北京鼎源科技有限公司與北京理工大學信息與電子學院共同組建,是集“產(chǎn) 培 研 防”為一體的移動應用安全基地)給我們淺談關于Android 系統(tǒng)的開源設計以及生態(tài)環(huán)境。
1.應用反編譯
漏洞:APK 包非常容易被反編譯成可讀文件,稍加修改就能重新打包成新的 APK。
利用:軟件破解,內(nèi)購破解,軟件邏輯修改,插入惡意代碼,替換廣告商 ID。
建議:使用 ProGuard 等工具混淆代碼,重要邏輯用 NDK 實現(xiàn)。
例子:反編譯重打包 FlappyBird,把廣告商 ID 換了,游戲改加插一段惡意代碼等等。
2.數(shù)據(jù)的存儲與傳輸
漏洞:外部存儲(SD 卡)上的文件沒有權限管理,所有應用都可讀可寫。開發(fā)者把敏感信息明文存在 SD 卡上,或者動態(tài)加載的 payload 放在 SD 卡上。
利用:竊取敏感信息,篡改配置文件,修改 payload 邏輯并重打包。
建議:不要把敏感信息放在外部存儲上面;在動態(tài)加載外部資源的時候驗證文件完整性。
漏洞:使用全局可讀寫(MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE)的內(nèi)部存儲方式,或明文存儲敏感信息(用戶賬號密碼等)。
利用:全局讀寫敏感信息,或 root 后讀取明文信息。
建議:不適用全局可讀寫的內(nèi)部存儲方式,不明文存儲用戶賬號密碼。
3.密碼泄露
漏洞:密碼明文存儲,傳輸。
利用:
root 后可讀寫內(nèi)部存儲。
SD 卡全局可讀寫。
公共 WiFi 抓包獲取賬號密碼。
建議:實用成熟的加密方案。不要把密碼明文存儲在 SD 卡上。
4.組件暴露(Activity, Service, Broadcast Receiver, Content Provider)
漏洞:
組件在被調(diào)用時未做驗證。
在調(diào)用其他組件時未做驗證。
利用:
調(diào)用暴露的組件,達到某種效果,獲取某些信息,構造某些數(shù)據(jù)。(比如:調(diào)用暴露的組件發(fā)短信、微博等)。
監(jiān)聽暴露組件,讀取數(shù)據(jù)。
建議:驗證輸入信息、驗證組件調(diào)用等。android:exported 設置為 false。使用 android:protectionLevel="signature" 驗證調(diào)用來源。
5. WebView
漏洞:
惡意 App 可以注入 JavaScript 代碼進入 WebView 中的網(wǎng)頁,網(wǎng)頁未作驗證。
惡意網(wǎng)頁可以執(zhí)行 JavaScript 反過來調(diào)用 App 中注冊過的方法,或者使用資源。
利用:
惡意程序嵌入 Web App,然后竊取用戶信息。
惡意網(wǎng)頁遠程調(diào)用 App 代碼。更有甚者,通過 Java Reflection 調(diào)用 Runtime 執(zhí)行任意代碼。
建議:不使用 WebView 中的 setJavaScriptEnabled(true),或者使用時對輸入進行驗證。
6.其他漏洞
ROOT 后的手機可以修改 App 的內(nèi)購,或者安裝外掛 App 等。
Logcat 泄露用戶敏感信息。
惡意的廣告包。
利用 next Intent。
7.總結
APP的漏洞大部分都是因為開發(fā)人員沒有對輸入信息做驗證造成的,另外因為 Intent 這種特殊的機制,需要過濾外部的各種惡意行為。再加上安卓應用市場混亂,開發(fā)人員水平參差不齊。所以現(xiàn)在 Android 應用的漏洞,惡意軟件,釣魚等還在不斷增多。
再加上 root 對于 App 沙箱的破壞,Android 升級的限制。國內(nèi)的安卓環(huán)境一片混亂,慘不忍睹。所以,如果想要保證你的應用沒有安全漏洞,就要記?。褐挥袕难邪l(fā)廠商自身注重安全管理,對APP采取專業(yè)的加固、混淆、防逆向等措施之后的APP才算是相對安全的,只有這種APP廠商才是真的對用戶負責。那么,你的手機里有幾個APP是經(jīng)過專業(yè)加固的呢?