手机ClickFraud应用的安全研究分析
字数 1580 2025-08-22 22:47:30
Android ClickFraud 应用安全研究分析教学文档
1. 事件概述
- 背景:Android和iOS设备在广告收益上存在差异,iOS设备广告收益更高
- 发现:SophosLabs发现22个Google Play上的恶意应用,下载量超过200万次
- 伪装手段:这些应用伪装成苹果设备向广告商索取高额回报
- 时间线:
- 部分应用可追溯至一年前(如手电筒应用下载量超100万次)
- 大多数恶意应用创建于2018年6月及之后
- 最初版本无害,6月左右添加了clickfraud木马代码
- 谷歌于11月25日下架这些应用,但C2架构仍有效
2. 恶意软件关键特征
2.1 技术特点
- 持久性:比前代恶意软件更持久
- 灵活性:功能可通过C2服务器配置
- 欺骗性:高度隐蔽,难以被用户察觉
- 可扩展性:可下载并运行其他模块
2.2 用户影响
- 电量消耗:加速消耗手机电池
- 隐蔽性:无破坏性广告显示,用户难以察觉
- 负面评价少:Play Market上几乎没有负面评论
3. 恶意软件工作机制
3.1 初始通信
- 首次启动时发送HTTP GET请求:
http[://]sdk.mobbt.com/auth/sdk/login - 服务器返回JSON格式命令列表("sdk"),包含:
- 下载模块的URL
- 调用的类和方法名称
- 方法参数
3.2 模块控制
- 服务器可更新、更改或添加新模块
- 客户端使用相同代码下载和运行所有模块
- 示例模块:
- "rtb":早期版本使用
- "mpb":执行广告点击操作
3.3 广告点击流程
- 获取配置信息:
http[://]act.mobbt.com/actions/mb/view - 服务器返回JSON结构命令,包含伪造参数:
- 虚假应用名称
- 伪造设备型号
- 伪造User-Agent字符串
- 发送伪造的HTTP请求:
http[://]ads.mobbt.com/m/ad - 创建隐藏窗口(0x0像素)下载广告
- 模拟用户点击行为
4. 持久化技术
4.1 自动恢复机制
- 启动运行:利用
BOOT_COMPLETED广播在手机重启后启动 - 同步监听:
- 声明同步适配器和绑定服务
- 设置为定期运行(默认3分钟)
- 即使被用户强制停止,3分钟后自动恢复
4.2 实现代码
<service android:exported="true" android:name="com.octopus.managersdk.sync_adapter.SyncService">
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>
<meta-data android:name="android.content.SyncAdapter" android:resource="@xml/manager_syncadapter" />
</service>
5. 恶意软件演变
5.1 版本发展
- 早期版本(2016-2017年):
- 三个应用:
com.sparkle.flashlight,app.mobile.justflashlight,com.takatrip.android - 最初版本无害
- 三个应用:
- 2018年3月:
- 首次出现sdk下载功能
- 仅使用"rtb"模块
- 2018年6月:
- 接近当前版本
- assets文件夹包含空文件
mpb.jar - "mpb"模块开始具有恶意性
5.2 设备伪装范围
- 伪造iOS设备:iPhone 5至8 Plus
- 伪造Android设备:
- 33个不同品牌
- 249种不同型号
- Android版本从4.4.2到7.x
6. 安全影响与结论
6.1 影响范围
- 广告商:因虚假点击产生大量非法收入
- 用户:
- 电量快速耗尽
- 可能导致数据超额
- 设备完全受C2服务器控制
6.2 恶意软件特点
- 组织性良好
- 持久性强
- 对Android生态系统构成严重威胁
7. 检测与防护建议
7.1 检测指标(IOC)
- C2服务器域名:
sdk.mobbt.comact.mobbt.comads.mobbt.com
- 检测名称:
Andr/Clickr-AD
7.2 防护措施
- 定期检查设备异常电量消耗
- 监控网络流量中的可疑域名访问
- 检查应用权限,特别是同步适配器相关权限
- 关注应用商店中的安全警告
- 使用专业安全软件进行检测
8. 技术分析要点总结
- 模块化设计:通过C2服务器动态控制功能
- 设备伪装:伪造多种设备型号和User-Agent
- 隐蔽执行:零像素窗口隐藏广告活动
- 持久化机制:同步适配器实现自动恢复
- 广泛影响:覆盖iOS和Android主流设备型号
附录:恶意代码关键片段
模块调用代码
private void invokeClass(Pair arg4) throws ReflectionException {
try {
this.invokeMethod(this.ctx, this.parameters, this.dexClassLoader.loadClass(arg4.first), arg4.second);
return;
} catch(ClassNotFoundException v4) {
ThrowableExtension.printStackTrace(((Throwable)v4));
throw new ReflectionException("Classes Not Found");
}
}
隐藏窗口创建代码
v0.width = 0;
v0.height = 0;
this.containerView = new LinearLayout(this.ctx);
this.containerView.setLayoutParams(new RelativeLayout$LayoutParams(-1, -1));
this.containerView.setBackgroundColor(0);
this.containerView.addView(arg8);
if(this.windowManager == null) {
this.windowManager = this.ctx.getSystemService("window");
}
if(this.windowManager == null) {
return;
}
this.windowManager.addView(this.containerView, ((ViewGroup$LayoutParams)v0));
同步频率设置代码
if(v11_1.has("sync")) {
v0_1 = v11_1.optLong("sync");
if(this.preferences.getSyncPeriodicFrequency() != v0_1) {
this.preferences.setSyncPeriodFrequency(v0_1);
Utils.updateSyncFrequency(this.context, v0_1);
}
}