随着技术的进步和采用最新操作系统的新设备的推出,用户开始期待更高的安全性和更高的性能。但是,旧漏洞仍然可以进入新系统,给用户带来风险。
最近,在我们对 Cyolo 远程桌面协议 (RDP) 的研究中,我发现了一种经典技术,即 DLL 劫持,可用于在 ARM 设备上的 Windows 上利用 RDP 客户端 mstsc.exe。我将在这篇博文中深入探讨我的发现及其意义。
DLL 劫持
在调查 RDP 客户端期间,我使用了我最喜欢的工具之一procmon.exe来观察,当用户打开.rdp文件时,系统会尝试加载fxsresm.dll从当前工作目录 (CWD)调用的不存在的 DLL Windows(操作系统)目录。这使得它容易受到 DLL 劫持攻击。
图 1:mstsc.exe 尝试从当前工作目录加载不存在的 DLL
由于之前有过此类攻击的一些经验,我按照通常的步骤直接开始利用 DLL 劫持。我创建了自己的 DLL,并calc.exe在其DllMain()函数中使用打开命令并将其放置在与 .rdp 文件相同的文件夹中。虽然系统加载了我的 DLL,但 Windows 计算器从未像我预期的那样弹出。
为了发现更多细节,我启动了windbg并试图找到 RDP 客户端加载fxsresm.dll. 找到它之后,我发现了两个有趣的事实:
RDP 客户端正在使用LoadLibraryExW系统调用加载 DLL。
发送到系统调用的标志是LOAD_LIBRARY_AS_DATAFILE,LOAD_LIBRARY_AS_IMAGE_RESOURCE和LOAD_WITH_ALTERED_SEARCH_PATH。
图 2:X2 寄存器保存值 0x2a,它是上述标志的组合
这些发现表明系统试图将 DLL 作为不可执行资源加载,因此从未调用DllMain()我自己制作的 Dll 中的函数。
在检查系统调用文档时,我遇到了一个关键语句:“如果模块作为数据文件加载并且相对路径以“.”或“..”开头,则相对路径将被视为绝对路径。”
这阐明了为什么从当前工作目录 (CWD) 加载 DLL 而不是遵循标准搜索路径。
为了了解漏洞的严重程度,我决定调查该fxsresm.dll文件的性质。通过 Google 快速搜索,我找到了一个DLL 信息网站,该网站将此文件显示为纯资源 DLL,仅包含字符串和图标。
有了这种理解,我们就可以清楚地知道,我们可以通过更改 DLL 中的图标和字符串来欺骗加载的资源,这将提供一个有趣的网络钓鱼攻击向量。在这种情况下,攻击者可以操纵视觉元素,例如 DLL 中的图标和字符串,以误导用户执行某些操作。例如,通过更改图标和字符串,攻击者可以使错误消息看起来像合法的系统通知,或将危险操作(如下载文件)转换为看似无害的操作(如执行软件更新)。然而,这似乎还不是漏洞的全部范围。
从网络钓鱼到 RCE
当我检查 DLL 中的字符串时,我偶然发现了一个熟悉的模式,它让人想起另一种长期存在的攻击技术。一些字符串包含格式化参数,例如%s和%u。这表明来自 DLL 的字符串正在 printf 样式的函数中使用,这是格式字符串漏洞的典型场景。在这些情况下,攻击者可以使用格式字符串说明符来读取或写入正在运行的进程的内存。就在那时它击中了我——创造强大的连锁攻击的机会就在我面前。
图 3:来自 fxsresm.dll 的格式化字符串的几个示例
通过制作具有有害格式字符串的恶意 DLL 并将其与合法的 RDP 文件耦合,可以操纵程序的内存布局,甚至可以在受影响的系统上实现远程代码执行 (RCE)。
要利用此攻击,攻击者需要做的就是创建一个恶意制作的 DLL 以及一个合法的 RDP 文件,并将其战略性地放置在目标可能执行它的位置。这可能位于经常访问的网络共享文件夹中,毫无戒心的用户可能会无意中启动 RDP 文件。
鉴于 RDP 文件在各种 Windows 版本中的广泛使用,我的下一个目标是确定哪些 Windows 版本容易受到这种攻击。在我调查的这一部分中,我发现了一些非常有趣的事情——我无法在任何非 ARM Windows 版本上复制该漏洞。这意味着该漏洞是 Windows ARM 设备独有的。然而,随着 ARM 设备的数量不断增加,例如笔记本电脑、物联网 (IoT) 和工业控制系统 (ICS) 设备,潜在风险仍然很大。
向 MSRC 报告:负责任的披露
考虑到此漏洞的潜在影响及其对受影响设备的可能影响,再加上此攻击的复杂性相对较低,我的团队做出了负责任的决定,在开发完全可用的漏洞之前与 Microsoft 安全响应中心 (MSRC) 分享我们的发现. 一如既往,在 Cyolo,我们的首要任务是贡献和帮助更广泛的生态系统,以确保用户的安全并防止任何潜在的滥用此(和任何其他)漏洞。
在审查我们的报告后,MSRC 团队同意我们对远程代码执行潜力的评估,并立即着手解决该问题。微软于2023年5月9日发布了安全补丁并分配了CVE-2023-24905,有效降低了与该漏洞相关的风险。
披露时间表
以下是漏洞披露的时间表:
2023 年 1 月 23 日——通过 MSRC 门户发现并报告了漏洞
2023 年 1 月 24 日 — MSRC 票据移至 Review/Repro
2023 年 3 月 22 日——MSRC 同意票证并将状态更改为“开发”
2023 年 5 月 9 日——公开发布安全公告
感谢您抽出
.
.
来阅读本文
点它,分享点赞在看都在这里