返回介绍

25.2 录屏授权漏洞分析

发布于 2024-10-10 22:32:23 字数 3511 浏览 0 评论 0 收藏 0

25.2.1 漏洞场景

在 Android 5.0 中新增了一个 API 来进行录制屏幕视频。在当今直播和游戏那么火的时代,录制也是非常不错的功能,现在很多应用就是利用这个 API 来做到游戏的录制效果的。在使用这个 API 的时候,系统会给一个授权提示,如图 25-3 所示。

图 25-3 屏幕录制授权提示

这个对话框是系统弹出来的提示消息,主要由两部分组成,应用的名称+提示文案,看似是一个很平常的授权对话框,但是这背后却有一个很大的界面漏洞,危险性很大。当应用被授权了,那么就代表这个应用可以监听用户设备的屏幕信息。

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

下面通过 MediaProjectionManager 源码来分析一下,授权提示流程:在使用录制屏幕功能的时候,去授权页面调用的是 createScreenCaptureIntent 方法,获取授权 Intent:

这里调用的是 MediaProjectionPermissionActivity 来进行授权:

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

下面就来演示一个例子,比如现在恶意软件在后台监听到了用户启动了某某应用,然后就启动授权界面,如图 25-4 所示。

图 25-4 恶意应用的授权界面

恶意 App 的名称为:

这就看到了提示信息,与打开银行 App 时给的提示信息很类似,用户会感觉很正常,如图 25-5 所示。一般弹出的提示对话框,用户不会去滑动看到底部,而关键提示信息就在底部。

图 25-5 恶意 App 授权界面

如果用户点击“立即开始”就相当于授权了,那么恶意 App 就在后台偷偷录制你的屏幕,当你输入账号和密码的时候也会被记录,再把录制 App 发到服务端进行分析,账号就会被盗取!

25.2.2 漏洞原因分析

这个漏洞其实就是一个界面漏洞,在提示信息展示的时候没有做省略处理,从而把最重要的提示文案给隐藏了,导致用户被骗,同意授权。

该漏洞实际上是由于 Google 没有制定合理的 Android 应用名称规范导致,综合表现为如下两点:

·没有规范应用名称长度,使得应用名称可为任意长度。

·没有规范应用名称字符集,如应用名称可包含换行符和制表符。

25.2.3 漏洞修复

Google 在后续的 6.0 系统中修复了这个问题,修复之后的效果如图 25-6 所示。

图 25-6 修复之后的授权界面

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

看一下属性源码说明:

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

使用 MediaProjection 进行截图功能,如果加上了这个属性,再次截图,效果如图 25-7 所示。

图 25-7 应用截图失败

看到下面的截图是一片漆黑,截图失败,而且这时候使用 adb shell screencap 命令去截图也是失败,如图 25-8 所示。

图 25-8 应用截图失败提示

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

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

25.2.4 漏洞总结

下面来总结一下这个漏洞:

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

·漏洞的危险:恶意 App 利用这个漏洞,把自己的 App 名称弄得很长,而且在后台监听用户打开了一些支付 App、银行 App 之后,就弹出这个授权对话框,但是因为名称太长了,重要的提示文案被盖住了,用户很难发现问题,授权之后就被录制了重要信息。

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文