• 热门专题

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

作者:阿里聚安全??发布日期:2016-07-12 21:13:16
Tag标签:万安??恶意??
  • 背景:

    随着移动端应用市场数量爆炸式增长,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亿的国内外热点,已覆盖商场、酒店,热点全线接入”。

    图1

    ?

    “魔百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包的应用分析。

    一、主包分析:

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

    ?

    图2

    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目录。下图提权并向系统目录植入恶意文件。

    图3

    ?

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

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

    图4

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

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

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

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

    图5

    ?

    定时任务googlePlayTask

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

    图6

    病毒通过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'})。如下图。

    图7

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

    图8

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

    图9

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

    图10

    “刷榜僵尸”病毒的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。如下图。

    图11

    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字段启动“下载者”。

    图12

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

    图13

    ?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。

    图14

    解密后的数据为:{'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消息意图,完成子包更新加载。

    图15

    五、“下载者”分析

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

    图16

    ?

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

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

    图17

    ?

    5.2 组件AimService

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

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

    图18

    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控制。

    图19

    “下载者”病毒会每隔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函数处理。

    图20

    ?

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

    图21

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

    图22

    ?

    六、 病毒sha1:

    ????? 01b3e575791642278b7decf70f5783ecd638564d ????? 5900fabbe36e71933b3c739ec62ba89ac15f5453 ????? 7ebdd80761813da708bad3325b098dac9fa6e4f5 ????? ea781498268ced8dbb892d02aeaad23f4b87a510 ????? 44e81be6f7242be77582671d6a11de7e33d19aca ????? 34b7b38ce1ccdd899ae14b15dd83241584cee32b ????? 74a55e9ea67d5baf90c1ad231e02f6183195e564 ????? 4e5af777fe28f450a670e789b23fb3669dc6e6b6 ????? d59f97297de38db7f85349c9486413e914ff35b5 ????? b219db613284a3dd0e87edea67da744be59e7732 ????? 9b9109ecfa38d9664084a513392ffc3f41349f02 ????? 2b1da376212e63cb25a19900642c4bbca6e49c01 ????? 18d9546193a354aec0c76d141dd66fbf99181bad ????? 63c20ee3c1e1b39921d2b3d86aade39de738ea9b ????? 5d2a08d7c1f665ea3affa7f9607601ffae387e8b ????? 70105591ea9f2b42534062278f31dbf9788575b3 ? ? ? 34b7b38ce1ccdd899ae14b15dd83241584cee32b ????? 78e9c7e0510b0c28abf28dd46910ab14c56ab4df ????? 88745ecb3114fc0539ca05db388e1c77d3e76109 ????? 885fe0dca39d0fe281aad78cbce2fb73f27f3aea ????? 50bdc0195ed3c6f9909e62d4926f26d312cc39fa

    七、总结

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

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

延伸阅读:

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规