一、 前言

VirtualApp(以下称VA)是一个App虚拟化引擎(简称VA)。VirtualApp创建了一个虚拟空间,你可以在虚拟空间内任意的安装、启动和卸载APK,这一切都与外部隔离,如同一个沙盒。运行在VA中的APK无需在Android系统中安装即可运行,也就是我们熟知的多开应用。

VA免安装运行APK的特性使得VA内应用与VA相比具有不同的应用特征,这使得VA可用于免杀。此外,VA对被多开应用有较大权限,可能构成安全风险。

本报告首先简要介绍VA的多开实现原理,之后分析目前在灰色产业的应用,针对在免杀的应用,安全云对此的应对,并给出色情应用作为例子。另一方面,通过对样本分析,展示了VA对于安装在其内应用的高度控制能力,及其带来的安全风险。最后对本报告进行总结。

二、 VirtualApp原理

Android应用启动Activity时,无论通过何种API调用,最终会调用到ActivityManager.startActivity()方法。该调用为远程Binder服务(加速该调用,Android应用会先在本地进程查找Binder服务缓存,如果找到,则直接调用。VA介入了该调用过程,通过以下方式:

1. 替换本地的ActivityManagerServise Binder服务为VA构造的代理对象,以接管该调用。这一步通过反射实现。

2. 接管后,当调用startActivity启动多开应用时,VA修改Intent中的Activity为VA中己声明的占位Activity。这一步的目的是绕过Android无法启动未在AndroidManifest.xml中声明Activity的限制。

3. 在被多开应用进程启动后,增加ActivityThread.mH.mCallback的消息处理回调。这一步接管了多开应用主线程的消息回调。

在以上修改的基础上,多开应用的Activity启动过程可分为以下两步骤:

步骤一 修改Activity为己声明的StubActivity

步骤二 mCallback从Intent中恢复Acitivty信息

AMS:Android系统的ActivityManagerService,是管理Activity的系统服务

VAMS:VA用于管理多开应用Activity的服务,大量API名称与AMS雷同。

VApp:被多开应用所在的进程,该进程实际为VA派生的进程。

由图可知,VA在AMS和VApp中通过增加VAMS对启动Intent进行了修改,实现了对Android系统的欺骗,而当应用进程启动后,还原Activity信息。通过自定义Classloader令使得Android加载并构造了未在VA的AndroidManifest.xml中声明的Activity。

以上是启动过程的简化描述,实际上,VA对大量Android 系统API进行了Hook,这使得运行在其中的应用在VA的控制下,为VA的应用带来可能性。

三、 在灰色产业的应用

3.1 免杀

VA等多开工具将Android系统与VA内的应用隔离,使得应用的静态特征被掩盖,目前己有恶意应用使用VA对自身重打包,重打包后的应用包名、软件名与原应用不同,从而实现免杀。安全云使用动态检测关联恶意应用和VA的方式应对该免杀技术。

免杀的常见做法是:恶意应用加密后打包在VA内,由VA在运行时解密APK,将恶意应用的APK安装到VA内并运行。

经过打包后,VA用的包名、证书可以与恶意应用不同,资源文件、二进制库文件与恶意应用相互独立。基于包名、证书等特征维度的静态检测方式的准确性受到影响。

如图,当静态引擎对VA应用检测时,获得的应用信息(包名、证书、代码等)是VA的信息,没有恶意特征。而当VA运行时,可以解密恶意应用APK,通过反射等技术欺骗Android系统运行未安装在系统中的APK,实现了免杀。

传统静态检测方式

针对该免杀方式,安全云的APK动态检测实现了VA内应用APK的自动化提取,可将VA母包与恶意应用APK子包进行关联查杀。

如图,动态引擎安装并启动APK,当识别出是VA应用时,提取出VA内的己解密的子包,对提取的子包进行检测。根据子包检测结果综合判定母包安全性,并对母包的安全风险进行标记查杀。

动态检测查杀示意图

免杀案例 色情应用

2017年8月以来,安全云监测到部分色情应用使用VA的对自身打包,以达到绕过安全检测的目的。这些应用使用了随机的包名和软件名,并且均对恶意应用子包进行了加密。部分包名如表所示:

从动态检测引擎提取的子包看,一个色情应用子包对应的带VA壳的母包(SHA1维度)数量从1到529不等。27个色情APK共对应1464个VA母包。

该类应用会以各种理由诱导用户升到更高等级的VIP不断支付:

读取用户短信收件箱:

并且可以通过远程服务器控制应用是否运行,控制支付宝和微信支付的开启以逃避支付平台打击:

目前该类色情应用的VA母包和子包均己被标记为灰色。

3.2 重打包

相较于以往反编译后插入代码进行打包编译的方式,使用VA进行重打包具有以下优点:

1. 不需要对原应用进行反编译修改。

由于VA是多开工具,这一优点是显然的。传统的重打包方式是对应用进行反编译成Smali代码,对Application类或Activity进行修改,插入广告展示等代码,再重编译打包回去。而VA重打包的应用只要让应用运行在VA内即可。

2. 有效规避重打包检测

应用可能通过检测签名、包名等方式检查是否被修改。而VA对Android系统的API进行了Hook,其中包括PackageManager的API,这些API用于获得包括签名在内的软件包信息。

3. 通用性强

同样的VA代码未经修改就可打包众多应用,可批量制造多开应用。

4. 功能众多

由于应用运行在VA进程内,VA代码具有与应用等同的权限,从下面的例子可知VA能做到包括但不限于:模拟点击、截图、在Activity创建时插入广告。以

以某一类重打包样本为例,应用被重打包后启动界面增加一个插屏广告,如图:

点击插屏广告后,将下载对应的应用(图中为“斗地主”及”炸金花”)并安装到VA中,并在桌面添加图标。区别于其他应用推广方式,此种方式安装的应用不必通过Android的包管理器进行安装,必要时也可静默安装。

除了增加启动时的插屏广告,该应用还有以下行为

1. 检查反病毒软件

检查手机上是否安装了反病毒软件,如果存在,则不连接服务器获取命令。

反病毒软件列表由服务器下发:

内容如下:

主流的手机安全应用如30、QQ手机管家、LE安全大师等均在该列表中。

如果存在,则不连接服务器读取命令脚本:

2. 启动应用

可由服务器下发指令控制运行VA内的指定应用:

3. 模拟点击

可对运行在VA内的应用进行点击。

1) 当VA内应用启动时注册Broadcast Receiver:

