滥用Accessibility service自动安装应用

标签: 漏洞分析 | 发表时间:2015-12-18 16:55 | 作者:阿里移动安全
出处:http://drops.wooyun.org

Author:逆巴@阿里移动安全

0x00 恶意应用简介


近年许多的android市场实现免root安装应用,也就是下载完成立即自动安装,而黑产界也同样利用该技术在进行恶意推广,静默安装。最近拦截到大量恶意应用利用系统AccessibilityService静默安装应用。一旦恶意的Accessibility服务被激活,恶意应用将弹出广告,即使用户关闭弹出的广告该应用程序也会在后台下载,随后自动安装推广的恶意应用。

0x01 AccessibilityService介绍:


AccessibilityService作用:

Android Accessibility用于那些由于视力、听力或其它身体原因导致不能方便使用Android智能手机的用户,Android提供了Accessibility功能和服务帮助这些用户更加简单地操作设备。开发者可以搭建自己的Accessibility服务,这可以加强应用的可用性。开启AccessibilityService后应用通过它能实时地获取当前操作应用的窗口元素信息,并能够双向交互,既能获取用户的输入,也能对窗口元素进行操作,比如点击按钮。

AccessibilityService的使用场景:

Android应用市场使用android Accessibility来免root安装应用;近来火热的抢红包应用也用使用AccessibilityService自动抢红包。

0x02 恶意应用分析


我们监测到一款名为“WiFi密码查看器(增强版)”的应用滥用AccessibilityService。应用启动后诱导用户开启“WIFI信号增强服”,其实就是开启恶意应用自身的AccessibilityService;以查看WIFI密码让恶意应用获得root权限,而这一切都是为该恶意自动安装做铺垫。下图是该应用运行图

p1 p2 图应用启动与引导开启wifi信号增强界面

应用启动后会引导用户开启WIFI信号增强服务。应用跳转到ACCESSIBILITY_SETTINGS界面,提示用户若要增强Wifi信号强度,请开启WIFI信号增强服务。用户启用恶意应用的该服务之后,手机将疯狂下载该应用云端准备的应用包,并且在手机上自动安装运行。

p3 p4 图启动Accessibilty Service界面

以下是恶意代码运行流程

p5 图恶意代码云信流程

流程图解析

  1. Wifi_list模块,恶意应用利用wifi信号增强诱导用户开启 Accessiblity Service;查看Wifi密码诱导用户给该应用赋予Root权限。
  2. PushDownLoad模块,该模块由 PushCoreServiceChapingCoreService服务组成,它们利用后台服务上传设备信息,获取待Push的应用包,下载应用包。
  3. 安装模块,恶意应用解析下载成功的包,然后弹出 DialogPushActivity的广告框,非Root利用 AccessilbityService安装,root利用 pm install完成静默安装
  4. daemon模块, daemon是存放在raw目录下的elf文件,它是一个守护进程,保护应用不被杀死。daemon原理是fork出子进程之后,让子进程成为新的会话的领头进程,并与其父进程的会话组和进程组脱离,紧接着就是在子进程中定时去启动java层配置的任务。这里它保证 PushCoreServiceChapingCoreService一直在后台运行。

以下对核心服务 PushCoreService跟踪分析

首先向目标服务器Post设备的imei,wifimac,SerialNumber信息,服务器返回uuid,并记录在 DefaultSharedPreference文件的”uuid”字段

p6 图请求服务器获取uuid

上图最后调用 this.m_context.handler.sendEmptyMessage(1),启动线程GetPushThread线程。该线程向 http://api.findzhibo.com/ad/open?appCode=1&appVersion=appVerion请求获取当前应用的“open_status”字段。只有“open_status”字段为True时,云端服务器才会继续运行,否则表示当前应用版本对应的云端关闭。开启状态向 http://api.findzhibo.com/index.php/ad/push,发送post请求,服务器返回待push的应用,写入“cc_push_sp.xml”的push_json字段

p7 图云端恶意推广app的push_json

p8 图云端请求获取恶意推广应用

上图最后调用 this.m_context.handler.sendEmptyMessage(2),解析push_json字段填充intent,启动 PushDownloadService进行应用下载和恶意广告页面弹出。 PushDownloadService解析appJson,获取下载信息,随后通过handler消息对应用下载安装。

p9 图解析appJson,进行下载安装

Handler存在4个msg.what值,‘3’处理下载失败;‘4’下载成功;‘5’弹出DialogPushActivity广告框若开启Accessiblity Service,启动WifiZengQiangService; ‘6’弹出DialogPushActivity广告框,启动恶意推广的应用。 首先发送“4“表示开始后台下载,随后启动下载安装的线程。该线程检查本次推送的应用是否已经被下载到指定目录,sdcard/.wifi_ckq保存下载的应用包以及广告图片,appName经过md5加密。

p10 图sdcard目录存放下载的推广应用包

p11 图下载恶意推广应用

下载完成后发送对应用静默安装,设备非root发送‘5’,root使用 pm install安装应用随后发送‘6’启动应用。

p12 图发送handler安装应用

handler ‘5’,’6’都会启动DialogPushActivity,

p13 图启动DialogPushActivity

DialogPushActivity其实就是一个ImageView,用户在触摸该界面后推送的应用将被自动安装

p14 p15 图DialogPushActivity界面

启动WifiZengQiongService自动安装服务。之前的Ghosh Push,Kemoge等病毒家族,都是先对设备root然后植入推广应用。而该恶意应用的AccessibilityService一旦被启动,随后应用弹出恶意广告界面,即使受害者关闭弹出的广告,该应用程序也会被自动下载,随后成功安装。这个过程是调用系统的packageinstaller,获取安装界面的按钮位置,Accessibility提供的模拟用户点击功能,代替用户自动点击下一步,直到安装结束。下图是弹出的广告图,触碰后即可开始下载安装推广的应用。下图AccessibilityService里唤起安装界面

