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

时间 :  2020年03月13日  来源:  安天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