Android Accessibility安全性研究报告

第一章    Accessibility简介

近期,360烽火实验室发现一款滥用Accessibility的木马,该木马具有浏览器地址栏劫持、搜索劫持、桌面点击劫持以及防卸载等系列恶意行为。本报告将结合我们对该木马的分析,从Accessbility的设计初衷、技术发展、滥用情况等角度研究Accessibility的安全性。

一、    设计意义

依据Android官方文档,考虑到一些用户不能很好地使用Android设备,比如由于视力、身体、年龄方面的限制,造成阅读内容、触控操作、声音信息等方面的获取困难,因此Android提供了Accessibility特性和服务帮助用户更好地使用Android设备。正由于这个介绍,在国内更普遍地被称为无障碍或残疾人模式。Accessibility的官方简介内容如下图,有兴趣详细了解该部分内容请参考官网详解[1]。

image4

图1.1 Accessibility官方简介

二、    运行原理

Accessibility[2]相关服务以及接口在Android 1.6时期就已经被加入,其中以AccessibilityService组件作为入口,结合AccessibilityEvent,AccessibilityNodeInfo等关键类完成辅助功能(其中AccessibilityNodeInfo于Android 4.0加入)。

AccessibilityService是继承了Service的抽象类,生命周期不由应用本身管理,而是由系统和用户的显式操作所控制,运行后当有AccessibilityEvent被发出时该服务会收到系统的回调。由于是由系统所启动的组件,所以与一般Service有所区别,特别的地方在于满足下面三点:

1)        该Service需要权限android.permission.BIND_ACCESSIBILITY_SERVICE,该权限保证了只有系统能绑定调用该服务;

2)        第二点,该Service需要action:android.accessibilityservice.AccessibilityService;

3)        第三点,提供名为android.accessibilityservice的meta-data,且提供xml作为AccessibilityService的配置文件,配置文件声明有该服务接收事件类型、反馈类型等内容。

三、    使用情况

依据Android官方的详细介绍,开发者应该从自身应用出发,在增加视图属性如contentDescription等内容后,可以在不修改原有代码逻辑的情况下使用户体验得到优化,如预装在 Android 设备上的屏幕阅读器TalkBack[3],在没有修改系统源码的情况下,满足了视力不足的用户使用Android设备的需求。根据Android官方的说明,TalkBack会使用语音反馈描述用户所执行的操作,以及告知用户收到的提醒和通知,可以帮助视力水平较低的用户顺利进行手机的触控、阅读内容的进行。

在国内,Accessibility被更多地用于免ROOT自动安装以及自动抢红包功能的实现,免ROOT自动安装可以优化用户体验,但自动抢红包功能既没有帮助有缺陷用户更好的使用手机,也没有提升用户体验,与Android官方的设计初衷已经背离,进入了灰色地带的范畴,同时利用Accessibility进行的恶意行为也越来越多,需要引起足够重视。

 

第二章    Accessibility发展趋势

2016年我们发现带有Accessibility功能的样本数量呈现爆发性增长,但很遗憾,Accessibility功能的使用却与Android官方的初衷渐行渐远。

2009年Android 1.6发布,早在7年前Accessibility就已经面世。然而,在数据分析当中却发现,直至2012年才收录有使用该技术的样本,而且占样本总数的比例极低,仅有0.015%,随后两三年的时间里Accessibility的使用比例仍然偏低,甚至于到2015年时占比仍不足0.5%,但是在2016年上半年里占比已经超过了2.6%,同时仅仅2016年上半年的样本数量已经是2015年一整年样本数量的3倍,相关的样本数量及相关比例发展趋势见图2.1。

image5

图2.1 Accessibility样本数量及占比趋势

从数据角度进行分析,虽然在2015年里使用Accessibility的样本数量已经突破了20万,但是这个数字在样本总数所占的比例仍不足0.5%,相当于每200个样本当中才能勉强找出1个带有Accessibility功能的样本。因此,在一定程度上说,在Accessibility诞生的前六年里,该项服务的使用比例是符合谷歌预期的,正如谷歌官方的介绍,Accessibility是为了让身体不便的用户更好地使用手机,目标用户群体比例较小,因而理想状态样本比例也应该相对较少。

对样本增长状况的研究,发现Accessibility样本大致可以划分为从一开始的合理利用时期,发展到用于提升用户体验,继而转向到灰色地带,逐步背离了安卓谷歌的设计初衷。

一、    合理利用

上文提及了安卓官方对Accessibility的说明,那么如何才是对Accessibility的合理利用呢?这里不得不再次所提起屏幕阅读器TalkBack,其可以作为无障碍应用的一个优秀范例,具体体现为下面三个方面:

