标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-3351] 作者: Candy 发表于: [2023-10-25]
本文共 [121] 位读者顶过
管道特权利用提升和比特梵德CVE-2021-4198漏洞解析教程[TOC]
我读过的很多教程介绍了有趣的漏洞和优秀的漏洞利用,但通常很少分享发现漏洞背后的过程。我想在这篇教程表示的是,我有时只需手动探索一下,就能迅速发现使用普通逆向思维可能错过的精彩漏洞。 0x00、发现CVE的思路解构在我之前的教程中,我提供了一个名为"IO Ninja"的工具,并分享了为什么它在处理进程间通信(IPC)时非常有用。在这篇教程中,我想告诉你这个工具是如何帮助我找到这两个严重漏洞的。CVE-2021-4198和CVE-2021-4199是在一个Windows系统上的著名的比特梵德(Bitdefender)安全软件中出现的漏洞。我寻找的这个漏洞针对的是Vulnerability.scan.exe进程使用的一个命名管道。第一个漏洞导致这个安全软件内几乎所有进程的拒绝服务,第二个漏洞则是通过利用一个链接跟踪漏洞导致本地特权升级。 现在你可能正在思考怎么做,不过稍等一下......让我思考如何使用一个与管道进行通信的工具来找到一个链接来跟踪漏洞?这就是我接下来要深入探讨的问题。 Sysinternals的管道列表(PipeList)工具显示,比特梵德使用了多少管道进行进程间通信(IPC)。
bdservicehost.exe是安装比特梵德后作为SYSTEM运行的可执行文件之一。它使用这些管道与系统中的其他进程进行通信,这可能是一个有意思的目标。
使用IO Ninja工具,我可以用标准用户的身份生成一个管道服务器,看看我是否能从客户端触发一个连接。在不阅读任何代码的情况下,我就可以在代理GUI中查看正在创建的IPC连接以及流量的情况。
下面的截图显示,我每次打开图形用户界面的代理时,都会收到来自管道客户端的连接,该客户端会向我指定的管道服务器发送数据。这可以通过双击系统托盘中的Bitdefender图标或从开始菜单中打开它来实现。
0x01、转储文件思路探索在这里发生了有趣的事情,管道连接是一直保持开放的。这使我能够发送数据给客户端。接下来,我把发送到服务器的前16个字节数据,多次回传给客户端,看看是否会发生什么其他有意思的事情。我还想看看,在发送数据后,管道连接是否会继续保持开放。 在发送了几条信息后,客户端断开了连接,并且收到了Bitdefender的一个弹出框,通知用户在安全软件中出了问题。请注意弹窗右上方的 "x",它是用来关闭该对话框的,这在后面会变得很重要。
看到这条信息后,我知道调试信息一定以某种形式被保存或记录下来了。 我启动了Sysinternals的Process Monitor,看看是否创建了一个crash崩溃转储文件,这样我就可以在调试器中进一步分析。 结果发现,一个名为 "BDReinit.exe "的可执行文件,也就是Bitdefender自己的崩溃处理程序,在系统中为我生成了一个crash崩溃转储文件。 这里另一个有趣的发现是,发现.dmp文件被写入的文件夹是可以被普通用户(低权限)读写的。
幸运的是,在查看了转储文件后,我发现,仅仅是crash崩溃并不是很有趣,最有趣的是崩溃的进程是以我当前的用户身份运行的。在这一点上,我发现了比特梵德上存在着一个的本地拒绝服务DoS漏洞,更加幸运的使这里还有更多的东西可以探索。
在使第一个进程 "seccenter.exe"(比特梵德的主要GUI界面)崩溃之后,我意识到我仍然保持我与指定的管道服务器的连接。所以只要有客户端连接,那么我就能用这16个字节来干扰传入的管道连接,这样就能破坏几乎所有与比特梵德有关的进程。此时,我坐在电脑前,看着反病毒软件进程像多米诺骨牌一样在进程资源管理器中一个接一个地倒下。 我知道,在使用比特梵德GUI中启动 "漏洞扫描 "时会产生vulnerability.scan.exe,它以SYSTEM的形式运行。我迅速想看看我是否也能让这个特权进程崩溃。
哈哈,我发现同样的 "BDReinit.exe "进程再次运行,而且这次它以更高权限SYSTEM的身份运行。根据转储的文件名,我知道还可以使"Vulnerability.scan.exe"进程崩溃 ,并且将以SYSTEM的身份将转储写入磁盘。 在寻找根据link链接的漏洞时,以下几个目录是直接相关的。 `C:\ProgramData` `C:\windows\temp` `C:\Users\[standard user]\AppData`
在这些目录中寻找有特权权限的文件写入和删除操作是非常关键的。 在这个案例中,当比特梵德软件一部分的高权限进程崩溃时,一个.dmp文件就以崩溃时的权限SYSTEM权限被写入这个目录。这一点并不十分有用,因为我无法控制被写入的转储内容,并且这与之前的崩溃过程是类似的,但这不妨碍我下面的分析。 于是,我进一步分析了进程监控日志,发现 "BDReinit.exe "正在做两件非常危险的事情。首先,它正在向一个不同目录中具有可预测名称的文件写入一个DACL自主访问控制(Discretionary Access Control List)。这个目录也允许标准的用户进行读写,而且每次崩溃发生时都会写入一个DACL文件。 如果你使比特梵德内部崩溃crash了一个以SYSTEM权限身份运行的进程,可写入的自主访问控制(DACL)就会被写入这个文件。在这种情况下,我可以选择再次崩溃"Vulnerability.scan.exe",因为它很容易被触发。我所要做的就是在比特梵德的GUI中启动一个漏洞扫描,然后我就会可以从这个进程中得到一个与我指定的管道服务器的连接。
0x03、DACL利用和DLL链接漏洞我最喜欢的就是产生这样的逻辑漏洞,因为利用它们攻击通常是非常快速和容易的。我需要做的就是把有权控制的DACL写入到系统使用的动态链接库DLL上,然后修改DLL的内容,最后让它被加载,从而使权限提升到SYSTEM。为了进行这种权限升级,我只需要一个符号链接(Symbolic link)和一个可控制的DLL连接起来后进行重定向。 特别容易利用的文件是: C:\Windows\System32\spool\Drivers\x64\3\PrintConfig.dll 这是因为一个普通用户可以很容易地触发一个打印函数,这可以使svchost.exe以SYSTEM身份加载我修改过的DLL。
把这个过程的截图放在一起,下面的图片展示了攻击过程中以SYSTEM权限执行代码的情况。
我发现的第二个漏洞是与崩溃转储进程本身有关。此时如果你点击我之前展示的弹出框右上方的 "x","BDReinit.exe "或 "BdSubWiz.exe"(即推荐点击)就会以当前用户的身份删除崩溃转储。如果用户等待或一段时间不处理,对话框就会超时,如果此时进程是以SYSTEM的身份运行的,那么就会并以SYSTEM的身份删除转储文件。
在上面的截图中,你可以看到我如何将这个高权限的文件删除重定向到系统的任何文件。你也可以使用本教程中使用的技术和方法来实现权限升级,从而得到SYSTEM权限。这是因为无论运行崩溃进程的用户是谁,崩溃转储被写入和删除的位置对我来说只要我是有读和写的这个文件权限的普通用户,因为该文件夹中的文件不会受到任何保护,故可以在超时前删除它们并替换成我的链接就可以攻击成功。
[出自:jiwo.org]
0x04、方法论和思路总结从上面来看,所以有时候漏洞的发现并不是超级有条理的,但是这也没关系。同样地,我也并没有为了弄清在管道上发送什么数据,花时间去逆向解析这个应用中负责IPC(进程间通信)的函数。但是,我可以发现了一个攻击面,并开始四处探测,然后我就发现了一个完全不同的攻击面,并发现了一些关键且严重的漏洞。 我希望这篇教程能启发你并使你对你的目标采取同样的做法。此外,我还希望它能提醒你查看你自定义的崩溃处理程序及其对话框--这样既是为了寻找漏洞,也是为了确保你不会随便想要放弃你的研究。
点击收藏 | 1关注 | 1
|