欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于腾讯玄武实验室公布的应用克隆漏洞的一些思考

程序员文章站 2022-04-30 22:48:20
...

2018-01-09 国家信息安全漏洞共享平台 公布了 《关于Android平台WebView控件存在跨域访问高危漏洞的安全公告》

关于腾讯玄武实验室公布的应用克隆漏洞的一些思考

另外,关于该漏洞的原理 这里 有个补充说明:

关于腾讯玄武实验室公布的应用克隆漏洞的一些思考

从上文中我们可以看出是由于 WebView 的 file 跨域问题,使应用加载的 JavaScript 可以获取应用的 私有数据 (即 /data/data/packageName/ 下的文件)导致的这个漏洞,其中涉及到了 2 个方法: setAllowFileAccessFromFileURLs 和 setAllowUniversalAccessFromFileURLs 。下面是这 2 个方法的源码:

setAllowUniversalAccessFromFileURLs

/**
 * Sets whether JavaScript running in the context of a file scheme URL
 * should be allowed to access content from any origin. This includes
 * access to content from other file scheme URLs. 
 * ...
 */
public abstract void setAllowUniversalAccessFromFileURLs(boolean flag);

setAllowFileAccessFromFileURLs

/**
 * Sets whether JavaScript running in the context of a file scheme URL
 * should be allowed to access content from other file scheme URLs. To
 * enable the most restrictive, and therefore secure policy, this setting
 * should be disabled. Note that the value of this setting is ignored if
 * the value of {@link #getAllowUniversalAccessFromFileURLs} is true.
 * Note too, that this setting affects only JavaScript access to file scheme
 * resources. Other access to such resources, for example, from image HTML
 * elements, is unaffected. 
 * ...
 */
public abstract void setAllowFileAccessFromFileURLs(boolean flag);

根据这 2 个方法的注释,我们可以得到这样的结论:如果要通过 JavaScript 获得应用的私有数据,WebView 必须通过 loadUrl(“file:///XXXXXXXXXX”) 的形式访问本地文件,那么 loadUrl 可以访问其它 app 的私有数据吗?很明显如果用户没有将手机 Root ,一个 app 的是无法直接通过 file:///XXXX 的形式访问其它 app 的私有数据的。所以,对于一个没有 Root 的手机我们可以得到利用该漏洞的一般步骤(这里还以支付宝为例):

  1. 向用户下发一个包含上传应用私有数据代码的 html 文件,假设在用户手机上存放为 /sdcard/appcopy.html ;
  2. 利用支付宝扫码得到二维码信息 “file:///sdcard/appcopy.html” 或通过短信中携带该信息的方式让用户主动选择使用支付宝打开 ;
  3. 复制用户信息并上传给黑客;
  4. 黑客拿到信息写入自己的手机,并打开支付宝;
  5. 支付宝没有校验手机的 Mac , IMEI 等各种硬件信息,导致登录成功,黑客成功窃取用户资金;

从上面的步骤来看,黑客首先让用户下载一个有安全隐患的文件,而用户下载文件时往往会有提醒,一般用户都不会随意下载,这一步就可以过滤到大多数用户了。然后,还必须让用户主动使用支付宝打开该文件(因为没有 Root 的手机,一个 app 是无法访问另一个 app 的私有数据的),如果以二维码的方式是很难与受感染的手机进行匹配的,正如玄武实验室提出的方法,利用短信的方式进行诱导;随着人们安全意识的提高,越来越少的人才会点击不明短信中的链接,这里也能过滤到一大部分人。如果 1、2 步能够成功实现 3、4 步就没有什么难点了。接下来是关键的第 5 步,如果我记得没错的话,支付宝从很早就将用户账号和手机硬件进行了绑定,等用户在其它手机进行登录的时候,支付宝会向用户绑定的手机号发送短信验证,只要用户手机卡不丢失,黑客也是 无法窃取用户资金 的。另外,setAllowFileAccessFromFileURLs 和 setAllowUniversalAccessFromFileURLs 在 android 4.1 之后是默认关闭的,考虑到国内大部分手机系统版本都在 android 4.1 以上,大多数情况下使用 WebView 也不会存在该漏洞。

综上所述: 能够利用该漏洞的前提条件十分苛刻,是很难成功的,这也是该漏洞从 12年3月 首次被发现到现在没有爆发的原因之一,我们不用过分担心。

如果文中有什么不妥之处,还望斧正。