在流量层面对smb漏洞CVE-2020-0796的检测
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
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
评论3次
这样误报应该挺大的吧
有用sonrt/suricata等开源ids检测这个规则的匹配情况嘛?
这种规则对POC是无法检测的。POC是正常请求看回包中是否有那个带漏洞的标识