拥有300万安装量的应用是如何恶意推广刷榜的?

拥有300万安装量的应用是如何恶意推广刷榜的?

作者:逆巴、如凌@阿里聚安全

背景:

随着移动端应用市场数量爆炸式增长,App推广和曝光率也越来越难。哪里有需求哪里就有生财之道,自然,App刷榜也就形成了一条产业链,它能够在短期内大幅提高下载量和用户量,进而提高应用的曝光率。

近期,阿里移动安全发现一款名叫“魔百Wi-Fi”应用,该应用官方的一个版本捆绑了多个病毒,目的是对GooglePlay商店应用刷榜和刷大量未知应用安装量。该病毒在该设备锁屏时对设备root,root成功后向系统目录植入“刷榜僵尸”病毒,“刷榜僵尸”对指定应用在GooglePlay商店上恶意刷量,同时还会诱骗用户安装“下载者”病毒,“下载者”病毒会在设备屏幕亮起状态会弹出广告页面,若用户触碰广告页面推广的应用将会自动安装运行。该病毒技术相当成熟,root提权使用最高广的漏洞(CVE-2014-3153
TOAWELROOT、CVE-2015-3636 PINGPONG和PUTUSER等),2015年10月之前的设备全部受影响。我们对恶意应用的证书对比,惊人的发现并非被重打包!

“魔百Wi-Fi”在2015年末首次发布,向用户打着安全Wi-Fi旗号,短短半年用户安装量已高达300万。我们发现它具备专业的应用推广团队,目前已在国内知名渠道发布多篇宣传文章,并与国内多家应用商店合作,下图是”魔百Wifi”前不久的一篇文章,文中还提到“截至目前,魔百WiFi拥有超过2亿的国内外热点,已覆盖商场、酒店,热点全线接入”。

“魔百Wifi”目前最新版本为2.3.18。根据应用证书md5(5919ee638614c467152ab4d07c9cc2dc)排查,发现版本2.3.5~2.3.10被官方插入了恶意代码。值得注意的是,官方发布的2.3.8版本打了两个不同的包,一个增加root提权向系统目录植入“刷榜僵尸”,另外一个包和2.3.10版本应用都捆绑了“下载者”病毒。捆绑了“刷榜僵尸”和“下载者”的“魔百Wifi”,利用自身的用户量对应用刷榜和安装,进而非法牟利。以下是对“魔百Wi-Fi”2.3.8带root包的应用分析。

一、主包分析:

该病毒捆绑了多个子包,以下是各个模块关系图:

1. 解密assets目录下sdk.data、__image数据,解密后sdk.data是一个目录,目录下包括MainJson.txt、dexhostinjection.jar、libDaemonProcess.so, __image是apk文件;

2. 唤起PushDexService、PushJobService完成dexhostinjection.jar加载,以及执行dexhostinjection.jar的com.hostinjectiondex.external.ExternalInterfaces类的startExternalBody方法,子包下载“下载者”病毒update,并诱导用户安装。

3. 开启后台服务利用libgodlikelib.so进行root提权,提权成功将libgodlikelib.so提权工具库写入系统库文件;__image解密的apk文件植入系统目录,取名AndroidDaemonFrame.apk即是“刷榜僵尸”病毒;

二、root提权

该样本是基于开源的RUN_ROOT_SHELL改写而成,可以对2015年10月份之前的全部设备root,主要利用了以下漏洞进行提权:

(1) CVE-2012-4220

影响设备:Android2.3~4.2

使用的QualcommInnovation Center(QuIC)Diagnostics内核模式驱动程序diagchar_core.c在实现上存在整数溢出漏洞,通过向diagchar_ioctl内传递特制的输入,远程攻击者可利用此漏洞执行任意代码或造成拒绝服务。

(2) /dev/graphics/fb0

fb0设备mmap漏洞(触发参数FBIOGET_FSCREENINFO)

(3) /dev/hdcp

hdcp设备mmap漏洞

(4) CVE-2013-6282

影响版本:linux kernel3.2.1、Linux kernel3.2.2、Linux kernel3.2.13

Linux kernel对ARM上的get_user/put_user缺少访问权限检查,本地攻击者可利用此漏洞读写内核内存,获取权限提升。

(5) /dev/msm_acdb

高通设备漏洞

