一、漏洞分析
今天我们来看一下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技术实时推送