PreAMo:Google Play中的广告点击活动

概述

Checkpoint安全研究人员发现了一系列针对广告商进行欺诈活动的应用程序。其中有一个恶意软件PreAMo,可以通过点击从三家广告商的banner来模拟用户,这三家广告上分别是Presage, Admob和Mopub。

6款恶意软件的下载量一共超过9000万次,目前Google已经从Google Play中移除了受感染的应用程序。

PreAMo: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服务器检查配置更新。

PreAMo:Google Play中的广告点击活动

图2 – 接收器注册

 ‘PreAMo’用两种不同的方法来检测是否展示了广告banner,第一种方法是使用反射来使其中断为内部结构,并安装回调,第二张方法是基于活动生命周期回调的。

PreAMo:Google Play中的广告点击活动

图3 – 检测方法 #1

PreAMo:Google Play中的广告点击活动

图4 – 检测方法#2

每当应用中有新活动创建时安卓系统就会通知监听器。PreAMo会从顶级的窗口(Décor)开始递归地搜索特定的Ad View

PreAMo:Google Play中的广告点击活动

图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可以使用随机生成的坐标。

PreAMo:Google Play中的广告点击活动

图6 – PreAMo执行的条件检查

PreAMo:Google Play中的广告点击活动

图7 – 从xdd读取的预决定的坐标

PreAMo:Google Play中的广告点击活动

图8 – 使用随机生成的坐标

Ad Agency #2 – Presage:

这部分代码的执行是来源于com.DianXinOS.OService类。在调用onStartCommand的方法中,PreAMo会开始一个新的线程来周期性地显示来自Presage (ogury)库的插播广告。

在线程中,恶意软件会与C2服务器进行通信,并从URL hxxps://res.mnexuscdn[.]com/dp/0845e0150308bcdf5ef03ba8295075f9来加载配置数据。

PreAMo:Google Play中的广告点击活动

图9 – 线程创建

PreAMo:Google Play中的广告点击活动

图10 – Ad策略(配置数据)

PreAMo会接收配置文件并检查ads (min_i_sec_limit)和每日最大ads (max_p_ad)的周期。在验证成功后,PreAMo会从Presage显示与广告有关的活动。

PreAMo:Google Play中的广告点击活动

图11 – 检查广告配置

PreAMo:Google Play中的广告点击活动

图12 – 插播广告

除了从Presage显示广告外,PreAMo还会为主机应用注册自己的活动管理器,再实现以下的方法(图13)并替换默认的Presage web客户端来使用随机生成的坐标来点击banner(图14)。

PreAMo:Google Play中的广告点击活动

图13 – Presage的再实现方法

PreAMo:Google Play中的广告点击活动

图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信息。

PreAMo:Google Play中的广告点击活动

图15 – 伪造的package信息

同样的方式,攻击者会修改Mraid控制器的代码来处理WebView组件中打开的链接。控制器含有实现MraidListener接口的对象,其中含有JS触发的事件的回调。其中一个回调方法叫做onOpen,开源对JS中打开的URL做出反应。

PreAMo:Google Play中的广告点击活动

图16 –伪造的主机信息

PreAMo:Google Play中的广告点击活动

图17 – MraidController实现

onOpen的实现叫做class URLHandler,负责处理scheme对应的URL。PreAMo背后的攻击者对这一过程做了修改。如果URL的处理正确,而且是一个HTML页面,就模拟点击。

PreAMo:Google Play中的广告点击活动

图18 – Clicking Imitation #1

HTMLWebViewClient做的事情也是类似的,其中含有一个方法shouldOverrideUrlLoading,会在URL在当前WebView中加载的时候给主机应用一个机会进行控制。Mopub就用它来检查如何处理要在WebView中加载的URL,但恶意软件开发者会注入自己的代码来在要加载的页面上执行点击。天空彩

PreAMo:Google Play中的广告点击活动

图19 – Click imitation #2

C2服务器

C2服务器域名res.mnexuscdn.com是过匿名服务注册的,根据passive total的数据表明最早是2018年12月12日出现的。

PreAMo:Google Play中的广告点击活动

图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’