概述
今年3月份,360安全大脑反病毒团队发现了一起伪装成Telegram通讯软件安装包进行的攻击。“安装包”执行后,会下载合法的Telegram安装包进行安装,以掩盖暗中的恶意行为,通过RDP服务实现驻留。
攻击流程图如下:
攻击途径
木马的下载链接:
hxxps://iplogger.org/2r64b6
(数据显示该短链接的来源页面为hxxps://telegram.ccmmsl.com/)
浏览器访问下载链接,将被重定向到URL:
hxxps://cdn.discordapp.com/attachments/815911118606172214/818981362928713758/tsetup.exe。
从最后的资源链接可以看出,该木马被托管于Discord CDN服务器。Discord是一款主要面向游戏玩家的流行聊天通讯软件,用户量逐年增加。并且由于向Discord上传的附件可被所有人下载,用户之间的文件分享和传输快速便捷等特点,同样也引起了网络犯罪人员的注意。随之而来的就是大量恶意软件被托管于Discord的CDN服务器以提供给木马远程下载。本次攻击中的木马资源链接就是一个典型案例。
执行攻击
本次攻击中,从链接下载回来的“安装包”使用C#语言进行编写,并通过程序图标伪装成Telegram安装程序的32位文件。为了更好地伪装自身,还盗用了Telegram合法软件签名Telegram FZ-LLC,不过从文件属性中可以看到该签名实际无效。
为了躲避检测,程序中大量敏感字符串进行了Base64编码,运行时才会解码。
执行环境准备
虚假安装包木马会获取本地机器的MAC地址,匹配自身携带的地址库(共含13345个MAC地址),若在列表中则不进行感染。除此之外,程序中还有绕过指定的IP List和地区、恶意代码延迟执行等功能,不过并未启用。
为了避免重复感染,程序通过确认文件 %LocalAppData%\ASUNCB-dcBdklMsBabnDBlU 是否存在来判断当前机器是否已被感染过,若确认已感染便会退出并自我删除,否则便创建该文件并继续执行后续操作。
接着访问网址 hxxps://www.google.com/,确认网络可用,否则持续等待,直至访问响应成功。
为了攻击过程的顺利进行,木马通过修改注册表EnableBalloonTips、EnableSmartScreen、EnableLUA、ConsentPromptBehaviorAdmin、PromptOnSecureDesktop等键值的方式禁用SmartScreen和UAC,降低系统的防御能力,让用户对攻击过程无感知。
然后从Telegram官方URL:hxxps://updates.tdesktop.com/tsetup/tsetup.2.6.1.exe下载正常的Telegram安装程序到目录 %LocalAppData% 下,以管理员权限执行合法安装程序,完成安装包原本的工作。
最后,创建两个bat文件 %TEMP%\\Action.bat、%TEMP%\\Remove.bat,写入batch命令并执行脚本。Action.bat执行后续攻击流程,Remove.bat则完成自我删除。
Powershell脚本下载和启动
脚本文件Action.bat利用powershell执行远程脚本:
hxxp://ppoortu8.beget.tech/new_file.txt
而new_file.txt又作为downloader再次下载其它3个脚本并执行其中的start.vbs。
start.vbs只对ROM容量大于128KB的机器进行感染。如果符合条件,启动%TEMP%\\ready.ps1。
ready.ps1将patch自身powershell进程中的amsi.dll模块,以此躲避其对内存中恶意脚本内容的检测。最后执行Get-Content.PS1脚本内容。
后门程序的释放和驻留
Get-Content.ps1作为最后执行的脚本,负责完成后门程序的释放和驻留操作。
首先,脚本判断当前脚本执行环境是否拥有管理员权限,有则执行后续操作,没有则尝试以管理员身份重新执行start.vbs。此外,该脚本还会尝试绕过系统UAC的防护。
成功后绕过防护后,脚本开始准备释放后门dll,涉及到的服务为termservice。先将3个目录加入Windows Defender扫描排除项中,以免目录中的相关文件被清除:
(1) C:\windows\branding\
(2) C:\users\wgautilacc\desktop\
(3) C:\users\mirrors\desktop\
然后检查服务termservice是否存在,若没有则进行创建,并导入相应的注册表配置(%Temp%\\rpds.reg)。termservice服务存在的情况下,Get-Content.ps1会暂时禁用该服务,待后续操作修改配置后再运行。
接下来,会解密并创建以下文件:
%SystemRoot%\branding\mediasrv.png(RDP Wrapper DLL);
%SystemRoot%\branding\mediasvc.png(ServHelper BackDoor DLL);
%SystemRoot%\branding\wupsvc.png(RDP Wrapper配置文件);
如果以下合法文件在系统中没有,则进行创建:
%SystemRoot%\system32\rdpclip.exe;
%SystemRoot%\system32\rfxvmt.dll。
病毒还会对TermService服务相关注册表值进行修改:
(1) 设置RDP-Tcp使用端口为7201:
(2) 使用上一步释放的dll文件%SystemRoot%\branding\mediasrv.png作为termservice的ServiceDll:
(3) 禁用WDDM显示驱动模型,使用更老的XDDM
设置TermService启动类型为自动运行。这样服务每次运行都会加载ServiceDll,即%SystemRoot%\branding\mediasrv.png,ServiceDll会加载后门,从而实现后门程序在机器上的驻留。
将网络服务SID:S-1-5-20转为用户名NT Authority\Network Service,将其加入管理员组。
最后,将目录%SystemRoot%\branding\下的所有文件创建、访问、修改时间都改为2014/11/11 12:00:00。启动远程桌面服务rdpdr、TermService。清除 %TEMP% 目录下与本次攻击相关的文件。
后门程序启动
TermService服务启动后,会加载mediasrv.png(ServiceDll)。mediasrv.png实际是一个RDP Wrapper程序,但除此之外,该dll的代码中还多出一个加载恶意dll(%SystemRoot%\branding\mediasvc.png)的动作。
总的来说,mediasrv.png主要进行以下三个操作:
(1) 导入系统原始RDP相关DLL: termsrv.dll。对外间接提供termsrv.dll原始功能;
(2) 利用解密出的RDP Wrapper配置文件(%SystemRoot%\\branding\wupsvc.png)实现RDP功能的包装,支持更多功能;
(3) 将mediasvc.png作为DLL进行加载,攻击的后续动作由mediasvc.png的dll主函数完成。
被加载的dll: mediasvc.png,是一款名为ServHelper后门木马,于2018年末第一次被发现。该木马使用Delphi语言进行开发,通常以dll形式出现,并使用PECompact进行加壳,以劫持RDP服务的方式完成在受害机器上的驻留。
此次攻击释放的木马文件中大部分敏感字符串均进行了加密,解密密钥为“RSTVWVDJ”。
执行后,ServHelper会连接C2: hxxps://jfuag3.cn/figjair/b.php,根据收到的命令执行相应操作。其共支持32条指令:包括用户创建、文件下载、远控工具配置、键盘记录、会话通道控制等功能。
解密出的字符串,含有各项命令涉及的URL、注册表项、命令行、文件路径等。
下表列出了所支持的命令字符串:
bk |
会话通道创建 |
info |
获取机器信息 |
fixrdp |
设置注册表项并重启系统 |
reboot |
重启计算机 |
updateuser |
更新管理员组和远程账户用户名和密码,没有则默认用户为WgaUtilAcc |
deployns |
部署NetSupport远控工具 |
keylogadd |
添加键盘记录器,向管道\\.\pipe\txtpipe写入”add^” |
keylogdel |
删除键盘记录器,向管道\\.\pipe\txtpipe写入”del^” |
keyloglist |
列出键盘记录器,向管道\\.\pipe\txtpipe写入”list” |
keylogreset |
重置键盘记录器,向管道\\.\pipe\txtpipe写入”reset” |
keylogstart |
通过执行模块中导出函数euefnaiw启动keylogger |
sshurl |
下载ssh.zip |
getkeylog |
获取键盘记录(c:\windows\temp\tv.txt) |
getchromepasswords |
获取chrome密码,存储于c:\windows\temp\logins_read.txt |
getmozillacookies |
获取mozallia Cookies,存储于c:\windows\temp\moz.txt |
getchromecookies |
获取chrome Cookies,存储于c:\windows\temp\cookies.txt |
search |
查询mozallia和chrome Cookies中的内容 |
bkport |
指定隧道端口 |
hijack |
通过执行模块导出函数gusiezo3劫持用户账户 |
persist |
持久化驻留 |
stophijack |
停止劫持 |
sethijack |
劫持活动用户 |
setcopyurl |
设置复制工具url |
forcekill |
强制终止进程 |
nop |
心跳包 |
Tun |
创建ssh通道,本地端口为7201 |
Slp |
睡眠 |
killtun |
关闭ssh进程 |
shell |
执行cmd命令并回显 |
update |
模块更新 |
load |
从url下载执行文件 |
socks |
创建ssh通道 |
后续更新
在攻击发生后的几天,伪装的安装包文件曾有过一次更新。下载回的文件是基于github开源项目go-clr编写的加载器。运行后会解密除携带的C#木马并使用CLR托管执行。
释放并执行的C#木马内部名称为Droper.exe,仅实现一个功能,释放并执行两个powershell脚本:
(1) %TEMP%\\get-content.ps1;
(2) %TEMP%\\ready.ps1;
释放成功后执行ready.ps1。
对比之前的样本,Dropper.exe不再下载合法安装包进行安装,不再将ROM大小作为执行条件,成功执行后无需联网。
IOCs
MD5
675f88e0715be722e6609e4047f2aad7
de78b574c81eb85652c198e70898a9a0
8a4e2ee2fa9195022c3747a363baa092
3a9821c769ecbf95d44117a04729f2f2
b1a2d11ae871805b8fcb2b4820b47e7e
37330f50cf392bca59567a22de3b836a
7fcaacd9d9ba4695d12e82020d84a95d
aa5219949ca4ecdcd0d9afe7615124fb
6c5b7af9c87ee08c7a7bd43ed7f75d6d
URL
hxxps://telegram.ccmmsl.com/
hxxps://iplogger.org/2r64b6
hxxps://cdn.discordapp.com/attachments/815911118606172214/818981362928713758/tsetup.exe
hxxp://ppoortu8.beget.tech/new_file.txt
hxxp://ppoortu8.beget.tech/start.vbs
hxxp://ppoortu8.beget.tech/Get-Content.ps1
hxxp://ppoortu8.beget.tech/ready.ps1
hxxp://bromide.xyz/ssh.zip
hxxp://sdsddgu.xyz/khkhkt
hxxps://raw.githubusercontent.com/sqlitey/sqlite/master/speed.ps1
nvursafsfv.xyz
pgf5ga4g4b.cn
字符串解密脚本
def decbkd(s, k = 'RSTVWVDJ'):
l = len(s)
kl = len(k)
o = ''
for i in range(l):
if s[i].isalpha():
o += chr((ord(s[i].upper()) - ord(k[i%kl].upper()) + 26)%26 + (ord('A') if s[i].isupper() else ord('a')))
else:
o += s[i]
return o
参考
https://www.binarydefense.com/an-updated-servhelper-tunnel-variant/