在流量层面对smb漏洞CVE-2020-0796的检测

2020-07-21 10:00:08 3 4290
1        漏洞信息
1.1        漏洞描述
  该漏洞是位于Server Message Block 3.0(SMBv3)网络通信协议的一个远程代码执行漏洞。SMB v3协议在处理特定请求时的方式中存在远程代码执行漏洞,攻击者可以通过向目标的SMBv3服务发送一个特制的数据包来利用这个漏洞。成功利用该漏洞的攻击者可以在目标SMB服务器或SMB客户端上执行任意代码,获取系统权限。利用这一漏洞会使系统遭受“蠕虫型”攻击,这意味着很容易从一个受害者感染另一个受害者。
1.2        漏洞CNVD编号
暂未收录
1.3        漏洞CVE编号
CVE-2020-0796
1.4        风险等级
高危
2        影响范围
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)
3        漏洞原理
3.1        漏洞成因简述
根据安全通告,与compress有关,所以我们主要查找与compression有关的函数名称。
Srv2DecompressMessageAsync
Srv2DecompressData
Smb2GetHonorCompressionAlgOrder
Smb2SelectCompressionAlgorithm
Smb2ValidateCompressionCapabilities


OriginalCompressedSegmentSize 和OffsetOrLength都为32位int类型数字,并且srv2!Srv2DecompressData用上述两个字段来控制分配内存空间。下面是反汇编
00000001C0017EB2  movq    rcx, xmm0
...
00000001C0017EC8  mov     rax, qword ptr [rsp+58h+Header.ProtocolId]
00000001C0017ECD  xor     edx, edx
00000001C0017ECF  shr     rax, 20h ;  OriginalCompressedSegmentSize
00000001C0017ED3  shr     rcx, 20h ;  OffsetOrLength
00000001C0017ED7  add     ecx, eax
00000001C0017ED9  call    cs:__imp_SrvNetAllocateBuffer
我们可以发现,其中存在integer整数溢出。
3.2 数据溢出分析
SMB数据包


由图可以看出整数溢出所使用的其中一个参数“original decompressed size”由数据包中传入为可控字段,
4.检测思路
整数溢出之后的内存分配导致rce或者蓝屏等。只需要锁定整数溢出溢出所使用关键性参数“original decompressed size”。
由此就好办了,数据包格式已经有了,取值是一定接近0xFFFF的(感兴趣的师傅们可以去看看整数溢出原理)。
最后规则为。匹配数据包的5-8字节为|FC 53 4D 42|  ,匹配11,12字节(“original decompressed size”的头两字节)为|FF FF|。
参考链接
https://paper.seebug.org/1164/#0x05

https://www.cnblogs.com/A66666/p/29635a243378b49ccb485c7a280df989.html

https://paper.seebug.org/1168/#_7

https://blog.csdn.net/RatOnSea/article/details/106399450

关于作者

口算md58篇文章29篇回复

评论3次

要评论?请先  登录  或  注册