一、WebView在Android应用中的作用
-
WebView为什么受欢迎
WebView在Android应用中的作用不可忽视。它允许开发者在应用内部展示网页,给用户带来了方便的体验。它使用了WebKit渲染引擎来展示Web网页的内容,用户无需离开应用即可浏览网络内容,大大便利了用户的操作。
-
WebView的隐患
向两面刃,WebView强大的功能随之带来了很多的安全问题。在当前APP中,WebView漏洞占比非常大,各种类型的漏洞层出不穷。一是WebView经常被披露出许多重大漏洞,这既与系统WebView有关,也与WebView复杂的使用有关,普遍容易被开发者误用。二是目前,许多Android应用是直接使用系统自带的WebView,进而导致系统上安装的各类应用可能受到WebView漏洞的影响,这就进一步将漏洞影响范围扩大化。所以,我们需要对WebView的使用保持警惕。
二、WebView面临的安全问题
-
常见的WebView安全问题
一方面,WebView容易受到跨站点脚本(XSS)和中间人(MITM)攻击,这可能导致用户隐私泄露,移动终端被恶意攻击者控制。另一方面,WebView的隐藏接口问题、addJavascriptInterface任何命令执行漏洞、绕过证书校验漏洞、allowFileAccess导致的File域同源政策绕过等都是WebView常见的安全问题。
WebView的漏洞中包括了任意代码执行漏洞、跨域、密码明文保存等,这些安全问题可以直接导致用户敏感信息泄露。为解决该问题,最彻底的方式是在4.2以下放弃使用addJavascriptInterface,采用onJsPrompt或其它方法替换,或者使用一些方案来降低该漏洞导致的风险。
-
如何预防WebView的安全问题
预防WebView的安全问题,首先,开发者需要理解WebView的历史问题、本地攻击面和远程攻击面、安全配置和使用以及各种URL校验问题。对于开发者而言,只有了解了WebView的全面信息,才能制定出相应的防范措施。
其次,我们应当将过度安全的Android 和iOS 漏洞扫描程序集成到我们的CI/CD中,以主动保护我们的应用程序免受这些漏洞的侵害。CI/CD 过程也可以使用插件完全自动化,以进一步提高安全性。
二、常见的WebView安全攻击方式
随着移动互联网的迅速发展,WebView成为了Android应用开发中常用的组件之一,可在应用中嵌入一个内置的Web浏览器。然而,WebView也常常成为攻击的目标,许多安全问题都发生在WebView,如跨站请求伪造(CSRF)和通过Java在WebView中执行任意命令等等。
-
跨站请求伪造(CSRF)
CSRF是常见的Web攻击之一,攻击者利用用户已登录的身份进行非法操作,对WebView构成安全威胁。例如,2018年,国家信息安全漏洞共享平台(CNVD)就发布了关于Android平台WebView 控件存在跨域访问高危漏洞的安全公告(CNVD-2017-36682),漏洞产生的原因在Android平台WebView存在的设计缺陷上。此外,JavaScript的代码一旦被插入,也可能导致WebView面临更大的安全风险。
-
利用Java在WebView中执行任意命令
在低版本的Android系统中,WebView允许JS访问Java类,攻击者可以通过此漏洞执行任意命令。如,Android API 16.0及之前的版本中存在安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java在WebView中执行任意命令。此外,URL验证过程中的逻辑错误,旧版Android上的反斜杠等也是攻击者常常利用的点。
三、WebView的安全防御措施
Android的WebView在使用过程中存在许多安全问题,通过被恶意利用可能导致严重的后果。这一部分将会阐述如何防御这些安全风险,通过来源验证和使用安全浏览功能来保障WebView的安全。
来源验证
对WebView加载的内容进行来源验证是WebView安全防御的重要部分。以下的三种方式可以帮助我们对网址来源进行详细验证:
- URL验证: 仔细检查URL,避免打开可能带有恶意代码的网站。
- 主机验证: 只连接已知安全的主机,并防止中间人攻击。
- 逻辑错误处理: 可以避免例如URL反斜杠的特殊攻击方式。
使用安全浏览功能
Android 8.0(API级别26)开始,WebView中集成了安全浏览功能,能够帮助开发者更好地防御WebView的安全风险。详细的使用方式如下:
功能 | 描述 |
---|---|
安全浏览启动 | 在WebView中开启安全浏览功能可以防止用户访问被认为是恶意网站的网址。 |
风险提示 | 当用户企图访问的网址被积极拦截时,系统会向用户显示警告。 |
网络错误提示 | 在应用程序试图加载所选择的恶意网址时,系统会返回一个网络错误。 |
四、专家对WebView安全攻防的看法和实例
-
何恩对WebView安全的看法
何恩,OPPO子午互联网安全实验室安全专家,专注于Android安全,他基于自身的丰富案例,对WebView安全配置、白名单校验、Js2Java接口安全等提出了他的看法。
何恩表示,WebView已经成为Android App中最重要的远程攻击面,也是最容易出现重大漏洞的薄弱环节。一份来自看雪2020第四届安全开发者峰会的报道显示,何恩基于自身漏洞挖掘所积累的丰富案例,对WebView安全配置、白名单校验、Js2Java接口安全、Intent Scheme校验等典型漏洞案例进行了深入讨论。
面对漏洞威胁,何恩强调最根本的防御措施应该是改变金融机构现有的方法和思维方式。通过从金融行业实战演练中转变攻防思维,提高对WebView安全问题的认知。
-
实例分析
通过分析ByteCtf2021中的一道漏洞题,深入揭示WebView中可能存在的漏洞并提出相应的解决策略,为Android开发者提供实践指引。
事实上,WebView可以在应用中嵌入一个内置的网页浏览器,是Android应用开发中常见的组件之一。但其安全问题屡见不鲜。例如,有一份报道称,通过WebView对Android应用的攻击就在几年前被广泛使用。
所以,安全专家建议,应通过从金融APP的实际案例出发,通过轻量级威胁建模进行应用安全架构设计,系统性地降低应用系统安全风险,这样才能从根本上解决WebView的安全问题。
WebView安全攻防的常见问答Q&A
问题一:什么是Android中webview的安全攻防?
答案:网页视图(WebView)在Android应用中是非常重要的一个控件,它用于在应用中显示网页内容。然而,由于其与Web内容交互的特性,不当使用可能带来安全风险。Android中的WebView安全攻防,主要是指如何防止WebView被恶意利用,同时使其安全地运行。具体包括以下几个方面:
- 对用户输入的URL进行决策控制,预防URL欺诈。
- 通过安全浏览功能保护WebView,避免恶意网站的访问。
- 正确配置WebView,如禁用JavaScript、限制文件访问等。
- 解析和防护WebView中可能存在的漏洞,如Remote Code Execution(远程代码执行)漏洞等。
问题二:漏洞是如何在Android-Webview中被利用的?
答案:WebView的漏洞利用主要是利用WebView本身的错误配置或者设计失误,导致恶意代码可以在WebView中运行,进而实现攻击。这主要涉及以下几个方面:
- 通过JavaScript注入攻击,在加载的网页中注入恶意JavaScript代码。
- 利用WebView对URL加载的不当处理,加载恶意链接。
- 利用与JavaScript交互的Java接口暴露问题,如addJavascriptInterface接口,执行恶意代码。
- 通过漏洞绕过安全检查,访问特权接口或者文件。
问题三:如何防御WebView中的安全漏洞?
答案:防御WebView中的安全漏洞主要应从以下几个角度进行:
- 正确配置WebView,例如禁用JavaScript、限制跨域请求等,降低理论攻击面。
- 对用户输入的URL进行安全校验,防止钓鱼网址或者恶意代码的加载。
- 对于和JavaScript交互的Java接口,审慎设计,避免将敏感接口暴露给前端JavaScript。
- 及时关注和更新WebView的版本,修复已知的安全漏洞。
问题四:2020年的看雪SDC议题回顾中,有哪些关键点是关于Android WebView安全攻防的?
答案:2020年看雪SDC议题回顾中,关于Android WebView安全攻防的部分,主要包括以下几个关键点:
- 详述WebView的攻击面,并分析了WebView的安全配置和使用方法。
- 深入解析了WebView中众多的URL校验问题,并给出了解决策略。
- 重点介绍了如何基于自身的实战和研究案例,研究WebView安全配置、白名单校验、Js2Java接口安全和Intent Scheme校验等典型漏洞。
- 对WebView安全的历史问题进行了重新审视,对WebView的安全防御方案进行了讲解和总结。