
对 Darkhotel“Double Star”APT 漏洞利用链的个性化/增强重制,重点针对 Windows 8.1,并融入了一些我自己的技术手法。
________ . . _________ __
_____ \ ____ __ _ | | | ____ / // | _____ _______
| | \ / _ \ | | | __ \ | | / __ \ _ \ \ \ \ _ __
| ` ( <_> )| | /| _\ | |\ / / \ | | / __ _| | /
/____ / _/ |/ | /|/ ___ > /___ / || (____ /||
/ / / / /
Windows 8.1 IE/Firefox RCE -> 沙箱逃逸 -> SYSTEM EoP 漏洞利用链
______________
| Remote PAC |
|____________|
^
| HTTPS
_______________ RPC/ALPC _______________ RPC/ALPC _______________ | firefox.exe | ----------> | svchost.exe | -----------> | spoolsv.exe | || || <----------- || | RPC/Pipe | _______________ | | malware.exe | <---| Execute impersonating NT AUTHORY\SYSTEM ||
~
用法
要运行此漏洞利用链,请将完整的 release/文件夹结构下载到一台未打补丁的 Windows 8.1 x64 机器上,并在联网状态下加载以下两个 .html 文件之一:
初始 RCE 可通过 IE 或 FF 中的任意一个触发,并会以 NT AUTHORY\SYSTEM 权限在你的用户会话中执行一个 cmd.exe 进程。
各个漏洞已在以下环境中成功测试:
请注意,虽然各个漏洞本身可能适用于多个 Windows 版本,但完整漏洞利用链仅适用于 Windows 8.1。
~
概述
虽然此漏洞利用链使用了两个(现已修复的)0day 漏洞,但它还包含一种沙箱逃逸和一种 EoP 技术,截至 5/4/2021 仍未修复,并且如今仍可整合到未来的攻击链中。
Darkhotel APT 组织(据信源自韩国)于 2020 年初针对中国和日本的企业高管及政府官员发起了一场攻击活动,结合了鱼叉式网络钓鱼和入侵豪华酒店网络。他们使用的漏洞(CVE-2020-0674 和 CVE-2019-17026,合称“Double Star”)是 2019 年旧有/现有漏洞的轻微 0day 变体:具体涉及旧版 JavaScript 引擎(jscript.dll)中的释放后使用(UAF)漏洞,以及 Firefox IonMonkey 引擎中的别名(aliasing)漏洞。
这些 0day 的运用之所以引人关注,不仅在于它们能通过 Internet Explorer 和 Firefox 浏览器实现 RCE:尤其是 CVE-2020-0674(旧版 jscript.dll 引擎中的 UAF),它可在任何能够通过 jscript.dll 执行旧版 JS 代码的进程中被利用。2017 年底,Google Project Zero 发布了一篇题为“aPAColypse now:在局域网中利用 WPAD/PAC 和 JScript 攻击 Windows 10”[1] 的博文。
这项研究揭示了一个非常有趣的攻击向量,该向量(当时)影响从 Windows 7 起的所有 Windows 版本:WPAD 服务(即“WinHTTP Web Proxy Auto-Discovery Service”)包含一个通过“PAC”文件更新代理配置的古老功能。任何能够通过 RPC 与 WPAD 服务(在 svchost.exe 进程中以 LOCAL SERVICE 身份运行)通信的用户,都可以强制它从远程 URL 下载一个包含 JS 代码的 PAC 文件,这些 JS 代码负责为用户提供的 URL 设置正确的代理配置。最值得注意的是,这些 PAC 文件由旧版 jscript.dll 引擎解析。这开辟了一个攻击向量:任何进程(无论用户权限受限还是处于沙箱中)都可以通过 ALPC 连接到本地 WPAD 服务,并强制其从远程 URL 下载包含 jscript.dll 漏洞利用的恶意 PAC 文件。这将导致在 LOCAL SERVICE 上下文中执行代码。
Darkhotel 采用了这一概念,并在通过 Firefox 或 Internet Explorer 获得 RCE 后将其用作沙箱逃逸手段。他们攻击链的下一步尚不清楚:似乎他们以某种方式将权限从 LOCAL SERVICE 提升到了 SYSTEM,并在此上下文中执行了他们的恶意软件。在所有关于 Darkhotel Double Star 攻击链的分析中,我未能找到他们如何实现这一点的详细解释,不过可以稳妥地假设,他们的技术未必是 0day 漏洞利用。LOCAL SERVICE 账户启动的进程默认具有 SeImpersonate 权限,因此,一旦它们能通过命名管道或 ALPC 强制建立指向自身的特权连接,就可以提升其安全上下文。
Darkhotel APT 组织很可能使用 Rotten Potato 来实现从 LOCAL SERVICE 的 EoP,因为这是几年前最简单、使用最广泛的技术(也是 Google Project Zero “aPAColypse now”研究中所用的技术)。不过,我转而采用了一种更稳健/现代的技术:对来自 Print Spooler 的强制 RPC 连接进行命名管道模拟 [2]。该技术将一个在启用无约束委派的环境中常用于 TGT 收集的旧 RPC 接口(即“Printer Bug”)与一种为本地权限提升而改编的模拟/Rotten Potato 式攻击相结合。
此外,我没有以 Windows 7 为目标,而是决定将重点放在 Windows 8.1 上,因为其增强的安全缓解措施(如非确定性 LFH、高熵 ASLR 和控制流保护(CFG))带来了挑战。
~
CVE-2020-0674
包含 CVE-2020-0674 UAF 漏洞利用的恶意 PAC 文件 - 通过 RPC 触发下载到 WPAD 服务 svchost.exe(LOCAL SERVICE)中。包含第三阶段 shellcode(Spool Potato EoP)。该漏洞利用还可兼作通过 IE11 64 位的初始 RCE 攻击向量。
_______________ RPC _______________ CVE-2020-0674 ________________ | firefox.exe | -----> | svchost.exe | ---------------> | Spool Potato | || || | shellcode | |______________|
~
CVE-2019-17026
Firefox 64 位 IonMonkey JIT/类型混淆 RCE。当用户使用存在漏洞的 Firefox 版本访问被感染的网页时,它代表初始攻击向量。该组件包含第一阶段(egg hunter)和第二阶段(WPAD 沙箱逃逸)shellcode,其中后者仅对 Windows 8.1 有效,因为 WPAD 的 RPC IDL 接口细节是硬编码的。
_______________ JIT spray ______________ DEP bypass _______________________ | firefox.exe | -----------> | Egg hunter | ------------> | WPAD sandbox escape | |___________| | shellcode | | shellcode (heap) | |________| |___________________|
~
载荷
此漏洞利用链包含三个 shellcode 载荷,可在本仓库的 Payloads\Compiled\JS 目录下找到,它们以 JavaScript 编码的 shellcode 形式提供:
当使用 IE 作为初始 RCE 攻击向量时,只需要第二阶段和第三阶段 shellcode。当使用 FF 作为初始 RCE 攻击向量时,三个阶段都会用到。
我还额外包含了一些用于测试的 shellcode(一个 MessageBoxA 和一个 WinExec shellcode)。请注意,使用这些 shellcode 时,对于 Firefox CVE-2019-17026,shellcode 应以 Uint8Array 表示,并以下面的 egg QWORD 作为前缀:0x8877665544332211。对于 CVE-2020-0674,shellcode 应以 DWORD 数组表示。
另请注意,将 WinExec 或 MessageBoxA 载荷与 Firefox CVE-2019-17026 配合使用时,必须先在“about:config”中将沙箱内容级别调整为 2。
~
致谢
maxpl0it - 编写了 CVE-2019-17026 的初步分析和 PoC(侧重 于 Linux 操作系统),并编写了 CVE-2020-0674 的初步 分析和 PoC(侧重于 Windows 7 x64 上的 IE8/11)。
0vercl0k - 记录了与别名(aliasing)和 GVN 相关的 IonMonkey 内部机制。
HackSys Team - 提供了关于 WPAD 服务和底层 JS 调试 的技巧。
itm4n - 对将 RPC printer bug 与命名管道模拟相结合 进行了原创研究。
~
链接
[1] https://googleprojectzero.blogspot.com/2017/12/apacolypse-now-exploiting-windows-10-in_18.html [2] https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/