(6) CVE-2013-2595

/dev/msm_camera/config0高通设备MMAP漏洞。

(7) CVE-2013-2094

影响版本:linux kernel3.8.9之前开启了PERF_EVENT的设备

利用该漏洞,通过perf_event_open系统调用,本地用户可以获得系统的最高权限。

(8) CVE-2015-3636

影响设备:2015年9月份之前的设备

pingpong该漏洞是Linux kernel的ping套接字上存在的一个Use-After-Free漏洞。

(9) CVE-2014-3153

影响设备:2014年6月以前的设备

漏洞利用了futex_requeue、futex_lock_pi、futex_wait_requeue_pi三个函数存在的RELOCK漏洞和REQUEUE漏洞,造成了对内核栈上的数据修改。

对设备成功提权后,会将解密的__image植入/system/priv-app目录并命名为AndroidDaemonFrame.apk,将libgodlikelib.so提权工具库植入/system/lib目录。下图提权并向系统目录植入恶意文件。

三、AndroidDaemonFrame.apk“刷榜僵尸”分析

AndroidDaemonFrame应用是主包解密后植入到系统目录的应用,该应用是一款转用于恶意刷榜的病毒,利用用户设备账户信息作为刷榜僵尸,完成对C&C控制端指定应用的恶意刷榜。“刷榜僵尸”工作流程如下:

1.“刷榜僵尸”C&C控制端配置keywords和package_name。

2.“刷榜僵尸”向googleplay发起认证,通过获取的设备googleplay账号和密码,或authtoken。

3. 模拟googleplay协议对目标应用搜索、浏览和下载。

刷榜僵尸病毒在设备启动、屏幕解锁和网络改变触发BootReceiver组件执行,随后启动核心服务DispatcherService,该服务创建updateTask和googlePlayTask定时任务。

定时任务googlePlayTask

googlePlayTask每3小时执行一次,对配置文件里的keywords和package_name指定的应用从GooglePlay爬取。下图root提权重定向设备账户文件。