p16 图调用系统packageInstaller

AccessibilityService的onAccessibilityEvent方法不仅处理’com.android.packageinstaller’ 的event,还处理一些安全软件,这样该恶意应用将会完全控制安全软件行为,也就意味着该应用可以自动安装,启动任意app,卸载任意应用,而且利用AccessibilityService控制安全软件进行免杀。

p17 图AccessibilityService控制指定应用包

在推广的应用成功安装过后,系统将会发出 “android.intent.action.PACKAGE_ADDED”广播消息,AppListenerReceiver类接受该广播并启动应用。

0x03 总结与建议


到此滥用 AccessibilityService过程分析完毕。该应用已增强WIFI信号诱惑用户启用 Accessibility,以及查看WIFI密码是应用获取root权限。在此提醒用户谨慎给不受信应用开启 AccessibilityService,以免被恶意应用控制;最近火热的抢红包应用也会利用 AccessibilityService,实现自动抢功能,我们已发现黑客利用‘自动抢红包’诱导用户开启 AccessibilityService控制手机,建议用户在安全渠道下载抢红包软件,以免不必要的损失。

相关 [accessibility service 应用] 推荐:

滥用Accessibility service自动安装应用

- - WooYun知识库
Author:逆巴@阿里移动安全. 近年许多的android市场实现免root安装应用,也就是下载完成立即自动安装,而黑产界也同样利用该技术在进行恶意推广,静默安装. 最近拦截到大量恶意应用利用系统AccessibilityService静默安装应用. 一旦恶意的Accessibility服务被激活,恶意应用将弹出广告,即使用户关闭弹出的广告该应用程序也会在后台下载,随后自动安装推广的恶意应用.

浅谈Soap/Web Service架构及其应用(转)

- - 互联网 - ITeye博客
       概述:随着计算机网络时代的到来,Internet/Intranet无可避免的成为现代商业信息化发展的必要趋势,而基于原有的局域网及企业内部网络的 二层式甚至是单机式的信息服务结构已经不能满足现代商业社会的需要,分布式应用技术自然而然成了主流的开发技术. 本课程设计主要讨论Soap/Web Service架构方式、原理及其在分布式开发中的应用技术.

k8s外网如何访问业务应用之Service 池化pod

- - IT瘾-geek
一、废话:先讲述一个k8s重要概念,我觉得这个概念是整个k8s集群实现微服务的最核心的概念. Service定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象. Service提供了一个统一的服务访问入口以及服务代理和发现机制,用户不需要了解后台Pod是如何运行. 只需要将一组跑同一服务的pod池化成一个service,k8s集群会自动给这个service分配整个集群唯一ip和端口号(这个端口号自己在yaml文件中定义),一个service定义了访问pod的方式,就像单个固定的IP地址和与其相对应的DNS名之间的关系.

SPRING BOOT OAUTH2 + KEYCLOAK - service to service call

- - BlogJava-首页技术区
employee-service调用department-service,如果要按OAUTH2.0流程,只需要提供client-id和client-secrect即可. 在KEYCLOAK中引入service-account,即配置该employee-service时,取消standard-flow,同时激活service-account.

Web Service入门

- - 博客 - 伯乐在线
本文来自文章作者 @Jeremy黄国华 的投稿. 伯乐在线也欢迎其他朋友投稿,投稿时记得留下您的新浪微博账号哦~. 目前对Web Service没有统一的定义,定义一:Web Service是自包含的、模块化的应用程序,它可以在Web中被描述、发布、查找以及调用. 定义二:Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼任的组件进行操作.

Android Service 详解

- - CSDN博客移动开发推荐文章
一个Service也是一种应用程序组件,它运行在后台以提供某种服务,通常不具有可见的用户界面. 其它的应用程序组件可以启动一个Service,即使在用户切换到另外一个应用程序后,这个Service还是一直会在后台运行. 此外,一个应用程序也可以绑定到一个Service然后使用进程间通信(IPC)方式与Service之间发生交互.

【转】 Service Manager

- - 移动开发 - ITeye博客
android2.3 ---  Service Manager分析. Android系统Binder机制的总管是Service Manager,所有的Server(System Server)都需要向他注册,应用程序需要向其查询相应的服务. 可见其作用是多么的重要,那么我们这里就要重点介绍一下这个.

Web Service的研究

- - CSDN博客系统运维推荐文章
SOA和Web Service. 首先明白SOA和Web Service的关系:. * SOA面向服务架构,用于大型分布式系统的一个概念;. * Web Service是实现SOA的方式之一,不是所有的SOA都是基于Web service的;. * 但Webservice确实为最主流的SOA实现方式,有的人甚至把SOA等同于Webservice.

Android学习之路——7.Service

- - ITeye博客
这两天又学习了Android四大组件之一的Service. (1)Service不是一个单独的Process,除非特别指派了,也不是一个Thread,但也不是运行在Main Thread中. (3)Service的生命周期:. 调用的Context.startService()   oncreate() --> onStartCommand ()--> Service is running --> The service is stopped by its or a client--> onDestroy() --> Service is shut down .

Android Activity与Service通信

- - CSDN博客移动开发推荐文章
一、当Acitivity和Service处于同一个Application和进程时,通过继承Binder类来实现.      当一个Activity绑定到一个Service上时,它负责维护Service实例的引用,允许你对正在运行的Service进行一些方法调用. 比如你后台有一个播放背景音乐的Service,这时就可以用这种方式来进行通信.