1)        目标用户恰当。如设计意义中所介绍,Accessibility主要是面向于身体等方面存在残疾或不足的用户,而TalkBack则是直接面向视力存在障碍或不足的用户;

2)        更好地使用设备。安卓官方希望通过Accessibility提供多种方式的转换,达到让特殊用户更好的使用手机的目的,在这一点上TackBack具体表现为给用户提供了多方面的语言反馈,如触摸、文字、输入等多方面的语音提示,让视力存在障碍或不足的用户在操作手机当中得到可靠的帮助,使得用户能无障碍地使用手机。

3)        在不影响原有代码情况下实现了功能扩展。这是Accessibility一个很优秀的特质,谷歌不需要在系统源码当中修改或增加任何内容,只对外提供了Accessibility功能,就满足了视力不足用户对于使用手机的日常需求,达到不修改原有程序逻辑的情况下还优化了用户体验的目的。

可见,在上述三个方面的引导下,Accessibility应该是一个面向特殊人群的,对开发者友好的一个服务。

二、    提升体验

需求是带动开发者去了解学习新技术的一大动力,在2015年里, 各大应用市场均提供了“免ROOT自动安装”的功能选项,同时由于这个功能的推出,使得越来越多的开发者去探究了解Accessibility这项技术。

免ROOT自动安装,又有“智能安装”的说法。应用市场在没ROOT权限的条件下,安装或更新软件时会弹出应用安装界面,而用户想要安装或更新多个应用时,需要用户多次主动去点击安装按钮,造成用户使用上的不便,免ROOT自动安装正为了解决用户希望免去反复的点击操作这个需求而产生。虽然此功能没有面向特殊人群而是面向了普遍用户,但是免去了用户更新软件时反复操作,提升了用户体验。

以360手机助手作为一个范例,用户手机即使没有ROOT,开启了360手机助手的辅助功能以后,也可以方便地进行应用的批量安装、更新或卸载,不再需要用户繁琐地点击安装或卸载按钮。

免ROOT自动安装逻辑流程图见图2.2。

image6

图2.2 免ROOT自动安装流程

三、    灰色地带

免ROOT自动安装是个提升用户体验的功能,但是自动抢红包需求则是使得Accessibility的使用进入了灰色地带。

不可否认,自动抢红包是比免ROOT自动安装更强烈的一个用户需求,无论是企业还是个人开发者,都纷纷通过Accessibility去实现抢红包的相关功能,这是Accessibility样本数量的大幅度增长的一个重要原因。

回到Accessibility本身,将Accessibility服务用于自动抢红包,既没有面向特殊人群,也没有提升用户体验,已经背离了安卓官方的设计意义,而且自动抢红包软件具有外挂属性,会造成一定程度上的不公平现象,正如外挂软件一样难以判断其好坏性质一样,用于自动抢红包功能的实现代表着Accessibility的使用已经进入灰色地带。

自动抢红包的逻辑流程图见图2.3。

image7

图2.3 自动抢红包

通过流程图的简单对比,发现自动抢红包的逻辑比免ROOT自动安装更为复杂一些,结合时间前后的因素分析,免ROOT自动安装功能的出现使得Accessibility已经有了一定的技术探索积累,为后面自动抢红包技术发展提供了条件,同时因为自动抢红包的需求远远强于免ROOT自动安装功能的需求,所以即使自动抢红包有着更为复杂的逻辑,也没有阻挡更多的开发者去研究和开发自动抢红包应用。

四、    肆意滥用

由于Accessibility的设计初衷只是面向于少数群体,长时间里属于一个较冷门的功能,但是近两年免ROOT自动安装和自动抢红包的出现,使得Accessibility进入了更多开发者的视野,不再被人们忽略,Accessibility样本也从最开始的合理利用发展到用于提升用户体验,再到踩入了自动抢红包这种灰色地带。经过一定的发展以后,开发者容易发现Accessibility能做的事情不止这些,也给一些不怀好意的开发者或者木马制作者提供了制作恶意软件的切入点。

正如硬币有正反两面那样,在Accessibility使用趋势明显上升的势头发生之时,是否也有木马或者恶意软件趁机混迹于其中呢?图2.4是带有Accessibility功能的恶意样本数量统计。

image8

图2.4 Accessibility恶意样本数量统计

不难发现,随着Accessibility使用的普及,Accessibility恶意样本的数量也在增加,注意上图中最后一列仅仅是2016年上半年的数量,换个维度,其实这个数量是2015年上半年的245.3%,接近于2015年同期的2.5倍!目前尚且乐观的是,Accessibility恶意样本的上升趋势大大低于Accessibility总体样本的增长,但是随着Accessibility的普及,存在着出现新的肆意滥用的可能性,这次360烽火实验室发现的浏览器劫持木马便是一个例证。

