上一篇 下一篇 分享链接 返回 返回顶部

香港服务器的Windows Server 2016如何启用Credential Guard,防止跨境网络环境下的凭证窃取攻击?

发布人:Minchunlin 发布时间:2025-08-22 10:33 阅读量:682


那天凌晨两点,内地—香港专线刚从维护中恢复,几台对外提供 ERP 和跳板登录的 Windows Server 2016 服务器相继上线。安全审计同事丢给我一句话:“跨境登录链路太复杂,RDP 用得多,尽快把 Credential Guard 上起来,别让 LSASS 里的东西被人顺手牵羊。”
我看了看工单,又看了看摆在机柜顶上的螺丝刀——今晚注定不是纯软件活,得从 BIOS 到组策略一路走到底。

我这次的环境与风险模型

物理/虚拟基础(可对照你自己的环境替换)

项目 参数(本次实际) 备注
机型 1U 独服,Xeon Silver 4210R ×1,64GB RAM 支持 VT-x/VT-d
启动 UEFI,Secure Boot 已开启 必要前提
TPM 固件 TPM(PTT)2.0,已激活 非强制,但强烈推荐
存储 NVMe 1.92TB(系统+日志分区分离) 便于开启 BitLocker
OS Windows Server 2016 Datacenter(英文版,核心/桌面混部) 统一补丁水平
网络 香港出口 + IPsec 到内地办公网 + 独立跳板 VLAN 典型跨境场景
虚拟化 部分为物理机、部分为 Hyper-V/VMware VM VM 需额外配置 VBS 支持

威胁模型(简化)

  • 大量跨境 RDP/WinRM/SMB 管理操作 → 存在“传递哈希/票据(PtH/PtT)”风险。
  • 旧运维工具/脚本可能在服务器落地可重放的凭据(WDigest/Nego 缓存)。
  • 被控主机一旦被提权,直接读 LSASS 抓明文/NTLM/票据是最常见的横向入口。

目标:启用 Credential Guard(基于 VBS 的隔离 LSA/LSAISO),把可用于横向移动的敏感凭据隔离在受 Hyper-V 保护的内存中,从源头降低“抓凭据→横移”的可行性。

Credential Guard 工作原理的“运维视角”

VBS(Virtualization-Based Security) 启动后,系统用 Hyper-V 的微型 Hypervisor 在内存中切一片“圈外地带”,跑一个 LSAISO(Isolated LSA)。

本地系统 LSASS 不再直接保管那些“能横移的宝贝”(如 Kerberos TGT、NTLM 派生值),查询时通过受保护的通道向 LSAISO 请求。

即便攻击者拿到 SYSTEM 权限,试图在线 dump LSASS,也只摸到“空袋子”。配合 LSA 保护(RunAsPPL) 与 WDigest 关闭,能显著抬高进攻成本。

启用前的三项硬件/固件前置检查

我是先在现场“干确认,再动配置”,否则半夜一重启,开不了机就是事故。

UEFI + Secure Boot

进入 BIOS/UEFI:开启 UEFI Boot,Secure Boot(一般在 Security 或 Boot 菜单)。

部分主板要先清除旧密钥再装载出厂密钥(Factory Keys)才能启用 Secure Boot。

虚拟化与 IOMMU

Intel VT-x/AMD-V 与 VT-d/AMD-Vi(IOMMU) 都要启用。

这关系到 VBS 的内存隔离和 DMA 保护能力(Server 2016 时代主要是“Secure Boot 模式”,有 IOMMU 更好)。

TPM 2.0(推荐)

打开固件 TPM(PTT/fTPM)并 Activate/Own。

方便把 Credential Guard 和 BitLocker 的保护链打通(度量启动/密钥保护)。

Windows 内快速自检(不开机房门能做的):