2) 接收服务器脚本,发送广播

3) 执行点击脚本

(1) 获得DecorViews,该View为Android应用的底层View。因为被多开的应用跑在VA内,因此VA有权限对应用类进行操作。

(2) 对(1)获得的View,调用View.dispatchTouchEvent()模拟触摸操作,支持的操作有,ACTION_DOWN(按下)、ACTION_MOVE(按下和抬起之间的操作)、ACTION_UP(抬起)。

(3) 值得注意的是,只有当用户不存在(未点亮屏幕,未锁屏)时,服务器的任务才会执行:

4. 部分版本可对应用界面进行截图

实现方式与模拟触摸操作类似,先获得DecorView,之后调用Android系统提供的方法进行截屏:

对广播进行响应,并保存截图:

相应的上传截图功能:

5. 在Activity创建时显示广告

VA对Activity的生命周期函数进行了Hook,因此可以方便地在Activity调用onCreate函数时显示广告:

6. 上传设备信息

包括设备的型号、Android Id、分辨率等信息。

7. 上传己安装应用列表

3.3 免Root Hook

VA可在应用Application类创建时执行代码,这些代码先于应用执行。通过结合Hook框架(如YAHFA、AndFix)、VA可以方便对应用进行Hook,其Hook能力与Xposed框架等同。与Xposed框架比较如表所示:

相较于Xposed框架,通过此方式Hook具有如下优点:

1. 不需要Root权限

2. 不需要重启系统就可以重新加载Hook代码,重启应用即可

3. 可与Native Hook框架结合,Hook二进制库。实际上VA本身己使用Native Hook框架对应用的IO操作进行了重定向

VA的免Root Hook能力对于被多开应用是一种安全威胁。VA可做到的包括但不限于:

1. Hook密码相关函数,截取用户输入的密码

2. Hook网络通信函数,监听网络通信

3. Hook Android API。伪造Android设备信息、GPS定位记录等。

下面分析某微信抢红包应用,以展示VA免Root Hook的能力。

