近期,火绒威胁情报中心监测到一批相对更加活跃的“银狐”系列变种木马,火绒安全工程师第一时间提取样本进行分析。分析中发现样本具有检测沙箱和杀毒软件的行为,还会下载 TrueSightKiller 驱动关闭杀软,同时下载创建计划任务的 Shellcode 实现持久化,最终下载后门模块实现远程控制。目前,火绒安全产品可对上述病毒进行拦截查杀,请广大用户及时更新病毒库以提高防御能力。
![](http://resources.yxfzedu.com/images/article_images/742969_5GTK3A7W59JQUPP.jpg)
火绒查杀图
根据火绒威胁情报中心监测情况显示,该系列木马在 9 月 14 日被截获处理,其传播量在 9 月 18 日达到顶峰,直至 9 月 20 日不再活跃。
![](http://resources.yxfzedu.com/images/article_images/742969_VCT4WGXK94K37WB.jpg)
活跃趋势
样本执行流程如下所示:
![](http://resources.yxfzedu.com/images/article_images/742969_2GNCCWSN4EZRCNB.jpg)
流程图
一、样本分析
该样本最初通过分配内存,复制 0x14002EB20 处代码并调用。
![](http://resources.yxfzedu.com/images/article_images/742969_8TVTWYYMXEHFZJW.jpg)
复制内存
随后通过异或算法对 210002E 处代码进行解密。
![](http://resources.yxfzedu.com/images/article_images/742969_SP4SEGQ9N9S885F.jpg)
解密
之后的具体逻辑如图所示,包含检测沙箱、检测安全软件、关闭安全软件、使函数失效、创建互斥体以及判断管理员权限等操作。
![](http://resources.yxfzedu.com/images/article_images/742969_JG7MMGDFBXQESYG.jpg)
具体逻辑
其中创建互斥体的代码如下,此操作用来检测两个互斥体是否存在,若不存在,则先创建其中之一互斥体,后续创建另一个互斥体。
![](http://resources.yxfzedu.com/images/article_images/742969_KN6QES2SZFU4A6B.jpg)
创建互斥体
检测管理员权限代码如下,如果没有权限则会重新用管理员权限打开。
![](http://resources.yxfzedu.com/images/article_images/742969_86F239FB43878KT.jpg)
管理员权限启动
反沙箱
该银狐样本中存在大量反沙箱操作。
通过生僻函数 VirtualAllocExNuma 进行分配内存,若成功则直接返回,并继续执行后续操作。
![](http://resources.yxfzedu.com/images/article_images/742969_MVWP8G6H6TVFBCC.jpg)
生僻函数
通过 HeapAlloc 分配相对大的内存—95MB来检测沙箱,并进行 for 循环加。猜测此过程可能是用于检测某些沙箱为了缩短检测时间直接跳过的情况。
![](http://resources.yxfzedu.com/images/article_images/742969_JKCW4AGAA8PXAQG.jpg)
检测沙箱
通过三个函数判断:
· 时间是否被加速。
· CPU 速度是否过慢。
· rdtsc 是否被篡改使 frndint 计算周期数过小。
![](http://resources.yxfzedu.com/images/article_images/742969_4JKDZG6JCZVRK2K.jpg)
反沙箱
判断程序是否处于 Windows Defender 沙箱中:
· 利用 NtCompressKey 特定句柄传入返回是否成功。
· 利用 NtIsProcessInJob 传入特定值返回 STATUS_VOLSNAP_HIBERNATE_READY {卷影复制服务}系统现在处于休眠状态。
![](http://resources.yxfzedu.com/images/article_images/742969_X3KN3J89BF6HWXE.jpg)
检测 Windows Defender 沙箱
如果不成功,则会检测 SxIn.dll 是否被加载。猜测是以此判断程序是否处于隔离沙箱中。
![](http://resources.yxfzedu.com/images/article_images/742969_HKDPTBXGVM6E3BM.jpg)
检测隔离沙箱
检测 CPU 核数大于等于 2 个以上。
![](http://resources.yxfzedu.com/images/article_images/742969_FMYE5WF5QDM96AQ.jpg)
CPU 数量
安全软件对抗
样本会通过 VirtualProtect 函数更改内存权限,然后将该函数第一个指令替换为 retn ,使 AmsiScanBuffer 和 NtTraceEvent 函数失效。
![](http://resources.yxfzedu.com/images/article_images/742969_UHVJW4QE9P37AGD.jpg)
Hook 函数
检测是否存在 360tray.exe、360sd.exe、360safe.exe 进程名,若不存在,则进一步搜索相关窗口类名为 Q360SafeMonClass 的窗口。
![](http://resources.yxfzedu.com/images/article_images/742969_P39FJ5YQF7U4U5H.jpg)
检测安全软件
如果检测到类名为 Q360SafeMonClass 的窗口,则会利用 PostMessageA 函数将其关闭。
![](http://resources.yxfzedu.com/images/article_images/742969_NVUXQM6BNHREEU9.jpg)
关闭窗口
其中 EnumWindow 遍历窗口时,通过 ChangeWindowMessageFilterEx 函数使该窗口允许接收 WM_QUIT 指令,随后利用发送消息的方式关闭该窗口。
![](http://resources.yxfzedu.com/images/article_images/742969_7QYYRQ29XFPE8DP.jpg)
关闭窗口
如果安全软件不存在,则会将 'C:\\','C:\\ProgramData','C:\\Users','C:\\Program Files (x86)' 路径添加到 Windows Defender 白名单中,以躲避检测。
![](http://resources.yxfzedu.com/images/article_images/742969_ERWRX626S3BBCQ8.jpg)
添加白名单
下载 PACqpC.exe
完成上述一系列检查后,该样本会下载一些文件和 Shellcode ,比如:TrueSightKiller 驱动程序和用于创建计划任务的 Shellcode 等。
大致流程如下:解密链接,利用链接下载内容,并使用流密码进行解密,之后创建文件夹并隐藏文件夹。
![](http://resources.yxfzedu.com/images/article_images/742969_ZEXED2EMGSWESNY.jpg)
具体流程
样本在此流程中,利用 InternetReadFile API 函数下载数据。
![](http://resources.yxfzedu.com/images/article_images/742969_AUHWNKWKWK4JHGY.jpg)
下载数据
其中,下载链接和下载的数据分别利用凯撒密码和简单流密码进行解密。
![](http://resources.yxfzedu.com/images/article_images/742969_PMZM8BWBGXC9PCK.jpg)
解密算法
解密后的 URL 数据如图所示,包含下载链接和相对应的文件名。
![](http://resources.yxfzedu.com/images/article_images/742969_SC7D4SCSC8CWUQK.jpg)
URL 数据
随后检查是否有安全软件。
![](http://resources.yxfzedu.com/images/article_images/742969_ZRCFZEVZGUQUB4D.jpg)
检查安全软件是否存在
如果检查到安全软件,将保持之后下载到的数据解密并写入文件后的文件句柄处于开启状态,以此阻止安全软件的读取。
![](http://resources.yxfzedu.com/images/article_images/742969_KVX4CRGC9APHXFV.jpg)
写入文件
下载后开始分析数据,并提取出异或秘钥和数据开头地址。
![](http://resources.yxfzedu.com/images/article_images/742969_36Q3CSWRYMNVJW2.jpg)
分析数据
开始下载 a.gif、b.gif、c.gif、d.gif ,它们分别对应 install.exe(即随机名 PACqpC.exe )、hccutils.dll、1.gif、2.jpg 。这些文件中的最后一个字节用作异或解密的秘钥,倒数第五个字节至倒数第二个字节用于计算出数据开头偏移,其中 b.gif 的最后四位会写入随机数。
![](http://resources.yxfzedu.com/images/article_images/742969_YRZFHFDW47E5HDC.jpg)
整体逻辑
![](http://resources.yxfzedu.com/images/article_images/742969_PZ6Q7ZFSFFZYVQS.jpg)
异或、随机数、获取秘钥和偏移
随后会读取自身内容,并利用 */& 定位,将 32 位随机数+*/&之后的 36 位数据写入到 C:\Users\InstallUP.ini 文件中。这些数据是被加密的 IP 和端口,用于下载后门模块后的动态替换 IP 和端口。
![](http://resources.yxfzedu.com/images/article_images/742969_R7VQNC5XGMBSZ3E.jpg)
InstallUP.ini 文件
接着通过链接 https://197oss.oss-cn-beijing.aliyuncs.com/s.dat 下载 TrueSightKiller 驱动,并将此驱动写入到 C:\Users\TTruespanl.sys 中,同时保持文件句柄处于开启状态。该驱动用于关闭杀毒软件。
![](http://resources.yxfzedu.com/images/article_images/742969_8R3B3QUFFP9Z3SV.jpg)
下载驱动
之后通过链接 https://197oss.oss-cn-beijing.аliyuncs.com/s.jpg 下载 Shellcode ,通过利用 VirtualProtect 设置执行权限并执行。
![](http://resources.yxfzedu.com/images/article_images/742969_NVP692B7N8DACTK.jpg)
下载执行 Shellcode
Shellcode 中存在被压缩的 Dll ,对其进行解压缩后手动加载,并从中获取 RegisterTask 函数地址。
![](http://resources.yxfzedu.com/images/article_images/742969_2JPPJHHV3WJVKBH.jpg)
获取 RegisterTask 函数地址
随后调用 RegisterTask 函数,创建计划任务。具体方法是创建并配置一个 RPC 绑定句柄,利用 NdrClientCall3 函数进行客户端 RPC 调用来创建计划任务,其中 XML 数据是计划任务的配置信息。
![](http://resources.yxfzedu.com/images/article_images/742969_8FKJZWQVGGQHDMC.jpg)
创建计划任务
计划任务配置信息如图所示,它将实现登录、创建和修改功能,并且每分钟都会自动触发启动。此外,该任务的工作目录被设置为 C:\Users 目录。
![](http://resources.yxfzedu.com/images/article_images/742969_2FU85HZQ3FGG7XR.jpg)
计划任务配置信息
PACqpC.exe
PACqpC.exe 文件为白文件,会加载 hccutils.dll,该文件为 VMP 壳。
![](http://resources.yxfzedu.com/images/article_images/742969_G5J8TNNFFEBQJVQ.jpg)
DLL 文件信息
加载 hccutils.dll 时,会先读取 1.gif 文件,对其进行解密,然后将解密后的内容写入到 PACqpC.exe 的入口点地址。接着读取 2.jpg 文件进行解密后手动加载并执行其中的 KMDrvFaxGetJobStatusType 导出函数。
![](http://resources.yxfzedu.com/images/article_images/742969_VFHU3GF6YBXGSHC.jpg)
执行 KMDrvFaxGetJobStatusType 函数
之后开始遍历进程,查看是否存在安全软件。
![](http://resources.yxfzedu.com/images/article_images/742969_5FVH5Y6V9UN5UPQ.jpg)
进程名列表
随后通过 RPC 调用实现安装 TTruespanl.sys 驱动(实为 TrueSightKiller 驱动)。在管道通信过程中,有一次传入了驱动名和驱动文件路径,猜测这是用于加载驱动的。
![](http://resources.yxfzedu.com/images/article_images/742969_F58487KH2CYDFHB.jpg)
管道通信
![](http://resources.yxfzedu.com/images/article_images/742969_QBRM82ZA3MXKGHT.jpg)
TTruespanl.sys 驱动
如果存在安全软件,则会利用 DeviceIoControl 函数传入进程 ID 关闭进程。
![](http://resources.yxfzedu.com/images/article_images/742969_Q497G9XQWNHBH2T.jpg)
DeviceIoControl 函数
其中 0x22E044 是驱动中终止进程的指令。
![](http://resources.yxfzedu.com/images/article_images/742969_J5TR7X394PKRHXY.jpg)
终止进程
后门模块
完成上述操作后,该样本从 https://m39m.oss-cn-hangzhou.aliyuncs.com/drops.jpg 中下载 Shellcode ,该 Shellcode 用于下载后门模块加载器。这个 Shellcode 跟先前下载的相似,它会先下载 https://m39m.oss-cn-hangzhou.aliyuncs.com/f.dat ,这是 URL 数据,用于下载后门模块加载器的链接组合的数据。
![](http://resources.yxfzedu.com/images/article_images/742969_W3ND8YAVG23XCWW.jpg)
下载 URL 数据
![](http://resources.yxfzedu.com/images/article_images/742969_4T4HWMTJNPNE85P.jpg)
解密后的 URL 数据
之后该样本通过 URL 链接下载后门模块加载器,并将四个文件设置为隐藏的系统文件。然后会读取先前创建的 InstallUP.ini 文件并提取 IP 和端口( 47.76.238.83:8143 和 umxunw.net:8143 )写入 utils.vcxproj 文件,最后执行 wR0jS2.exe 。
![](http://resources.yxfzedu.com/images/article_images/742969_VKTUFGBZE5B6XC9.jpg)
下载后门模块加载器并执行
执行后,该样本将加载 tbcore3U.dll 。此时,它会读取 utils.vcxproj 和 log.src 并解密出其他代码和后门模块。其他代码中包含通过设置注册表 ConsentPromptBehaviorAdmin 绕过 UAC 、检测安全软件等操作。最后执行后门模块 Edge 导出函数。
![](http://resources.yxfzedu.com/images/article_images/742969_YYWVBM3VGGXUB82.jpg)
Edge 函数
经对比分析,发现该模块执行逻辑与今年3月份火绒安全实验室发布的《成熟后门在野外“泛滥”,加载Rootkit对抗杀软》文章中提到的后门模块逻辑相同,具体细节可查看往期分析报告。
![](http://resources.yxfzedu.com/images/article_images/742969_BS6N4CHHDWEJZPU.jpg)
相似度
二、附录
C&C:
![](http://resources.yxfzedu.com/images/article_images/742969_R2KQZ8DZMWKQR7D.jpg)
HASH:
![](http://resources.yxfzedu.com/images/article_images/742969_9UVJPKNXPUMTZMJ.jpg)