如何分析Windows 10中的关键漏洞CVE-2019-0726

发布时间:2021-12-29 19:19:02 作者:柒染
来源:亿速云 阅读:179

如何分析Windows 10中的关键漏洞CVE-2019-0726,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。   

写在前面的话

微软在今年一月份发布的更新,让公众对DHCP客户端中的关键漏洞CVE-2019-0547有了一个新的认识。这个漏洞的CVSS评分非常高,而且微软也没有立即发布相关的可利用性评价,因此用户也很难决定是否需要立即更新他们的系统。但是某些研究人员认为,这个漏洞在不久的将来很可能会被大量网络犯罪分子利用。

因此,为了更好地检测针对DHCP漏洞的攻击以及相关的漏洞,并更新我们的产品,我们需要深入了解所有的细节。而我们要做的第一件事,就是网络侦察。

网络侦查

一开始我们打算使用搜索引擎来寻找关于该漏洞的信息,但并没有找到太多的细节,而且大部分内容都是来自MSRC网站发布的安全公告。不过在浏览这些安全公告的过程中,我们发现我们面对的是Window10(版本1803)中客户端和服务器端系统的一个内存崩溃漏洞,当攻击者向DHCP客户端发送专门设计的响应信息时,就会触发该漏洞。

如何分析Windows 10中的关键漏洞CVE-2019-0726    

我们可以看到,MSRC给出的评分为2,被利用的可能性比较小,这意味着这个漏洞可能无法被利用,或者利用难度大。不过,我们还是想通过自己的分析,看看这个漏洞到底是什么情况。

在这个网站中,我们下载了这个安全更新补丁(.msu文件),将其解压,然后查找跟客户端处理DHCP响应相关的文件。但是这很困难,因为这个补丁包里面包含的是当月修复的所有漏洞补丁,而不是针对单个漏洞的补丁。在大量的文件中,我们用过滤器找到了几个匹配的代码库,然后对系统的版本进行了比较。其中,dhcpcore.dll库是最接近的:

如何分析Windows 10中的关键漏洞CVE-2019-0726    

实际上,只有DecodeDomainSearchListData这个函数进行了较大的改动,如果你熟悉DHCP协议的话,你就会知道它其实很少使用函数。

DecodeDomainSearchListData函数

DHCP中的域名搜索选项号为0x77(119),它允许服务器再客户端上设置DNS后缀,但不适用于Windows设备,因为之前的Windows系统会忽略这个选项。在必要的时候,可以通过组策略来配置DNS的名称后缀。不过Windows 10在新版本1803中引入了针对域名搜索选项的处理库。

如何分析Windows 10中的关键漏洞CVE-2019-0726    

DecodeDomainSearchListData的处理过程如下:首先从服务器端接收信息,然后根据域名搜索选项的配置来解码数据。针对输入,它接收封装好的数据数组,并输出一个以空字节结尾的字符串,这个字符串包含由逗号分隔的域名列表。比如说,该函数会对下面这个域名后缀进行转换:

.eng.apple.com

.marketing.apple.com

eng.apple.com,marketing.apple.com

DecodeDomainSearchListData会在UpdateDomainSearchOption的处理过程中被调用,并将返回的结果列表写入注册表键的"DhcpDomainSearchList"参数中:

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{INTERFACE_GUID}\

然后将主参数存储至特定的网络接口:

如何分析Windows 10中的关键漏洞CVE-2019-0726    

DecodeDomainSearchListData函数会进行两次数据传递。第一次,它会执行除设置输出缓冲区进入点之外的所有操作,即计算保存返回数据所需要的内存大小。第二次,它会为数据分配内存,并进行数据填充。这个函数大约有250条指令,主要任务就是处理传入的字节流。它还会检查缓冲区的大小,如果大小为零,则不会为缓冲区分配内存,并完成执行然后返回错误信息:

如何分析Windows 10中的关键漏洞CVE-2019-0726    

因此,只有当目标缓冲区大小为零时,才可以触发漏洞。

漏洞利用

首先,我们可以使用重解析点来确保非空输入数据生成并输出一个空字符串:

如何分析Windows 10中的关键漏洞CVE-2019-0726    

设置一个服务器来响应内容请求,并让未更新的客户端出现访问冲突。在每一个步骤中,函数完成一部分域名解析时,就会将这部分数据复制到目标缓冲区:

1).eng.2).eng.apple.3).eng.apple.com.

接下来,当数据中出现大小为0的域名时,函数就会将目标缓冲区中的句号改为逗号:

4).eng.apple.com,

然后继续解析:

5).eng.apple.com,marketing.6).eng.apple.com,marketing.apple.7).eng.apple.com,marketing.apple.com.8).eng.apple.com,marketing.apple.com,

输入数据解析完成后,剩下的就是用空字符替换最后的逗号:

9).eng.apple.com,marketing.apple.com

当攻击者发送如上所述的缓冲区数据时会发生什么呢?我们可以看到,它包含的列表是有一个空字符串组成的。那么在函数第一次计算输出数据大小后,由于数据并没有包含非零域名,所以大小为零。在第二次传递时,它会给数据分配堆内存块,并复制数据。但解析函数会立即遇到指示域名结尾的空字符,并将句号改为逗号。

如何分析Windows 10中的关键漏洞CVE-2019-0726    

因此,如果想要利用这个漏洞CVE-2019-0726,攻击者必须要在DHCP客户端上执行远程堆喷射,并对堆内存分布要有完整控制权。否则,将数据写入未选中的地址会导致svchost.exe进程崩溃。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

推荐阅读:
  1. 什么是JAVA编程思想?
  2. Windows Search Indexer 本地提权的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

windows

上一篇:git config RCE CVE-2019-11229的示例分析

下一篇:使用Windows内核提权0Day漏洞的实例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》