# UEFI + Secure Boot
Confirm-SecureBootUEFI
# TPM
Get-Tpm
# 虚拟化支持(核对 Hyper-V 要求项)
systeminfo | findstr /i "Hyper-V"
  • Confirm-SecureBootUEFI 返回 True 即安全启动开启。
  • Get-Tpm 里 TpmPresent/TpmReady/ManagedAuthLevel 看状态。
  • systeminfo 末尾 4 行与 Hyper-V 相关能力全部为 “是/Yes” 最稳。

三条启用路线图(按我现场采用频率排序)

路线 A:组策略(批量/标准化,最推荐)

GPO 路径

计算机配置 → 管理模板 → 系统 → Device Guard → 启用基于虚拟化的安全

启用

  • “基于虚拟化的安全平台安全功能” 选 仅 Secure Boot(Server 2016 一般选这项即可)。
  • “Credential Guard 配置” 选 启用(带 UEFI 锁)(生产机优先),或先 不带 UEFI 锁 做灰度。

应用并重启。重启后 hypervisor 必须启动。

可配套的两个策略(强烈建议一起)

  • 计算机配置 → 管理模板 → 系统 → 本地安全机构 → 将 LSASS 作为受保护进程运行(LSA 保护/RunAsPPL)。
  • 计算机配置 → 管理模板 → 系统 → 凭据分配 → 关闭 WDigest,限制 委派。

路线 B:PowerShell/注册表(Server Core 或半自动化)

灰度期我常用这套,一台台推进,观察兼容性。

# 1) 确保 Hypervisor 启动
bcdedit /set hypervisorlaunchtype Auto

# 2) 打开 VBS(Secure Boot 模式)
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard" -Force | Out-Null
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard" `
  -Name "EnableVirtualizationBasedSecurity" -PropertyType DWord -Value 1 -Force | Out-Null
# 1=仅 Secure Boot,3=Secure Boot+DMA 保护(硬件/IOMMU 支持时)
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard" `
  -Name "RequirePlatformSecurityFeatures" -PropertyType DWord -Value 1 -Force | Out-Null

# 3) 启用 Credential Guard(1=启用并加 UEFI 锁,2=启用不加锁)
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialGuard" -Force | Out-Null
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialGuard" `
  -Name "LsaCfgFlags" -PropertyType DWord -Value 1 -Force | Out-Null

# 4)(推荐)开启 LSA 保护
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Force | Out-Null
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" `
  -Name "RunAsPPL" -PropertyType DWord -Value 1 -Force | Out-Null

# 5)(确认)WDigest 不缓存明文
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" -Force | Out-Null
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" `
  -Name "UseLogonCredential" -PropertyType DWord -Value 0 -Force | Out-Null

Write-Host "配置完成,重启后生效。"

关于“UEFI 锁”:选 1(带锁)后,OS 侧无法直接关闭 Credential Guard,需要改固件/清除安全设置或重装;生产稳,回退不便。灰度可先用 2。

路线 C:在虚拟机内启用(VMware/Hyper-V)

VMware ESXi:虚拟机需 UEFI + Secure Boot,开启 Virtualization Based Security、Expose hardware assisted virtualization、IOMMU/虚拟化 VT-d(版本与硬件需支持)。

Hyper-V:宿主为 Server 2016+;来宾 VM 勾选 Enable Secure Boot(模板选择 Microsoft Windows),必要时打开 vTPM(增强度量/BitLocker 方案)。

云厂商香港区:大多支持 UEFI/Secure Boot/TPMv2 的新一代实例规格;老代实例可能不支持 VBS——评估迁移。

一键体检/开关脚本(我投产用的“保守版”)

用法:先在一台非关键节点跑 -AuditOnly 看结果,再选 -Enable;遇到异常时用 -Report 生成文件回传审计。

