近期,火绒安全实验室在日常威胁巡视中发现一 GitHub 仓库发布的项目存在病毒风险行为,火绒安全工程师第一时间提取样本进行分析。分析中发现样本会通过多种手段对抗杀软,并最终释放 Remcos 商业远控木马控制受害者机器,且病毒作者仍在积极开发当中。目前,火绒安全产品可对上述病毒进行拦截查杀,请广大用户及时更新病毒库以提高防御能力。
![](upload/attach/202405/742969_36U2READ99S59YM.webp)
火绒 6.0 查杀图
观察到的病毒样本来源于一个名为 "CodeBlock" 的 GitHub 仓库发布的项目,没有任何有关的项目描述,但已有不少受害者中招。调查分析过程中发现该程序利用多层文件进行跳转,利用层层解密进行免杀,除此之外还利用包括 “天堂之门” 在内的多种手段对抗分析。通过最终释放远控木马,攻击者能够执行各种远程操作,从而使用户机器沦为”肉鸡”。
![](upload/attach/202405/742969_RCB7BTZSUHXYKB2.webp)
样本来源仓库
样本执行流程图如下所示:
![](upload/attach/202405/742969_9P47HY5NM4M5FC4.webp)
执行流程图
在此,火绒工程师提醒大家对来历不明的文件应保持警惕,同时安装可靠的安全软件保护设备免受恶意软件和病毒的侵害。目前,火绒 6.0 已上线公测,针对用户的真实应用环境,升级反病毒引擎等核心技术,推出9大硬核功能,可有效解决无文件攻击、系统进程保护、流氓软件等诸多安全问题,为“杀、防、管、控”增强壁垒。欢迎大家前往火绒官方网站下载体验。
一、样本分析
第一阶段分析:
(由于病毒作者的积极开发,样本分析以附录中的 HASH 为准)
从恶意仓库中下载的 "CodeBlock-wallet_v1.3.1.zip" 压缩包内容如下,运行 "CodeBlock-wallet_v1.3.1.exe" 后其只加载 CodeBlock-wallet_v1.3.1-0.bin 和 CodeBlock-wallet_v1.3.1-1.bin 两个文件:
![](upload/attach/202405/742969_9ZXCD2MDG3MPNPD.webp)
解压文件
"CodeBlock-wallet_v1.3.1.exe" 由 Embarcardero Delphi 编译,是 Inno Setup 的引导程序,其会加载同目录下的 CodeBlock-wallet_v1.3.1-0.bin 进行第二阶段 Payload 文件的释放:
![](upload/attach/202405/742969_6M3B5EB6CE4BJYD.webp)
文件信息
![](upload/attach/202405/742969_HV58Z9DJSDDB22S.webp)
Inno Setup 标志
CodeBlock-wallet_v1.3.1-1.bin 是 Payload 的源文件,样本分段读取并解密 CodeBlock-wallet_v1.3.1-1.bin 的内容后,在 C:\Users\Administrator\AppData\Roaming 目录下先以xxxx.tmp 的形式释放,再重命名为 bigmouth.ai、nighttime.xlsx、relay.dll、UIxMarketPlugin.dll、UniversalInstaller.exe,随后执行 UniversalInstaller.exe 开启下一阶段流程:
![](upload/attach/202405/742969_4PD2Y436ZB934GK.webp)
文件重命名
![](upload/attach/202405/742969_6B7PYTP6WMSMS94.webp)
解密文件展示
第二阶段分析:
在前面释放的文件中 UIxMarketPlugin.dll 并没有被加载执行,UniversalInstaller.exe 直接通过 LoadLibraryW 加载同目录下 relay.dll ,调用其 DllMain 函数执行后续主要操作:
![](upload/attach/202405/742969_GV95XV2E422SN75.webp)
加载relay.dll
部分解密逻辑梳理:
relay.dll 的 DllMain 函数会加载同目录下的 nighttime.xlsx 文件并进行解密,先是定位到固定的 D6C0 位置处,获取文件数据区的正向偏移后开始解密 D6C0 处的内容,解密方式是从第 4 位偏移开始,以 DWORD 为单位向前递加,具体细节如下所示:
![](upload/attach/202405/742969_BMEDNSTPCFZCDUS.webp)
解密逻辑
![](upload/attach/202405/742969_PXQCN2MW2X4VP6X.webp)
解密前后对比
解密后的内容中,前面是需要调用的字符串,relay.dll 会分别定位解密数据前面的 3 个字符串 LoadLibraryA、VirtualProtect、dbghelp.dll,获取其函数地址并进行调用,然后加载 dbghelp.dll 进内存空间准备执行后续注入操作:
![](upload/attach/202405/742969_6E295XBDV9WTDCA.webp)
定位字符串并调用
解密后的字节码有很多都是用于标记位置的“偏移值”,在加载 dbghelp.dll 后,会先获取用于定位注入 dbghelp.dll 位置的偏移写入解密代码,再根据“划分数据段的”的偏移限制注入大小,以此“分段”执行——即执行代码位于 dbghelp.dll 中,但相关数据依旧存在于解密空间中:
![](upload/attach/202405/742969_ZQRJ6R7CWWR34X4.webp)
解密内容展示
![](upload/attach/202405/742969_965X6R4TXBRX2R9.webp)
定位及注入逻辑
![](upload/attach/202405/742969_S3EUWVJNXMC5BGN.webp)
注入代码展示
![](upload/attach/202405/742969_AF2DB8MVJ88K8EU.webp)
解密关系图
dbghelp.dll 注入代码分析:
Dump 出解密代码进行分析,其先动态获取所需函数,执行相关初始化操作:
![](upload/attach/202405/742969_39J97H9G2ER5BXJ.webp)
动态获取函数
随后读取同目录下 bigmouth.ai 文件进行第一次解密,第一次解密后 0x8、0xC、0x10 偏移处的值是后续调用 RtlDecompressBuffer 函数解压缩的参数:
![](upload/attach/202405/742969_9N6Y2UNF7VN2M59.webp)
一层解密代码
![](upload/attach/202405/742969_6J4Y4BJ6GHCYET2.webp)
一层解密
解压缩后得到真实的数据和代码,包含前面的数据区和后面的代码区:
![](upload/attach/202405/742969_8254A4PY83H8KK7.webp)
二层解压缩
同样的读取解密代码前面的字符串数据继续执行下一步注入,这里定位解密代码入口点并替换到加载的 pla.dll 的入口点处:
![](upload/attach/202405/742969_WVZJRUD6HD6R9E5.webp)
定位入口点
替换后入口点代码如图所示:
![](upload/attach/202405/742969_2DH4WB3QXJQ6T8D.webp)
注入入口点
pla.dll 注入代码分析:
pla.dll 中注入的解密代码会读取前面数据区中的 ruzNode_test 字符串用于在 C:\Users\Administrator\AppData\Roaming 目录下创建备份文件夹,然后调用 CopyFileW 函数将原先释放的 bigmouth.ai、nighttime.xlsx、relay.dll、UIxMarketPlugin.dll、UniversalInstaller.exe 复制过来作为备份:
![](upload/attach/202405/742969_S9QQ5H2D8EF98XW.webp)
复制文件
![](upload/attach/202405/742969_JV8BRPNYVNBHZRV.webp)
备份文件目录
随后创建以 C:\Users\Administrator\AppData\Roaming\ruzNode_test 目录下的 UniversalInstaller.exe 为主体的执行进程替换 C:\Users\Administrator\AppData\Roaming 目录下的 UniversalInstaller.exe 以执行后续操作:
![](upload/attach/202405/742969_VDGXK3SXYJN9QHU.webp)
替换 UniversalInstaller.exe
新启动的 C:\Users\Administrator\AppData\Roaming\ruzNode_test\UniversalInstaller.exe 会重复上述解密流程,随后继续以类似的逻辑将分段代码注入到 shdocvw.dll 中(这里不再细究),并在该区段内调用 CreateProcessW 函数创建 "C:\Windows\SysWOW64\cmd.exe" 进程用于注入第三阶段 shellcode:
![](upload/attach/202405/742969_X8RT63GT5Y6VXSB.webp)
创建 cmd 进程
![](upload/attach/202405/742969_G8VJ4PQHGRNSSRK.webp)
当前进程关系
天堂之门利用:
在创建 cmd 进程后,为了隐藏 API 的调用痕迹,并干扰安全研究人员分析,还特别调用了天堂之门来 “遮掩” 其内存注入的操作:
![](upload/attach/202405/742969_3QK9EH3ZVVG5BXK.webp)
天堂之门
dump 出的 shellcode 如下,其中传参用的 rcx、rdx、r8、r9 分别由不同的 [rbp-xxh] 来赋予:
![](upload/attach/202405/742969_HDSBDMUD792NZG6.webp)
64 位指令解密
通过天堂之门调用 Ntdll!NtCreateThreadEx、Ntdll!NtWriteVirtualMemory 等 API,将下一阶段 shellcode 以远程线程注入到 "C:\Windows\SysWOW64\cmd.exe" 中——先是将完整的 pla.dll 写入 cmd 的内存空间中,随后再将解密的代码注入到 pla.dll 的 .text 段入口点,最后调用 Ntdll!NtResumeThread 恢复线程:
![](upload/attach/202405/742969_M6QKA9WEQ298C5V.webp)
调用 Ntdll!NtWriteVirtualMemory 展示
![](upload/attach/202405/742969_5EJP6BRE3DY7VE6.webp)
被注入的入口点
其中,与 "C:\Windows\SysWOW64\cmd.exe" 的通信是通过管道进行的,最后会通过管道向 "C:\Windows\SysWOW64\cmd.exe" 写入"\r\n" 使其执行注入的 shellcode:
![](upload/attach/202405/742969_3AACGNYYHFZKB8K.webp)
管道通信
第三阶段分析:
第二阶段的代码在成功注入 "C:\Windows\SysWOW64\cmd.exe" 后会在 "C:\Users\Administrator\AppData\Local\Temp" 目录下释放加密的字节码文件,被注入的 "C:\Windows\SysWOW64\cmd.exe" 在执行过程中会读取该文件的内容并进行解密:
![](upload/attach/202405/742969_HZJXU3C3Y2JQY39.webp)
读取加密文件
![](upload/attach/202405/742969_MRB2PUYK7VKEEJH.webp)
加密内容展示
在解密完成后,还会释放 svcultra_test 到开机启动项目录中,指向 "C:\Users\Administrator\AppData\Roaming\ruzNode_test\UniversalInstaller.exe" 执行持久化操作:
![](upload/attach/202405/742969_7DHGEQSMBNK9DMW.webp)
查看文件属性
![](upload/attach/202405/742969_GX7V2MZ54GGN8WX.webp)
创建链接文件
接着调用 Ntdll!NtCreateFile 在同样是 "C:\Users\Administrator\AppData\Local\Temp" 的目录下创建相应文件准备写入解密内容:
![](upload/attach/202405/742969_HC4YJYQYMHM567Y.webp)
创建解密文件
写入文件调用的函数 NtWriteFile 依旧是通过天堂之门进行调用的:
![](upload/attach/202405/742969_GJ7M96ZAHYHC8NF.webp)
天堂之门
64 位指令如下,由于混淆的原因,调用参数所对应的 [rbp-xxh] 的位置稍微有点偏移:
![](upload/attach/202405/742969_BJMG7DBVX4HUZ4Y.webp)
64 位指令解密
除了 rcx、rdx、r8、r9 外的参数是通过 rdi 和参数数量结合的偏移 [rdi+rax*8-8] 来定位的,如下图所示,写入的解密代码为一个 exe 文件,用于执行后续注入:
![](upload/attach/202405/742969_QAZRDEWZ77MMRZY.webp)
调用 Ntwrite 函数
![](upload/attach/202405/742969_2MZMSF9AQMWJK8C.webp)
解密文件内容
最后创建 "C:\Windows\SysWOW64\explorer.exe" 进程,以同样的方式将解密的 EXE 文件以远程线程的方式注入进去:
![](upload/attach/202405/742969_UY99K4QV2KERE69.webp)
创建 explorer 进程
![](upload/attach/202405/742969_2CN4KQ7BV8XPNQD.webp)
当前进程关系
后门分析:
用于注入 "C:\Windows\SysWOW64\explorer.exe" 进程的 EXE 实际上是一个 Remcos 远控后门,属于 4.9.3 的专业版:
![](upload/attach/202405/742969_NANDS7E6W62BMF6.webp)
Remcos 标识符
Remcos 是一个成熟的远控后门,目前已更新到 4.9.4,是一个商业化的木马,与 cobalt strike 相似,能完全控制受害者机器:
![](upload/attach/202405/742969_WJFY4KXSQZMRZAZ.webp)
官网页面
![](upload/attach/202405/742969_XSTA54U5FSZ4SRN.webp)
官网宣传图
获取到的外联 IP 地址如下:195.54.170.36:22077
![](upload/attach/202405/742969_5DEAXYHVBT44DK2.webp)
外联 IP 获取
二、附录
C&C:
![](upload/attach/202405/742969_TUAJDTS7A2VEPV3.webp)
HASH:
![](upload/attach/202405/742969_6VZJTN5UPBPDWTX.webp)
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
最后于 2024-5-29 10:45
被火绒实验室编辑
,原因: