安天剖析微软SMBv3高风险漏洞并发布免疫工具

时间 :  2020年03月17日  来源:  安天CERT


1 概述


        2020年3月11日,微软在3月的安全更新中发布了一个位于Server Message Block 3.1.1(SMBv3)网络通信协议的远程代码执行漏洞,漏洞编号为CVE-2020-0796,但并未在更新中修复此漏洞。次日,微软发布CVE-2020-0796专项补丁。成功利用此漏洞的攻击者能够在目标服务器或客户端上执行任意代码,类似“永恒之蓝”漏洞,该漏洞存在被恶意代码利用进行大范围传播的风险,威胁等级高。

2 漏洞描述


        该漏洞是由于SMBv3协议中处理压缩消息时未进行严格安全检查所导致的。针对服务器,攻击者可以通过发送特制数据包至目标服务器以利用此漏洞;针对客户端,攻击者可以通过配置恶意SMBv3服务器,并诱使用户连接到该服务器以利用此漏洞。目前有网友已经在Github上公开了该漏洞的检测工具。

3 受影响范围


        主要受影响的Windows版本如下:

         Windows 10 Version 1903 for 32-bit Systems

         Windows 10 Version 1903 for x64-based Systems

         Windows 10 Version 1903 for ARM64-based Systems

         Windows Server, Version 1903 (Server Core installation)

         Windows 10 Version 1909 for 32-bit Systems

         Windows 10 Version 1909 for x64-based Systems

         Windows 10 Version 1909 for ARM64-based Systems

         Windows Server, Version 1909 (Server Core installation)

4 漏洞原理分析


        SMB 3.1.1协议出现时间较晚,由Windows 10 1903引入(2019年5月)。此协议涉及的模块包括mrxsmb20.sys、srv2.sys、srvnet.sys等。此次问题和永恒系列一样,也是出现在srv2.sys这个文件中。

        在SMB 3.1.1协议中,引入了数据压缩传输的概念,以求能够提高传输效率。但在解压缩时,由于考虑不严谨导致出现此次问题,而修补后的代码加入了长度范围验证,具体对比如下:

图 4-1 产生溢出漏洞的代码

图 4-2 打补丁后的代码

        srv2.sys文件中负责解压缩的代码使用函数SrvNetAllocateBuffer(srvnet.sys)申请内存,内存长度由传输数据(详见下文)中OriginalSize和Offset相加得到。

图 4-3 产生溢出漏洞的代码

        SMB2协议中关于压缩类型数据包定义如下图:

图 4-4 SMB2_COMPRESSION_TRANSFORM_HEADER

        从上图可以看到,此数据包目前只存在于SMB 3.1.1中。

        申请的内存长度类型为unsigned int,传输数据中OriginalSize和offset也都是unsigned int 类型。如没有进行范围验证,则可能产生溢出。

        在调试中产生溢出的代码上下文如下图所示。

图 4-5 windbg调试漏洞代码

5 修复及缓解建议


➢ 更新补丁

        微软已经发布了针对该漏洞的补丁,可通过微软官网下载相应补丁并安装更新(https://www.catalog.update.microsoft.com/Search.aspx?q=KB4551762)。

        安天建议通过安天智甲一键扫描漏洞并下载补丁进行修复。

图5-1 安天智甲检测漏洞

➢ 禁用SMBv3压缩功能

        安天针对此漏洞发布了免疫工具,使用此工具可禁用SMBv3压缩功能,以阻止攻击者对CVE-2020-0796漏洞的利用,同时也可以通过工具下载相应补丁,修复漏洞。

        可访问安天创意论坛下载本工具:

        下载链接:https://bbs.antiy.cn/forum.php?mod=viewthread&tid=83848

<微信扫描二维码进入安天创意论坛下载工具>

图5-2 CVE-2020-0796免疫工具

        另外也可通过以下PowerShell命令暂时禁用SMBv3压缩功能:

        (1)禁用命令:Set-ItemProperty -Path

        "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" DisableCompression -Type DWORD -Value 1 -Force

        (2)启用命令:Set-ItemProperty -Path

        "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" DisableCompression -Type DWORD -Value 0 -Force

        执行后无需重启,但此种方式无法防护针对SMB客户端的攻击。

        ➢ 针对企业网络管理员的建议

        对于企业网络管理员,若企业IDS设备支持snort规则,可通过添加以下snort规则来实现对SMBv3压缩通信的监测:

        alert tcp any any -> any 445 (msg:"Windows SMBv3 Client/Server Remote Code Execution Vulnerability CVE-2020-0796"; content:"|FC|SMB"; offset: 0; depth: 10; sid:9000001; rev:1.0; reference:url, portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0796; reference:url, www.catalog.update.microsoft.com/Search.aspx?q=KB4551762;)

        alert tcp any 445 -> any any (msg:"Windows SMBv3 Client/Server Remote Code Execution Vulnerability CVE-2020-0796"; content:" |FC|SMB"; offset: 0; depth: 10; sid:9000002; rev:1.0; reference:url, portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0796; reference:url, www.catalog.update.microsoft.com/Search.aspx?q=KB4551762;)

6 参考资料


        [1] CVE-2020-0796 | Windows SMBv3 Client/Server Remote Code Execution Vulnerability

        https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0796

        [2] Microsoft Update Catalog

        https://www.catalog.update.microsoft.com/Search.aspx?q=KB4551762