随着 VBScript 即将在未来 Windows 版本中默认禁用,微软已启动其分阶段弃用计划,微软已经在 Windows 11 24H2 中将 VBScript 转为按需功能(FOD)。
为帮助组织提前识别风险、减少中断、确保顺利迁移,微软发布了四套涵盖检测、审计与替代策略的企业级 VBScript 使用识别与禁用指南。以下是四种检测策略以及禁用方案:
策略一:使用 Sysmon 检测 VBScript 加载行为
Sysmon(System Monitor) 是 Sysinternals 提供的监控工具,支持对 .dll 加载行为进行细致跟踪。借助其 Event ID 7(Image Load)功能,管理员可以捕捉 vbscript.dll 何时、由哪个进程被加载。
配置 Sysmon 以追踪 vbscript.dll
建议使用最小化规则集聚焦 .dll 加载,配置示例如下:
<Sysmon schemaversion=”4.50″>
<EventFiltering>
<ImageLoad onmatch=”include”>
<ImageLoaded condition=”contains”>vbscript.dll</ImageLoaded>
</ImageLoad>
</EventFiltering>
</Sysmon>
部署步骤包括编辑配置文件、使用 Sysmon64.exe -c 命令加载、验证当前配置。
注意: 在大规模部署前,请在测试环境中评估其性能影响。
Sysmon 可通过 Intune、组策略、Microsoft Configuration Manager 或脚本批量推送。
日志收集与分析技巧
部署后,事件查看器中可通过以下路径查看日志:
应用程序和服务日志 > Microsoft > Windows > Sysmon > Operational
筛选 Event ID 为 7 的事件,并结合 Power BI、Excel 或 SIEM 工具分析其来源。例如:
- 追踪触发进程来源: 结合 Event ID 1(进程创建)还原完整调用链;
- 减少 Web 应用噪声: 对运行经典 ASP 的 IIS,可将 Sysmon 日志与 IIS 日志关联分析。详细说明可参考:IIS 日志筛选文档。
策略二:审查企业中存在的 VBScript 依赖路径
VBScript 通常隐藏在组织的集中式管理流程中,如:
- 组策略(GPO)配置的登录/注销、启动/关机脚本;
- 含 VBScript 的计划任务;
- Intune 部署的 PowerShell 脚本中间接调用的 .vbs 文件。
审核组策略(GPO)
检查以下路径中是否存在 .vbs 文件:
php-template
并分析内容是否调用 wscript.exe、cscript.exe 或直接执行 .vbs 文件。更多细节可参考 GPO 脚本指南。
分析计划任务与 Intune 脚本
使用 PowerShell 枚举计划任务,重点关注路径如 \Microsoft\Windows\ 和自定义组织命名空间。对 Intune 脚本,检查是否存在 PowerShell 中调用 cscript.exe 的情形。
策略三:扫描终端系统上的 .vbs 文件
除了集中管理路径,企业中仍可能存在被遗忘或局部部署的 .vbs 脚本文件。
建议扫描以下常见目录:
- C:\Users\
- C:\ProgramData\
- C:\Program Files\
- C:\Scripts\
- C:\Windows\(可选,注意噪声)
示例 PowerShell 脚本
$pathsToScan = @(“C:\Users”, “C:\ProgramData”, “C:\Scripts”)
$logPath = “C:\VBSScriptScan\VbsFiles_$(hostname).csv”
$results = foreach ($path in $pathsToScan) {
if (Test-Path $path) {
Get-ChildItem -Path $path -Filter *.vbs -Recurse -ErrorAction SilentlyContinue |
Select-Object FullName, LastWriteTime, Length
}
}
$results | Export-Csv -Path $logPath -NoTypeInformation
部署渠道可包括 Intune、GPO 启动脚本、Remote PowerShell、Configuration Manager 等。
策略四:分析 MSI 安装包中的嵌入 VBScript
某些企业内部应用仍通过 .msi 安装包的自定义操作嵌入 VBScript,在安装或卸载过程中触发执行。
检测 MSI 中的 VBScript 自定义操作
以下 PowerShell 脚本可分析 CustomAction 表中类型为 6、38、50 的条目:
Get-ChildItem -Path “C:\MSIRepo” -Recurse -Filter *.msi | ForEach-Object {
$msiPath = $_.FullName
$sql = “SELECT * FROM CustomAction”
$installer = New-Object -ComObject WindowsInstaller.Installer
$database = $installer.GetType().InvokeMember(“OpenDatabase”, “InvokeMethod”, $null, $installer, @($msiPath, 0))
$view = $database.OpenView($sql)
$view.Execute()
$record = $view.Fetch()
while ($record -ne $null) {
$actionName = $record.StringData(1)
$actionType = [int]$record.StringData(2)
if ($actionType -eq 6 -or $actionType -eq 38 -or $actionType -eq 50) {
Write-Output “⚠ VBScript 自定义操作: $actionName in $msiPath”
}
$record = $view.Fetch()
}
}
可扩展策略包括:
- 集中收集 MSI 文件(如从 Intune、ConfigMgr 源);
- 自动化定期扫描任务;
- 报告汇总分析结果;
- 避免使用 Win32_Product,以免触发应用修复。
可辅助查看注册表安装信息:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Where-Object { $_.DisplayName } |
Select-Object DisplayName, InstallDate, Publisher
下一步:识别依赖后实施迁移与禁用
完成检测后,应尽快规划 VBScript 替代方案,例如:
- 使用 PowerShell 重写现有脚本;
- 使用 Task Scheduler、ConfigMgr 或 Intune 替代任务逻辑;
迁移至现代 API 或 WMI 替代调用方式。
提前禁用 VBScript(可选)
确认所有依赖清除后,可执行以下命令从系统中移除 VBScript 功能:
cmd 命令
Dism /Online /Remove-Capability /CapabilityName:VBSCRIPT~~~~
建议通过 Intune、组策略或 Configuration Manager 批量部署。
提醒: 禁用 VBScript 后,相关脚本将全部失效,请先在测试环境中验证兼容性。
VBScript 的正式弃用是 Windows 安全性与现代化的重要一步。通过 Sysmon 跟踪、集中审查、系统扫描及 MSI 分析,企业可全面识别潜在风险并主动迁移。推荐 IT 管理员立即行动,以减少未来系统升级带来的兼容性问题。
via Microsoft
好用的工具又要少一批了。