本文翻译自:ZLAB恶意软件分析报告《HeroRAT: Analyzing the Telegram based Android malware》
http://csecybsec.com/download/zlab/20180802_CSE_HeroRAT.pdf
2018年6月, ESET的安全研究人员发现了一个安卓远程管理工具(Remote Administration Tool,RAT)家族——HeroRAT,HeroRAT 通过Telegram BOT API与攻击者进行通信。使用Telegram API已经成为Android RAT威胁场景的一种新趋势,HeroRAT之前已经有TeleRAT、IRRAT等RAT家族使用这种技术了。
HeroRAT在伊朗非常活跃,主要通过第三方应用商店、社交媒体和即时通信应用进行传播。
研究人员推测HeroRAT的部分代码来自于其他恶意软件。HeroRAT的一些特征看起来与IRRAT 和TeleRAT明显不同,而一些特征来源于Xamarin框架和TeleSharp库。
HeroRAT的出售价格根据功能分为三种,下图是三个版本的比较:
图 1 HeroRAT三个不同版本比较
这三个变种来自相同的RAT,但被用不同的package名,图标和僵尸控制器用户名重新打包了。本文只对其中一个样本进行深入分析。
恶意应用请求的权限如下图所示:
图 2 RAT请求的权限
安装完成后,应用会显示“This application can’t run on your device(应用无法在你的设设备上运行)”这样的信息,然后展示一个假的卸载过程。
图 3 RAT假的卸载消息
然后APP的图标会从主页移除,但RAT还以服务模式(service-mode)在系统中运行。
图 4 RAT仍在系统中运行
为了隐藏APP图标并让RAT后台运行,攻击者将setComponentEnabledSetting设置为disabled,并指定了参数DontKillApp,如下图所示:
图 5 -用于隐藏APP图标的代码
上图还说明应用会检查设备,然后根据系统选择的语言展示消息。
对APK软件分析发现,有一个名为assemblies的文件夹,含有下面的DLL:
图 6 来自Xamarin 的DLLs
这些来源于Xamarin框架的库可以让恶意软件作者用C#语言开发安卓应用。
上面列表中还有TeleSharp库,是C#实现Telegram Bot API的库,直接基于TeleSharp API,因此,恶意软件的开发就非常简单了。
图 7 – TeleSharp库
因为使用了Xamarin框架,所有的Java源代码文件只含有代码封装,而真实的代码都在android.os.dll文件中了。而反编译dll文件就比较简单了。
通过分析源代码,研究人员发现该RAT有所有RAT的经典功能,比如读短信和通话记录、获取位置信息、开关机、下载文件等等:
图 8 – RAT的功能
Telegram僵尸的MainTokenn作为RAT的C2出现在源代码中:
图 9 - Telegram僵尸的MainToken
还可以查询Telegram REST API获取僵尸主机的用户名,然后发送命令给僵尸主机:
图 10 – Bot信息
图 11 -与僵尸主机通信
但是,僵尸主机并没有接收研究人员发送的命令,回复的信息是“You Cant Use Of Bot Before Register In This Bot”。说明僵尸主机只接受来自特定源的命令,这在源代码中也得到了验证,源代码中有发送者id和Manager id的比较。三种样本唯一的区别也就是Manager ID和僵尸主机的MainToken。
图 12 - Sender ID检查
下图是样本中的Manager用户名:
图 13 - Manager用户名
通过该用户名,研究人员找到了Telegram上的manager(botmaster):
图 14 – Manager账户
rule HeroRAT {
meta:
description = "Yara Rule to individuate some samples of HeroRAT Android malware"
author = "CSE CybSec Enterprise - ZLab"
last_updated = "2018-07-31"
tlp = "white"
category = "informational"
strings:
$a = "assemblies/TeleSharp.dll"
$b = "assemblies/Mono.Android.dll"
$c = {49 64 00 67 65 74 5F 4D 79 4D 61 6E 61 67 65 72}
$d = {52 65 70 6C 79 4D 65 73 73 49 64 00 73 65 74 5F 43 68 61 74 49 64}
condition:
$a and $b and ($c or $d)
}