一、引言

近期谷歌发布了最新手机操作系统Android O的开发者预览版,一如往常,Android O又带来了多项新功能与优化升级,其中一项有关系统窗口管理的优化给Android手机勒索软件带来了严重冲击。

二、简述Android系统与勒索软件对抗史

手机勒索软件是一种特殊的恶意软件,其通常将自身伪装为看似无害的软件或是利用社会工程学诱导受害者下载安装,随后通过恶意利用操作系统正常功能或者缺陷强制锁住用户桌面使得用户无法正常使用设备,并几乎都会要求受害者缴纳赎金以解锁设备。手机勒索的解锁费用通常为20、30或50元不等,通常情况下当用户设备感染勒索软件后,出于设备被锁定的焦急心理与不高的赎金金额,用户一般都会通过勒索软件锁屏界面提供的联系方式联系制马人以尝试解锁设备,因此这种“薄利多销”且制作成本低廉的点对点式直接性敲诈软件颇受制马人的青睐。此外,这类软件通常具有很高的可变性,制马人只需简单调整软件代码或锁屏样式便可生成新的勒索软件。360烽火实验室一直密切关注国内外手机勒索软件动向,先后发布了多篇对手机勒索软件的研究成果。

纵观Android系统尤其是高版本系统史,每一版都在遏制勒索软件方面做出了积极的应对:

  • Android L(Android 5.0-5.1)

在早期Android版本中,通过getRunningTasks 方法可获取当前运行栈顶程序,但自Android 5.0起该方法被弃用,同时getRunningAppProcesses与getAppTasks方法的使用也受到了限制,由此抑制了劫持Activity类勒索软件的出现。

  • Android M(Android 6.0)

大部分手机勒索软件的惯用伎俩是通过SYSTEM_ALERT_WINDOW权限来打开特定系统类型窗口并将其显示在所有其他应用程序和窗口之上,以此达到锁定用户设备的目的。Android M的出现使得勒索软件制马人在实施手机勒索时遇到了一大瓶颈——动态权限申请,由于自Android M起,SYSTEM_ALERT_WINDOW开始被列为一种危险程度较高的权限而被特殊处理——即需要用户动态授权。这一改变意味着只要勒索软件的目标系统为Android M,其就不能如往常一样在用户毫无防备的情况下锁定用户设备,而是必然有一个用户授权阶段,这对勒索软件的发展起到了一定程度的阻碍作用。

  • Android N(Android 7.0-7.1)

与之前版本可任意设置或重置锁屏密码不同的是,Android N中明确规定,第三方应用开发者只能使用DevicePolicyManager.resetPassword为无密码设备设置初始密码,而不能重置或清除已有的设备密码。Android N中对于resetPassword API所添加的限制能阻止木马对已有锁屏密码的重置,从而使得部分勒索软件失效。

图1 Android各版本对抗手机勒索

以上改进从Android系统角度有效遏制了勒索软件发展,然而勒索技术也在不断升级,这些变化并彻底根除勒索软件,在利益诱惑之下,制马人仍会不遗余力地在勒索软件上继续寻求新的可趁之机。

三、Android O进一步遏制勒索软件

现状与原理

根据360烽火实验室的统计,截止到2017年5月初共捕获到勒索软件超过55万个,其中系统窗口置顶类勒索软件占比高达81.5%,远高于锁屏密码修改、系统文件篡改等其他类型勒索软件。这种悬殊的差距很大程度上源于,篡改锁屏幕密码或系统文件分别需要用户动态授权设备管理器或root权限,一旦用户拒绝授权,进一步的勒索行为将无法实施;而窗口置顶类勒索软件无需用户任何授权即可锁定设备,相比前者锁屏成功的几率要大得多。

图2 系统窗口置顶类勒索软件占比

(数据说明:81.5%包含了既有系统窗口置顶又存在锁屏密码修改等其他勒索技术的多重手机勒索软件)

Android O预览版一经发布就给了勒索软件致命打击,新系统禁用了5种窗口。如下图所示,其中包括3种勒索软件常用的系统窗口类型,窗口置顶类勒索木马“赖以生存”的系统窗口类型被限制使用了。

图3 Android O禁用的5种窗口类型

