SMBGhost漏洞概述(CVE-2020-0796)

漏洞简介:

该漏洞是由于SMBv3在处理 恶意伪造的压缩数据包 时出现的错误引发的,从而造成SMB服务器的缓冲区溢出。成功利用该漏洞的攻击者可以在目标SMB服务器或客户端上执行代码。

漏洞原理:

该漏洞其实是Windows 10 1903/1909 SMB3压缩功能里的一个bug。从 SMB 3.1.1 开始,加入了允许客户端或者服务器发送压缩包的功能,并且可以选择最适合压缩SMB3消息的方法。前提是,在客户端和服务端进行SMB会话的时候,双方都必须包含SMB2_COMPRESSION_CAPABILITIES 这个数据块。

Microsoft的文档对此有清晰地描述:

MS-SMB2 2.2.3.1.3

漏洞利用:

攻击者首先利用恶意脚本与目标SMB服务器建立连接,并发送一个压缩的认证请求,该请求携带一个转换头部,而转换头包含错误的偏移量字段。这种请求包会使目标主机上的解压缩程序缓冲区溢出,从而导致系统崩溃。

这个转换头很小,只有16字节那么大;但作为一个数据结构,含有以下字段:一个幻数值、未压缩的数据大小、使用的压缩算法和一个偏移值。

该漏洞出现的根源,是缺乏对偏移量边界的检查,这个偏移量用处很多,很多时候会直接传递给子程序使用。传递一个超大的值会引致缓冲区溢出,进而把内核搞崩溃。

漏洞影响版本:

Windows 10版本1903(用于32位系统)

Windows 10版本1903(用于基于ARM64的系统)

Windows 10版本1903(用于基于x64的系统)

Windows 10版本1909(用于32位系统)

Windows 10版本1909(用于基于ARM64的系统)

Windows 10版本1909(用于)基于x64的系统

Windows Server 1903版(服务器核心安装)

Windows Server 1909版(服务器核心安装)

漏洞检测:

https://github.com/cve-2020-0796/cve-2020-0796

漏洞复现:

DDOS POC:https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/48216.zip

安装依赖:

python3 -m pip install -r requirements-test.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

python3 -m pip install ntlm_auth -i https://pypi.tuna.tsinghua.edu.cn/simple

用法:python3 CVE-2020-0796.py <IP/ServerName>
图片
修复建议:

(1)注册表禁用SMBv3压缩,在客户端计算机和防火墙上拦截445 TCP端口来解决这一问题。禁用的方法为:

  1. 找到注册表HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters

  2. 创建一个名为DWORD的值

  3. 将该值设为0

(2)使用Powershell禁用SMBv3压缩

Set-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters” DisableCompression -Type DWORD -Value 1 -Force

(启用:

Set-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters” DisableCompression -Type DWORD -Value 0 -Force

(3)打补丁:该补丁以KB4551762的形式提供,是Windows 10 1903和1909版以及Windows Server 2019 1903和1909版的更新。

参考资料: