文章首发地址:
https://xz.aliyun.com/t/15430
文章首发作者:
T0daySeeker
概述
在上两篇《针对LOL玩家的最新钓鱼活动剖析-大量国内玩家受控》及《BlackNET僵尸网络攻击场景复现及通信模型剖析》文章中,笔者对最新针对LOL玩家的钓鱼攻击活动以及开源BlackNET僵尸网络项目进行了详细的技术剖析,接下来,笔者将继续对报告中提到的SilentCryptoMiner挖矿木马进行详细的剖析。
通过对开源SilentCryptoMiner挖矿木马项目进行详细的剖析,笔者发现:
-
原开源项目地址 https://github.com/UnamSanctam/SilentCryptoMiner
,由于目前此开源项目已被Github禁用,因此笔者通过其他渠道找到了SilentCryptoMiner 3.2.0版本的Release程序; -
SilentCryptoMiner挖矿木马配套了WEB管理平台,项目地址为 https://github.com/UnamSanctam/UnamWebPanel
; -
SilentCryptoMiner挖矿木马通过进程注入、rootkit、进程监控等技术,可将被注入的挖矿进程隐藏和长期驻留;
小插曲
由于SilentCryptoMiner的原开源项目已被Github禁用,因此,笔者只能尝试从网络中查找备份项目,在搜索的过程中,笔者也是遇到了一个比较无语的事情,就是通过在Github上直接搜索SilentCryptoMiner字符串,匹配出的项目均带有病毒木马。。。也是醉了。。。 相关截图如下:
SilentCryptoMiner挖矿木马框架
模拟构建
SilentCryptoMiner挖矿木马框架分为WEB面板控制端和远控木马编译器。
WEB面板控制端支持功能如下:
-
查看上线信息,可查看被控主机活动窗口
WEB面板控制端运行页面如下:
远控木马编译器支持对木马程序进行自定义配置。
远控木马编译器运行截图如下:
框架目录剖析
尝试对SilentCryptoMiner挖矿木马框架的目录结构进行剖析,梳理发现:
-
WEB面板控制端:数据库文件存放于/db/unamwebpanel.db文件中; -
远控木马编译器:单个exe程序,运行后将释放gcc编译环境;
WEB面板控制端源码截图如下:
远控木马编译器运行后释放的gcc编译环境截图如下:
SilentCryptoMiner攻击场景复现
生成木马
根据远控木马编译器可实现自定义木马程序配置:
-
Main:配置挖矿信息 -
Connection:矿池信息配置、注入进程配置等; -
Mining:挖矿木马基本功能配置; -
Advanced:挖矿木马高级功能配置(远控地址、上线地址); -
Startup:自启动信息配置,启用watchdog等; -
Assembly:文件描述信息配置 -
Icon:自定义图标 -
Signature -
Options:添加Windos Defender例外、禁用Windows更新、使用Rootkit隐藏挖矿程序等; -
Build:编译木马;
相关截图如下:
编译木马
在生成木马阶段,当点击【Build】按钮后,远控木马编译器即会从自身释放相关目录及文件:
-
UCompilers目录:gcc编译环境 -
UFiles目录:木马程序源代码(编译完后删除) -
xxx.cpp:木马程序源代码(编译完后删除) -
resource.o:木马程序源代码(编译完后删除)
编译操作日志如下:
Starting...
Building miner sets...
Extracting miner files...
Converting resources...
Compiling Miner...
Compiling Uninstaller...
Compiling Checker...
Done!
成功编译后,远控木马编译器将在指定目录生成三个文件:
-
XXX.exe:木马主程序 -
XXX-check.exe:用于检测木马主程序是否运行 -
XXX-uninstaller.exe:用于卸载木马主程序
相关截图如下:
尝试提取编译过程中使用的编译命令,梳理如下:
"C:UsersadminDesktopUCompilersgccbing++.exe" -m64 -Wl,-subsystem,windows -mwindows "123-watchdog.cpp" UFiles*.cpp UFilesSyscalls*.c UFilesSyscallssyscallsstubs.std.x64.s -O3 -static-libgcc -static-libstdc++ -fno-threadsafe-statics -s -o "123-watchdog.exe"
"C:UsersadminDesktopUCompilersgccbing++.exe" -m64 -Wl,-subsystem,windows -mwindows "123.cpp" UFiles*.cpp UFilesSyscalls*.c UFilesSyscallssyscallsstubs.std.x64.s resource.o -O1 -static-libgcc -static-libstdc++ -fno-stack-protector -fno-threadsafe-statics -fvisibility=hidden -Wl,--strip-all -s -o "123.exe"
相关截图如下:
木马上线
在受控主机上直接运行XXX.exe木马程序,即可实现木马上线。上线成功后的WEB面板控制端运行页面如下**(使用Administrator权限运行时,Active Windows显示为Running as System)**,可查看被控主机上的活动窗口:
使用XXX-check.exe即可查看当前木马程序是否运行,若运行,则尝试提取配置信息,相关运行截图如下:
使用XXX-uninstaller.exe即可卸载当前木马程序。卸载后XXX-check.exe运行截图如下:
受控主机
尝试对受控主机进行简单的临检分析,发现不同配置在被控主机中的表现不一样:
-
配置一:默认开启[Main]->[Advanced]->[Stealth Targets]配置
创建explorer.exe进程,向explorer.exe进程注入恶意模块
相关截图如下:
-
配置二:在配置一基础上,开启[Options]->[Use Rootkit(Hide Miner)]、[Options]->[Run as Administrator]配置
使用rootkit向Taskmgr.exe,ProcessHacker.exe,perfmon.exe,procexp.exe,procexp64.exe程序隐藏挖矿进程dialer.exe
相关截图如下:
SilentCryptoMiner木马技术剖析
由于SilentCryptoMiner木马在编译过程中做了一些优化选项,因此导致默认生成的SilentCryptoMiner木马分析起来还是会花费一些时间。
相关优化选项如下:
#优化和静态链接选项
-O1: 启用优化,-O1 是较低级别的优化选项。
-static-libgcc: 静态链接 GCC 库,避免使用动态库版本。
-static-libstdc++: 静态链接 C++ 标准库,避免使用动态库版本。
#安全和其他编译选项
-fno-stack-protector: 禁用栈保护机制(通常用于防止缓冲区溢出攻击)。
-fno-threadsafe-statics: 禁用线程安全静态初始化。
-fvisibility=hidden: 将符号的可见性设置为隐藏,减少符号暴露。
-Wl,--strip-all: 传递给链接器的选项,移除所有符号信息,减小文件体积。
-s: 剥离符号信息,进一步减小文件体积。
管理员权限检查
通过分析,发现样本运行过程中,将调用NtOpenProcessToken、NtQueryInformationToken函数,以检测当前进程是否具备管理员权限。
相关代码截图如下:
获取PEB信息
通过分析,发现样本运行过程中,将获取PEB信息,用于后续获取环境变量,相关代码截图如下:
Windows Defender中添加排除项
通过分析,发现样本运行过程中,将调用powershell命令将UserProfile、ProgramFiles目录添加到Windows Defender的排除项中。
Powershell命令如下:
Add-MpPreference -ExclusionPath @($env:UserProfile, $env:ProgramFiles) -Force
相关代码截图如下:
关闭多个 Windows 服务
通过分析,发现样本运行过程中,将通过执行cmd命令和修改注册表的方式关闭多个Windows服务。
cmd命令如下:
sc stop UsoSvc & sc stop WaaSMedicSvc & sc stop wuauserv & sc stop bits & sc stop dosvc
注册表路径如下:
\Registry\Machine\SYSTEM\CurrentControlSet\Services\UsoSvc
\Registry\Machine\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc
\Registry\Machine\SYSTEM\CurrentControlSet\Services\wuauserv
\Registry\Machine\SYSTEM\CurrentControlSet\Services\BITS
\Registry\Machine\SYSTEM\CurrentControlSet\Services\dosvc
相关命令解析如下:
-
sc stop UsoSvc:停止 UsoSvc(Update Session Orchestrator Service),该服务与 Windows 更新管理有关。 -
重命名RegistryMachineSYSTEMCurrentControlSetServicesUsoSvc注册表为UsoSvc_bkp -
sc stop WaaSMedicSvc:停止 WaaSMedicSvc(Windows Update Medic Service),该服务负责修复 Windows 更新问题。 -
重命名RegistryMachineSYSTEMCurrentControlSetServicesWaaSMedicSvc注册表为WaaSMedicSvc_bkp -
sc stop wuauserv:停止 wuauserv(Windows Update Service),这是负责自动下载和安装 Windows 更新的服务。 -
重命名RegistryMachineSYSTEMCurrentControlSetServiceswuauserv注册表为wuauserv_bkp -
sc stop bits:停止 bits(Background Intelligent Transfer Service),负责后台传输和更新下载任务。 -
重命名RegistryMachineSYSTEMCurrentControlSetServicesBITS注册表为BITS_bkp -
sc stop dosvc:停止 dosvc(Delivery Optimization Service),用于优化 Windows 更新的传输和下载。 -
重命名RegistryMachineSYSTEMCurrentControlSetServicesdosvc注册表为dosvc_bkp
相关代码截图如下:
解密算法
通过分析,发现样本运行过程中,将从自身载荷中解密PE文件,随后将把PE文件注入至进程中。
解密算法:循环异或32字节随机字符
相关代码截图如下:
注入进程
通过分析,发现样本运行过程中,将通过如下方法进行注入:
-
解密rootkit -
将rootkit临时写入%temp%目录 -
创建dialer.exe进程 -
将rootkit注入至dialer.exe进程
相关代码截图如下:
自启动
通过分析,发现样本运行过程中,将通过以下方法实现自启动:
-
执行powershell命令实现根据不同的操作系统版本选择不同的方法来创建计划任务 -
将文件复制至自启动目录 -
启动计划任务 -
退出当前进程
powershell命令如下:
<#bovfveoi#> IF([System.Environment]::OSVersion.Version -lt [System.Version]"6.2") { schtasks /create /f /sc onlogon /rl highest /ru 'System' /tn 'GoogleUpdateTaskMachineQC' /tr '''%S''' } Else { Register-ScheduledTask -Action (New-ScheduledTaskAction -Execute '%S') -Trigger (New-ScheduledTaskTrigger -AtStartup) -Settings (New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DisallowHardTerminate -DontStopIfGoingOnBatteries -DontStopOnIdleEnd -ExecutionTimeLimit (New-TimeSpan -Days 1000)) -TaskName 'GoogleUpdateTaskMachineQC' -User 'System' -RunLevel 'Highest' -Force;
相关代码截图如下:
成功创建计划任务截图如下:
注入watchdog
通过分析,发现样本运行过程中,将通过如下方法注入watchdog监控程序:
-
解密watchdog -
将watchdog临时写入%temp%目录 -
创建dialer.exe进程 -
创建互斥对象:BaseNamedObjectsslbtivpxi -
将watchdog注入至dialer.exe进程
相关代码截图如下:
注入挖矿木马
通过分析,发现样本运行过程中,将通过如下方法注入挖矿程序:
-
解密挖矿程序 -
将挖矿程序临时写入%temp%目录 -
创建dialer.exe进程 -
创建互斥对象:BaseNamedObjectsvlztqluckoqlspci -
挖矿进程运行参数: vlztqluckoqlspci 6E3sjfZq2rJQaxvLPmXgsLarbp/k3bIoZjG0PoksqIhLJJ5yIDhrU0AIwicfJGQnW29JR6ADwqT6UN0iMcS3dvBQZfMAdEGIGlmXXLNLFsBjaLgY+eKmMld3DhJr2ChGQe2XoLgZ2SvHHFGyn6Z8pAQ4hjWHkFK3Ch/3a6pYC4XMCFOdHgN/BrSp9Yy0Xub9nfhBEe5jZ9ibblS7QSx+XzFN+Y8M71qt9OLGqCnZryXT0FEas88VbnOH43MDYo36DQEW0piK5cZlr4RPz6bDRw==
-
将挖矿程序注入至dialer.exe进程
相关代码截图如下:
挖矿木马参数
尝试提取挖矿木马,并对其进行分析,发现挖矿木马运行后,将使用如下方法解密配置信息:
-
Base64解码 -
AES-CBC解密 -
KEY:UXUUXUUXUUCommandULineUUXUUXUUXU -
IV:UUCommandULineUU
原文始发于微信公众号(T0daySeeker):SilentCryptoMiner挖矿木马攻击场景复现及技术剖析