干货!CVE-2020-0796漏洞技术分析

2020-03-13 18:48:05
最新的Windows 10中,在处理SMB 3.1.1协议的压缩消息时,对头部数据没有做任何安全检查,直接使用,从而引发内存破坏漏洞。黑客无须任何权限,即可利用该漏洞实现远程内核代码执行。受黑客攻击的目标系统只需开机在线,即有可能被入侵。

一、漏洞分析

【漏洞描述】

最新的Windows 10中,在处理SMB 3.1.1协议的压缩消息时,对头部数据没有做任何安全检查,直接使用,从而引发内存破坏漏洞。黑客无须任何权限,即可利用该漏洞实现远程内核代码执行。受黑客攻击的目标系统只需开机在线,即有可能被入侵。


腾讯安全团队研究发现,除了直接攻击SMB服务端造成任意代码执行外,该漏洞还存在于SMB客户端,这使得黑客可以构造恶意的SMB服务器,并通过网页、压缩包、共享目录、OFFICE文档等多种方式传递给目标用户,触发漏洞进行攻击,即使目标机器已经禁用SMB压缩功能,甚至关闭了445端口,仍然会受到威胁,仍然会触发漏洞。

【漏洞成因】

Windows 10 v1903/Windows Server v1903开始,微软在协议SMB 3.1.1中开启了对数据压缩传输的支持,本次漏洞成因是SMB客户端及服务端在准备解压数据时,没有对COMPRESSION_TRANSFORM_HEADE结构进行安全校验,导致后续代码发生一连串整形溢出、越界读写的漏洞。

【漏洞分析】

服务端漏洞位于srv2.sys

客户端漏洞位于mrxsmb.sys

服务端整形溢出:

SrvNetAllocateBuffer会以OriginalCompressedSegmentSize + Offset的大小申请一段SRVNET_BUFFER,由于COMPRESSION_TRANSFORM_HEADER内存可控,所以2个值可以任意控制,同时x64版本下并没有对OriginalCompressedSegmentSize与最大值0x800134比较:

服务端越界读写:

由于COMPRESSION_TRANSFORM_HEADER内容可控,解压时调用的SmbCompressionDecompress函数又会引用其中数据作为参数,因此可造成如下几种情况:

1. 第二个参数inbuf保存压缩后的数据,计算为compression_transform_header + Offset + 0x10,当Offset过大时,会引发越界读;

2. 第三个参数代表压缩数据大小,计算为OriginalMessageSize - Offset - 0x10,当Offset过大,则会发生负整形溢出;

3. 第四个参数代表保存解压数据的buf,计算为offset + pNetRawBuffer,当Offset过大,则会发生越界写;

缓冲区溢出:

在执行完解压处理,会将压缩数据复制到SRVNET_BUFFER_HDR->pNetRawBuffer处,长度是offset,可控的offset可以对这次memcpy造成溢出,或者说经过一些处理,这里的memcpy其实3个参数都是可控的。

客户端漏洞与服务端漏洞成因相同:

【补丁分析】

微软在解压函数中新调用了两个函数,验证压缩结构的内容是否异常:

补丁在X64系统下在3个位置做了check

1.在申请内存前判断是否发生整形溢出或大于阈值:

If(OriginalCompressedSegmentSize + offset < OriginalCompressedSegmentSize)

     整形溢出!!

2.If(OriginalCompressedSegmentSize + offset > MAX_SIZE)

     数据异常!!

3.在调用系统解压函数前判断offset是否过大:

If(offset >SMBMessageSize – 0x10)

     整形溢出!!如果offset再大点,越界读写!!

二、攻击面研究

腾讯安全团队经过研究发现,除了主动发送攻击SMB数据包外,由于上层应用程序对SMB协议的支持,导致很多主流的应用如Office文档、IE浏览器、文件夹(Desktop.ini)等都会受到漏洞影响,同时受害者本地无需开启445端口:

利用Office文档钓鱼:

利用浏览器钓鱼:

利用文件夹(Desktop.ini)投递:

三、无损检测

腾讯安全全球率先推出SMB远程代码执行漏洞扫描工具,管理员使用该工具可远程检测终端计算机系统是否存在安全漏洞,是否打过补丁,是否只采用了禁用压缩这种临时缓解方案。

企业用户可以按下文的提示联系腾讯安全团队索取无损检测工具。

四、漏洞防御方案

企业用户:

1.    推荐企业采用腾讯T-Sec 网络资产风险检测系统(腾讯御知)全面检测企业网络资产是否受安全漏洞影响。 


腾讯T-Sec 网络资产风险检测系统(腾讯御知)是一款自动探测企业网络资产并识别其风险的产品。可全方位监控企业网站、云主机、小程序等资产存在的风险,包含弱口令检测、Web 漏洞扫描、违规敏感内容检测、网站篡改检测、挂马挖矿检测等多类资产风险。

  

企业用户可扫描以下二维码,免费使用腾讯T-Sec 网络资产风险检测系统(yuzhi.qq.com)。

2.    腾讯T-Sec终端安全管理系统(御点)已率先升级,可拦截利用该漏洞的攻击:

企业网管还可采用腾讯T-Sec终端安全管理系统(御点)的全网漏洞扫描修复功能,全网统一扫描、安装KB4551762补丁。

部署腾讯T-Sec终端安全管理系统(御点)拦截病毒木马入侵,更多信息可参考链接:https://s.tencent.com/product/yd/index.html

 

3.    推荐企业用户部署腾讯T-Sec高级威胁检测系统(腾讯御界)对黑客攻击行为进行检测。

腾讯安全T-Sec高级威胁检测系统,是基于腾讯安全能力、依托腾讯在云和端的海量数据,研发出的独特威胁情报和恶意检测模型系统,该系统可及时有效检测黑客对企业网络的各种入侵渗透攻击风险。参考链接:https://cloud.tencent.com/product/nta

 

4.    腾讯安全率先推出SMB远程代码执行漏洞扫描工具,管理员使用该工具可远程检测全网终端是否存在安全漏洞。

为避免被攻击者滥用,获取SMB远程代码漏洞扫描工具须申请,申请流程参考:

https://pc1.gtimg.com/softmgr/files/20200796.docx

5.    企业用户也可使用Windows 更新安装补丁,操作步骤:设置->更新和安全->Windows更新,点击检查更新

个人用户

1.    推荐个人用户采用腾讯电脑管家的漏洞扫描修复功能安装补丁,腾讯电脑管家同时为未安装管家的用户单独提供了SMB远程代码漏洞修复工具

SMB远程远程代码执行漏洞修复工具下载地址:http://dlied6.qq.com/invc/QQPatch/QuickFix_SMB0796.exe

2.  个人用户也可直接运行Windows 更新,完成补丁的安装。操作步骤:设置->更新和安全->Windows更新,点击检查更新

时间线

1.2020311日,国外某厂家发布规则更新,披露疑似SMB严重漏洞;
2. 2020
311日,微软发布临时缓解方案:
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/ADV200005
3.2020
311日,腾讯电脑管家官微发布“CVE-2020-0796:疑似微软SMB协议‘蠕虫级’漏洞初步通告”;
4.2020
312日,微软官方发布CVE-2020-0796安全公告;

5.2020312日晚,腾讯安全发布远程无损检测工具。

参考链接

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

最新资讯