今年五月中旬,有用户向360安全中心反馈手机经常自动安装新的游戏应用,经过360互联网安全中心分析排查发现用户中的是一个ROM级别的木马。该木马主要通过获取云端指令进行静默安装推广应用,并可以实现自身升级。木马自身支持多达40个命令类型[附录1],用以辅助实现静默安装推广应用和自身升级。
通过对已有数据和木马网络后台的挖掘查询,发现该木马历史上曾出现的版本有1.1.0、1.1.1、1.1.9、1.2.5和最新的1.2.6版本,受木马影响的手机品牌包括联想、夏新、小采等。从更新的历史上来看,都具有实现静默安装推广应用和自身升级的功能,随着版本的改进,支持的命令和命令的参数变得更丰富。木马从1.1.1版本就开始出现“#sendsms”、“#interceptsms”和“#makecall”等高危字符串,所幸截止到目前从后台获取的最新的1.2.6版本,还未有相关的实现代码。但从作者的调试脚本中发现有执行#sendsms命令的代码,推测在最新的版本中会有了相关代码实现。
从木马后台挖掘的脚本发现推广的应用主要有游戏类应用、浏览器类应用、应用助手类应用、新闻类应用、团购类应用和视频播放类应用。从木马的运行逻辑来看,此木马本身支持诸多命令,并通过从云端后台下载脚本,用脚本调用木马命令的方式来运行,可以很灵活地从云端后台控制木马行为,支持自升级,从而可以实现很多意想不到的功能,具有很大的潜在危害。
木马分析
以下是木马执行的流程图:
木马执行流程图
1、初始化任务池结构体
该木马主体文件名为wland,通过去云端下载并执行任务脚本,可以实现下载文件,安装应用、启动应用和自我更新的功能。木马启动时会尝试给自身在系统目录中的bin目录中建立名字为‘[’、‘[[’、‘test’和‘cp’的符号链接,这些当系统中有其它程序执行这些命令时,木马就会被启动。木马启动后会初始化一个结构体,里面包含了50个可执行命令任务池的子结构。
2、建立自身运行时所需的目录和文件
接着第二步,木马尝试检测和建立自身运行时所需的一系列目录和用以记录一些运行信息的registry.xml文件。
3、自更新
木马通过调用主体文件的-cov命令来获取下载在/system/wlan目录中的wland文件版本,检测自身主本wland文件是否需要更新,需要更新将/system/wlan/wland文件拷贝到/system/bin/目录中,如果/system/wlan/wland版本低则将/system/bin/中的wland拷贝到/system/wlan/目录中。
4、设置boottime和uid值
木马尝试设置boottime和uid的值。Boottime是木马通过云端获取的时间,uid是根据时间和imsi和imei设置的值。木马以后会根据boottime来判断上次获取时的时间和当前的时间差来决定是否去云端下载自身的wland的更新,uid则是木马访问云端时的一个参数,通过它可以得知手机的标志和上一次访问时间。
5、注册信号的处理
木马会注册一些信号的处理,但目前的版本还没有包括这些信号的处理。
6、建立通讯控制管道文件
接下来会建立木马进行通讯控制的fifo_in管道文件以及输出和调试信息的文件fifo_out、fifo_debug。fifo_in管道文件是的重要通讯控制文件,在后面木马的主体循环中会不断地从该文件中读取命令数据出来,并赋值到启动时建立的任务池结构体并运行。
7、获取手机imei和imsi值
木马会检查sim卡状态,获取和设置一些关于imei和imsi的变量数据,当这些数据有一个符合正常的手机的格式时,木马的一些下载行为才能被触发。
8、添加预设的木马任务
木马还会添加预设的一些木马任务。这步只是生成命令行字符串,在下一步骤中才会解析执行。首先调用-uce命令来检测更新时间的间隔是否需要更新主体wland,如果需要更新uce命令会再调用-upc命令去更新。
接着如果boottime或uid的值不存在,则会调用-sbt命令去获取和设置boottime和uid的值。 再根据boottime和uid判断是否需要下载和更新init.sh文件。-uie命令检查是否需要更新init.sh,如果需要更新则会调用-upi命令去下载更新。
下图是-upi命令下载init.sh主要代码:
init.sh是初始化木马的文件,从下载的init.sh脚本内容来看,主要由它控制下载sh脚本到手机本地,再将相关任务命令写入fifo_in以供木马主循环体执行。
init.sh里面开始也会检测是否需要更新木马主本wland文件和另一个脚本函数集文件function_set.sh。
init.sh通过调用木马主本wland的-api命令,此命令先比较本地版本和命令后面参数的版本,若小于参数版本则调用-upc命令去更新主体wland。下图是upc命令更新的wland的主要代码:
init.sh里面开始也会检测是否需要更新木马主本wland文件和另一个脚本函数集文件function_set.sh。
init.sh通过调用木马主本wland的-api命令,此命令先比较本地版本和命令后面参数的版本,若小于参数版本则调用-upc命令去更新主体wland。下图是upc命令更新的wland的主要代码:
function_set.sh里面包含了一系列支持静默安装推广应用的函数诸如check_api(检测版本更新)、check_disk(检查磁盘空间)、check_network(检测是否有网络)、install_apk(静默安装apk)、install_apk_e(静默安装apk)和submit_install(提交安装结果)。下图是其中install_apk的代码,其中-mtd命令的功能是下载应用到本地。我们可以看到脚本还有启动安装了的应用的功能,符合现在应用推广的一些逻辑,当然也可以给用户安装上其它监视类的间谍应用。
init.sh后面再调用-upp命令去下载静默安装推广应用脚本,并把命令写入fifo_in文件给木马下一步的主循环调用执行。upp命令下载脚本的主要代码如下图所示:
9、木马主循环
木马有一个主循环体,如果检测到需要重置的标志,就会把所有任务子进程结束并退出,主要用在更新。
主循环不断地从fifo_in文件中读取任务命令行并解析执行。
下面是下载到的某一具体的安装推广的sh脚本文件:
脚本前面定义一些要推广的应用的基本信息,后面就直接调用函数集脚本function_set.sh中的函数就可以直接静默安装推广应用了。
总的看来,此木马本身支持诸多命令,并通过从云端后台下载脚本,用脚本调用命令的方式来运行,可以很灵活地从云端后台控制木马行为,支持自升级,可以实现很多意想不到的功能,具有很大的潜在危害。
追根溯源
通过分析,木马连接的服务器域名包括:
wlans.reallytek.com:81 IP:27.115.63.14,上海联通 www.tekdowndata.com:81 IP:27.115.104.118,上海联通 www.reacheng.com:81 IP:211.95.45.70,上海联通(备用)
根据域名进一步挖掘,木马连接的服务器指向上海锐来科信息技术有限公司,该公司隶属锐嘉科科技集团。以下是从网络上查找到的该公司信息:
从木马的早期版本中发现作者的部分信息,木马作者自己填写的邮箱后缀也是reallytek.com。究竟是否为恶意利用,还需进一步调查。
接着从木马访问的云端后台爬取的脚本中,找到个调试脚本,里面有个159的手机号,查询归属地和手机号码的所有人,能够查到此号码属于上海一个姓ji的人,其邮箱为:ji****@hotmail.com,得到的信息与木马样本中提取的作者信息相同。
传播渠道
木马主要通过植入ROM,通过刷机网站进行传播。
到目前为止,木马主要是植入为夏新、联想、小采等手机开发的三方ROM进行传播,受影响用户达10万以上。已知的ROM下载渠道有:
http://www.romjd.com/Rom/Detail/16229 ROM基地 http://www.romzj.com/rom/10300.htm ROM之家
用户手机刷入被感染的ROM后,木马便疯狂地开始推广传播各种应用。
从后台挖掘出的脚本发现被推广的应用至少有近百个,以下是部分推广软件的包名(包名是Android软件一个标识),可以看到包括UC浏览器、百度浏览器、QQ浏览器、豌豆荚、100tv播放器、百度团购、折800、腾讯新闻等知名应用也在推广的名单内[附录2]。
查杀与修复
目前,360手机急救箱已经支持对该木马的查杀与修复。
附录
附录1:控制命令列表
附录2:推广软件列表