利用Microsoft内核Applocker驱动漏洞过程

admin 2024年9月18日10:27:38评论10 views字数 2506阅读8分21秒阅读模式

part1

点击上方蓝字关注我们

往期推荐

利用文件建立TCP连接隧道绕过防火墙

利用Windows引导程序安全加载DLL

开源跨平台机密信息存储管理系统

开源跨平台高颜值十六进制编辑器

一款开源持续更新的后渗透免杀框架

EDR联动数据包封锁技术

一款舒适感极强的开源全流量监控工具

开源下一代Web应用程序防火墙(WAF)

强大的开源堡垒机系统

开源XDR威胁检测响应平台

开源恶意流量检测系统

将二进制空间安全设为"星标⭐️"

第一时间收到文章更新

摘要

AppLocker是Windows内置的应用程序白名单技术, 该漏洞(CVE-2024-38041)允许本地攻击者检索可能导致内核地址空间布局随机化(KASLR)绕过的信息,这在未来的Windows版本中可能成为一种需求。本篇文章详细介绍了在Windows内核中进行补丁差异分析的过程,找到该漏洞并构建一个有效的漏洞利用程序。

补丁差异分析基础

补丁差异分析是一种常见的技术, 比较同一代码的两个二进制构建版本: 一个是已知有漏洞的版本,另一个是包含安全修复的版本。它通常用于确定漏洞公告背后的技术细节, 确立漏洞的根本原因、攻击向量和潜在变体。多年来,这种方法吸引了大量研究和工具开发,被证明对于识别nDay漏洞非常有用,这些漏洞可以针对那些未及时安装最新安全补丁的用户进行利用。总体而言,对于可以自由进行逆向工程的软件,修补后漏洞利用的风险是不可避免的,因此被认为是该生态系统的自然组成部分。

类似地,如果多个版本的同一产品共享相同的核心代码但由供应商独立维护,二进制差异分析可以用来发现它们之间的差异。Windows操作系统就是一个这样的例子。

在之前的Windows版本中,绕过KASLR非常简单,因为许多系统调用在输出中包含内核指针。然而,在Windows 11 24H2中,这些内核地址泄露不再对无特权调用者可用。在没有经典的KASLR绕过方式的情况下,要确定内核的布局,仍然需要信息泄露或新的技术。

补丁差异分析(Appid.sys)

为了确定漏洞的具体原因, 通常将比较修补前后的二进制文件, 并尝试使用名为BinDiff的工具提取差异。我已经提前在电脑上保存了这两个二进制版本,因为之前已经习惯跟踪每个月的补丁更新。此外,还编写了一个简单的Python脚本,在应用每月补丁之前转储所有驱动程序,然后再转储修补后的二进制文件。不过,也可以使用Winbindex获取appid.sys的两个版本:一个是补丁前的版本,另一个是补丁后的版本,两者都来自同一个Windows版本。

利用Microsoft内核Applocker驱动漏洞过程

获取二进制文件的连续版本非常重要,因为即使使用相隔几个更新的版本也会引入与补丁无关的差异带来的干扰,并导致在分析时浪费时间。Winbindex 使补丁分析变得更简单,因为可以获取从 Windows 10 开始的任何 Windows 二进制文件。可以先在IDA Decompiler中加载了这两个文件分析。之后,可以使用扩展名 BinExport 将文件导出为 BinExport 格式,然后加载到 BinDiff 工具中。

利用Microsoft内核Applocker驱动漏洞过程

BinDiff 的工作原理是使用各种算法来匹配正在比较的二进制文件中的函数。在本例中,应用了微软的函数符号信息,因此所有函数都可以通过名称进行匹配。

利用Microsoft内核Applocker驱动漏洞过程

上面可以看到只有一个函数的相似度小于100%。该补丁更改的函数是AipDeviceIoControlDispatch。

利用Microsoft内核Applocker驱动漏洞过程

在上图中,可以看到两个以红色突出显示的块已添加到驱动程序的修补版本中。此代码检查传入 IOCTL 数据包的PreviousMode,以验证该数据包来自内核模式而不是用户模式。

漏洞原因分析

下面的截图显示了在 IDA 中查看 AipDeviceIoControlDispatch 的反编译函数代码时,补丁前后的更改代码:

appid.sys 的预补丁版本 Windows 11 22H2:

利用Microsoft内核Applocker驱动漏洞过程

appid.sys 的补丁后版本 Windows 11 22H2:

利用Microsoft内核Applocker驱动漏洞过程

上面显示的此更改是对已识别功能的唯一更新。一些快速分析表明正在基于 PreviousMode 执行检查。如果 PreviousMode 为零(表明调用源自内核),则指针将写入 SystemBuffer 字段中指定的输出缓冲区。另一方面,如果 PreviousMode 不为零并且启用了 Feature_2619781439...,则驱动程序将仅返回 STATUS_INVALID_DEVICE_REQUEST (0xC0000010) 错误代码。

漏洞利用程序开发

第一步是与驱动程序通信以触发其漏洞。要与驱动程序通信,通常需要查找设备名称、获取句柄,然后发送适当的IOCTL代码以访问漏洞。因此, 在DriverEntry函数中分析了IoCreateDevice函数,发现DeviceName的第三个参数为DeviceAppID。

利用Microsoft内核Applocker驱动漏洞过程

解码0x22A014控制代码并提取RequiredAccess字段表明需要具有写访问权限的句柄才能调用它。检查设备的 ACL,其中有本地服务、管理员和 appidsvc 的条目。虽然管理员条目不授予写访问权限,但本地服务条目却授予写访问权限。

利用Microsoft内核Applocker驱动漏洞过程

由于与管理员相比,本地服务帐户的权限较低,因此该漏洞的影响比标准管理到内核的影响要大一些。这可能就是 Microsoft 将 CVE 描述为“所需权限:低”的原因,因为考虑到本地服务进程并不总是必须在更高的完整性级别上运行。

以下是漏洞利用程序运行成功的结果, 如图:

利用Microsoft内核Applocker驱动漏洞过程

参考地址:

https://csa.limited/blog/20240916-Exploiting-Microsoft-Kernel-Applocker-Driver.html

往期推荐

Linux找回(破解)root账户密码的四种方法

湖北武汉某科技公司恶意软件调查分析

一款可绕过防火墙/DPI的隧道工具

八种绕过WAF防火墙的Payload混淆技术

从网络蠕虫身上提取了一堆好用的安全工具

最受黑客和安全专家青睐的10款搜索引擎

一种可绕过VPN加密直接获取明文流量的新型攻击技术

暗网排名Top10的搜索引擎

一款跨平台比VNC更丝滑的远程桌面管理工具

利用Microsoft内核Applocker驱动漏洞过程

点个在看你最好看

利用Microsoft内核Applocker驱动漏洞过程

原文始发于微信公众号(二进制空间安全):利用Microsoft内核Applocker驱动漏洞过程

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月18日10:27:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   利用Microsoft内核Applocker驱动漏洞过程http://cn-sec.com/archives/3177918.html

发表评论

匿名网友 填写信息