macOS红队实战(二):利用DarwinOps DMG模板绕过Gatekeeper

3 阅读5分钟

你刚刚成功设置了Mythic并部署了第一个Apfell载荷,并且完成了一些基础场景。如果还没有,建议先阅读这篇文章(MacOS Redteam 1: Introduction to the Fundamentals of Initial Access with DarwinOps)。本文将更具体地聚焦于DMG和DMG模板。

现在真正的问题是:你如何让那个载荷真正在目标机器上执行?

从版本 0.9.4 开始,DarwinOps 也能帮助你处理投递环节。

为了帮助你实现初始访问,DarwinOps 提供了几个易于使用的 DMG 模板(在 DarwinOps 中称为 profiles,因此本文后续将称之为 profiles)。

这个功能之所以值得关注,有几个原因:

  • Gatekeeper 绕过技术
  • 现成的、逼真的钓鱼模板
  • 模拟当前高级 APT 组织的行为

这些模板采用非混淆的 JSON 格式,只要遵循该格式,你就可以自由编辑。你可以复制插入符号链接(包括用户文件夹内)。

通过插入功能,结合更改窗口大小和位置以及背景图的能力,可以快速轻松地创建复杂且具有迷惑性的 DMG。

例如,它可以复制一个包含数十个 Excel 文件和一个(恶意)应用程序的 ZIP 压缩包内容——所有这些都只需通过一个 JSON 文件来完成。

Profiles 允许在两种类型的 Gatekeeper 绕过技术之间进行选择:

  • “软”方法:利用 Gatekeeper 的逻辑缺陷——通过使用特定程序或文件类型,这些程序或文件自然会触发执行,但由于其性质或软件处理方式而不会被扫描
  • “硬”方法:依赖包含漏洞第三方应用程序(或原生应用),我们可以利用这些漏洞以更直接的方式绕过 Gatekeeper

软 Gatekeeper 绕过

目标分析

假设你知道你的目标安装了 Slack。这是一个关键细节——它允许你为投递选择最相关的 DMG 模板

在这个例子中,我们将使用 DarwinOps 附带的 “Slack Configurator” 配置文件。

你可以使用一个简单的命令生成所需的一切(我们从 Mythic 导入生成的载荷):

./darwin_ops -iapfell.js -G apfell.plist --container slack-configurator.dmg --dmg-profile ./dmg_profiles/slack_configurator_plist.json

此命令会输出一个即用型 DMG,其中包含一个预配置的 .plist 文件,一切就绪:

DarwinOps 自动构建 .plist 文件并处理 DMG 文件的创建。

用户只需要将其拖放到文件夹中,载荷就会就位,无需任何进一步操作即可启动。

目标用户只要一疏忽——他们注销,再登录,然后砰:我们就获得了持久化和自动执行

硬 Gatekeeper 绕过

如果你的目标仅仅是绕过 Gatekeeper(例如,移除 MOTW/ quarantine 属性),DarwinOps 也为此提供了专门的模板。

./darwin_ops -G test.app -t CALC --container test.dmg --dmg-profile ./dmg_profiles/bp_gt_adobe_connect.json -y

这种场景需要更多点击(2-3 次点击),但提供了更大的灵活性(通过图标伪装格式)。

首先,载荷总是以 .zipx 文件的形式投递。DMG 必须是只读的,因为即使应用程序本身没有 quarantine 标签,如果它位于一个被 quarantine 的 DMG 内部,Gatekeeper 仍会执行其检查

当目标双击时,会弹出一个 Gatekeeper 弹窗(这是伪装的)——这很正常,即使是经过公证的应用程序也会出现。绕过并非发生在这里。

上一篇文章中,我们看到了几种不同类型的提示。这里,我们遇到的是最友好的一种——一个由 Apple 签名并公证的应用程序。

然后,他们会看到一个提示框,要求将内容解压到桌面

一旦 .app 被提取出来,它不再具有 quarantine 属性,这意味着 Gatekeeper 不会被触发

解压后桌面上的载荷。

结论

这两种方法并非互斥——它们是互补的。以下是一些建议:

  • 如果你冒充受害者的 IT 部门.plist(软方法)是个不错的选择,因为 .plist 文件很常用。
  • 如果受害者技术知识有限拖放操作可能比几次点击更容易。
  • 如果受害者使用像 Munki 这样的工具,你可以利用拖放方法,通过将文件放到正确的位置来实现提权执行 (./darwinops --listdmgprofile → 查看 container-drag-and-drop profile)。

但是,

  • 如果你假扮成同事发送软件(例如,Adobe Connect)或修改版的通讯工具,硬绕过方法更合适
  • 如果你想发送一个恶意文件——例如,一个需要签名的 PDF——你应该使用这种方法来嵌入你的虚假 PDF 应用程序 (./darwinops --listdmgprofile → 查看 docusign profile)。
  • 如果你正在联系一个习惯处理文件或存档的部门,这种方法可能会有效得多。

虽然这只是一个简单的例子,但它展示了 DarwinOps (v0.9.4) 现在如何通过有针对性的模板和内置自动化,使得打包和投递载荷变得更加容易。

这开启了许多创造性的选择——如果你知道目标使用什么,你就可以相应地定制投递机制。

之前,我谈到了 APT 级别。在 MacOS Redteam 3 教程中,我们将看到如何利用一个易受攻击的内部应用程序,创建一个特定的 .dmg 来提升我们的权限,并仅通过简单的拖放操作获得持久化。FINISHED CSD0tFqvECLokhw9aBeRqiAtBdroPKrTJORmTzK0GBgyQjrra1XVpoNHztI+O0CRA4/4LJpPMA/rRdlN6WaJVaS14dUaeTthNT7OF8k8zEE2A2xmpsmIjbe0Hh+TOmOtFc4hSRHHyUSU+d67FstnTQ==