CredSSP加密Oracle修正绕过(CVE-2018-0886)是一个影响Windows远程桌面服务(RDS)和远程桌面连接的高危漏洞,攻击者可以通过中间人方式拦截并篡改CredSSP认证过程中的数据,从而窃取用户凭据或注入恶意代码。微软在2018年3月发布了针对此漏洞的补丁,但该补丁本身存在缺陷,导致部分系统在应用补丁后仍然可以被绕过。核心解决思路是:先正确部署CVE-2018-0886补丁,再通过注册表或组策略强制启用"加密Oracle修正"功能,同时禁用降级策略,从根本上堵住绕过路径。
什么是CredSSP加密Oracle修正绕过漏洞
CredSSP(Credential Security Support Provider)是Windows系统中用于远程连接时传输用户凭据的安全协议。它的工作原理是在客户端和服务器之间建立一个加密通道,确保密码和令牌在传输过程中不被窃取。然而,CredSSP在设计上存在一个被称为"加密Oracle"的问题——当客户端收到服务器发来的加密数据时,如果解密失败,客户端会返回一个错误信息,而这个错误信息本身可以被攻击者利用来逐步推断出加密内容。
CVE-2018-0886正是利用了这个加密Oracle机制。攻击者只需要在客户端和服务器之间充当中间人,反复发送精心构造的数据包,观察客户端返回的错误响应,就能逐步还原出用户的凭据信息。更棘手的是,微软最初发布的补丁并没有完全修复这个问题,攻击者仍然可以通过特定手段绕过补丁的保护,继续实施攻击。这就是所谓的"加密Oracle修正绕过"。
漏洞影响范围和危害等级
该漏洞影响几乎所有运行远程桌面服务的Windows版本,包括Windows 7、Windows 8.1、Windows 10、Windows Server 2008 R2、Windows Server 2012、Windows Server 2012 R2、Windows Server 2016以及Windows Server 2019。只要系统启用了远程桌面功能并且使用CredSSP进行身份验证,就存在被攻击的风险。
从危害等级来看,CVE-2018-0886被评定为CVSS 8.1分,属于高危漏洞。成功利用该漏洞后,攻击者可以获取目标用户的明文密码、NTLM哈希值甚至Kerberos票据,进而横向移动渗透整个内网。对于企业环境中大量使用远程桌面管理服务器的场景,这个漏洞的威胁尤其严重。
微软补丁为什么会被绕过
微软在2018年3月13日发布了安全更新KB4093112(以及后续的KB4093119)来修复CVE-2018-0886。这个补丁的核心思路是在CredSSP协议中增加一个"加密Oracle修正"机制,当检测到解密失败时不再返回详细的错误信息,从而切断攻击者的信息获取渠道。
但问题在于,这个修正机制默认是关闭的。系统管理员需要手动通过注册表或组策略启用它,否则补丁虽然安装了,但修正功能并未生效,攻击者依然可以绕过。此外,部分系统在安装补丁后,由于组策略中存在"允许降级"的配置,CredSSP会自动回退到不安全的旧版本协议,等于把补丁的保护完全废掉了。这就是为什么很多企业明明打了补丁却依然被攻击的根本原因。
具体修复步骤和操作方法
修复这个漏洞需要分三步走:第一步确保补丁已正确安装;第二步强制启用加密Oracle修正;第三步禁用CredSSP降级策略。下面逐一说明。
第一步:确认补丁安装状态
打开命令提示符(以管理员身份运行),输入以下命令检查已安装的更新:
wmic qfe list | findstr "4093112 4093119"
如果没有输出结果,说明补丁未安装,需要前往微软官方更新目录下载并安装对应版本的KB4093112或KB4093119。注意,Windows 7和Windows Server 2008 R2需要额外安装SHA-2支持补丁(KB4474419),否则后续操作会失败。
第二步:通过注册表启用加密Oracle修正
在目标机器上打开注册表编辑器(regedit),定位到以下路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters
如果Parameters键不存在,需要手动创建。然后在右侧新建一个DWORD(32位)值,命名为AllowEncryptionOracle,并将其值设置为2。值为2表示强制启用加密Oracle修正,值为0表示禁用,值为1表示仅审计不强制。
AllowEncryptionOracle = 2 (DWORD)
修改完成后重启计算机使设置生效。对于批量管理的场景,可以通过PowerShell脚本统一部署:
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" -Name "AllowEncryptionOracle" -Value 2 -Type DWord
第三步:禁用CredSSP降级策略
同样在注册表中,定位到:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CredSSP
创建或修改DWORD值AllowEncryptionOracleRemediation,设置为1表示在客户端强制使用修补后的CredSSP,设置为0则允许降级。建议设置为1:
AllowEncryptionOracleRemediation = 1 (DWORD)
如果是通过组策略管理,可以在"计算机配置" → "管理模板" → "系统" → "凭据分配"中找到"加密Oracle修正"策略,将其设置为"已启用"并选择"强制更新"。
使用组策略批量部署的完整方案
对于企业环境中有大量服务器需要修复的情况,手动逐台修改注册表效率太低。推荐使用组策略对象(GPO)进行统一部署。具体步骤如下:
打开组策略管理控制台(gpmc.msc),创建一个新的GPO并链接到包含目标服务器的OU。依次配置以下策略:
1. 计算机配置 → 管理模板 → 系统 → 凭据分配 → "加密Oracle修正":设置为"已启用",状态选择"强制更新"。
2. 计算机配置 → 管理模板 → 系统 → 凭据分配 → "远程服务器允许通过凭据委派进行服务器身份验证的新鲜度":设置为"已启用",值设为"严格"。
3. 计算机配置 → Windows设置 → 安全设置 → 本地策略 → 安全选项 → "网络安全:将NTLM身份验证的会话安全限制为NTLMv2":设置为"已启用"。
配置完成后,在目标机器上运行gpupdate /force强制刷新策略,然后重启验证。
验证修复是否生效
修复完成后,需要验证设置是否真正生效。可以使用以下PowerShell命令检查当前CredSSP状态:
Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" -Name "AllowEncryptionOracle" -ErrorAction SilentlyContinue
返回值为2表示已正确启用。还可以使用专门的检测工具Nartac CredSSP Checker(免费开源工具)进行图形化验证,它会直接告诉你当前系统是否存在漏洞以及修复状态。
另外,可以通过事件查看器检查系统日志。如果CredSSP尝试连接到一个不支持修正的旧版服务器,事件ID 56会记录相关警告信息,这可以帮助你发现内网中还有哪些机器没有完成修复。
常见问题和注意事项
在实际部署过程中,经常会遇到几个棘手的问题。第一个是兼容性问题:启用强制修正后,如果远程连接的目标机器是未打补丁的旧版Windows,连接会直接失败。这是正常的安全行为,但可能影响业务。解决办法是先排查内网所有机器的补丁状态,确保全部更新后再统一启用强制策略。
第二个问题是Windows 7和Server 2008 R2的SHA-2依赖。这些老系统如果没有安装KB4474419,即使装了CVE-2018-0886补丁也无法正常工作,会出现蓝屏或远程连接中断。必须先装SHA-2补丁,再装CredSSP补丁,顺序不能反。
第三个问题是重启时机。注册表修改后必须重启才能生效,而补丁安装也通常需要重启。建议在维护窗口期一次性完成所有操作,避免多次重启影响业务连续性。
纵深防御建议
仅仅修复CredSSP漏洞还不够,应该从整体安全架构角度构建纵深防御。首先,限制远程桌面的访问范围,通过防火墙只允许特定IP访问3389端口,避免暴露在公网。其次,启用网络级别身份验证(NLA),这是RDP连接的第一道防线,可以在CredSSP认证之前就过滤掉大量攻击尝试。
第三,部署多因素认证(MFA),即使凭据被窃取,攻击者没有第二因子也无法登录。第四,定期进行漏洞扫描和渗透测试,确保没有遗漏的老旧系统成为攻击跳板。第五,监控异常的远程登录行为,比如非工作时间的大量RDP连接、来自异常地理位置的登录等,及时发现并响应潜在入侵。
总结
CredSSP加密Oracle修正绕过是一个典型的"补丁打了但没完全修好"的安全问题。核心原因在于微软将修正功能设为默认关闭,需要管理员手动启用。修复的关键动作就是三个:装对补丁、开修正、禁降级。对于企业用户,强烈建议通过组策略统一管理,配合NLA、MFA和网络隔离构建多层防护,不要把安全寄托在单一补丁上。安全永远是一个持续的过程,而不是一次性的操作。
