DNS Beacon 监听器设置
通过
Cobalt Strike
→
Listeners
,点击
Add
按钮,然后选择 Beacon DNS 作为
payload
类型。
点击
[+]
来添加一到多个与
beacon
通信的域名。你的
Cobalt Strike
团队服务器系统必须对你指定的 域名具有权威性。创建一个 DNS A
记录然后指向你的
Cobalt Strike
团队服务器。使用
DNS NS
记录来 将多个域名或子域名委派到你的 Cobalt Strike
团队服务器的
A
记录。
DNS HOST(Stager)
字段配置
DNS Beacon
的
TXT
记录
stager
。这个
stager
仅被用在要求显式 stager 的
Cobalt Strike
功能中。你的
Cobalt Strike
团队服务器系统也必须对此域名具有权威性。
要测试你的 DNS 配置,打开一个终端并输入 nslookup jibberish.beacon domain ( domain 自行 替换为 stager 域名)。如果你得到了一个 0.0.0.0 的 A 记录回复 —— 这说明你的 DNS 配置是对的。如 果你没有得到回复,那说明你的 DNS 配置不对、 DNS Beacon 不会与你通信。
确保你的
DNS
记录引用了你的网络接口的首选地址(
primary address
)。
Cobalt Strike
的
DNS
服务器会一直从你的网络接口的首选地址发送响应。当 DNS
解析器从一台服务器请求信息,但是从另一台服务器接收回复时,DNS
解析器往往会丢弃回复。
SMB Beacon
SMB Beacon
使用命名管道通过一个父
Beacon
进行通信。这种对等通信对同一台主机上的
Beacon
和跨网络的 Beacon
都有效。
Windows
将命名管道通信封装在
SMB
协议中。因此得名
SMB Beacon
。
所谓的「这种对等通信对同一台主机上的 Beacon 和跨网络的 Beacon 都有效」是指 SMB
Beacon 通过管道( pipe )进行进程间的数据传递。管道通信的进程可以是本地主机上的两个进 程,也可以和远程主机上的进程通过网络进行通信。
要配置一个
SMB Beacon payload
,通过
Cobalt Strike
→
Listeners
。点击
Add
。选择
Beacon SMB 作为你的
payload 选项。
唯一的与
SMB Beacon
相关的选项是
pipeame
(管道名称)。你可以设置一个明确的管道名称或接受
默认选项。
SMB Beacon
与
Cobalt Strike
中派生
payload
的大多数动作兼容。这个的例外情况是用户驱动的攻击
(例如
Attacks
→
Packages
,
Attacks
→
Web Drive
-
by
)这种要求明确
stager
的。
Cobalt Strike
后渗透和横向移动行为派生一个
payload
,会尝试为你承担对
SMB Beacon payload
的
控制。如果你手动的运行
SMB Beacon
,你将需要从一个父
Beacon
链接到它。
链接和取消链接
从
Beacon
控制台,使用
link [host] [pipe]
来把当前的
Beacon
链接到一个等待连接的
SMB
Beacon
。当当前
Beacon check in
,它的链接的对等
Beacon
也会
check in
。
所谓的 check in ,指的是 Beacon 回连主机,回传受害系统的元数据,准备好进行任务数据通讯的状态
为了与正常流量融合,链接的
Beacon
使用
Windows
命名管道进行通信。这个流量被封装于
SMB
协议中。对于此方法有一些警告:
- 具有 SMB Beacon 的主机必须接受445端口上的连接。
- 你只能链接由同一个 Cobalt Strike 实例管理的 Beacon。
如果在你尝试去连接到一个
Beacon
之后得到一个
error 5
(权限拒绝),可以尝试这样解决: 窃取域 用户的令牌或使用 make_token DOMAIN\user password
来使用对于目标有效的凭据来填充你的当前 令牌,然后再次尝试去连接到 Beacon
。
要销毁一个
Beacon
链接,在父会话或子会话中使用
unlink [ip address] [session PID]
。这个
[session PID]
参数是要取消链接的
Beacon
的进程
ID
。该值用于当有多个子
Beacon
时,指定一个特 定的 Beacon
来断开链接。 当你对一个 SMB Beacon
取消了链接,它不会离开并消失。相反,它进入一种等待其他
Beacon
连接 的状态。你可以使用 link
命令来从将来的另一个
Beacon
恢复对
SMB Beacon
的控制。
TCP Beacon
TCP Beacon
使用一个
TCP socket
来通过一个父
Beacon
通信。这种对等通信对同一台主机上的Beacon 和跨网络的
Beacon
都有效。
要配置一个
TCP Beacon payload
,通过
Cobalt Strike
→
Listeners
,点击
Add
按钮。选择
Beacon TCP
作为你的
payload
选项。 使用这种方法配置的 TCP Beacon
是一个绑定的
payload
。一个绑定的
payload
会等待来自它的控制器 (在此场景中,控制器是另一个 Beacon
会话)的连接。
Port(C2)
选项控制
TCP Beacon
将等待连接的端口。当它监听一个连接,勾选 Bind to localhost only
来使
TCP Beacon
绑定到
127.0.0.1
。 如果你为仅本地的行为使用 TCP Beacon
,那么这是一个很好的选项。
类似于
SMB Beacon
,
TCP Beacon
与
Cobalt Strike
中派生
payload
的大多数动作相兼容。除了一些 要求显式 stager
的用户驱动的攻击(比如:
Attacks
→
Packages
、
Attacks
→
Web Drive
-
by
)。 Cobalt Strike 后渗透和横向移动行为派生一个
payload
,会尝试为你承担对
TCP Beacon payload
的控制。如果你手动的运行 TCP Beacon
,你将需要从一个父
Beacon
链接到它。
连接和取消链接
从
Beacon
控制台,使用
connect [ip address] [port]
来把当前的
Beacon
连接到一个等待连接
的
TCP Beacon
。当当前的会话
check in
,它的链接的对等
Beacon
也会
check in
。
要销毁一个
Beacon
链接,在父会话或子会话的控制台中使用
unlink [ip address] [session
PID]
。以后,你可以从同一主机(或其他主机)重新连接到
TCP Beacon
。
外置 C2
外置
C2
是一种规范,允许第三方程序充当
Cobalt Strike
的
Beacon payload
的通信层。这些第三方程 序连接到 Cobalt Strike
来阅读预定使用的帧,并使用以此种方式控制的
payload
的输出写帧。这些第三方程序使用外置 C2
服务器来与你的
Cobalt Strike
团队服务器交互。 转到 Cobalt Strike
→
Listeners
,点击
Add
,选择
External C2
作为你的
payload
。
外置
C2
接口有两个选项。
Port(Bind)
指定外置
C2
服务器等待连接的端口。勾选
Bind to
localhost only
以使外置
C2
服务器仅本地主机。 外置 C2
监听器与其他
Cobalt Strike
监听器不同。这个监听端口其实是一个数据接收端口,没有相关的 其他监听器的功能,所以不能用来发一些后渗透指令过去。
Foreign Listeners
Cobalt Strike
支持对外监听器的概念。 这些是托管在 Metasploit
框架或其他
Cobalt Strike
实例的
x86 payload handler
的别名。要传递一个Windows HTTPS Meterpreter 会话到一个使用
msfconsole
的朋友那里,建立一个
Foreign HTTPS payload 并将主机和端口的值指向它们的
handler
。你可以在任何你想要使用
x86 Cobalt Strike
监听器的地方使用 foreign listener
(对外监听器)。
基础设施整合
Cobalt Strike
的分布式行动模型的基本思想是为你的每个行动阶段建立单独的团队服务器。比如,将你 的后渗透基础设施和持久化基础设施分开。如果一个后渗透行为被发现,这个基础设施将被重建。 一些行动阶段要求多个重定向器和通信通道选项。Cobalt Strike 4.0
对此有非常友好的设计。
你可以将多个
HTTP
、
HTTPS
和
DNS
监听器绑定到一个单独的
Cobalt Strike
团队服务器。这些 payload 在它们的配置中也支持端口弯曲(
port bending
)。这允许在你的重定向器和
C2
设置中使用 与你的通信通道(80
,
443
或
53
)共同的端口,但是最好把这些监听器绑定到不同的端口以避免你的团队服务器系统中发生端口冲突。
为了使你的网络流量指标多样化,
Cobalt Strike
的
C2
拓展文件可能包含多种变体。变体是一种将当前文件的变量加到一个配置文件中的方法。当你定义每个 HTTP
或
HTTPS Beacon
监听器时,你可以指定 一个配置文件变体。
此外,你可以在一个团队服务器上定义多个
TCP
和
SMB Beacon
,每一个都使用不同的管道和端口设 置。任一个来自同一团队服务器的出口 Beacon
,一旦它们被部署在目标环境中,那么都可以控制任何一个这些 TCP
和
SMB Beacon
的
payload
。
Payload 安全特性
Cobalt Strike
采取措施保护
Beacon
的通信,确保
Beacon
只能接收来自其团队服务器的任务并且只能将结果发送至其团队服务器。
首次设置
Beacon payload
时,
Cobalt Strike
会生成一个团队服务器专有的公钥
/
私钥对。团队服务器 的公钥会嵌入 Beacon
的
payload stage
。
Beacon
使用团队服务器的公钥来加密发送到团队服务器的会话元数据。
Beacon
必须在团队服务器可以发出任务和接收来自
Beacon
会话的输出之前持续发送会话元数据。此元数据包含一个由 Beacon
生成的随机会话秘钥。团队服务器使用每个
Beacon
的会话秘钥来加密任务 并解密输出。 每个 Beacon 都使用这种相同的方案来实现数据通道。当在混合
HTTP
和
DNS Beacon
中使用记录 (A、AAAA
、
TXT
)数据通道时,你有和使用
HTTPS Beacon
同样的安全保护。
请注意,当 Beacon
分阶段时,
payload stager
因为其体积原因,没有这些内建的安全特性。