PreAMo:Google Play中的广告点击活动
概述
Checkpoint安全研究人员发现了一系列针对广告商进行欺诈活动的应用程序。其中有一个恶意软件PreAMo,可以通过点击从三家广告商的banner来模拟用户,这三家广告上分别是Presage, Admob和Mopub。
6款恶意软件的下载量一共超过9000万次,目前Google已经从Google Play中移除了受感染的应用程序。
图1 – RAM Master Google Play信息
PreAMo
PreAMo是由三部分不同的代码组成的,每部分代码负责处理一个广告商。因为这三块代码是分布在不同的package中的,触发方式不同,而且是没有联系的。将这三部分代码连接在一起的是都与同一个C2服务器进行通信,该C2服务器被用来发送统计数据和接收配置数据。这三部分代码的行为也是类似的,他们在广告网络加载的banner上注册了一个监听器,一旦banner加载,PreAMo就使用Android框架 ‘MotionEvent’类来模拟点击。
但由于广告库在实现过程中存在差异,PreAMo背后的攻击者使用不同的方法来处理每个广告商。
1. Ad Agency #1 – Admob:
‘PreAMo’在com.google.android.gms.ads.internal.tools.ConfigProvider的manifest中进行了注册,目的就是在host应用启动时初始化AdMobFixer类。该类会用计时器来注册一个动态接收器来周期性地从C2服务器检查配置更新。
图2 – 接收器注册
‘PreAMo’用两种不同的方法来检测是否展示了广告banner,第一种方法是使用反射来使其中断为内部结构,并安装回调,第二张方法是基于活动生命周期回调的。
图3 – 检测方法 #1
图4 – 检测方法#2
每当应用中有新活动创建时安卓系统就会通知监听器。PreAMo会从顶级的窗口(Décor)开始递归地搜索特定的Ad View
图5 –OnAdActiviy的实现
成功检测到banner后,PreAMo会检查以下条件集:
· 用户是否organic。该标记是com.DianXinOS库的一部分,是根据INSTALL_REFERRER的监听器接收的intent设置的。如果内容含有organic这个词,表明应用是在Google Play中搜索后安装的,该值就会设置为True,否则设置为false。只有当值为False时,Autoclicking才工作。但在PreAMo的一些版本中,该值是从C2服务器接收的。
· 用户还没有点击广告banner。
· 点击的间隔和每日点击的最大量低于预定义的限制。
· 检查随机值。
如果上面的条件都满足, PreAMo就在banner上模拟点击。为了达到这个目的,恶意软件会从文件assets/xdd读取预定义的坐标位置,在有些情况中,这是基于banner的大小的,PreAMo可以使用随机生成的坐标。
图6 – PreAMo执行的条件检查
图7 – 从xdd读取的预决定的坐标
图8 – 使用随机生成的坐标
Ad Agency #2 – Presage:
这部分代码的执行是来源于com.DianXinOS.OService类。在调用onStartCommand的方法中,PreAMo会开始一个新的线程来周期性地显示来自Presage (ogury)库的插播广告。
在线程中,恶意软件会与C2服务器进行通信,并从URL hxxps://res.mnexuscdn[.]com/dp/0845e0150308bcdf5ef03ba8295075f9来加载配置数据。
图9 – 线程创建
图10 – Ad策略(配置数据)
PreAMo会接收配置文件并检查ads (min_i_sec_limit)和每日最大ads (max_p_ad)的周期。在验证成功后,PreAMo会从Presage显示与广告有关的活动。
图11 – 检查广告配置
图12 – 插播广告
除了从Presage显示广告外,PreAMo还会为主机应用注册自己的活动管理器,再实现以下的方法(图13)并替换默认的Presage web客户端来使用随机生成的坐标来点击banner(图14)。
图13 – Presage的再实现方法
图14 – 随机生成的坐标
Ad Agency #3 – Mopub:
当PreAMo处理Mopub时,初始化的部分会位于内容提供商中。提供者位于com.android.stats.tools.InitProvider类中,在主机应用开始时,也就是OnCreate方法中,就会执行代码并为计时器的配置。
计时器会周期性地发送请求到URL集,检查配置更新:
· hxxps://res.mnexuscdn[.]com/dp/a79a2d1b9a8252fcc6917d6c46211199’
· hxxps://res.mnexuscdn[.]com/dp/75d109e54ce75b05064374ae0b77a359’
· hxxps://res.mnexuscdn[.]com/dp/dd87a43132f3ce443d1e50b29019de3b’
· hxxps://res.mnexuscdn[.]com/dp/8c7d12b8c28d8e573439c59627df9092’
与前面的部分类似,配置包括不同的延迟和与点击算法相关的条件。因为Mopub库是开源的,ProAMo开源注入代码,融合到库的源代码中。比如,使用方法com.mopub.common.AdUrlGenerator中的伪造的package信息。
图15 – 伪造的package信息
同样的方式,攻击者会修改Mraid控制器的代码来处理WebView组件中打开的链接。控制器含有实现MraidListener接口的对象,其中含有JS触发的事件的回调。其中一个回调方法叫做onOpen,开源对JS中打开的URL做出反应。
图16 –伪造的主机信息
图17 – MraidController实现
onOpen的实现叫做class URLHandler,负责处理scheme对应的URL。PreAMo背后的攻击者对这一过程做了修改。如果URL的处理正确,而且是一个HTML页面,就模拟点击。
图18 – Clicking Imitation #1
HTMLWebViewClient做的事情也是类似的,其中含有一个方法shouldOverrideUrlLoading,会在URL在当前WebView中加载的时候给主机应用一个机会进行控制。Mopub就用它来检查如何处理要在WebView中加载的URL,但恶意软件开发者会注入自己的代码来在要加载的页面上执行点击。天空彩
图19 – Click imitation #2
C2服务器
C2服务器域名res.mnexuscdn.com是过匿名服务注册的,根据passive total的数据表明最早是2018年12月12日出现的。
图20 –RiskIQ的WhoIS数据
从AdMob点击接收配置数据:
· https://res.mnexuscdn[.]com/dp/4456476a30e111ba1b3ee299c279d51a’
从Mopub 点击接收配置数据:
· https://res.mnexuscdn[.]com/dp/a79a2d1b9a8252fcc6917d6c46211199’
· https://res.mnexuscdn[.]com/dp/dd87a43132f3ce443d1e50b29019de3b’
· https://res.mnexuscdn[.]com/dp/8c7d12b8c28d8e573439c59627df9092’
· https://res.mnexuscdn[.]com/dp/cdaef0b66c347591bffd32260d76c6cc’
· https://res.mnexuscdn[.]com/dp/9a641c69cf5186982e8ac8c4e06e80f4’
· https://res.mnexuscdn[.]com/dp/f61f3f92d0dbcebe26d47dea3af1492a’
从presage/ogury 点击接收配置数据:
· https://res.mnexuscdn[.]com/dp/0845e0150308bcdf5ef03ba8295075f9’