
发布博客:GraphStrike:利用Microsoft Graph API使Beacon流量消失
开发者博客:GraphStrike:攻击性工具开发剖析
GraphStrike 是一套工具套件,使 Cobalt Strike 的 HTTPS Beacon 能够通过 Microsoft Graph API 进行 C2 通信。所有 Beacon 流量将通过攻击者 SharePoint 站点中创建的两个文件传输,并且来自 Beacon 的所有通信将路由至 https://graph.microsoft.com:

GraphStrike 包含一个配置器,用于创建通过 Graph API 实现 Cobalt Strike HTTPS 所需的 Azure 资产:

GraphStrike 不会在 Azure 中创建任何付费资产,因此使用 GraphStrike 或其配置器不会产生额外成本。
已有威胁情报披露了多个不同 APT 组织利用 Microsoft Graph API 和其他微软服务进行攻击活动的情况:
威胁行为者持续利用合法服务进行非法目的。利用 graph.microsoft.com 等高信誉域名进行 C2 通信极为有效且令人向往,但从时间和精力角度来看往往复杂且难以实现。大多数 C2 框架不支持获取或轮换访问令牌的方法,因此无法使用 Graph API。这使红队难以复现这些技术,也剥夺了防御者观察和开发此类活动签名特征的机会。GraphStrike 旨在减轻这一负担,提供可靠且可重复的流程来利用 Microsoft Graph API,同时保持 Cobalt Strike 用户体验的熟悉性和可靠性。
严格来说不是。此前曾构建过真正的 利用 Graph API 的 External C2(通过 Microsoft Teams 消息发送 Beacon 流量),但开发、维护和集成一个符合 External C2 规范并能完成任务的定制植入体的负担过于熟悉。GraphStrike 转而利用一个开源的 用户自定义反射加载器(UDRL),即 Kyle Avery 开发的 AceLdr(在本项目中改编为 'GraphLdr'),来 Hook Beacon 正常调用的 WinINet 库函数,并按需操纵这些调用以使用 Graph API。没有定制植入体或额外进程,只有带有几个 Hooked Windows API 的 Beacon 进程。在服务端,有一个 Python3 程序将 Cobalt Strike Team Server 流量转换为 Graph API 流量,反之亦然。
GraphStrike 支持几乎所有正常的 Cobalt Strike 活动,包括:
还包括 GraphStrike 对 sleep、exit 和 remove 命令的集成,使 GraphStrike Server 的睡眠时间与 Beacon 匹配,并在 Beacon 退出或被移除时删除 SharePoint 中的文件。
GraphStrike 还整合了原始 AceLdr 的所有特性和功能,并额外添加了一些利用调用栈欺骗的 API。
开始之前,GraphStrike 需要满足以下条件:
在继续设置过程之前,请注意以下事项:
1. 某些组件使用相对路径定位其他资产。请按以下说明切换目录。
2. Cobalt Strike 配置文件只能在以下设置过程的步骤 5 之前进行编辑注 #1。
sudo setup/install_dependencies.sh 安装所需的系统依赖项。python3 -m venv virtual 然后 source virtual/bin/activate 创建并进入虚拟环境。pip3 install -r requirements.txt。./provisioner.py new 并完成设置过程。graph.microsoft.com 创建一个监听端口 443 的 Cobalt Strike HTTPS 监听器。./GraphStrike.py 启动 GraphStrike Server。由于 GraphLdr 的大小,Artifact Kit 用户需要使用特定选项重新编译它,以便 GraphStrike 与 Artifact Kit 生成的载荷兼容。具体来说,需要指定 'Stage Size' 和 'RDLL Size' 字段以使用 100K RDLL 大小。以下提供两个有效语法示例:
./build.sh pipe VirtualAlloc 505029 100 false false none /opt/cobaltstrike/artifacts
./build.sh peek HeapAlloc 492376 100 false true indirect /opt/cobaltstrike/artifacts
./provisioner.py delete 以删除创建的 Azure 资产。以下是一些有助于充分利用 GraphStrike 的建议和观察,无特定顺序。
GraphStrike 存在以下限制:
GraphStrike 的实现离不开以下个人的贡献: