Windows 10中的DHCP:症结破绽CVE-2019-0726详细分析 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

Windows 10中的DHCP:症结破绽CVE-2019-0726详细分析

申博_安全预警 申博 123次浏览 已收录 0个评论

当Windows的1月更新宣布时,民众均对DHCP客户端中的CVE-2019-0547破绽的音讯所震动。极高的CVSS评分伴随着微软没有马上宣布可应用性指数评价这一现实使得用户一时难以决议是不是须要马上更新其体系。一些出版物以至推想,可应用性指数的缺失注解在不久的将来会涌现伤害极大的破绽应用。

MaxPatrol等处理方案可以或许辨认收集上的哪些盘算机轻易遭到某些进击。其他处理方案若要检测此类进击是不是能起作用,须要形貌识产物中的破绽划定规矩并检测这些产物的进击划定规矩。反过来,关于破绽我们都邑找出应用的要领和前提。换句话说,与简朴引见破绽的网站活CVE中的形貌中找到的内容比拟,圆满应用此破绽须要我们对其越发深切和周全的明白,比方:

此破绽的原因是操纵体系毛病地处置惩罚内存中的对象。

因而,要运用针对DHCP中新发明的破绽的进击检测划定规矩来更新我们的产物,我们须要深切相识破绽一切细节。 关于二进制破绽,我们一般可以或许经由历程运用patch-diff来处理位于其根目录的毛病,patch-diff对照并辨认由特定补钉或更新对应用顺序、库或操纵体系内核的二进制代码所做的变动。 然则第一步永远是举行开端实验。

破绽初探

我们起首须要测试搜刮引擎,查询以后已知的有关此破绽的一切内容。 个中大局部是从MSRC网站上宣布的第一手信息。 这类状况是Microsoft破绽处于内部处置惩罚时的典范状况。

互联网的搜刮资估中,我们发明我们正在处置惩罚在Windows 10版本1803上运转的客户端和效劳器体系中包罗内存破坏破绽,而且当进击者向DHCP客户端发送特制相应时它会显现。 几天后,该页面涌现了指数评级:

我们可以或许看到,MSRC的评级为2。这意味着毛病很多是弗成应用的,或许应用它是好不轻易而且须要消费很多精神。弗成否认,微软很少涌现云云低分的习气。因而,我们假定若是此评分注解应用不太可以或许,那可以或许就是真的。我们可以或许仅仅完成剖析事情。然则细致搜检破绽并检察破绽怎样应用总会有收成。

在统一站点上,我们下载以.msu存档供应的补钉,将其解压缩并查找最有可以或许与客户端DHCP相应处置惩罚相干的文件。如今供应的更新不是作为修复特定毛病的零丁包,而是作为包罗一切每一个月修复的单个包。这使得我们必需处置惩罚很多无关变量以找到所需数据。

在过量的文件中,我们的搜刮涌现了几个与过滤器婚配的库,我们将它们与未修补体系上的版本举行对照。 dhcpcore.dll库看起来我们所须要的。同时BinDiff显现出最小的转变:

现实上,此处只对一个函数DodedDomainSearchListData举行了变动。 若是用户熟习DHCP协定及其很少运用的函数,则已知道该函数处置惩罚的列表。

DHCP及其选项

DHCP(RFC 2131|wiki)是一种可扩大的协定,其可扩大性经由历程options字段完成。 每一个选项由独一符号(编号,标识符),选项中包罗了数据巨细以及数据自身形貌。 这是典范的收集协定,而且在协定中“插进去”域搜刮选项,其在RFC 3397中举行形貌。它允许DHCP效劳器在客户端上设置规范域名末端。 这些将用作以这类体式格局设置的衔接的DNS后缀。

比方,假定在我们的客户端上我们设置了以下称号末端:

.microsoft.com
.wikipedia.org

Windows 10中的DHCP:症结破绽CVE-2019-0726详细分析

然后,在按域名肯定地点的实验中,这些末端将逐一插进去DNS要求,直到找到婚配为止。 比方,若是用户在浏览器地点栏中键入ru,则起首为ru.microsoft.com构成DNS要求,然后为ru.wikipedia.org构成DNS要求:

Windows 10中的DHCP:症结破绽CVE-2019-0726详细分析

现实上,古代浏览器是异常智能的,因而它们经由历程重定向到搜刮引擎来对类似于FQDN的称号作出反应。 因而,我们稍后将供应较少实用顺序的输出:

读者可以或许会以为这是破绽的素质。 就其自身而言,当收集上的任何装备都可以或许辨认时,运用DHCP效劳器变动DNS后缀的才能对运用DHCP要求任何收集参数的客户端构成威胁。 但那还不是悉数。 从RFC中可以或许显着看出,这被以为是异常正当且记录在案的行动。 现实上,DHCP效劳器是一个可托组件,可以或许影响衔接到它的装备。

域搜刮选项

域搜刮选项号为0x77。 与一切选项一样,它带有选项号的单字节符号编码。 和大多数选项一样,标签背面随着巨细的单字节巨细的数据。 DHCP音讯可以或许包罗多个选项副本。 在这类状况下,来自一切这些局部的数据以与音讯中雷同的递次衔接。

Windows 10中的DHCP:症结破绽CVE-2019-0726详细分析

在取自RFC 3397的示例中,数据被分红三个局部,每一个局部包罗9个字节。 从图中可以或许看出,完全域名中的子域名运用单字节称号长度编码,后跟称号自身。 完全的域名代码以空字节末端(子域名的空值巨细)。

另外,该选项运用最简朴的数据压缩要领:从新剖析点。 该字段可以或许包罗0xc0,而不是域名巨细。 然后,下一个字节将竖立相对用于搜刮域名末端的选项的数据开首的偏移量。
因而,在我们的示例中,我们有一个包罗两个域后缀的编码列表:

.eng.apple.com
.marketing.apple.com

DecodeDomainSearchListData函数

数字为0x77的DHCP选项允许效劳器在客户端上设置DNS后缀。但不适用于装有Windows操纵体系的盘算机。传统上,Microsoft体系疏忽了此选项,因而在必要时,运用组策略在历史上完毕了DNS称号。但近来,当Windows 10版本1803的新版本引入域搜刮选项处置惩罚时,状况发作了转变。以下所示,dhcpcore.dll中的函数称号已变动,它是包罗毛病的增加的处置惩罚顺序自身。

如今让我们最先事情吧。梳理一下代码,这就是我们找到的。正如人们可以或许猜到的那样,DecodeDomainSearchListData历程解码来自效劳器的音讯的域搜刮选项中的数据。作为输入,它接纳如前所述打包的数据数组,并输出以空字符末端的字符串,个中包罗以逗号分开的域名末端列表。比方,该函数将上述示例中的数据转换为以下字符串:

eng.apple.com,marketing.apple.com

CVE-2019-1821:思科Prime企业局域网管理器 远程代码执行

前言 不是所有目录遍历漏洞危害都相同,取决于遍历的用法以及用户交互程度。正如你将看到,本文的这个漏洞类在代码中非常难发现,但可以造成巨大的影响。 这个漏洞存在于思科Prime Infrastructure项目,思科为其申请编号:CVE-2019-1821。因为我无法测试新补丁(我没有思科的证件),不清楚漏洞补丁的具体情况,因此我决定分享漏洞详情,希望有人可以验证补丁的稳定性。 TL;DR 在这篇文章我会讨论CVE-2019-1821的挖掘过程并演示攻击,该漏洞属于未经身份验证的服务器端远程代码执行漏洞。 思科Prime Infrastructure 思科官网是这样描述Prime Infrastructure(PI)的: 思科Prime Infrastructure可以帮助你简化工作,自动化管理任务,它结合了思科网络智能设备的精华。思科Prime Infrastructure的特性和功能可以帮助你整合产品,通过网络实现移动端协作,简化WLAN管理… 老实说,我仍不知道它到底是干嘛的,于是我转到维基百科查找词条: 思科Prime是一个网络管理软件套件,由思科系统的其他软件一起构成。其中大部分软件服务于企业或服务提供商网络。 发现目标 这个漏洞是我在PI-APL-3.4.0.0.348-1-K9.iso (d513031f481042092d14b77cd03cbe75)上复现Pedro的CVE-2018-15379时偶

DecodeDomainSearchListData是经由历程UpdateDomainSearchOption函数挪用的,此函数将返回的列表写入注册表项的“DhcpDomainSearchList”参数中:

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

它存储特定收集接口的重要参数。

DecodeDomainSearchListData函数举行两次通报。 在第一次通报时,它实行除输入缓冲区以外的一切操纵。 以是第一遍用于盘算生存返回数据所需的内存巨细。 在第二遍中,为该数据分派存储器并添补分派的存储器。 该函数不是太大 – 约莫250条指令 – 它的重要事情是处置惩罚输入流中字符的三种可以或许变体中的每一种:1)0x00,2)0xc0或3)一切值。 与DHCP相干的毛病的修复归结为在第二遍最先时增加对效果缓冲区巨细的搜检。 若是巨细为零,则不为缓冲区分派内存,而且该函数完成实行并返回毛病:

因而,只有当目的缓冲区的巨细为零时,破绽才会显现出来。 而且在一最先该函数搜检其输入,其巨细不克不及小于两个字节。 因而,应用须要找到以输出缓冲区的巨细等于零的体式格局构成的非空域后缀选项。

进击历程

我们起首想到的是运用重剖析来确保非空输入数据天生一个空的输出字符串:

Windows 10中的DHCP:症结破绽CVE-2019-0726详细分析

设置为运用具有此类内容的选项举行相应的效劳器确切会致使对未更新的客户端的接见争执。当函数剖析局部完全域名时,它会将该局部复制到目的缓冲区并附加句点。 在RFC的此示例中,以下数据将按以下递次复制到缓冲区:

1). eng.

2). eng.apple.

3). eng.apple.com.

然后,当在输入数据中碰到零域巨细时,该函数将目的缓冲区中的前一个字符从句点变动为逗号:

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

当进击者发送如上所述构成的缓冲区时会发作甚么?从示例中我们可以或许看到它包罗的列表由单个元素构成 – 一个空字符串。在第一次通报时,该函数盘算输出数据巨细。由于数据不包罗任何非零域名,因而巨细为零。

在第二遍中,为数据分派堆内存块并复制数据。但剖析函数会马上碰到指导域名末端的空字符,因而,如前所述,它会将前一个字符从句点变动为逗号。然后我们碰到了题目。目的缓冲区迭代器设置为零。前一个字符属于堆内存块的标头。此字符将变动为0x2c,这里是一个逗号。

然则,这仅在32位体系上发作。运用unsigned int存储目的缓冲区迭代器的以后地位会致使处置惩罚x64体系时发作变动。让我们更细致地看一下卖力将逗号写入缓冲区的代码片断:

运用32位寄存器eax从以后地位减去,但在寻址缓冲区时,代码寻址完全的64位寄存器rax。在AMD64架构上,任何具有32位寄存器的操纵都邑将寄存器的高半字清零。这意味着rax寄存器将在减法存储0xffffffff以后成为非-1。因而,在64位体系上,值0x2c将写入地点buf [0xffffffff],这是在为缓冲区分派的内存以外。

这些发明与Microsoft的可应用性评分密切相干,由于要应用此破绽,进击者必需进修怎样在DHCP客户端上实行长途堆进击,以及对堆内存分派举行充足掌握以确保预设值(即,逗号和句号)被写入准备好的地点并引发可控的晦气影响。

不然,将数据写入未经搜检的地点将致使svchost.exe历程失利,个中包罗以后可以或许托管的一切效劳,以及操纵体系随后从新启动这些效劳。若是状况允许,进击者也可以或许应用这一上风。

CVE-2019-0726

若是我们细致检察致使毛病的数据类型并将该数据与毛病发作举行对照,我们可以或许看到域名列表已发作变动,即天生的缓冲区巨细不会为零, 但我们仍然会实验将其写入缓冲区。 为此,列表的第一个元素必需是空字符串,而一切其他元素可以或许包罗名义域名。 比方:

Windows 10中的DHCP:症结破绽CVE-2019-0726详细分析

该选项包罗两个元素。 第一个域后缀为空,它马上以空字节完毕。 第二个后缀是.ru。 盘算出的输出字符串巨细为3个字节。同时,数据开首的零将强迫函数将逗号写为效果字符串中的前一个字符,但由于迭代器在字符串中的以后地位是零,它将在分派的缓冲区以外写入。

如今我们须要经由历程现实测试来确认我们的理论效果。 让我们模仿一个DHCP效劳器运用带有present选项的音讯相应客户端要求的状况,当我实验在为效果字符串分派的缓冲区的0xffffffff地位写一个逗号时,我们马上发明异常:

这里寄存器r8包罗一个指向传入选项的指针,rdi包罗分派的目的缓冲区的地点,而rax包罗该缓冲区中必需写入字符的地位。这些是我们在安装了一切更新的体系上取得的效果。

 


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明Windows 10中的DHCP:症结破绽CVE-2019-0726详细分析
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址