编者按
1 概述
微软SMBv3远程代码执行漏洞CVE-2020-0796[1](SMB 3.1.1协议中处理压缩消息时,对其中数据没有经过安全检查,直接使用会引发内存破坏漏洞,可能被攻击者利用远程执行任意代码)可被攻击者利用,实现无须权限即可执行远程代码,未经防护的目标系统很有可能被入侵。该漏洞严重程度接近永恒之蓝漏洞,攻击者可以对直接连接到Internet的工控设备与系统发动攻击;同时存在被WannaCry等勒索蠕虫利用的可能,即使是与外部网络隔离的工控网络也可能通过移动介质等渠道感染恶意代码并扩散。
2 漏洞情况
CVE-2020-0796是由该偏移量大小中缺少边界检查导致的,该偏移量大小会被直接传递给多个子例程。传入较大的值将导致缓冲区溢出,并使内核崩溃。通过进一步的工作,可以将其开发为远程代码执行类型的漏洞利用程序。
图 2-1 CVSS 评分[4]
2.1 披露时间
目前暂无成功利用该漏洞的威胁情报信息。
2.2 漏洞影响版本
Windows Server, Version 1909 (Server Core installation)
2.3 漏洞影响范围
在工控系统中,多数操作站、上位机乃至SCADA系统都运行着windows系统,一旦攻击者通过各种攻击手段接触到工控系统内部,多数系统与设备会受到威胁。
3 漏洞原理及复现过程
3.1 漏洞原理
srv2.sys中的Srv2DecompressData函数中存在一个整数溢出错误。当SMB服务器收到格式错误的SMB2_Compression_Transform_Header时,可以触发此漏洞[5]。
3.2 复现过程
图 3-1 格式错误的数据包
首先,我们创建了格式错误的SMB2_Compression_Transform_Header,它的原大小(OriginalSize / OriginalCompressedSegmentSize) 值为0xFFFFFFFF(4294967295),偏移量为0x64(100),如图3-1。数据使用普通的LZ77算法进行了压缩。
图 3-2 IDA截图显示原大小与偏移量相加
图3-2显示了srv2.sys中Srv2DecompressData函数中整数溢出发生的位置。此函数创建一个缓冲区,用于保存解压缩的数据。该函数通过将原大小 (OriginalSize) 加上偏移量(Offset)来计算缓冲区大小,这会导致ECX寄存器中的整数溢出。一旦计算出缓冲区大小,它将数值传递给SrvNetAllocateBuffer函数来分配缓冲区。
图 3-3 整数溢出前后的寄存器
攻击者可借助特制的请求,利用该漏洞造成基于堆的缓冲区溢出,攻击者通过与服务端建立连接,并请求分配内存,服务器响应攻击者并分配内存,攻击者发送特殊消息使服务端缓冲区溢出,导致Web Server发生崩溃。如下图所示:
图 3-4 解压时发生溢出
后来,内核调用了RtlDecompressBufferXpressLz函数来解压缩LZ77数据。图3-4显示,内核使用“ rep movs”指令将0x15f8f(89999)字节的数据复制到缓冲区中,该缓冲区的大小先前分配为0x63(99)字节。这会使小缓冲区溢出,从而导致内存损坏和内核崩溃。
4 漏洞危害及防护建议
4.1 漏洞危害
远程代码执行:攻击者利用该缓冲区溢出漏洞可能导致工业控制系统数据泄露,如软件版本,系统信息、工艺参数等关键数据;也可直接获取操作权限,对工业控制系统正常运行、相关人员的生命财产安全带来严重威胁。
4.2 防护建议
禁止工业控制网络在无防护设备情况下与互联网连接,如必须连接互联网可采取安装工业防护设备(防火墙、网闸等)来限制攻击者的入侵。
参考资源
[1] CVE:CVE-2020-0796
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0796
[2] Microsoft: MS-SMB2 2.2.3.1.3
https://docs.microsoft.com/zh-cn/openspecs/windows_protocols/ms-smb2/78e0c942-ab41-472b-b117-4a95ebe88271
[3] Microsoft: MS-SMB2 2.2.42
https://docs.microsoft.com/zh-cn/openspecs/windows_protocols/ms- smb2/1d435f21-9a21-4f4c-828e-624a176cf2a0
[4] NVD:CVE-2020-0796
https://nvd.nist.gov/vuln/detail/CVE-2020-0796
[5] Threat Research:CVE-2020-0796 Memory Corruption Vulnerability in Windows 10 SMB Server
https://www.fortinet.com/blog/threat-research/cve-2020-0796-memory-corruption-vulnerability-in-windows-10-smb-server.html
[6] Microsoft:KB4551762安全更新
https://www.catalog.update.microsoft.com/Search.aspx?q=KB4551762
往期精选
1 | |
2 | |
3 |