教育数字化知识图谱
打开微信扫一扫
2020 年 3 月 12 日,微软官方发布了 WindowsSMBv3 客户端 / 服务器远程代码执行漏洞的安全更新细节和补丁程序,此漏洞被分配 CVE 编号为 CVE-2020-0796 ,微软官方将此漏洞标记为 “ 被利用可能性高 ” 。
此次更新内容:
6 月 2 日,有国外安全研究员在 GitHub 上公开了一份此漏洞的远程代码执行利用代码,漏洞的现实威胁进一步升级。由于漏洞无需用户验证的特性,可能导致类似 WannaCry 攻击那样蠕虫式的传播。鉴于漏洞危害很大,建议客户尽快安装补丁更新。
漏洞描述
该漏洞为 Microsoft SMBv3 网络通信协议中的预身份验证远程代码执行漏洞。 SMBv3 在处理特定请求时,存在远程代码执行漏洞,该漏洞影响 SMBv3 服务器和 SMBv3 客户端。未经身份验证的攻击者可通过向受影响 SMBv3 服务器发送特制的压缩数据包来利用此漏洞,攻击者还可以通过配置恶意 SMBv3 服务器并诱导用户连接来利用此漏洞,成功利用此漏洞的远程攻击者可在目标机器上执行任意代码。值得注意的是,此漏洞存在客户端访问恶意服务端的利用场景,所以理论上引入了浏览器的攻击面。
微软官方将此漏洞标记为“被利用可能性高”。截至目前,此漏洞已经被修复并分配 CVE 编号为: CVE-2020-0796 ,同时官方已发布修复补丁。很快便有安全专家编写出了可以远程使目标主机稳定蓝屏的 PoC 。
6 月 2 日,有国外安全研究员在 GitHub 上公开了一份此漏洞的远程代码执行利用代码,由于本次公布的是漏洞利用源代码,可以被黑灰产直接修改用于网络攻击。漏洞的现实威胁进一步升级。由于漏洞无需用户验证的特性,可能导致类似 WannaCry 攻击那样蠕虫式的传播。
用户可以使用奇安信 SMBv3 远程代码执行漏洞检测工具检测相关资产是否已经安装对应补丁,检测工具使用方法如下:
影响范围
Windows10 Version 1903 for 32-bit Systems
Windows10 Version 1903 for x64-based Systems
Windows10 Version 1903 for ARM64-based Systems
WindowsServer, Version 1903 (Server Core installation)
Windows10 Version 1909 for 32-bit Systems
Windows10 Version 1909 for x64-based Systems
Windows10 Version 1909 for ARM64-based Systems
WindowsServer, Version 1909 (Server Core installation)
处置建议
Microsoft SMBv3 远程代码执行漏洞( CVE-2020-0796 )处置建议:
目前,微软官方已发布针对此漏洞受影响版本的补丁程序,该安全更新通过更正 SMBv3 协议处理这些特制请求的方式来解决此漏洞。建议用户参考以下链接尽快安装补丁程序:
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0796
如果暂时无法安装补丁程序,可采取临时缓解措施:
一、禁用 SMBv3 compression
用户可使用以下 PowerShell 命令禁用 compression 功能,以阻止未经身份验证的攻击者利用此漏洞来攻击 SMBv3 服务器:
Set-ItemProperty-Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters"DisableCompression -Type DWORD -Value 1 -Force
请注意:
1 、进行更改后,无需重新启动。
2 、此解决方法不能防止针对 SMB 客户端的利用。
使用以下 PowerShell 命令可解除禁用 compression :
Set-ItemProperty-Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters"DisableCompression -Type DWORD -Value 0 -Force
二、网络端口限制
1 、在企业外围防火墙处阻止 445 端口的连接
TCP 端口 445 用于启动与受影响组件的连接。在网络外围防火墙处阻止此端口将有助于保护位于防火墙后面的系统免受尝试利用此漏洞的攻击。这可以保护网络免受来自企业外围的攻击。在企业范围内阻止受影响的端口是避免基于 Internet 的攻击的最佳防御方法。但是,系统仍可能受到企业内网络的攻击。
2 、遵循 Microsoft 准则以防止 SMB 流量流出公司网络,详情请查阅以下链接:
https://support.microsoft.com/en-us/help/3185535/preventing-smb-traffic-from-lateral-connections
技术分析
此漏洞是一个 SMB 3.1.1 协议栈的整数溢出漏洞,漏洞影响 Windows10 1903 之后的 32 位、 64 位 Windows (不影响 WindowsXP 、 Windows7 ),理论上可以造成远程攻击。经过团队分析验证,在实际环境中远程发包可触发此漏洞,引起内核崩溃,导致蓝屏,容易造成 DOS 攻击。
该漏洞是一个位于 Srv2DecompressData 中的整数溢出漏洞。此函数的反编译如下:
在这行代码:
v7 =SrvNetAllocateBuffer((unsigned int)(Size.m128i_i32[1] + v4.m128i_i32[1]),0i64);
中申请内存时,长度由 (unsigned int)(Size.m128i_i32[1] + v4. m128i_i32[1]) 相加获得,而并没有考虑整数溢出的情况,导致分配的内存过小,从而引起内存溢出,引发崩溃。
具体对应到协议中的 “OriginalCompressedSegmentSize” 值。
(详细见 https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-smb2/1d435f21-9a21-4f4c-828e-624a176cf2a0 )
我们来看下补丁修复的情况:
if ( (signedint)RtlULongAdd(Size.m128i_u32[1], v7.m128i_u32[1], &v19) < 0 )
补丁修复的代码简单有效,用上了 RtlULongAdd 消除了整数溢出。