当前位置: 首页 > news >正文

SMBGhost漏洞技术分析与防御方案

事件分析

最近国内外各安全厂商都发布了SMBGhost(CVE-2020-0796)漏洞的预警报告和分析报告,笔者利用周末休息时间也研究了一下,就算是做一个笔记了,分享给大家一起学习下,目前外面研究的POC大部分是通过SMB压缩数据包长度整数溢出之后导致系统Crash,基本也没啥用,估计现在各大厂商的漏洞研究人员和一些技术成熟的黑客组织都在加紧研究RCE完整利用程序吧,这个漏洞能不能完整利用,会不会像永恒之蓝那样,还需要持续研究跟踪,同时也需要关注后面会不会抓到一些利用这个漏洞的在野攻击样本。

漏洞简介

3月12日晚,微软发布安全公告披露了一个最新的SMB远程代码执行漏洞(CVE-2020-0796),该漏洞主要是因为在最新的Windows 10系统中,处理SMB3.1.1协议的压缩消息时,对头部数据没有做任何安全检查,从而引发内存破坏漏洞,黑客利用此漏洞,可无须任何权限的情况下,即可实现远程内核代码执行。

漏洞成因

从Windows10 v1903/Windows Server v1903开始,微软在协议SMB3.1.1中开启了对数据压缩传输的支持,但是由于SMB没有正确处理压缩的数据包,在客户端/服务端解压数据的时候,没有对COMPRESSIN_TRANSFORM_HEADE结构进行安全校验,导致后续代码发生一连串整形溢出、越界读写等漏洞。

影响版本

Windows10 Version 1903 for 32-bit Systems

Windows10 Version 1903 for x64-based Systems

Windows10 Version 1903 for ARM64-based Systems 

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

Windows10 Version 1909 for 32-bit Systems

Windows10 Version 1909 for x64-based Systems

Windows10 Version 1909 for ARM64-based Systems 

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

漏洞捕获

从事漏洞分析与研究的朋友都会时刻关注各大厂商公布的漏洞或补丁信息,从公布的这些漏洞信息与补丁,就可以定位到相应的模块进行分析调试,此前微软发布了各个版本操作系统的CVE-2020-0796的补丁包,如下所示:

查看这个漏洞的细节信息,包含漏洞简介,如下所示:

影响范围,以及相应的补丁下载,如下所示:

缓解措施,如下所示:

漏洞分析

1.分析SMB漏洞,需要对SMB漏洞的结构数据比较熟悉,SMB数据结构,可参考微软的官网,里面有SMB的详细数据结构信息,如下所示:

下载文档之后,查看文档目录中关于对SMB传输压缩数据包头的处理,如下所示:

可以找到COMPRESSION_TRANSFORM_HEADE数据结构,如下所示:

里面各个字段的含义,如下所示:

上面这些信息是分析这个漏洞的基础,一定要弄清楚!

2.漏洞的成因在于SMB在处理接收的压缩数据包时出现的错误,先定位到接收压缩数据后处理函数srv2!Srv2ReceiveHandler,通过上面的分析,我们可以利用COMPRESSION_TRANSFORM_HEADE的结构体中的ProtocolId字段定位到相关的代码处,如下所示:

如果传输的数据为压缩数据,则跳转到解压缩数据处理函数Srv2DecompressData,如下所示:

在Srv2DecompressData函数中,使用SrvNetAllocateBuffer进行内存分配时,未对传入的数据进行校验,会导致整数溢出,然后调用SmbCompressionDecompress函数进行数据解压操作,如下所示:

打过补丁之后,微软修改了这个函数,对传入的值进行三次校验,如下所示:

对比补丁前后的文件中对应的函数,如下所示:

漏洞检测

发送SMB数据包,检测返回的流量数据包特征,如下所示:

构造SMB压缩数据包,SMB数据包头数据,如下所示:

附加上数据压缩算法,如下所示:

检测返回的流量数据包中SMB压缩版本,如下所示:

以及数据包最后的数据,如下所示:

这种检测方法很弱,可能会有误报,目前各厂商的检测方案和工具都没有公布,不然可以逆向分析看看。

防御方案

1.windows自动更新

设置->更新和安全->Windows更新,点击“检查更新”,如下所示:

2.手动安装补丁包

查看自己的电脑Win10操作系统版本,可以按Win+R键,然后键入WINVER命令,如下所示:

确定之后会弹出Win10操作系统版本,我的版本为1809,如下所示:

如果操作系统版本为Windows 10 1903之后,可以根据自己操作系统的版本安装微软提供的对应补丁包程序,下载地址:

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

3.可以手动修改注册表,防止被黑客远程攻击:

按Win+R键,然后键入WINVER命令,打开注册表编辑器,如下所示:

HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters建立一个名为DisableCompression的DWORD,值为1,禁止SMB的压缩功能,如下所示:

普通用户只要用方法二去微软官网下载相应的补丁包,安装补丁包就可以了

参考链接:

1. https://github.com/ClarotyICS/CVE2020-0796

2.https://syntricks.com/cve-2020-0796-aka-smbghost-vulnerability/

3.https://www.synacktiv.com/posts/exploit/im-smbghost-daba-dee-daba-da.html

4.https://github.com/eerykitty/CVE-2020-0796-PoC

5.https://github.com/ioncodes/SMBGhost

相关文章:

  • 【C++干货基地】揭秘C++11常用特性:内联函数 | 范围for | auto自动识别 | nullptr指针空值
  • 向日葵、Todesk、teamviewer等工具远程连接电脑时第三方应用显示白屏
  • 编程笔记 Golang基础 045 math包
  • chrome选项页面options page配置
  • AI网址啊
  • 【css面试题】BFC
  • 通过QScrollArea寻找最后一个弹簧并且设置弹簧大小
  • OpenCV 4基础篇| OpenCV图像的裁切
  • leetcode移除元素
  • AzerothCore安装记录
  • UniApp项目处理小程序分包
  • HarmonyOS 开发之———应用程序入口—UIAbility的使用
  • Java学习--学生管理系统(残破版)
  • 微信小程序云开发教程——墨刀原型工具入门(Axure导入)
  • 【python】遵守 robots.txt 规则的数据爬虫程序
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Druid 在有赞的实践
  • JAVA多线程机制解析-volatilesynchronized
  • Linux各目录及每个目录的详细介绍
  • orm2 中文文档 3.1 模型属性
  • spring学习第二天
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Zsh 开发指南(第十四篇 文件读写)
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 高性能JavaScript阅读简记(三)
  • 工程优化暨babel升级小记
  • 如何设计一个比特币钱包服务
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 双管齐下,VMware的容器新战略
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 小程序开发之路(一)
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #Linux(Source Insight安装及工程建立)
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (ZT)出版业改革:该死的死,该生的生
  • (超详细)语音信号处理之特征提取
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (简单) HDU 2612 Find a way,BFS。
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (四)汇编语言——简单程序
  • (转)项目管理杂谈-我所期望的新人
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .NET Framework .NET Core与 .NET 的区别
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .Net中ListT 泛型转成DataTable、DataSet
  • .NET中两种OCR方式对比
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • [1204 寻找子串位置] 解题报告