《2020Android WebView安全攻防指南.docx》由会员分享,可在线阅读,更多相关《2020Android WebView安全攻防指南.docx(53页珍藏版)》请在优知文库上搜索。
1、AndrOidWebVieW安全攻防指南2020 现工作于OPPO子午互联口安全实验室,heen id:heeeeen(曾用:小荷才露尖尖角) AndroidSecurityTopResearcher GOOgIePlayGPSRP致谢+ 演讲与文章 CNCERT2016:AndrOidAPP开放端口的安全 POC2018:HackingAndroidVoIPforFunandProfit BUndIe口水AndrOid序列化与反序列化不匹配漏洞详解 AndrOid中的特殊攻击面1.WebVieW攻击面2. WebVieW配置与使用3. WebViewUR1.校验4. WebView安全防御5
2、. 总结1.WebVieW攻击面APP特殊攻击面:端口、网络协议WebVieW安全攻防发展:;二恭so1.mo历史漏洞AndrOid4.4之前,系统存在JaVaSCriPtlnterfaee接口,可被反射调用执行任意代码(RCE)CVE-2012-6636CVE-2014-1939案例:某地图叩P1.AN环境命令执行http:/:6677/androidamap?action=yyy¶m2=value2&.&url=2. WebVieW的配置与使用 SetAllowFiIeAccess是否允许WebVieW访问文件, SetAllowFileAccessFromFiIeUR1.s(宽松
3、同源策略)是否允许file域下的js访问别的file域下的文件,APlIeVe1.16及以后默认为faIseSetAllowuniversalAccessFromFiIeUR1.s(更加宽松的同源策略)是否允许file域下的js访问别的域,包括file:下的文件,APIlevel16及以后犬认为false:;二恭so1.mo任意文件窃取1(应用克隆)前提: setAllowFileAccess(true) setAllowFileAccessFromFileUR1.s(true)11SetAllowuniversalAccessFromFiIeUR1.s(true)操纵WebVieW加载fil
4、e:sdcard(也有可能操纵用户点击后无感知下载)下的恶意HTM1./JS,通过AJAX窃取xmlHttpRequest.open(GET,ufiledatadataprivate-file11,false);:;二恭so1.mo任意文件窃取1(移花接木)只有SetAllOWFneACCeSS为TrUe(默认设置)呢?攻击APP受害APP1.操纵WebVjeW3.延时读取自身httpsbugs.chromium.org/p/chromium/issues/detail?id=144866任意文件窃取3(含沙射影)仍然只有SetAlIOWFiIeACCeSS为true攻击APP1.操纵WebV
5、jeW软链接5.访问4.再次操纵WebVieW受害APP恶意网址6.PaylOad读取自身document.cooke效果,CoOkieS被污染控制WebVieW访问攻击者共享的Symlink.htmlpP4679:/data/data/com.zlwu.StealwebvlewflleviataintedCMkie9IS-Itotal36-rwxrvxn1M_al57drwxrwsrwx2u.a157(Jrwxrwsrvx2u0-al57drwxrwxrwx2uS-al57Irwxrwxrwx1ual57UeIl57315219-ll-27eal57cache40%2819-11-26u0.
6、al57.cache4096219-ll-26Ue157u.al574896219-ll-26M2619-11-2610:5219:1219:1219:1219:12bridge.htalcachecode-cchesharedprefsynUk.taldatadtac(n.ziwu.webviewdpp/dpp.webview/CookiesKHt为布”的员示:hMdtSQlNformatAgon_*cINTEGeANOTNU1.Uost.kyTEXTNOTNU1.1.amTEXTNOTNU1.VVaiueTtXTNOTNU1.1.pethTEXTNOTNU1.1.MpifM.UlCIHTt
7、GlftNOTNUl5MCureMTEGCRNOTNU1.ljs.httponiyMEURNOTNulUM1.cc*ZiXCMTCGCfIMnNU1.1.hs.npe*WfTEGfRNOIMIDCFAUlT1.2Aindn*qla.Motndei.cootcteufcoc*(*fA/tab4ef11camMaCRtATETAB1.1.EXWrIONGVARCHARNOTNU1.1.UNIOU1.PRIMARYK(V.vvhjvIONQVARCHAR).MdMsqMt.autndenwa.1meu-Oi-:IM1.eomDabbte-m*n1危险的IoadDataWithBaSeUR1.域名和内
8、容同时可控,则可构造任意域下的XSS1publicvoidIoadDataWithBaseUR1.(String2345String,StringmimeTyezStringencoding,StringhistoryUrl)案例:Ge)OgIePlay某流行APP一系列deeplink导致WebVieW加载任意UHvictim-app:/c/receipt?url=url,原本用于调用GoogIeDoC服务预览Pdf在网页中点击deeplink攻击者可控!IrootelocalhostsMfnc-Ivvp88881.isteningon0.0.0.0(family0,port8888)Con
9、nectionfromgoogle-proxy-64-233-172-171.googI58673received!GETaccessOken=32yr*h75HTTP/1.1Host:172.104.240.45:8888Connection:keep-aliveUser-Agent:MOZilla/5.0(compatible;GoogleAppsViewer;)IACCePt-Encoding:gzip,deflate.br:;二恭sacEmo案例:Ge)OgIePlay某流行APPdeeplink力口载任意fragment,转化为WebVieWIOadDataWithBaSeUR1.漏
10、洞利用 ViCtim-app:/c/contact/2?fragmen_class=fragment可启动任意fragment,并可通过IntentEXtra传参, 寻找到一个带WebVieW的Fragment:GOOgIeM叩WebVieWFragment 可污染IOadDataWithBaSeUR1.的前两个参数,构造ViC域下的XSSwebview.loadDataWithBaselIR1.(11,google-map.htm,texthtm,.);生SOCEIJE安全建议基本配置 setAllowFileAccess(false) setAllowFileAccessFromFileU
11、R1.s(false) setAllowUniveralAccessFromFilellR1.s(false) setAllowContentAccess(false) 加载确定的HTM1.,可使用asset1111录WebSettingsWebSettings=webView.getSettings();WebSettings.SetAllowFileAccess(false);webView.IoadUrl(11file:IIIandroid_asset/sample/index.html11); 防范皿录穿越,对文件名进行过滤 尽量不使用IOadDataWithBaSeUrl3. Web
12、ViewUR1.校验基本问题1 if(checkDomain(url)2 GnablejavaScriptInterface();/或者WbViw.load(url):;二落sarCD一个简单案例1 if(url.StartsWith(11file:/11)2 SetJavaScriptEnbled(false);3 else4 SetJavaScriptEnabled(true);5 )有多种绕过方法:, 大写字母:File:* 前面加个空格:file:” 字符编码:file%2F” 可正常访问的畸形路径:f,filersdcardattackhtm,或i,filezVsdcardattack.htm,if(Uri.parse(Url).getScheme(),equals工gnoreCase(file”):;二落socmo常uH校验失效endWith未闭合点号 绕过: 修复:endsWith()if(host.endsWith(11)enableJavascriptInterface()绕过:使用StartSWith、contains、indexf、正贝J匹酉己等3F严格字符串匹酉己1 if(host.StartsWith()2