事件概述
近日,奇安信威胁情报中心注意到外国安全厂商humansecurity在外网揭露了一个名为BADBOX的事件,其报告称观察到至少74000 部基于 Android 的手机、平板电脑、和全球联网电视盒有遭遇BADBOX 感染的迹象;而来自趋势科技的说法是该后门据信被植入了2000万数量级别的设备。实际上,humansecurity在其分析报告中已经对该事件进行了比较详细的技术分析,各位如果有兴趣可以自行查看。本篇文章中,我们主要想基于奇安信自身情报视野做一些关联扩展分析,希望能从我们的视角出发提供更多的补充信息给到业界。
分析细节
基于奇安信威胁情报中心的历史流量记录,可以看到humansecurity提供的几个C2地址在国内的感染量并不算少,以cbphe.com为例,可以看到cbphe.com22年到23年5月份基本上是每日访问情况比较平稳,从23年开始逐步增长,到了23年5月之后,感染量突然暴增,并一直持续到现在。
另外,我们发现域名flyermobi.com下有多个关联的样本,首先选一个样本进行定性分析,这里随机挑选了一个e6027f962eaaf7dede8a271166409fe6。
样本信息:
MD5:e6027f962eaaf7dede8a271166409fe6
包名:com.gavv.tissm
样本会解密原包中/a/b.data 文件,释放jar,通过dexclassloader的方式加载
原包文件:
移动设备中释放的jar和dex
然后动态加载jar文件:
样本会将释放的jar的版本号(v)、设备型号(tp)、Android系统版本(bdr)、软件版本(rv)、包名(pk)等数据上传到解密出来的url中,对比返回版本信息,如果版本有更新则下载新的jar,从而实现版本更新。url如下:
hxxp://adc[.]flyermobi[.]com/update/update.conf?bdr=xx&rv=x&v=xxx&pk=xxx&tp=Generic+Android-x86_64
解密字符串的部分:
解密算法:
public class De {
public static void main(String[] args) {
System.out.println(dec("d62kyun6d", "C4FF3D0FF6730B4AE7BFA387C88862560050076610A3517E03BA599535DEAA943134CA7E20F8138A7D0331"));
}
public static String dec(String key,String msg){
String v7_3 = "";
byte[] v7_2;
int v0 = 0;
if (msg.length()>=2){
String v7_1 = msg.toLowerCase();
int v2 = v7_1.length() / 2;
byte[] v3 = new byte[v2];
while(v0 < v2) {
int v4 = v0 * 2;
v3[v0] = (byte)Integer.parseInt(v7_1.substring(v4, v4 + 2), 16);
++v0;
}
v7_2 = v3;
byte[] v6 = a(v7_2, key);
try {
v7_3 = new String(v6, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
return v7_3;
}
public static byte[] a(byte[] arg4, String arg5) {
try {
SecretKeySpec v5 = Sekey(arg5);
Cipher v0 = Cipher.getInstance("AES/CFB/NoPadding");
v0.init(2, v5, new IvParameterSpec(new byte[v0.getBlockSize()]));
return v0.doFinal(arg4);
}
catch(Exception v4) {
v4.printStackTrace();
return null;
}
}
private static SecretKeySpec Sekey(String arg2) {
byte[] v2_1;
if(arg2 == null) {
arg2 = "";
}
StringBuilder v0 = new StringBuilder(0x20);
while(true) {
v0.append(arg2);
if(v0.length() >= 0x20) {
break;
}
arg2 = "0";
}
if(v0.length() > 0x20) {
v0.setLength(0x20);
}
try {
v2_1 = v0.toString().getBytes("UTF-8");
}
catch(UnsupportedEncodingException v2) {
v2.printStackTrace();
v2_1 = null;
}
return new SecretKeySpec(v2_1, "AES");
}
}
返回结果中包含下载地址,md5,版本号等内容:
释放的jar中,利用webview实现后台刷广告牟利的功能。广告地址通过访问url获取,利用MotionEvent实现自动点击广告。
访问url:http://adc.flyermobi.com/config/config.conf、http://adc.flyermobi.com/config/config.conf.default来获取广告相关url
利用webview请求广告:
通过MotionEvent实现广告点击:
分析到这里,可以确认这个样本行为与humansecurity提到的基本一致,该恶意程序是一个内置的后门,通过后门实际远程下载其他代码模块并加载的功能;目前看到的主要功能模块是用于后台点击广告来牟利。
接下来尝试对相关C2地址进行关联分析,首先将公开披露的这几个域名(cbphe.com 、cbpheback.com、ycxrl.com、dcylog.com、flyermobi.com;)输入到奇安信威胁情报中心的【威胁图谱分析】模块中,威胁图谱会自动将这几个域名的历史解析记录、whois、关联样本等等多种关联关系展示在画布上。
其中,我们注意到flyermobi.com这个域名有一个解析的IP 128.199.193.15,这个IP上还关联到了其他的域名,其中有一个apkcar.com的域名也解析到128.199.193.15这个IP上,并且其子域名ymex.apkcar.com、ymlog.apkcar.com的域名结构与前面的rnznd.ycxrl.com、z3rv.ycxrl.com(ycxrl.com的子域名)结构相似。
进一步下钻关联数据,可以看到ymsdk.apkcar.com曾经cname到adbsdk.flyermobi.com,并且扩展出来更多的子域名、URL和样本,如下图:
选择其中一个样本进行分析(MD5:f33401aaf64a2dd3ed14e6f441ac83ab),可以看到代码与前面分析的样本代码十分相似:
到这里,我们基本可以确定apkcar.com,是本次事件同一个团伙的域名,而这个域名在其他安全厂商的报告中都没有提到。我们通过奇安信威胁图谱关联的方式扩展出了一个之前没有被发现的新C2.
总结
经过上述分析,可以确认本次事件确有其事,攻击者通过在机顶盒内置后门的方式,利用后门远程下载并加载其他恶意代码模块;最后通过后台隐蔽点击广告来进行牟利。
IOC
DOMAIN
cbphe.com
cbpheback.com
ycxrl.com
dcylog.com
flyermobi.com
apkcar.com
URL
hxxp://128[.]199.97.77/logs/log.active
hxxp://adc[.]flyermobi.com/update/update.conf
hxxp://ymsdk[.]apkcar.com/adbu
MD5
e6027f962eaaf7dede8a271166409fe6
f33401aaf64a2dd3ed14e6f441ac83ab
参考链接
[1].https://humansecurity.com/hubfs/HUMAN_Report_BADBOX-and-PEACHPIT.pdf
[2].https://arstechnica.com/security/2023/10/thousands-of-android-devices-come-with-unkillable-backdoor-preinstalled/