该样本是一个微信抢红包应用。目前流行的抢红包功能实现上有两种方案,一种是通过Android AccessiblityServices监测用户窗口,当红包关键字出现时,点击对应的View对象;一种是使用Xposed框架对红包相关的函数进行Hook,这种方案需要Root权限,但是不必打开微信界面即可抢红包。此应用抢红包也使用Hook红包相关函数的方式,但是不需要Root。

1. 注入代码

VA实现了插件化的注入模块,其中一个注入模块为FixBug_AppInstrumentation,该模块替换了ActivityThread的mInstrumentation对象:

mInstrumentation对象会在应用Application类及Activity类创建时被执行相应的回调,该应用了修改了其中一个回调callApplicationOnCreate,在Application执行了红包代码:

其中LuckyMoneyDispatcher为红包功能模块。

函数LuckyMoneyDispatcher.andFixForLuckMoney()实现了方法替换:

使用开源热修补框架AndFix替换com.tencent.mm.booter.notification.b.a()为LuckMoneyMethProxy.a(),并将被替换函数保存为LuckMoneyMethProxy.aOriginal()。

2. 模拟点击红包消息

LuckMoneyMethProxy.a()为替换后的函数,当微信接收到消息时被调用。

函数先判断消息类型,当确定是红包(436207665)后,解析消息,构造Intent并发送。这一步模拟了点击红包消息时的弹窗。

3. 模拟拆开红包

上一步的弹窗是一个Activity,当弹出时(对应Activity的onResume),mInstrumentation将被回调:

onLuckyMoneyResume根据版本号确定要反射调用的“拆开红包按钮”(包括BUTTON_OPEN、OBJECT_OPEN、METHOD_OPEN)

最终由MonitorHandler反射调用拆开红包函数:

四、 总结

VirtualApp作为开源的多开应用框架,可以被任何人使用。它在Android系统和被多开应用间增加了中间层。这带来了两方面问题,一方面,VA可掩盖应用的静态特征(包名、证书、资源文件、代码等),使得单纯的静态检测方法失效,应用具有了一定免杀的能力。同一个恶意应用可以有众多VA母包,且母包不包含恶意特征,这给检测引擎识别恶意应用带来了难度。安全云通过动态检测在VA母包运行时动态提取VA应用中的子包,并结合子包的恶意情况对母包的恶意情况进行综合判定,可有效对恶意应用的VA母包进行标记查杀。

另一方面,由于多开应用运行在VA中,VA对被多开应用具有不弱于Root的权限,可方便有效介入应用运行流程。例如:当应用运行时展示广告,对多开应用进行截屏、模拟点击。更进一步的,VA可通过Hook修改应用的执行流程,获得应用的隐私数据,包括但不限于密码、与服务器的数据通信、照片等。应用应当对运行在VA或其他多开应用内的带来的安全风险有所了解并加以防范,特别是金融、通讯类应用。

安全云己对相关VA应用进行监测,并及时对新型安全威胁作出响应。