在Android O之前版本中,勒索软件通过调用特定系统窗口类型将自身窗口完全覆盖在第三方应用程序与其他系统窗口之上,用户无法响应其他窗口,由此设备被锁定;但在Android O中,这几种具有置顶权限的系统窗口类型被弃用,勒索软件制作者找不到其他能完全覆盖第三方应用程序与其他系统窗口的窗口类型,窗口置顶类锁屏将无法实施。

不同版本窗口置顶类勒索软件运行效果

在Android 6.0之前,使用系统类窗口进行手机勒索十分简单,只需要在AndroidManifest清单文件中申请SYSTEM_ALERT_WINDOW权限即可使用TYPE_SYSTEM_ALERT、TYPE_SYSTEM_ERROR等高级别窗口,用户开启手机勒索软件后无需额外操作甚至来不及做出反应,系统窗口就已置顶,手机即刻被锁定。

自Android 6.0起至Android 7.1,Android系统开启动态权限模型,SYSTEM_ALERT_WINDOW权限开始被列为一项特殊权,尽管其权限级别(Signature)不是Dangerous,但开发者在使用之前也必须动态获得用户授权,只有在用户进行授权后,应用才可以随意使用TYPE_SYSTEM_ALERT、TYPE_SYSTEM_OVERLAY、TYPE_SYSTEM_ERROR等高级别窗口。在这一阶段,用户通过一项Action——MANAGE_OVERLAY_PERMISSION打开设置“在其他应用的上层显示”页面,如下图所示,用户手动允许后,系统高级别窗口权限开放,此时即可成功使用这些窗口进行手机勒索。

图4 Android 6.0及以上动态申请SYSTEM_ALERT_WINDOW

图5 SYSTEM_ALERT_WINDOW动态授权页面

SYSTEM_ALERT_WINDOW动态授权完成后,将窗口类型设置为TYPE_SYSTEM_ERROR得到的锁屏效果如下——上拉菜单、屏幕下方菜单键无效,无任何方式退出窗口,手机被强制锁定:

图6 手机被锁定

在最新的Android 8.0中,SYSTEM_ALERT_WINDOW权限的使用进一步受限,对于第三方应用程序而言,该权限保护下的TYPE_SYSTEM_ALERT、TYPE_SYSTEM_OVERLAY、TYPE_SYSTEM_ERROR等几类勒索软件常用窗口完全被禁用。即使获得了用户动态授权,使用这几种窗口也会触发窗口类型错误:

图7 使用禁用窗口报窗口类型错误

取而代之,为了解决窗口置顶需求,Google引进了一种新窗口类型 TYPE_APPLICATION_OVERLAY,这类型窗口将覆盖其他第三方应用的窗口,但却始终位于系统状态栏与输入法窗口之下,如下图,用户可以下拉状态栏并关闭该置顶窗口:

图8 TYPE_APPLICATION_OVERLAY窗口置顶后仍可操作状态栏

为了保障Android 8.0的向前兼容性,安装了Android 8.0的设备也能正常运行使用了TYPE_SYSTEM_ALERT等被禁窗口的应用程序,但同TYPE_APPLICATION_OVERLAY窗口一样,被禁窗口也可通过下拉状态栏的TURN OFF选项关闭,故使用旧版本SDK开发的窗口手机勒索软件在Android 8.0中同样会失效。

图9 状态栏的TURN OFF选项

需要注意的是,虽说自Android M到Android O一直加强系统类窗口的使用限制,但当病毒作者将目标勒索软件仍旧锁定在Android M之前版本,这种限制作用将大大降低。而从目前各版本Android操作系统的分布情况来看,高达61.7%的设备仍旧使用Android M以下系统版本,这也就说明绝大多数用户设备仍面临着勒索软件带来的高危风险,由此看来,Android高版本操作系统的普及力度亟待加强。

图10 Android各系统版本分布情况