function Test-CGStatus {
  $dg = Get-CimInstance -ClassName Win32_DeviceGuard
  [PSCustomObject]@{
    VBSStatus = $dg.VirtualizationBasedSecurityStatus          # 0=Off; 1=SecureBoot; 2=SecureBoot+DMA
    Configured = ($dg.SecurityServicesConfigured -join ',')    # 1=CG; 2=HVCI
    Running    = ($dg.SecurityServicesRunning -join ',')       # 1=CG; 2=HVCI
    SecureBoot = (Confirm-SecureBootUEFI -ErrorAction SilentlyContinue)
    TPM        = (Get-Tpm | Select-Object -ExpandProperty TpmPresent)
    Hypervisor = (bcdedit /enum | findstr /i "hypervisorlaunchtype")
  }
}

param(
  [switch]$AuditOnly, [switch]$Enable, [switch]$Disable, [string]$Report="C:\Temp\CG-Audit.json"
)

if ($AuditOnly) {
  $r = Test-CGStatus
  $null = New-Item -Path (Split-Path $Report) -ItemType Directory -Force
  $r | ConvertTo-Json | Out-File $Report -Encoding UTF8
  Write-Host "审计完成:$Report"
  return
}

if ($Enable) {
  bcdedit /set hypervisorlaunchtype Auto | Out-Null
  New-Item "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard" -Force | Out-Null
  New-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard" -Name EnableVirtualizationBasedSecurity -Type DWord -Value 1 -Force | Out-Null
  New-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard" -Name RequirePlatformSecurityFeatures -Type DWord -Value 1 -Force | Out-Null
  New-Item "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialGuard" -Force | Out-Null
  New-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialGuard" -Name LsaCfgFlags -Type DWord -Value 1 -Force | Out-Null
  New-Item "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Force | Out-Null
  New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name RunAsPPL -Type DWord -Value 1 -Force | Out-Null
  New-Item "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" -Force | Out-Null
  New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" -Name UseLogonCredential -Type DWord -Value 0 -Force | Out-Null
  Write-Host "已启用,重启后生效。"
}

if ($Disable) {
  # 温和回退:不触碰 UEFI 锁,仅将策略/注册表设为关闭
  New-Item "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialGuard" -Force | Out-Null
  New-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialGuard" -Name LsaCfgFlags -Type DWord -Value 0 -Force | Out-Null
  New-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard" -Name EnableVirtualizationBasedSecurity -Type DWord -Value 0 -Force | Out-Null
  Write-Host "已标记为禁用(若曾加 UEFI 锁,仍需固件层面回退)。"
}

验证是否“真的在跑”

方式 1:PowerShell

Get-CimInstance -ClassName Win32_DeviceGuard | fl *

关注:

VirtualizationBasedSecurityStatus:1/2 表示 VBS On(1=Secure Boot,2=Secure Boot+DMA)。

SecurityServicesConfigured 与 SecurityServicesRunning:包含 1 代表 Credential Guard 已配置/已运行。

方式 2:msinfo32

打开 系统信息 → Device Guard 安全服务:应看到 Credential Guard 已运行。

方式 3:事件日志(可选)

应用和服务日志 → Microsoft → Windows → DeviceGuard/Operational中有启动事件。

我遇到的“坑位地图”与当场解法

坑点 现象 根因/定位 现场解法
服务器重启后提示不支持 VBS SecurityServicesConfigured=1Running 为空 BIOS 虽是 UEFI,但 Secure Boot 未真正启用(密钥丢失/自签) 在 UEFI 里恢复出厂 PK/KEK/DB/DBX,再启用 Secure Boot
VMware VM 内 VBS 启不起来 VirtualizationBasedSecurityStatus=0 VM 仍是 Legacy BIOS 或未勾 VBS/Expose VT-x 关机 → 切 UEFI + Secure Boot → 打开 VBS 相关复选项,再开机
装了第三方旧驱动后蓝屏 开启后偶发 HVCI 冲突 老驱动不兼容内核代码完整性(即便只开 CG,部分厂商驱动也误伤) 分阶段:先只开 CG,HVCI 留到兼容性清点后再开
RDP 工具链被策略打断 某些“自动输入密码”的工具失效 Credential Guard + LSA 保护后,某些注入/读取路径不可用 收敛工具链,推行 Remote Credential Guard/凭据委派限制
想回退却发现锁死 政策改回 0 也不生效 UEFI 锁 生效 变更记录要留好。灰度期用 LsaCfgFlags=2;生产一旦锁定,要走固件/重装回退流程

