定期寻找在野外被利用的 0-day 漏洞时发现,2021 年 8 月下旬,发现了针对一家媒体机构和劳工、政治团体的香港网站访问者的水坑攻击。该水坑利用不同的RCE nday和macOS Catalina 中未修补的 XNU 权限提升漏洞 ( CVE-2021-30869 ),导致安装了以前未报告的后门。已经迅速向供应商(Apple)报告了这个 0-day,并发布了一个补丁来保护用户免受这些攻击。根据我们的调查结果,我们认为这个威胁行为者是一个资源充足的团体,根据payload代码的质量可以访问他们自己的软件工程团队。
在这篇文章中,我们分析了漏洞利用链的技术细节并分享了 IOC,以帮助团队防御类似风格的攻击。
水坑
攻击所利用的网站包含两个 iframe,这些 iframe 服务于攻击者控制的服务器的漏洞利用——一个用于 iOS,另一个用于 macOS。
iOS漏洞利用
iOS 漏洞利用链使用基于Ironsquirrel的框架来加密传送到受害者浏览器的漏洞利用。这次我们没有得到完整的 iOS 链,只是确认了其部分使用 CVE-2019-8506 在 Safari 中获取代码执行的链。
macOS 漏洞利用
macOS 漏洞利用没有使用与 iOS 漏洞相同的框架。登陆页面包含一个简单的 HTML 页面,加载两个脚本——一个用于 Capstone.js,另一个用于漏洞利用链。
参数rid 是一个全局计数器,用于记录利用尝试的次数。当我们成功获得漏洞利用链时,rid为200s。
虽然启动漏洞利用链的 javascript 之前会检查访问者是在运行 macOS Mojave (10.14) 还是 Catalina (10.15),但我们仅在使用 Mojave 访问该站点时观察到漏洞利用的残余,但收到了完整的未加密漏洞利用使用 Catalina 浏览网站时链。
该漏洞利用链结合了 WebKit RCE的 CVE-2021-1789,该漏洞于 2021 年 1 月 5 日在发现此活动之前进行了修补,并于 2021 年 9 月 23 日修补了 XNU 中的0day本地权限升级(CVE-2021-30869)
远程代码执行 (RCE)
在最新版本的 Safari (14.1) 上加载带有 WebKit RCE 的页面,目标使用的RCE 是 nday,它没有成功触发漏洞利用。为了验证这个假设,我们运行 git bisect 并确定它已在此提交中修复。
沙盒逃逸和本地权限提升 (LPE)
Capstone.js
有趣的是,在利用链中使用 Capstone.js(Capstone 反汇编框架的一个port),因为 Capstone 通常用于二进制分析。漏洞利用作者主要使用它来搜索内存中 dlopen和dlsym 的地址。加载嵌入的 Mach-O后,使用 Capstone.js 找到的 dlopen 和 dlsym 地址用于修补加载到内存中的 Mach-O。
使用为 X86-64 而不是 ARM 配置的 Capstone.js,我们还可以推导出目标硬件是基于 Intel 的 Mac。
嵌入式 Mach-O
WebKit RCE 成功后,嵌入的 Mach-O 二进制文件被加载到内存中,打补丁并运行。经过分析,我们意识到这个二进制文件包含可以逃离 Safari 沙箱、提升权限和从 C2 下载第二阶段的代码。
分析 Mach-O 让人想起 CTF 逆向工程挑战。它必须从 Uint32Array 中提取并转换为二进制。
然后提取的二进制文件被一种相对繁琐的编码机制严重混淆——每个字符串都使用不同的密钥进行异或编码。必须对 Mach-O 进行完全解码才能获得表示二进制文件中使用的动态加载函数的所有字符串。有很多字符串,手动解码它们需要很长时间,所以我们编写了一个简短的 Python 脚本来快速处理混淆。该脚本在字符串所在的每个部分解析 Mach-O,然后使用它们各自的 XOR 键解码字符串,并用结果字符串修补二进制文件。
一旦我们解码了所有字符串,就该弄清楚二进制文件具有哪些功能了。有从 C2 下载文件代码的功能,但我们没有在 Mach-O 中遇到任何 URL 字符串,所以我们检查了 javascript,看到运行二进制文件时传递了两个参数——有效载荷的 url 及其大小。
下载有效负载后,它会删除文件的隔离属性以绕过 Gatekeeper。然后它提升了安装payload的权限。
nday还是0day?
在进一步分析漏洞如何提升权限之前,我们需要弄清楚我们是在处理 N-day 还是 0-day 漏洞。N-day 是一个已知漏洞,带有公开可用的补丁。威胁攻击者在补丁发布后不久就使用了 N-day来利用其目标的补丁延迟。相比之下,0-day 是一个没有可用补丁的漏洞,这使得它更难防御。
尽管漏洞利用是可执行文件而不是 shellcode,但它不是我们可以在虚拟环境中运行的独立二进制文件。它需要在二进制文件加载到内存后修补 dlopen 和 dlsym 的地址。这两个函数结合使用来动态地将共享对象加载到内存中并从中检索符号的地址。它们相当于Windows中的LoadLibrary和 GetProcAddress。
为了在我们的虚拟环境中运行漏洞利用,我们决定用 Python 编写一个加载器,它执行以下操作:
-
在内存中加载 Mach-O
-
找到dlopen和dlsym的地址
-
使用 dlopen 和 dlsym 的地址修补内存中加载的 Mach-O
-
运行 Mach-O 时将我们的有效负载 url 作为参数传递
对于我们的payload,我们编写了一个简单的 bash 脚本,该脚本运行 id 并将结果通过管道传输到 /tmp 中的文件。id 命令的结果会告诉我们我们的脚本是作为普通用户还是作为 root 运行的。
准备好加载器和payload后,我们开始在全新安装的 Catalina (10.15) 上测试漏洞利用,因为它是我们获得完整漏洞利用链的版本。漏洞利用过程正常运行并以 root 身份运行我们的 bash 脚本。我们使用当时的最新补丁 (2021-004) 更新了我们的操作系统,并再次尝试利用该漏洞。它仍然有效。但在漏洞利用崩溃的 Big Sur (11.4) 上尝试它并给了我们以下异常。
例外情况表明 Apple 在 Big Sur 中添加了通用保护,这使得该漏洞利用变得无用。由于 Apple 仍然支持 Catalina 并为其推送安全更新,因此我们决定深入研究此漏洞。
提升权限到root
Mach-O调用了许多未记录的函数以及对带有 MACH_SEND_SYNC_OVERRIDE 标志的 mach_msg 的 XPC 调用。这看起来类似于 Google Project Zero 的 Ian Beer 分析的一个早期的野外 iOS 漏洞。Beer 能够快速识别此漏洞是他在 XNU 内核中分析的早期端口类型混淆漏洞的变体(CVE-2020-27932)。此外,盘古实验室在 2021 年 4 月的 zer0con21 和 2021 年 7 月的移动安全会议 (MOSEC) 上的公开演讲中提出了这个确切的漏洞利用。
在利用这个端口类型混淆漏洞时,漏洞作者能够将 mach 端口类型从 IKOT_NAMED_ENTRY 更改为更特权的端口类型,如 IKOT_HOST_SECURITY 允许他们伪造自己的 sec_token 和 audit_token,以及 IKOT_HOST_PRIV 使他们能够欺骗消息到 kuncd。
MACMA payload
获得root权限后,下载的payload会通过launchtl加载并在受害者机器的后台运行。payload似乎是大规模软件工程的产物。它通过数据分发服务 (DDS)框架使用发布-订阅模型与 C2 进行通信。它也有几个组件,其中一些似乎被配置为模块。例如,我们获得的payload包含一个用于捕获击键的内核模块。组件中还内置了其他功能,这些功能不能直接从payload包含的二进制文件中访问,但可以被其他阶段使用,这些阶段可以下载到受害者的机器上。
这个后门的显着特点包括:
-
受害者设备指纹识别
-
屏幕截图
-
文件下载/上传
-
执行终端命令
-
声音录制
-
键盘记录
结论
我们感谢 Apple 对这一关键漏洞的快速反应和修补。对于那些有兴趣关注我们的野外工作的人,我们将很快发布有关我们使用两个 Chrome 0 -day ( CVE-2021-37973和CVE-2021-37976 )发现的另一个不相关活动的详细信息。该活动与今天帖子中描述的活动无关。
相关IOCs
递送网址
-
http://103[.]255[.]44[.]56:8372/6nE5dJzUM2wV.html
-
http://103[.]255[.]44[.]56:8371/00AnW8Lt0NEM.html
-
http://103[.]255[.]44[.]56:8371/SxYm5vpo2mGJ?rid=<redacted>
-
http://103[.]255[.]44[.]56:8371/iWBveXrdvQYQ?rid=?rid=<redacted>
-
https://appleid-server[.]com/EvgSOu39KPfT.html
-
https://www[.]apple-webservice[.]com/7pvWM74VUSn2.html
-
https://appleid-server[.]com/server.enc
-
https://amnestyhk[.]org/ss/defaultaa.html
-
https://amnestyhk[.]org/ss/4ba29d5b72266b28.html
-
https://amnestyhk[.]org/ss/mac.js
Javascript
-
cbbfd767774de9fecc4f8d2bdc4c23595c804113a3f6246ec4dfe2b47cb4d34c (capstone.js)
-
bc6e488e297241864417ada3c2ab9e21539161b03391fc567b3f1e47eb5cfef9 (mac.js)
-
9d9695f5bb10a11056bf143ab79b496b1a138fbeb56db30f14636eed62e766f8
沙盒逃逸 / LPE
-
8fae0d5860aa44b5c7260ef7a0b277bcddae8c02cea7d3a9c19f1a40388c223f
-
df5b588f555cccdf4bbf695158b10b5d3a5f463da7e36d26bdf8b7ba0f8ed144
后门
-
cf5edcff4053e29cb236d3ed1fe06ca93ae6f64f26e25117d68ee130b9bc60c8(2021样本)
-
f0b12413c9d291e3b9edd1ed1496af7712184a63c066e1d5b2bb528376d66ebc(2019样本)
C2
-
123.1.170.152
-
207.148.102.208
原文始发于微信公众号(军机故阁):针对macOS水坑攻击