近期,火绒安全实验室在某论坛中发现一名用户发帖上传了被篡改过的火绒剑程序,该事件详细经过可参考《情况说明 | 非官方火绒剑存在后门风险,请用户谨慎下载使用-公司资讯-火绒安全》,在此不做赘述,本文为该样本的内容分析。经火绒工程师确认,该“盗版火绒剑”中的 uactmon.dll 文件被篡改,在其 DLL 加载时会解密出恶意 DLL 数据并加载执行,最后实现后门操作。目前,火绒安全产品可对上述被篡改的病毒样本进行拦截查杀,请广大用户及时更新病毒库以提高防御能力。同时我们也希望广大用户在官方渠道下载软件,避免企业或个人信息及财产存在被泄露的风险。
查杀图
样本执行流程图如下图所示:
流程图
从下图可以看出被篡改文件没有数字签名。
对比图
一、样本分析
样本中被篡改的 uactmon.dll 会解密出加载器,随后加载器再解密加载后门模块并执行后门逻辑。
后门功能具体如下:
• 进程管理:进程遍历、进程终止、模块遍历、权限获取、安全标识符获取等。
• 文件管理:创建文件、删除文件、移动文件、写入文件、执行程序、获取文件信息等。
• 鼠标键盘模拟:实现远程控制鼠标和键盘。
• 管道后门:创建管道、写入管道执行远程命令。
• 插件管理:客户端通过下载插件执行恶意代码。
• 其他功能:设置配置以及下载 DLL 利用 rundll32.exe 执行。
• 系统信息获取:获取主机名、系统版本、杀毒软件列表、进程名、安装软件列表等。
本文将以加载阶段、通信阶段、后门功能、发送系统信息四个环节为主进行详细分析。
1.1 加载阶段
该 uactmon.dll 动态链接库入口函数 dllmain_dispatch 中的 _SEH_prolog4 函数被恶意重定向,作为病毒入口执行病毒代码。
重定向
随后利用 fs:34h 获取上一个错误号 2 ,并基于此错误号进行计算,最后计算出解密函数的地址并调用解密函数,解密函数会解密出加载器代码。
调用解密函数
解密加载器代码
在加载器中解密恶意 DLL 数据,获取到 DLL 并调用 DLL 入口点函数。
解密出恶意 DLL 数据
加载器函数
手动加载细节
1.2 通信阶段
检查互斥体 Global\{950DD698-EB8C-469E-A50B-F76D0283392E} 是否存在,如存在则循环至不存在为止。
检查互斥体
随后读取 C:\ProgramData\Microsoft OneDrive\index.dat 文件并解析成字典格式,如不存在则会初始化字典并创建该文件,同时在创建之后修改该文件的时间戳。
初始化时:
mc 值是固定头 9X3eR2p 加上 21 位随机数组成的,后续请求远程服务器时将会附带该值,用来识别客户端;
ts 值是 Sleep 的秒数,初始化时赋予值为 28。
读取或写入 index.dat 文件
初始化字典
写入 .dat 文件
之后读取字典中的 disable 值,如果为 true 则不会继续执行。
检测 disable 值
检测 disable 值后通过异或 0x1F 解密出远程服务器地址 20.2.66.39,并设置为 ICMP 协议。
获取 IP 地址并设置 ICMP 协议
睡眠 {ts} 秒后利用 ICMP 协议发送数据包,数据包中包含 mc 值,其前后分别填充了 0xC681 和 0x1101。之后利用 recvfrom 函数接收回复的数据,通过回复的数据部分偏移为 2 的字节并减掉 0x65 为标准来判断要执行哪个函数。其中管道后门和插件管理都可以远程执行恶意代码。
功能号
根据指令执行相应函数
接收 ICMP 数据
WireShark 监测到的数据
其中进程管理函数会主动连接远程服务器 443 端口,随后获取指令,通过指令分别执行特定的恶意操作,同时会发送系统信息。
下图是进程管理接收指令的代码,其他后门功能运行机制与此相同。
进程管理主逻辑(其他后门功能也相同)
接收指令并执行函数(其他后门功能也相同)
1.3 后门功能
执行后门功能后会回复 log 或者打包数据发送至远程服务器中。
发送信息
1.3.1 进程管理
进程管理有以下功能:
功能号
遍历进程:遍历进程时获取进程名、进程 ID、父进程 ID、进程路径等,最后加密压缩发送至远程服务器。
遍历进程
压缩发送
终止进程:通过进程 ID 终止指定进程。
终止进程
遍历模块:遍历指定 PID 进程获取模块信息,并压缩发送。
遍历模块
获取进程权限:
获取权限名
1.3.2 文件管理
文件管理有以下功能:
功能表
其中部分函数截图:通过指定路径删除文件、移动文件,还可以通过传递过来的时间参数设置文件时间。
文件管理部分截图
1.3.3 模拟键鼠
模拟鼠标:利用 SendInput 函数实现鼠标转轮、右键点击、左键双击、左键单击、鼠标移动功能。
鼠标部分功能
模拟键盘:利用 SendInput 函数实现键盘按下后弹起的操作。
模拟按键
1.3.4 管道后门
创建管道:创建管道以及创建无界面 cmd.exe 或者 powershell.exe 等。
创建管道
写入管道:用于远程执行指令。
写入管道
1.3.5 插件管理
插件管理有以下功能:
功能表
加载插件代码图:
加载插件
1.3.6 其他功能
除上述功能以外还有以下功能号相对应的功能:主要是用于更新配置相关。
功能表
设置禁用:可以通过将 disable 设置为 true 来使该客户端不再与远程服务器交互。
设置禁用
下载 DLL 执行导出函数 Entry:先下载 iscsiexe.dll ,同时下载 npf.dll 或 npfs.dll,随后利用 rundll32.dll 程序执行 iscsiexe.dll 导出函数 Entry。
执行导出函数
1.4 发送系统信息
每次执行后门功能函数时都会发送一次系统信息。发送的信息包含主机名、系统版本、杀毒软件列表、指定注册表、当前进程 ID 和进程名、检查互斥体 Global\\{54902E83-9AA7-4DB5-977C-A1EBC760CAAE}、遍历安装包注册表。
获取主机名和系统版本:
获取主机名和系统版本
杀毒软件列表:通过遍历进程获取进程信息,并比对进程名确认进程是否存在,如果存在则将杀软名添加到列表中。如果没有杀软存在则回复“无”字符串。
下图是杀软名和进程名对照表:
对照表
检测以及添加到列表中
安装包列表:遍历 Uninstall 注册表并提取其中的 DisplayName 值添加到列表中,从而获取安装包列表。
获取安装软件列表
获取指定注册表路径的值:
• Directory\shellex\CopyHookHandlers\Files
• SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\DarkTheme
• Directory\shellex\ContextMenuHandlers\Files
二、附录
C&C:
HASH:
讲点大白话:有的小伙伴表示没有学过计算机知识,看不太懂这篇文章,那么你可以参考如下说明。
假如你有一个动物园,动物园里有很多你喜欢并珍藏的动物,但也有坏猴子偷偷翻进动物园住下干扰动物们生活(没有说所有猴子都坏的意思),偶尔也有小偷光顾你的动物园偷走用来喂动物的苹果。你很生气,决定为你的动物园安装一个监控。但是出于种种原因,比如找不到卖监控的店家、喜欢的那一款过于昂贵等等,你最终找了一个二手贩子。二手贩子交给你的监控看起来十分好用,你认为可以对动物园放心了,但其实你不知道,监控被注入了隐藏的程序,可以偷偷转移你的信息,也告诉了幕后黑手动物园几点没人,甚至他还知道住着珍贵动物的房间密码是多少,他借着病毒,操控着动物园的一切。或许有一天,你发现你进不去自己的动物园了。
而动物园就是你的电脑,二手贩子的监控是被注入后门的非官方火绒剑,希望你永远有给动物园开门的自由。
目前火绒安全产品已支持对该“非官方火绒剑”进行查杀,在这里也再次提醒广大用户,认准官方渠道,非官方渠道软件安全性无法保证,各平台下载需谨慎!