与跨境运维配套的“正确姿势”(把链条补齐)

Remote Credential Guard(客户端侧)

从内地办公网登录香港服务器,要求客户端(Win10/11/Server 2016+)启用 Remote Credential Guard 来替代明文凭据下发。

组策略:计算机配置 → 管理模板 → 系统 → 凭据委派 → 仅使用 Remote Credential Guard。

或在客户端用:mstsc.exe /remoteGuard。

本地管理员口令随机化(LAPS 或 LAPS NG)

避免“同一把本地管理员密码走天下”,防爆破、防横移。

最小化管理会话

推 JEA/PowerShell Just-Enough-Admin,RDP 只进跳板。

SMB/管理共享按需启用,审计纵深做细(进/出站防火墙 + Sysmon)。

BitLocker + TPM

把磁盘落地 dump 的空间收紧,尤其日志/转储分区;TPM 绑定度量启动链。

变更与验证:我在现场的“前后对比”

指标 变更前 启用 CG+LSA 保护 后 备注
本机 LSASS 可读出可用票据/哈希 极低 内存抓取基本失效
登录耗时(域控在香港) 约 2.0 s 约 2.2 s +0.2s,肉眼无感
CPU 峰值(批量 RDP 并发 30 会话) 58% 60% 开销 ≈ 1–2%
故障回退难度 中(UEFI 锁) 灰度期先无锁

以上为我当晚在两组服务器上的实测均值,用作参考;不同硬件与负载结果会有差异。

变更回滚与应急(万一要退)

  • 策略回滚:把 LsaCfgFlags=0、EnableVirtualizationBasedSecurity=0;重启。
  • 已加 UEFI 锁:需到 UEFI/固件里清除安全配置或重新部署 OS 才能完全关闭。
  • 兼容性救火:若只是极个别驱动冲突,先保持 CG 开启,关闭 HVCI(本文默认未强制开启 HVCI)。

交付清单(我给审计和同事的“验收包”)

  • 配置基线:GPO 导出/注册表快照。
  • 验证截图:msinfo32 的 Device Guard 区域、Get-CimInstance Win32_DeviceGuard 输出。
  • 变更记录:哪些服务器加了 UEFI 锁,哪些还在灰度。
  • 应急 SOP:驱动不兼容时的处理顺序与维护窗口申请模板。

清晨五点走出机房,天刚泛白。我在巡检脚本里看着最后一台 Server 2016 报告 SecurityServicesRunning = 1,心里那根弦才松下来。
跨境的链路不会因此变得更短,运维的夜也不会更安稳,但 把凭据离攻击者远远地放在隔离区,至少我们不再把钥匙挂在门上。下一次审计来临时,我有底气摊开这份变更记录,也有勇气把故事讲给后来的人听。

附:关键注册表与含义速查

路径 含义
HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard EnableVirtualizationBasedSecurity 1 开启 VBS
同上 RequirePlatformSecurityFeatures 13 1=仅 Secure Boot;3=加 DMA 保护(硬件支持时)
HKLM\SOFTWARE\Policies\Microsoft\Windows\CredentialGuard LsaCfgFlags 1/2/0 1=启用+UEFI 锁;2=启用无锁;0=禁用
HKLM\SYSTEM\CurrentControlSet\Control\Lsa RunAsPPL 1 LSA 作为受保护进程
HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest UseLogonCredential 0 不缓存明文凭据

最后一句提醒

  • 先灰度,再上 UEFI 锁。
  • 现场硬件差异 很大,VM 与物理机的 VBS 兼容性要分别验证。
  • Credential Guard 不是银弹,把登录链、最小权限、审计一起补上,效果才完整。
目录结构
全文