macOS Sandbox Debug & Bypass

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持HackTricks的其他方式:

沙箱加载过程

在上图中,当运行具有授权**com.apple.security.app-sandbox的应用程序时,可以观察到沙箱将如何加载**。

编译器将/usr/lib/libSystem.B.dylib链接到二进制文件。

然后,libSystem.B将调用其他几个函数,直到xpc_pipe_routine将应用程序的授权发送给securityd。 Securityd检查进程是否应该被隔离在沙箱中,如果是,则将被隔离。 最后,沙箱将通过调用**__sandbox_ms激活,后者将调用__mac_syscall**。

可能的绕过方式

绕过隔离属性

由沙箱进程创建的文件会附加隔离属性以防止沙箱逃逸。但是,如果您设法在沙箱应用程序中创建一个没有隔离属性的.app文件夹,则可以使应用程序捆绑二进制文件指向**/bin/bash,并在plist中添加一些环境变量以滥用open启动新的未经沙箱处理的应用程序**。

这就是CVE-2023-32364中所做的事情**。**

滥用Open功能

Word沙箱绕过的最后示例中,可以看到如何滥用**open**命令行功能来绕过沙箱。

macOS Office Sandbox Bypasses

启动代理/守护程序

即使应用程序应该被沙箱化com.apple.security.app-sandbox),如果它是从LaunchAgent(~/Library/LaunchAgents)中执行的,仍然可以绕过沙箱。 如此文章中所述,如果要使一个被沙箱化的应用程序获得持久性,可以将其自动执行为LaunchAgent,并可能通过DyLib环境变量注入恶意代码。

滥用自动启动位置

如果沙箱进程可以在稍后将要运行二进制文件的未经沙箱处理的应用程序的位置写入,它将能够通过将二进制文件放置在那里来逃逸。这种位置的一个很好的例子是~/Library/LaunchAgents/System/Library/LaunchDaemons

为此,您甚至可能需要2个步骤:使具有更宽松沙箱file-read*file-write*)的进程执行您的代码,实际上会在将要未经沙箱处理执行的位置写入

查看有关自动启动位置的页面:

macOS Auto Start

滥用其他进程

如果从沙箱进程中能够危害运行在较不受限制的沙箱中(或没有沙箱)的其他进程,则可以逃离其沙箱:

macOS Process Abuse

静态编译和动态链接

这项研究发现了绕过沙箱的两种方法。因为沙箱是从用户空间应用时加载libSystem库的。如果一个二进制文件可以避免加载它,它将永远不会被沙箱化:

  • 如果二进制文件是完全静态编译的,它可以避免加载该库。

  • 如果二进制文件不需要加载任何库(因为链接器也在libSystem中),它将不需要加载libSystem。

Shellcodes

请注意,即使ARM64中的shellcodes也需要链接到libSystem.dylib

权限

请注意,即使某些操作可能在沙盒中被允许,如果应用程序具有特定的权限,就像这样:

Interposting Bypass

有关Interposting的更多信息,请查看:

macOS Function Hooking

Interpost _libsecinit_initializer 以防止沙盒

拦截 __mac_syscall 以防止沙盒

使用 lldb 调试和绕过沙盒

让我们编译一个应该被沙盒化的应用程序:

在macOS中,沙盒是一种安全机制,用于限制应用程序的权限以保护系统和用户数据。然而,沙盒本身可能存在漏洞,允许攻击者绕过沙盒并执行恶意操作。为了发现和利用这些漏洞,可以使用调试技术和特权升级技术。

在macOS中,Info.plist文件包含了应用程序的配置信息,其中也包括了沙盒的配置。通过修改应用程序的Info.plist文件,可以调整沙盒的权限和行为。

然后编译该应用程序:

让我们调试应用程序,查看沙盒何时加载:

参考资料

从零开始学习AWS黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)!

支持HackTricks的其他方式:

最后更新于