- 本文主要是看了 Cobalt Strike 4.0 Youtube 官方教程第一课【Operations】之后记的笔记,资源见参考文档。
- 教程的授课者是 Cobalt Strike 的创造者 Raphael Mudge。可以说没人比他更权威了。
- CS 系列教程及手册的好处就在于其中融入了很多红队的思想、策略和模型,CS 自己的定位也是「缩小渗透测试工具和高级威胁恶意软件之间的差距」这样一个工具。学习 CS 对了解后渗透帮助颇多。
- 本文记录的视频对应了 CS 手册的第一章
Operations
,也就是操作。笔记记录是有选择的,一些基本的 CS 中的东西比如可拓展 C2
、cna 插件
、团队服务器
,因为关于这些的基本操作我已经了解了,就没有记。
闲话不多说,下面进入笔记正文部分。
要了解一个领域,就要先了解其领域内的概念范畴。CS 中的一些概念包括:
-
agent
agent
的本意为代理。当攻击者通过代码执行,有一个agent
运行在目标网络中,就可以对目标网络进行命令与控制。所以agent
实际上相当于 Beacon payload。 -
Staging 服务器 在 Cobalt Strike 中,为了获取目标主机的 Beacon shell,必须先要传送 payload。payload 就是攻击执行的内容。 传递 payload 时候,根据目标的网络、主机环境,可以选择分阶段传递 payload,也可以不分阶段直接丢一个 payload。 分阶段传递中,Payload 通常被分为两部分:
payload stage
和payload stager
。stager 是一个小程序,通常是手工优化的汇编指令,用于下载一个 payload stage、把它注入内存,然后对其传达执行命令。这个过程被称为 staging(分阶段)。 staging(分阶段)过程在一些攻击行动中是必要的。很多攻击中对于能加载进内存并在成功漏洞利用后执行的数据大小存在严格限制。这会极大地限制你的后渗透选择,除非你分阶段传送你的后渗透 payload。 在这里的staging server
,其实是指最开始用于传递 payload 的那台攻击机器。也就是获取初始权限的服务器。所以可想而知此服务器具有以下特点:- 托管客户端的工具,接收来自 Beacon 的初始回复
- 可能承担初始的权限提升和下载持久性 payload 等功能
- 此服务器有较高暴露风险,可能会被发现、封锁和反制
- 有目标攻击的攻击链解析
- 对 Cobalt Strike 的基本介绍
- 多团队服务器模型
- 分布式操作模型
- Cobalt Strike 的日志和报告功能
一场典型的有目标的攻击的四个目标:
其中 Cobalt Strike 侧重于 后渗透阶段
。后渗透即为完成想要在目标网络中达到的目的的一个攻击步骤。如数据挖掘、监视用户、键盘记录、根据用户活动确定目标机会等。
此攻击流程也可以用下图这个 攻击链
来概括:
这个攻击链和 CS 手册中的章节是对应的:
- 操作
- 基础设施
- C2
- 武器化
- 初始权限
- 后渗透
- 权限提升
- 横向移动
- Pivoting
- 第一章操作。主要介绍了一些 CS 的基本理念和模型。
- 第二章基础设置。主要介绍了一些监听器和重定向器的详细配置。
- 第三章 C2。与 C2 通信的时候会面临一些权衡,因为很多行为会导致暴露,所以在和安全产品对抗的过程中,我们必须在风险和目标之间选择最适合我们的选项。另外这一章也会讲如何改变 C2 的流量特征。
- 第四章武器化。讲如何将 payload 与在目标机器上运行的程序相匹配。
- 第五章初始权限。目标就是获取对目标网络上运行的一个 agent 的控制。
- 第六章后渗透、第七章权限提升、第八章横向移动、第九章 Pivoting。这些章节都是围绕着后渗透目标,讲了后渗透的流程及 CS 中的一些攻击流程和原语。
在此之外,规避 Evasion
也是一个值得讨论的话题。在本视频中,作者讲了规避的哲学:首先要明白的一个原则是:决定=风险+回报,每次在 CS 中选择的一个选项,就会产生一个行为,行为会导致一个事件 event
,此事件会有一个行为特征,杀软或其他安全产品会根据此特征判断行为是否是恶意的。
所以如何去成功规避呢?
- 了解使用的工具及其行为。 比如需要了解 CS 的各个选项及其产生的行为特征在流量上的体现。
- 获取和理解目标环境的防御信息。 比如在做免杀测试的时候,有什么测什么,而不是只看VT上过了多少家。意思就是根据对方环境的杀软体系,模拟此环境来针对性做免杀。
- 决定要使用的最好的选项。 同样是规避,是一开始就减少流量特征的产生、还是说伪造流量特征让目标环境中的安全产品判定为非恶意呢。根据决定=风险+回报的原则选择适合自己目的的选项。
然后介绍完课程的基本思路之后,就开始讲第一章 Operations
操作,这一章主要讲四个部分:
- 对 Cobalt Strike 的基本介绍
- Cobalt Strike 的合作模型
- 分布式操作模型
- Cobalt Strike 的日志和报告功能
- Cobalt Strike 出生于 2012/06
- Beacon agent 的功能于 2012/09 被加入
- Cobalt Strike 工具的使命是:缩小渗透测试工具和先进的高级威胁恶意软件之间的差距。
Cobalt Strike 的一些基本功能模块:
Beacon
- Beacon 是 Cobalt Strike 的 Payload
- 有两种通信策略(与团队服务器,CS 中以团队服务器作为 C2)
- 异步式通信 = 频率低、速度慢
- 交互式通信 = C2 对 Beacon 实时控制
- 使用 HTTP/S 或 DNS 来出口网络数据
- 使用 SMB 命名管道或 TCP(sockets) 来进行点对点 C2 通信
- Beacon 是 CS 的远程管理功能模块
团队服务器
启动命令为(必须在 Linux 主机上启动团队服务器):
./teamserver <host> <password> [/path/to/c2.profile] [YYYY-MM-DD]
[YYYY-MM-DD]
是 Beacon payloads 在此服务器上运行的杀死时间,在此时间后,Beacon payload 将停止启动。当它下一次醒来时就会离开并清空数据。这是帮助攻击人员在一次行动后清理 Beacon Payloads 的好工具。
略。(因为本部分没讲什么重要内容,都是我已知的。)
- Cobalt Strike 是为分布式操作而设计的
- 客户端可以同时连接到多个团队服务器
- 如
beacon 团队服务器
、钓鱼团队服务器
、侦查团队服务器
、攻击团队服务器
、后渗透团队服务器
等多个团队服务器,就是分解整个攻击链 - 每个团队服务器有单独的数据模型和日志
- 如
- 分布式操作模型可以避免行动中的单点故障/失败,如果仅有一台团队服务器,那么这一台攻击主机可能会被识别或封锁。
- 具体操作:
- 连接到多个团队服务器
Cobalt Strike
→New Connection
- 关闭到某团队服务器的连接
Cobalt Strike
→Close
- 重命名团队服务器标签页
- [标签页按钮] →
Rename
- [标签页按钮] →
- 连接到多个团队服务器
问:「在一个 CS 客户端中可以连接到多个团队服务器」这样的设计有什么好处?
答:好处在于:
- 方便团队服务器之间的权限传递
- 当连接到多个团队服务器时,Cobalt Strike 可以把所有服务器的数据合并成一个模型,获取根据时间线的事件排序,方便写报告。
在这里要写一下多团队服务器模型的多种架构:
1、 最基本的多团队服务器模型:
- 注:蓝色闪电代表高风险
其中,以三种团队服务器的形式来组织和分离基础设施:
- Staging 服务器
- 获取初始权限的服务器
- 托管客户端的工具和接收初始回复
- 承担初始的权限提升和下载持久性程序的功能
- 这种服务器可能具有明显的网络指标,行为事件易被检测到,可能被防御者快速发现、具有较高风险
- 长控服务器
- 与 Beacon 以慢速度、低频率保持通信
- 接收持久性的回复,是重回网络的生命线
- 可能会根据需要传递权限给后渗透服务器
- 是具有不同流量指标的主机,也可能有不同的工具集
- 后渗透服务器
- 后渗透和横向移动
2、 结合攻击链的多团队服务器模型:
分解整个攻击链,让不同的团队服务器承担不同的攻击环节和功能:
如 beacon 团队服务器
、钓鱼团队服务器
、侦查团队服务器
、攻击团队服务器
、后渗透团队服务器
等多个团队服务器。
- 注:蓝色闪电代表高风险
3、 具有权限管理单元的多团队服务器模型:
权限管理是一项重要的工作,也是红队应该投入的资源。
除了多团队服务器来保权限的方案之外,当涉及到多个目标网络时,可以抽象出一个权限管理的单元来对多个权限做全局的管理和维持。
可伸缩红队操作模型(scaling red operations
)就是这种全局权限管理设想的实现。
可伸缩红队操作模型分为两个层次,第一层是针对每一个单个的目标网络的 目标单元
;第二层是对多个目标网络的全局管理层次 权限管理单元
:
- 目标单元
- 负责特定的某个目标网络
- 获取权限、后渗透、横向移动
- 维持本地基础设施的任务
- 权限管理单元
- 维持所有目标网络的权限
- 其管理的权限可能是自己获取的,也可能是从目标单元中接收的
- 按照需求将权限传递给目标单元
- 维持全局的基础设施,持续的接收回复(与每个权限保持心跳接收)
根据此模型,红队中需要有以下这些团队角色:
- 获取权限
- 主要任务是:武器化的获取初始权限
- 横向移动,获取&拓展立足点
- 后渗透
- 主要任务是:完成想要在目标网络中达到的目的
- 数据挖掘、监视用户、键盘记录、根据用户活动确定目标机会等
- 本地权限管理员(单个目标网络)
- 管理来自被控目标的回复
- 准备基础设施
- 持久性
- 与全局权限管理员之间进行会话的传递和接收
- 全局权限管理员(多目标网络的情况下)
- 对所有 shell 进行管理和保护
- 建立、配置长控服务器和后渗透服务器
- 管理长控团队服务器主机,并观察其回复的健康状况
- 将持久性和防御策略(行为安全)委托给本地权限管理员
所以此时抽象出权限管理单元的多团队服务器模型的示意图为:
日志:
Cobalt Strike 中的日志记录工具: logs
- 以格式化的日志形式记录了所有发生在 Cobalt Strike 团队服务器上的事件。
- 包括击键记录、截图记录、会话内容、上传文件的哈希、beacon payload 的输出等。
报告:
- 当连接到多个团队服务器时,Cobalt Strike 可以把所有服务器的数据合并成一个模型,获取根据时间线的事件排序,可以导出一份综合的报告。
- 主要的一些可以导出的报告类型为;
- IoC 指标报告(类似于一些 APT 报告)。
- 活动报告。有一个基于时间表的活动,讲述了
when
、where
、why
。 - 会话报告。按主机单独组织
- TTP 报告。基于 MITRE 框架下的 CS 活动(策略+事件+缓解+监测)
参考文档:
[1] Youtube 视频 - Red Team Ops with Cobalt Strike (1 of 9): Operations,Youtube,Raphael Mudge [2] B 站视频 - 渗透测试 Cobalt_Strike 4,Bilibili,喵的起名 [3] Cobalt Strike mannual 4.0,Cobalt Strike 官网