IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]Android中利用5.0系统屏幕录制UI漏洞骗取应用录制屏幕授权

    jiangwei0910410003发表于 2016-08-16 09:26:02
    love 0

    一、漏洞分析

    今天我们来看一下Android中的屏幕录制功能带来的一个漏洞问题,在之前的一篇文章中介绍了关于Android5.0新增的Api来进行录制屏幕视频,不了解的同学,可以点击这里。当时记得我们在使用这个api的时候,系统会给一个授权提示:


    这个对话框是系统弹出来的提示消息,主要由两部分组成,应用的名称+提示文案,看似是一个很平常的授权对话框,但是这背后却有这个一个很大的UI漏洞,而且在之前的一篇文章中了解到,这个录制屏幕功能的危险性还是很大的。那么这个UI漏洞是啥呢?


    其实很简单,就是Android系统中在弹出对话框的时候,如果内容过多,会采用滚动样式,来展示全部消息,而不是使用字符省略的方式。那么这里就存在一个问题了,如果把应用的名称故意弄的很长,导致后面一段提示文案:“将开始截取您的屏幕上显示的所有内容”给抵到底部,只有滑动的时候才能看到,这样来骗取用户点击立即开始。同时再把应用的名称改成一些银行或者是社交账号,支付应用的提示文案,比如:“xx宝新增了特性...点击立即开始,即可体验!”,而用户相信就开始点击了,当然这里还需要一个功能,就是监听系统的TopActivity,当监听到用户打开了银行app或者是社交app的时候,就去申请权限,弹出对话框!


    下面通过MediaProjectionManager的源码来分析一下,授权提示流程:

    在使用录制屏幕功能的时候,去授权页面调用的是createScreenCaptureIntent方法,获取授权Intent:


    源码了解到了,这里调用的是MediaProjectionPermissionActivity来进行授权:


    这里直接用系统对话框展示了。


    那么下面就来演示一个例子,比如现在恶意软件在后台监听到了用户启动了某某应用app,然后就启动授权界面:


    恶意app的名称为:


    这就看到了,这些提示信息,对于用户打开银行app的时候给与提示感觉还是很正常的,而且一般弹出的提示对话框,用户不会去滑动看到底部的,而关键提示信息就在底部:


    所以,这里就是一个UI漏洞,Google在处理这个对话框的时候,没有使用省略号来做处理,而用滚动方式,但是最重要的提示信息却被搞到底部了,用户很难发现,很多用户就认为很正常按照提示点击立即开始了,一旦授权了,那么恶意app就在后台偷偷的录制你的屏幕,当你输入账号和密码的时候也都是可以被记录了。在把录制app发到服务端进行分析。账号就会被盗取!


    二、漏洞产生的原因

    上面分析完了这个漏洞,其实理解还是很简单,就是一个UI漏洞,在关键中的提示信息展示的时候,没有做省略处理,从而把最重要的提示文案给隐藏了。导致用户被骗取了授权。

    该漏洞实际上是由于Google没有制定合理的Android应用名称规范导致,综合表现为如下两点:
    1) 没有规范应用名称长度,使得应用名称可为任意长度;
    2) 没有规范应用名称字符集,如应用名称可包含换行符和制表符。


    三、漏洞修复

    那么关于这个漏洞我们该怎么修复了呢?

    当然Google在后续的6.0系统中进行修复了这个问题,修复之后的效果:


    采用了省略号代替了,不会把重要的提示信息给隐藏了。那么对于5.0系统的用户该怎么办呢?这个漏洞依旧存在,这就要求我们开发者做一下工作了,在Android中涉及用户隐私的Acitivity中(例如登录,支付等其他输入敏感信息的界面中)增加属性:

    WindowManager.LayoutParams.FLAG_SECURE

    看一下属性源码说明:


    该属性能防止屏幕被截图和录制。这个属性就是可以防止当前Activity不会被录制,我们可以做一个案例:


    还记得上一篇内容中,我们使用MediaProjection进行截图功能,如果加上了这个属性,再次截图,效果如下:


    看到下面的截图是一片漆黑,截图失败的,而且这时候使用adb shell screencap 命令去截图也是失败的:


    所以从这里可以看出来,其实adb shell screencap和screenrecord命令底层的实现和MediaProjection是一样的。


    下面再来看看视频录制功能:


    看到了,我们的app,没有被录制,也是一片漆黑,这个属性就是为了防止当前应用被录制的功能!

    所以在5.0的系统中,或者对于银行app,社交app,支付app等,开发者应该把当前登录的Activity添加这个属性是最安全的!如果你没有添加的话,就加上吧,给自己的app加上一份保险!


    四、漏洞总结

    到这里,我们就分析完了这个录制功能的UI漏洞,下面来总结一下

    第一、漏洞产生的原因

    因为Google在处理对话框提示的时候,没有做字符限制,导致一些重要的提示信息被遮挡

    第二、漏洞的危险

    恶意app利用这个UI漏洞,把自己的app名称弄得很长,而且在后台监听用户打开了一些支付app,银行app之后,就弹出这个授权对话框,但是因为名称太长了,重要的提示文案被盖住了,用户很容易被骗取授权

    第三、漏洞修复

    Google在6.0以后进行了修复,使用字符限制功能,但是对于没有升级到6.0的用户,这时候对于我们开发者就需要在自己的项目中给Activity添加安全属性,特别是登录页面,这样就可以防止当前页面被录制或者截屏了。


    五、总结

    Android中5.0好不容易释放了录制屏幕功能的api,结果就弄出这个漏洞,也是服了Google了,本来录制功能就非常危险,却在授权的时候,还有这么一个UI漏洞,让用户被恶意app骗取授权,在后台偷偷录制桌面信息了,人生处处是坑,Android处处是漏洞!


    更多内容:点击这里

    关注微信公众号,最新Android技术实时推送




沪ICP备19023445号-2号
友情链接