病毒通过GooglePlay验证有两种方式,一使用authtoken,全称authentication token,有了它病毒无须每次操作都向google服务器发送密码, 执行语句:sql.rawQuery("select type,authtoken from
authtokens where type like \‘com.android.vending%\‘ and accounts_id="+ accounts_id, null);二是获取google账户name、password和_id值。执行语句:sql.rawQuery("select * from accounts where type = ?", new String []{"com.google"})。如下图。

成功与google play服务器连接后,通过配置文件提供的keywords和package_name完成应用搜索、浏览和下载

当前配置文件如下图,发现病毒正在对package_name是com.felink.shine的应用刷量。

病毒完全模拟google play下载协议,包括设置cookie(AndroidId + authToken)、User-agent(AndroidDownloadManager)等,GooglePlay应用下载请求流程大致如下图(https://github.com/egirault/googleplay-api/issues/30):

“刷榜僵尸”病毒的GooglePlayRequester工具类模拟了以上过程,实现google play商店应用下载。

四、子包dexhostinjection.jar

子包dexhostinjection.jar由assets目录下sdk_data文件解密得到,完成了以下几个功能:

4.1 服务保活

解析主包传递的000(m_pkgname)、001(m_class_name)、002(m_sdk_data)、003(libDaemonProcess)、004(1.apk)参数,利用libDaemonProcess库服务保活,在底层执行am startservice启动主包传递的service,也就是主包中的com.hostinjectionmain.control.DexService。如下图。

4.2 下载“下载者”病毒

主包004参数传递的应用名,并拷贝到设备sdcard/database目录命名为5supdate.apk,同时配置“下载者”病毒相关文件,存放目录在sdcard/database目录下。包括actiondown记录包名以及启动服务名、actionsuk应用最近一次运行时间、install.ab服务器推广应用安装情况、mychannel应用渠道,这些文件数据全部都AES加密存放。Actiondown记录下载者病毒包名以及入口服务。

actiondown:{"downLoadPackageName":"com.android.ucgmap","downLoadVersionKey":1,"downLoadStartMethod":"com.android.ucgmap\/com.android.ucgmap.AimService”}

4.3 诱骗用户安装,并启动“下载者”病毒

子包动态注册监听android.intent.action.PACKAGE_ADDED、android.intent.action.USER_PRESENT消息广播。处理包安装完毕消息,若此次安装包名是actiondown里downLoadPackageName字段记录的“下载者”病毒,读取downLoadStartMethod字段启动“下载者”。

使用两种策略诱骗用户安装“下载者”病毒(其应用名为update),一默认模式以应用更新诱骗用户点击安装;二由服务器设置,弹出系统更新诱骗用户点击安装。

4.4 子包自更新

子包的连接并不是直接暴露的,而是做了两层跳板。配置下一跳转访问地址http://dispatch.smartchoiceads.com/v2.1/2000,参数设备aid、imsi、gaid、mac(wifi),request和response数据全部AES加密。服务端会根据上传的设备信息返回次设备对应的url地址,随后设备会使用该地址下载服务端推广的应用。下图访问url_1(http://dispatch.smartchoiceads.com/v2.1/2000)返回加密的数据,经AES解密提取data值获取当前设备的对应访问的服务器地址url_2。

解密后的数据为:{"upstream":"http:\/\/sdk.smartchoiceads.com"},这样获取了下一跳板的地址。 访问跳板地址,下载、加载和运行最新版子包。 访问服务器配置的url_2,服务器同样返回AES加密数据,解密后的数据如下:

{"solib_name":"libDaemonProcess.so","download_url":"http:\/\/u.smartchoiceads.com\/sdk\/HostDex_20160623163035.jar","classname":

"com.hostinjectiondex.external.ExternalInterfaces","filename":"dexhostinjection.jar","start_method":

"startExternalBody","solib_url":"http:\/\/u.smartchoiceads.com\/sdk\/libDaemonProcess_20160520175142.so","stop_method":

"stopExternalBody","request_interval":"1800","version":"8"}。

根据解密获取的字段,下载新版本的dexhostinjection.jar包,以及lib库,目前服务器最新版本dexhostinjection_8.jar。子包通过向主包的DexService发送com.injection.action.RELOAD_DEX消息意图,完成子包更新加载。

五、“下载者”分析

子包dexhostinject.jar下载的5supdate.apk存放位置在sdcard/database目录下,既是“下载者”病毒安装包,通过应用更新或系统更新诱骗用户安装,安装后dexhostinject.jar启动“下载者”导出服务AimService。“下载者”病毒工作流程图如下:

5.1 ChatActivity组件,强制激活设备管理

dexhostinject.jar启动应用的参数会唤起ChatActivity组件运行。ChatActivity进行设备管理激活,一旦用户激活设备管理,应用将很难被卸载。用户在取消截获设备管理时,AdminReciver会进行锁屏操作并跳转到桌面。

5.2 组件AimService

1.加载target.jar子包,保护“下载者”核心服务AimService不死

2.启动ApsService,组件ApsService是云端推送服务,注册时钟广播每10分钟发送广播转交给ApsAdReceiver处理

3.onStartCommand处理消息意图,包括:

a)com.injection.action.RELOAD_DEX,更新target.jar子包;

b)com.injection.action.stopJobService,停止JobScheduler并进程自杀;

c)-a com.android.startadmin --es isadmin true,唤起ChatActivity组件,进行激活设备管理。该意图消息是dexhostinject.jar发送给AimService的。

5.3“下载者”应用推送分析

应用下载、安装和启动由ApsService和ApsAdReceiver联合完成。当update应用处于后台运行,并且屏幕处于亮起状态,“下载者”向C&C服务器发起请求,下图访问C&C控制。

“下载者”病毒会每隔10分钟访问http://www.gamecpi.com/tapcash/com.android.ucgmap/control.json,返回数据结构如下。

{

"isOpened":true,

"isOpenHideNativeAd":true,

"fid":"",

"fnid":"558734714274962_641985812616518",

"aid":"ca-app-pub-2499265864844132/2514086206",

"bnid":660078,

"solaid":5011,

"soltid":1000171,

"ad_interval":10,

"no_ad_start":0,

"no_ad_end":6

}

该数据结构信息是当前推广应用的信息,随后通过消息handler转交给startAdWork函数处理。

每隔120分钟请求控制端下载推广应用,http://www.gamescpa.com/SDKManager/cpa/downloadlink.php?country=cn&packageName=com.android.ucgmap,C&C控制端返回推送的应用信息,包括packgae(应用包名)、url(应用下载链接)、size(应用大小),返回数据转交给消息handler处理,进行应用下载安装。