第三章    Accessibility滥用案例分析

一、    行为概述

(一)  诱导用户开启

360烽火实验室最新发现的木马“System Monitor”,该木马表面伪装成手机安全软件,启动后以安全软件的界面诱导用户启动辅助功能以“完成安装”,此处的页面描述“Malware Protection”字样由木马设定,意在进一步诱导用户相信其为一款安全软件。再次进入辅助功能,点击System Monitor后无法再进入上述开关页面,而是自动回弹至设置页面。

image9

图3.1 启动木马辅助功能截图

(二)  防止被卸载

正常情况下,在系统设置 中的 应用 选项中可以查看应用信息,进而对程序进行卸载。

image10

图3.2 手机中的应用列表

image11

图3.3 点击正常应用后跳转页面

image12

图3.4 点击木马System Monitor后跳转页面

可见,点击正常软件可以进入到“应用信息”页面,可以对应用进行卸载和强行停止等操作,但如果点击选中的木马程序,则会跳转到设置页面而无法进入到该页面,造成用户无法正常卸载。

(三)  浏览器地址栏劫持

正常打开浏览器后的页面如下图

image13

图3.5 正常情况下打开浏览器截图

安装该恶意软件后打开浏览器的页面,会打开特定的网址,如下图

image14

图3.6 中木马后启动浏览器截图

点击浏览器中的可点击视图,则一有定几率触发打开一个新的网址,如下图

image15

图3.7 中木马后点击浏览器视图后截图

二、    运行逻辑

样本在获得Accessibility激活后,会接收到Accessibility事件,通过对事件当中的包名、文本信息、事件类型的综合处理,实现了上述的恶意行为,样本的大致运行逻辑如下图。

image16

图3.8 木马逻辑流程图

三、    详细分析

(一)  隐藏图标

开启该Service后,触发隐藏图标代码

image17

图3.9 隐藏图标代码片段

(二)  自我保护

通过系统设置的包名以及事件中带有的文本信息,判断出用户是否意图在辅助功能当中关闭服务或试图通过系统设置的应用进行卸载,然后通过启动系统设置activity来跳转,达到程序自我保护的目的。

image18

image19

image20

图3.10 自我保护代码片段

通过“Force stop”关键字来判断当前窗口是否存在被强制停止的可能,如果有,则跳转到桌面。

image21

image22

图3.11 跳转桌面代码片段

(三)  劫持搜索

通过区分不同的事件类型,根据包名对输入法、浏览器、系统桌面进行搜索内容劫持跳转。

1)        三星输入法

image23

图3.12 检测三星输入法代码片段

2)        浏览器

image24

图3.13 检测浏览器代码片段

3)        系统桌面

image25

图3.14检测系统桌面代码片段

其中系统桌面方面,无论用户在二级菜单还是三级菜单,打开任意app时均会启动浏览器并以打开app的名称作为关键字进行搜索,日志例子如下

image26

image27

图3.15 搜索关键字代码片段

通过当前事件的包名和事件文本信息,隐藏自身程序的系统安装界面。样本还具有更新迭代版本的代码,结合以下代码理想下可以做到让用户感知不到版本更新

image28

图3.16 版本更新安装代码片段

获得筛选用户搜索内容并用自身网址进行搜索

image29

image30

图3.17 google搜索示例

如果用户使用谷歌搜索,则会将谷歌生成的网址信息进行筛选再进行自身的搜索进行搜索

image31

图3.18 再次进行搜索代码片段

其中标红的URL在浏览器地址跳转里面会被使用

image32

图3.19 跳转的网址链接代码片段

 

第四章    Accessibility安全预警

一、    滥用案例盘点

根据国内外相关安全报告,已被发现的Accessibility滥用情况主要归类为三类情况:恶意安装、广告干扰和窃取信息。

(一)  恶意安装

应用市场的“自动安装功能”通过Accessibility实现了模拟用户点击的功能,同样的技术也被黑产业有所利用,利用Accessibility的检测视图以及模拟点击功能,进行恶意安装,用户即使发现也无可奈何[4]。同时,结合此次发现木马的实现方式,可预见到会有自动安装同时隐藏安装界面行为的出现。

(二)  广告干扰

Accessibility的功能,使得广告的方式弹出方式更难以察觉、更具隐蔽性。如Doctor Web的报告 Android adware “sets up” other programs[5]提及的Adware.AnonyPlayer.1.origin,会利用Accessibility获取系统事件,等待用户启动白名单中的不含广告的应用后进行广告展示,达到迷惑用户广告出处的目的。

(三)  窃取信息

