针对蓝队的单元测试,帮助构建针对一些常见 macOS 后渗透方法的检测规则。我提供了一些后渗透示例,既包括使用命令行历史的,也包括使用 API 调用的。这里列出的后渗透示例并非包罗万象,只是一些我觉得有助于开展单元测试的常见例子。我计划随着时间的推移,不断向该项目添加更多的单元测试。
所有这些测试均在本地运行,并将结果输出到 stdout(即 Swift-Attack 不会连接到服务器)。
git clone https://github.com/cedowens/Swift-Attack && cd Swift-Attack
确保已安装 Swift 和开发者工具(可以从 Mac App Store 安装)
为 dylib 注入测试构建 calc.c:
gcc -dynamiclib -o calc.dylib calc.c
swiftc -o Swift-Attack swift-attack.swift
./Swift-Attack -h

注意:其他 TTP 依赖项如下:
你可以使用单个或多个选项运行 Swift-Attack
./Swift-Attack [选项1] [选项2]...
我还包含了一个简单的 macro.txt 文件(未混淆),用于测试 macOS 上 Office 宏执行时的父子关系。我没有对其进行混淆,因为重点是父子关系的可见性/检测。如果你想用混淆后的宏进行测试,我在 github.com/cedowens/MacC2 有一个仓库,其中包含混淆宏。
我只包含了两种持久化测试(启动代理和登录项)。请查看 Leo Pitt 的持久化 JXA 仓库 https://github.com/D00MFist/PersistentJXA,那里有更全面的持久化示例列表。
使用 osascript 二进制文件弹出提示
通过 API 调用弹出提示
使用 osascript 二进制文件转储剪贴板
通过 API 调用转储剪贴板
使用 screencapture 二进制文件截图
通过 API 调用截图
转储 zsh 历史
安全工具枚举
使用 osascript 二进制文件获取系统信息
通过 API 调用获取系统信息
转储磁盘上的 SSH、AWS、GCP 和 Azure 密钥
转储浏览器历史记录(Chrome、Safari、Firefox)
转储隔离历史记录
Office 宏:我包含了一个简单的 Office 宏,用于连接本地主机。注意:当通过点击“启用宏”按钮执行时,该宏会调用 curl 使用 python 向 http://127.0.0.1/testing 发起 GET 请求。这将允许你测试宏执行时父子关系的检测。注意:这个简单测试不包含任何混淆,因为测试更侧重于父子关系。你可以使用我的另一个仓库 https://github.com/cedowens/MacC2 测试混淆宏。使用方法是:将“macro.txt”的内容粘贴到 Office 文档中,保存为启用宏的文档或 97-2004 文档格式(例如 .doc、.xls 等),打开文档时点击“启用宏”即可执行。
安装包:我包含了 TestInstaller.pkg 文件,用于测试针对基本安装包的检测。该安装包包含一个 preinstall 脚本(在 bash 中运行),将 com.simple.agent.plist 放到 /Library/LaunchDaemons/ 中,并将 test.js(简单的弹出提示)放到 /Library/Application Support/ 中。com.simple.agent.plist 文件只是对 /Library/Application Support/test.js 运行 osascript。它还包含一个 postinstall 脚本(在 bash 中运行),使用 launchctl load 加载 com.simple.agent.plist。按住 Control 键点击 TestInstaller.pkg 以“打开”方式运行。TestInstaller.pkg 会以 root 身份放置上述文件。
CVE-2021-30657 绕过有效载荷:两个示例有效载荷(触发时都会向 localhost 发起 curl 请求),用于测试利用 CVE-2021-30657 的两种不同类型的有效载荷。更多信息请见:https://cedowens.medium.com/macos-gatekeeper-bypass-2021-edition-5256a2955508
启动代理持久化
登录项持久化
访问/复制用户钥匙串数据库
Dylib 注入
转储 Chrome Cookies