0x01 CVE-2020-1301简介
该漏洞是SMBv1漏洞影响win7-Win10的所有版本。漏洞原因在srv驱动模块,在处理NT_TRANSACT_IOCTL的
子命令(该命令又是SMB_COM_NT_TRANSACT
命令的子命令),FSCTL_SIS_COPYFILE请求时,没有验证请求中的SI_COPYFILE结构字段,导致随后可能造成造成了整形溢出。与之前的SMBv3漏洞 SMBGhost相比,该漏洞出现在老版本的SMB v1中,触发需要先通过身份认证,危害程度相对小很多。
更准确地说,是SrvSmbNtIoctl函数在处理SI_COPYFILE结构时,仅验证了SourceFileNameLength和DestinationFileNameLength是否有效及它们的最大值,没有验证最小值,而函数中代码,会对两个文件名长度-2,当SourceFileNameLength或DestinationFileNameLength过小时会引发整形溢出,触发漏洞;
详细的分析报告可以参考,此处不再赘述:
https://airbus-cyber-security.com/diving-into-the-smblost-vulnerability-cve-2020-1301/
SMB_COM_NT_TRANSACT
命令的SMB_Parameters
部分:
0x 热补方案思路:
还是WFP网络过滤,FWPM_LAYER_STREAM_V4(同V6)数据流层过滤,判断以下字段:
1.SMB header的ProtocoID;
2.SMB_COM_NT_TRANSACT 命令的SMB_Parameters部分的FunctioN字段为2;
3.FSCTL_SIS_COPYFILE请求对应的值0x00090100;
4.SourceFileNameLength或DestinationFileNameLength任意一个值小于4
以上的条件2,条件3和条件4,需要计算以下,指定字段在数据包中的偏移值