VirtualApp技术黑产利用研究报告的更多相关文章

  1. 深度技术Win7系统利用diskpart命令实现硬盘分区的技巧

    转自:http://www.xitongcheng.com/jiaocheng/win7_article_2491.html 1. 深度技术Win7系统利用diskpart命令实现硬盘分区的技巧分享给 ...

  2. 新型赌博黑产攻击肆虐网吧: LOL博彩引流+棋牌盗号

    https://mp.weixin.qq.com/s/BxnovV6jKqPkYfHEzjd_FA 新型赌博黑产攻击肆虐网吧: LOL博彩引流+棋牌盗号 看雪学院 2019-04-21

  3. [技术博客] 利用SharedPreferences来实现登录状态的记忆功能

    [技术博客] 利用SharedPreferences来实现登录状态的记忆功能 一.SharedPreferences简介 SharedPreferences是Android平台上一个轻量级的存储辅助类 ...

  4. 技术人如何利用 github+Jekyll ,搭建一个独立免费的技术博客

    上次有人留言说,技术博客是程序员的标配,但据我所知绝大部分技术同学到现在仍然没有自己的技术博客.原因有很多,有的是懒的写,有的是怕写不好,还有的是一直想憋个大招,幻想做到完美再发出来,结果一直胎死腹中 ...

  5. 搜索广告与广告网络Demand技术-探索与利用

    探索与利用(Explore and exploit) 点击率预测中还有一个重要的问题,就是探索与利用,它在工程中解决的并不好,我这章把现在论文中的常见的几种方法介绍一下.探索与利用它是所有互联网应用都 ...

  6. [技术博客] 利用Vagrant+virtualbox在windows下进行linux开发

    目录 加速box安装的方法 root账户登录 换源教程 安装rvm 访问rails server RubyMine连接虚拟机上的解释器 作者:庄廓然 在windows下进行linux开发:利用Vagr ...

  7. 警方破获超大DDoS黑产案,20万个僵尸网络运营商被抓

    中国警方已镇压并逮捕了一个犯罪集团,该集团经营着一个由200,000多个受感染网站构成的僵尸网络,这些网站被用来发起DDoS攻击. 这是中国当局针对兴旺的本地DDoS租用场景进行的首次重大镇压,最大的 ...

  8. Let's Encrypt 免费通配符 SSL 证书申请教程——但是也需要email,域名所有权等,如果是黑产用的话会这样用吗?会不会暴露自己身份???

    Let's Encrypt 免费通配符 SSL 证书申请教程 from:https://blog.csdn.net/English0523/article/details/79608464 2018 ...

  9. 使用Networkx进行图的相关计算——黑产集团挖掘,我靠,可以做dns ddos慢速攻击检测啊

    # -*- coding: utf-8 -*- import networkx as nx import matplotlib.pyplot as plt iplist={} goodiplist={ ...

随机推荐

  1. Notepad++ WebEdit插件

    虽然PHP的IDE有很多,但是,我还是比较喜欢用Notepad++这款编辑器,因为比较轻量级,而且用起来比较顺手. 但是最近在改别人写的代码的时候,经常要在选定的php前后插入<?php  ?& ...

  2. 如何通过 Vue-Cli3 - Vuex 完成一个 TodoList

    昨天大概粗糙的了解了一下Vue的概况之后,并没有从框架.语法的细节来进一步学习.那今天通过一个简单的实例来继续完善一下Vue这方面的空白,用一些看得见的效果摸的着的代码在不断完成小目标的过程中慢慢消化 ...

  3. 九度oj 题目1358:陈博的平均主义

    题目描述: 在JOBDU团队里,陈博是最讲平均主义的人了,但并不是像梁山好汉那样能够做到有钱同花,有肉同吃,毕竟,他还是被家里的领导管着的……陈博的平均主义,就只能体现在他对数字的喜好了.陈博特别喜欢 ...

  4. struts拦截器详解

    拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制. 说到拦截器interceptor,就会想到过滤器filter: 过滤器f ...

  5. volatile的用法

    在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized ...

  6. 刷题总结——怪题(ssoj费用流)

    题目: 题目描述 给出一个长度为 n 的整数序列 hi ,现在要通过一些操作将这个序列修改为单调不降序列,即  hi≤hi+1 . 可以用的操作有 m 种,第 i 种操作可以通过支付 ci 的代价将一 ...

  7. NIO系列1:框架拆解

    最近一年用NIO写了不少网络程序,也研究了一些开源NIO网络框架netty.mina等,总结了一下NIO的架构特点. 无论是netty还是mina它们都在java原生NIO的基础上进行了完善的封装,虽 ...

  8. scrapy之Pipeline

    官方文档:https://docs.scrapy.org/en/latest/topics/item-pipeline.html 激活pipeline,需要在settings里配置,然而这里配置的pi ...

  9. 使用UltraEdit 替换解决---文字中含有逗号的文件,如何把逗号自动转换成为:回车换行呢?

    实际工作中有时经常遇到一个问题: 一行文字中含有逗号,如何把逗号自动转换成为:回车换行呢? 普遍存在的问题,用Ultredit中^r^n(回车换行)也可以完成.提供大家参考. 王乐,李宏宇,张志鹏,刘 ...

  10. Discrete Logging(poj 2417)

    高次同余方程.   BL == N (mod P)求解最小的L. /* A^x=B(mod C) 设x=i*m-j(其中m=ceil(sqrt C)) 并且i∈[1,m],j∈[0,m],以保证x能取 ...