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消除了整数溢出。