(图片来源:https://developer.android.com/about/dashboards/index.html)

随着Android O的逐步推广普及,利用系统类型窗口作恶的勒索软件将难以存活,但是其它形式的勒索软件却未受其影响,所以对于勒索软件的监控以及防范仍不能松懈。

Android的开放为其快速发展提供了更多可能性,同时势必会带来更多的安全问题,不过,随着Google对手机操作系统的持续改善,现存的诸多安全问题不断得到解决,再加上安全厂商对Android设备及软件的大力护航,开发者的开发环境与用户的用机环境必将更加安全同时更加丰富多彩。

原文地址: http://blogs.360.cn/blog/android_o_against_ransomware/

Android O限制系统全屏进一步遏制手机勒索相关推荐

  1. Android UI体验之全屏沉浸式透明状态栏效果

    前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...

  2. 深度linux安装virtualbox,【玩转deepin】如何安装VirtualBox增强功能使得deepin系统全屏显示?...

    原标题:[玩转deepin]如何安装VirtualBox增强功能使得deepin系统全屏显示? 在Windows上通过Virtualbox安装deepin深度操作系统,安装完成后,为了让deepin可 ...

  3. QT for android 比较完美解决 全屏问题

    QT for android 比较完美解决 全屏问题 参考文章: (1)QT for android 比较完美解决 全屏问题 (2)https://www.cnblogs.com/wuyaSama/p ...

  4. Android WebView 视频播放,全屏按钮不显示或灰显解决方案

    Android WebView 视频播放,全屏按钮不显示或灰显解决方案 背景 问题定位 背景 在Android开发中,遇到了如下问题:Activity内嵌WebView,加载有视频的页面时,视频无法全 ...

  5. Android视频播放器ExoPlayer全屏

    Android视频播放器ExoPlayer全屏 布局添加全屏按键 1. app gradle dependencies { implementation 'com.google.android.exo ...

  6. Android 7.0来电全屏显示 如何修改

    在Android 7.0来电全屏显示 如何修改呢? 1.alps/frameworks\base\packages\SystemUI\src\com\android\systemui\statusba ...

  7. Android运行时动态全屏以及旋转屏幕时不重新装载

    Android运行时动态全屏以及旋转屏幕时不重新装载 最近要做一视频播放器,在横屏时需要用到全屏播放,在网络上搜索"android 全屏",查到的文章全是如何设置全屏,通过them ...

  8. Android : Dialog中VideoView全屏播放

    Android : Dialog中VideoView全屏播放 前几天公司要求在引导页播放视频,如果跳转到activity去进行播放,再返回时生命周期方法调动会不太好,最后改成了在引导页构建一个Dial ...

  9. android除去标题栏或全屏

    想要除去标题栏只要加上下面两句代码在Activity的onCreate方法中即可(要在setContentView之前添加). requestWindowFeature(Window.FEATURE_ ...

最新文章

  1. 大量的 TIME_WAIT 状态 TCP 连接,对业务有什么影响?
  2. 你大概走了假敏捷:认真说说敏捷的实现和问题(手绘版)
  3. 线段树 求矩形并 面积
  4. 【机器学习基础知识】各类熵总结
  5. ASP.NET 2.0:如何让DropDownList同时拥有数据来源项目与自订项目 (转自章立民CnBlogs)...
  6. 33tomcat目录结构
  7. Android aidl在Framework的使用
  8. 算法python知乎_20个算法李小文知乎文章与Github代码汇总
  9. Linux下系统与硬件时钟管理
  10. MAC地址与IP地址
  11. 大三软件工程小项目-小技术集合-客户端界面重画
  12. 【LeetCode】剑指 Offer 42. 连续子数组的最大和
  13. 快手春晚10亿元红包玩法来了:最高得2020元现金
  14. sql用于字符串的聚合函数_SQL字符串函数用于数据整理(争用)
  15. Python 爬虫 (三) - Socket 网络编程
  16. 内核编译报错Fedora20(友善)
  17. PAIP。AHK IDE及相关DOC
  18. python中能用π吗_python里π
  19. 非常强大的时间日期插件 --- JeDate.js
  20. Matlab数据拟合方法介绍

热门文章

  1. Centos 7 安装NodeJS开发环境
  2. Eclipse 4.4.2 取消空格键代码上屏
  3. 系统安装,重装与优化:chapter1 安装操作系统前的准备
  4. 浅谈 Python 程序和 C 程序的整合
  5. 【Python】print 不换行输出
  6. [云炬商业计划书阅读分享]
  7. <马哲>社会基本矛盾2017-12-27
  8. Linux系统vi编辑器执行命令,linux下vi编辑器命令
  9. 如何在阅读参考文献时,有效率的做笔记?
  10. Winform无法加载基类的错误解决