由于使用Accessibility时可以获得用户通知栏以及操作视图里的内容,此功能可被用于窃取用户数据。如Lookout的报告 Japanese malware abuses service helping the disabled use smartphones; spies on victims and steals LINE data[6]中,指出了有恶意软件利用Accessibility进行LINE数据的窃取。

二、    安全预警

在Android 5.0以前,接口getRunningTasks常被恶意利用来制作各种欺诈或者劫持类软件,但是由于Android 5.0对该接口进行了安全性的改进,使得木马作者在5.0以后的版本寻求另外的实现方式去达到原来的功能,其中通过Accessibility来实现便是其中一种方法,getRunningTasks和Accessibility的对比如下图

image34

图4.1 getRunningTasks和Accessibility比较

通过上述对比,结合此次发现的木马,Accessibility在将来有可能成为替代getRunningTasks接口被用作劫持诈骗类木马的常用手段。与此同时,通过对Accessibility相关功能的深入研究,发现利用该服务可以获取到更多的细节信息,在将来可能会带来更大的安全隐患。

在上述对比中,Accessibility需要用户主动开启服务,在国外已经发现通过悬浮窗来进行引导用户开启授权的样本,在对Most Android Devices Prone to Accessibility Clickjacking Attacks[7]中所提及的样本的分析研究发现,该样本主要通过悬浮窗覆盖和游戏引导的形式,在用户不知情的情况引导用户开启服务。悬浮窗欺骗,加上前面木马当中有伪装欺骗,恶意开发者有可能正通过多种方法和手段完成恶意功能。

三、    滥用原因

通过对Accessibility相关技术和样本的分析,发现Accessibility可以获取用户操作界面的信息、获取用户输入信息甚至可以获取到用户操作手机的状态,那么,Accessibility是如何从一个面向于特殊群体的服务逐渐变得被滥用的呢?应该有以下因素:

1)        使用人群与权限控制的矛盾

Accessibility理想使用人群是残障人士,残障人士对手机操作具有特殊要求,使得Accessibility需要提供高度的自动化和十分简易的操作接口,这一方面导致Accessibility服务的运行过程对于手机用户来说几乎是透明的;另一方面,使用人群的特殊又使得系统不能对Accessibility设置过于复杂的权限控制,使其容易被滥用。

2)        用户对Accessibility的认识不足

如果说起ROOT,相信能引起用户的谨慎注意,但是设计到Accessibility,包括无障碍服务、辅助功能等词语时,大多用户没有足够的安全防护意识,甚至由于服务置于后台,对用户没有交互,用户难以察觉其存在,而导致用户意识上的松懈。

由于Accessibility自身的设计意义使得系统权限管理难以做得复杂,同时用户对其又没有足够的安全认识,形成了如今Accessibility被滥用的情况。

四、    总结

Android提供Accessibility的初衷是帮助用户更好地使用手机,而今却被用在各种不相关的功能上,甚至于利用该功能来进行恶意推广等对用户不友好的行为,这次发现的木马更是对用户手机的日常使用造成极大的不便。对比安卓官方提供该服务的初衷,Accessibility其实更像是个受委屈的孩子,为了更美好的事情而诞生,却被“教”成了个坏孩子。

结合此次发现的木马和上述报告,可以发现Accessibility被恶意利用的情况越来越多,进行的恶意行为也层出不穷。此次发现的木马劫持了用户浏览器,同样的技术也可实现对任意Activity实行劫持,国内尚未出现类似木马但需对此引起重视与预防。

在此提醒广大用户,不要轻易给未知来源的应用开启辅助功能,以免遭受到手机的使用不正常或其他损失。

 

引用

[1] Android官方对于Accessibility的说明:

https://developer.android.com/guide/topics/ui/accessibility/index.html

[2] Android官方对于AccessibilityService的开发者文档:

https://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html

[3]Android官方对于TalkBack的帮助说明文档:

https://support.google.com/accessibility/android/answer/6283677?hl=zh-Hans&ref_topic=3529932

[4] 滥用Accessibility service自动安装应用:

http://www.2cto.com/Article/201512/454365.html

[5] Android adware “sets up” other programs :

http://news.drweb.com/show/?i=9716&c=9&lng=en&p=0

[6] Japanese malware abuses service helping the disabled use smartphones; spies on victims and steals LINE data:

Japanese malware abuses service helping the disabled use smartphones; spies on victims and steals LINE data

[7] Most Android Devices Prone to Accessibility Clickjacking Attacks:

http://www.securityweek.com/most-android-devices-prone-accessibility-clickjacking-attacks

 

转载自:http://blogs.360.cn/360mobile/2016/09/07/research_of_accessibility/    原文作者:360烽火实验室