再配合之前注册的时钟广播ApsAdReceiver,完美完成推广应用启动。

六、 病毒sha1:

01b3e575791642278b7decf70f5783ecd638564d

5900fabbe36e71933b3c739ec62ba89ac15f5453

7ebdd80761813da708bad3325b098dac9fa6e4f5

ea781498268ced8dbb892d02aeaad23f4b87a510

44e81be6f7242be77582671d6a11de7e33d19aca

34b7b38ce1ccdd899ae14b15dd83241584cee32b

74a55e9ea67d5baf90c1ad231e02f6183195e564

4e5af777fe28f450a670e789b23fb3669dc6e6b6

d59f97297de38db7f85349c9486413e914ff35b5

b219db613284a3dd0e87edea67da744be59e7732

9b9109ecfa38d9664084a513392ffc3f41349f02

2b1da376212e63cb25a19900642c4bbca6e49c01

18d9546193a354aec0c76d141dd66fbf99181bad

63c20ee3c1e1b39921d2b3d86aade39de738ea9b

5d2a08d7c1f665ea3affa7f9607601ffae387e8b

70105591ea9f2b42534062278f31dbf9788575b3

34b7b38ce1ccdd899ae14b15dd83241584cee32b

78e9c7e0510b0c28abf28dd46910ab14c56ab4df

88745ecb3114fc0539ca05db388e1c77d3e76109

885fe0dca39d0fe281aad78cbce2fb73f27f3aea

50bdc0195ed3c6f9909e62d4926f26d312cc39fa

七、总结

该病毒应用通过版本更新,进行恶意版本下发,在完成“刷榜僵尸”和“下载者”病毒后又利用版本更新替换成线上安全版本,如此在各大应用市场上期存活。阿里移动安全同学建议,用户下载此类App请认准大厂商品牌应用;谨慎点击软件内的推送广告;来源不明的应用不要随意点击;请定期使用阿里钱盾等手机安全软件查杀病毒。

作者:逆巴、如凌@阿里聚安全,更多技术文章,请访问阿里聚安全博客

时间: 2024-11-10 00:31:09

拥有300万安装量的应用是如何恶意推广刷榜的?的相关文章

估值5亿的光圈直播倒闭,留下300万欠薪和失联的CEO

去年战事激烈的直播行业,已经出现了首批阵亡名单.相比起两军对垒.战死沙场的轰轰烈烈,光圈的突然倒下多少显得莫名其妙.但至少,"死亡"结果已经可以确定. 光圈直播的官网已经无法正常访问,在百度搜索中输入"光圈直播"作为关键词,相关搜索内容都是:撤资.欠薪.对于这样的结果,创始人兼 CEO 张轶不想过多回应,只回复:创业维艰,一言难尽. 所有战败的军队在投降或转移前都要销毁战略资料,清点值钱的装备,以便最大限度的减少损失.在农历春节之前,被停发薪水半年后,光圈的员工在未

找钢网的13点创业经 曾一夜花光300万借款

(上图为找钢网联合创始人兼高级副总裁饶慧钢) 在2016年5月27日由"大宗商品电商圈"和"B2B内参"举办的2016全国大宗商品B2B电商高峰论坛上,B2B电商独角兽找钢网联合创始人兼高级副总裁饶慧钢介绍了找钢网在过去4年里的创业经历,其中很多都是首次对外披露. 2016年1月15日,找钢网宣布获得新一轮11亿元的战略融资,这是迄今为止B2B电商行业里规模最大的单笔融资.资料显示,2015年找钢网平台总交易量已超过3200万吨,销售额达180余亿元.2015年第4

女大学生勇敢建设刷单刷信誉源码平台网站创业 一年成功赚到300万!

题外话:在那一刻,我仿佛看见整个世界崩溃在我的面前.废墟中那一片片的瓦砖都刻有鲜活的记忆,现在安静地贴在大地上,即便我有多小心保持行走的安静,终究会发现,自己只是一个被记忆放逐的人.(以前很喜欢写情感的文字.现在长大了,改变了,成熟了,知道该努力了, 奋斗了,拼搏了.明白了那些离我越来越远,况且怀念,不是我这个年龄该做的事了,因为我们这个世界,从不会给一个伤心的落伍者颁发奖牌.) 每日混迹于淘宝,数据,推广,活动,论坛.到处都有我忙碌的身影.为的就是有出头之日.终有一天,飞上枝头,赚足够的钱,带

