Symantec研究人员发现了一款恶意安卓应用程序——Xhelper。该程序可以隐藏自己,下载其他的恶意app,展示广告。还有最重要的一点,Xhelper是永久的。用户在卸载了Xhelper后,恶意软件可以重新安装,并能实现隐藏自己,并不出现在系统的启动器中。在过去6个月,Xhelper已感染超过4.5万设备。
研究人员在许多在线论坛发现了许多用户发帖抱怨随机弹窗广告,即使手动卸载后恶意软件仍然可以显示广告。
图 1. 用户在论坛抱怨Xhelper (上: Google, 下:Reddit)
Xhelper
Xhelper并不提供普通的用户接口。恶意软件只是一个应用组件,也就算说并不会在设备的应用启动器中出现,如图2所示。因此,恶意软件很容易可以执行恶意活动。
图 2. 用来从应用启动器中移除app的代码(上)启动器中的app(下)
因为启动器中没有app图标,因此Xhelper无法手动启动。在该例中,恶意app 是通过外部事件来启动的,比如当被黑的设备连接或断开电源,设备重启或app安装或卸载时。
图 3. Xhelper的manifest代码显示可以触发恶意软件的事件
恶意软件启动后,会将自己注册为前台服务,这就降低了在内存太小时被kill掉的概率。为了实现驻留,恶意软件会在服务停止时重启服务,这也是移动恶意软件常用的方法。
图 4. Xhelper将自己注册为前台服务,在停止运行时重启服务
Xhelper在受害者设备上立足后,就解密嵌入在包中的恶意payload到内存中来执行其核心恶意功能。然后,恶意payload会连接到攻击者的C2服务器并等待命令。为了防止通信被拦截,攻击者在客户端设备和C2服务器之间所有的通信上都使用了SSL certificate pinning。
图 5. 含有SSL certificate-pinning特征的Xhelper代码
成功连接到C2服务器后,恶意软件会下载其他payload到被感染的设备,比如释放器、点击器、rootkit等。研究人员认为C2服务器上有不同的恶意软件,恶意软件包含有不同的功能,这样就给了攻击者不同的选择,包括数据窃取或完全控制设备。
图 6. Xhelper获取下载payload的配置数据的HTTP POST请求
Xhelper发展
研究人员最早是在2019年3月发现Xhelper的。当时恶意软件的代码还很简单 ,其主要功能是让用户访问广告页。随着时间的推移,代码也在不断地更新和改进。刚开始的时候,恶意软件连接到C2服务器的能力是直接写入恶意软件中,但随后该功能移动到了加密的payload,这是为了尝试绕过基于签名的检测。一些老版本的变种中还有空的没有实现的类,但这些功能在之后的版本中都启用了。
研究人员有理由相信恶意软件的源码仍然在开发中。比如,研究人员发现许多类和常量变种都标记为Jio。这些类都是没有实现的,研究人员怀疑攻击者可能正在计划攻击Jio用户。
图 7. Xhelper源代码中提到Jio的类和包
Xhelper下载资源
研究人员并没有在Google play应用商店中找到本文中分析的样本,研究人员猜测Xhelper恶意软件是从其他未知源处下载的,研究人员相信可能有很多的分发方法。
研究人员还发现这些恶意app在许多特定手机品牌中安装地频率很高,因此研究人员猜测攻击者可能正在关注某些特定的品牌。还有用户对设备中恶意软件的驻留进行抱怨。虽然这些app可能并不是系统应用程序,这表明有另一个恶意系统app可能会下载恶意软件,研究人员目前还在调查中。
图 8. 用户抱怨无法完全卸载Xhelper
Xhelper感染
统计数据表明,Xhelper恶意软件目前已经感染了超过45000个设备。上个月,平均每天有131个设备被感染,整个月有2400个设备被永久感染。恶意软件主要影响印度、美国和俄罗斯的用户。