Android“应用克隆”漏洞分析
一、這個(gè)漏洞的特征
二、這個(gè)漏洞的攻擊流程
三、這個(gè)漏洞的攻擊原理
-
該漏洞主要利用了Android系統(tǒng)WebView控件的同源策略漏洞來(lái)進(jìn)行攻擊,Android應(yīng)用內(nèi)部分可導(dǎo)出的Activity組件中,WebView允許通過(guò)file url對(duì)http域進(jìn)行訪問(wèn),并且并未對(duì)file域的路徑進(jìn)行嚴(yán)格校驗(yàn)所導(dǎo)致的。
-
該漏洞會(huì)打破Android應(yīng)用的沙箱隔離機(jī)制,即A應(yīng)用可以通過(guò)B應(yīng)用導(dǎo)出的Activity讓B應(yīng)用加載一個(gè)惡意file協(xié)議的url,從而獲取B應(yīng)用的內(nèi)部私有文件。
當(dāng)APP出現(xiàn)以下兩種情況時(shí),即受該漏洞的影響:?
1.WebView中setAllowFileAccessFromFileURLs 或****setAllowUniversalAccessFromFileURLsAPI配置為true;?
2.WebView可以直接被外部調(diào)用,并能夠加載外部可控的HTML文件。
四、這個(gè)漏洞的初步修復(fù)建議
file域訪問(wèn)為非功能需求時(shí),手動(dòng)在Activity中配置setAllowFileAccessFromFileURLs或setAllowUniversalAccessFromFileURLs兩個(gè)API為false。(Android4.1版本之前這兩個(gè)API默認(rèn)是true,需要顯式設(shè)置為false)
若需要開(kāi)啟file域訪問(wèn),則設(shè)置file路徑的白名單,嚴(yán)格控制file域的訪問(wèn)范圍,具體如下:?
(1)固定不變的HTML文件可以放在assets或res目錄下,file:///android_asset和file:///android_res 在不開(kāi)啟API的情況下也可以訪問(wèn);?
(2)可能會(huì)更新的HTML文件放在/data/data/(app) 目錄下,避免被第三方替換或修改;?
(3)對(duì)file域請(qǐng)求做白名單限制時(shí),需要對(duì)“../../”特殊情況進(jìn)行處理,避免白名單被繞過(guò)。
避免App內(nèi)部的WebView被不信任的第三方調(diào)用。排查內(nèi)置WebView的Activity是否被導(dǎo)出、必須導(dǎo)出的Activity是否會(huì)通過(guò)參數(shù)傳遞調(diào)起內(nèi)置的WebView等。
五、簡(jiǎn)單復(fù)現(xiàn)及處理
將一下內(nèi)容保存為html文件
<!DOCTYPE> <html> <head><meta charset="utf-8" /><title>webview</title><style></style><script type="text/javascript"><!--alert("1");-->function loadData(){var arm="file:///mnt/sdcard/abc.txt";var xmlhttp;if (window.XMLHttpRequest) {xmlhttp = new XMLHttpRequest();}xmlhttp.onreadystatechange = function(){if (xmlhttp.readyState == 4) {alert("3");alert(xmlhttp.responseText);}}xmlhttp.open("GET",arm);xmlhttp.send(null);}<!--alert("2");--></script> </head><body><input type="button" name="btn" value="觸發(fā)漏洞" onclick="loadData()" /> </body>
將該文件放到assets目錄下,在手機(jī)sd卡目錄下,新建一個(gè)abc.txt,鍵入部分文字。
如果存在該漏洞,并且app不需要進(jìn)行文件域操作,那么,設(shè)置為false即可。
WebSettings wSet = wView.getSettings();wSet.setAllowFileAccessFromFileURLs(false);wSet.setAllowUniversalAccessFromFileURLs(false);如果因?yàn)樾枨笮枰?#xff0c;那么我們可以在該方法中攔截url,對(duì)非法或者不符合預(yù)期的url進(jìn)行攔截,不讓其加載。
@Overridepublic void onLoadResource(WebView view, String url) {super.onLoadResource(view, url);}總結(jié)
以上是生活随笔為你收集整理的Android“应用克隆”漏洞分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用 Python 一步步搭建自己的区块
- 下一篇: android app通过Geth RP