300万PV的ASP.NET网站使用阿里云的配置建议

300万PV的ASP.NET网站使用阿里云的配置建议 @老牛吃肉在博文“今天的访问高峰,扛过去了”的评论中询问了这样一个问题: 你好,站长,本公司正在考虑用阿里云.用途:互联网网站,主要站点:asp.net开发目前的考虑情况:访问ip 15-20万,pv300万.我想请问一下,当前的博客园的日均ip和pv,阿里云服务器有几台,每台的配置如何(包含带宽),还有稳定性如何(这是我们考虑的一个很大因素),价格如何. 另外,相比较托管服务器,阿里云的优势和劣势如何.谢谢,继续资料,望尽早回复,再次感谢

Java 线程池 +生产者消费者+MySQL读取300 万条数据

1.1需求 数据库300 万条用户数据 ,遍历获取所有用户, 各种组合关联, 获取到一个新的json ,存到redis 上. 1.2 难点 数据库比较多, 不可能单线程查询所有的数据到内存. 1.3解决办法 多线程读取, 生产者 每次获取200 条数据, 消费者去消费.(这里 主要是根据MySQL分页去获取下一个200 条数据) 1.4 代码 1.4.1 调用方法 /** * 线程启动 */ public void update() { //redis操作类 HashRedisUtil redi

阿里与苏宁着眼未来300万亿的社零,京东已不值一提

昨日,阿里与苏宁在京举行联合发布会,宣布将与品牌巨头们结成王者联盟,未来3年将投入100亿用于进行品牌激能及供应链重构,并联合推出围绕品牌的"万亿智造计划"和"三体贯通"战略.张勇在会上表示希望能推动整个社会零售业从30万亿走向300万亿. 京东不再是对手,阿里与苏宁目标直指300万亿的社零 有些舆论愿意认为,在618之前的6月1日,阿里和苏宁在京联举行如此大规模的发布会是在展示肌肉向京东示威,但其实对阿里而言这么做完全没有必要.可能这次发布会的时机选择上有些敏感,

《无尽之剑》小组免费发布素材资源 价值超300万美元(转)

日前,作为史诗经典完结篇的<无尽之剑3>迎来了首次限免,不仅如此,开发商还宣布这一游戏的素材包将作为虚幻引擎商店中的资源,免费提供给开发者. 由开发商Chair Entertainment开发的<无尽之剑>三部曲一直被众多玩家称为“精彩绝伦的游戏史诗”,日前,作为史诗经典完结篇的<无尽之剑3>迎来了首次限免.不仅如此,开发商还宣布这一游戏的素材包将作为虚幻引擎商店中的资源,免费提供给开发者.这么给力的两个福利真是让我们感受到了Chair Entertainment满满的

通过存储过程,插入300万条数据的一点思考?

1.今天凌晨1点多开始插入数据,到现在为止,一共插入的数据大小,大约是30M数据,但是总量在190M数据左右 2.中间我去睡觉,电脑可能也是处于睡眠状态. 3.电脑的性能也很大程度决定了这个处理数据的速度(比如,位宽,是否支持超频等等吧.) 4.灵活处理问题吧,300万条数据太多,可以选择3万条数据处理,计时处理,我们可以选择3000条数据处理,做实验就是要一个模拟环境 5.千万不要死板教条, 6.及时回顾之前的知识点,核心知识点,经常性回顾.(一定会有新收获的) 7.注意身体,身体是革命的本钱

基于物联网为工业集成商提供服务,爱投斯年盈利300万

物联网是一个基于互联网.电信网等信息承载体,将各种信息传感设备和互联网相结合形成一个巨大的网络,实现任何时间任何地点人.物.机的互联互通.2005 年在突尼斯举行的信息社会世界峰会上,国际电信联盟发布了<ITU 互联网报告 2005:物联网>,正式提出了"物联网"的概念.报告指出,无所不在的"物联网"通信时代即将来临,在未来我们可以同任何物体进行交互,清晰准确知道设备的运行情况. <strong>为集成商服务的工业物联网平台</stro