一、欢迎使用Cobalt Strike
Cobalt Strike
是一个用于对手模拟和红队行动的平台。用于执行有针对性的攻击并模拟高级威胁行为者的后渗透行动。本节介绍 Cobalt Strike
功能集支持的攻击过程。本手册的其余部分将详细讨论了这些功能。
# 概述
图中的 Intrumentation & Telemetry 大概可以翻译为「终端行为采集 Agent & 云端 行为分析引擎」。 Instrumentation 指的应该是安装在目标主机上的各类日志收集与监控类工 具, Telemetry 指的应该是将这些监控类工具所产出的各位监测日志进行归一化、汇聚到一个统 一分析引擎并等待引擎的研判结果这类的过程。
深思熟虑的有针对性的攻击从都是从侦察开始的。 Cobalt Strike
的系统分析器是一个 Web
应用程序,可以映射目标的客户端攻击面。从侦察中收集的见解将帮助你了解哪些选项最有可能攻击成功。
武器化是将后渗透的攻击载荷与将在目标上执行的文档或漏洞利用配对。Cobalt Strike
具有将普通文档转换为武器化工件(Artifacts
)的选项。Cobalt Strike
还可以选择以各种格式导出其后渗透攻击载荷Beacon
,以便与此工具集之外的工件(Artifacts
)配对。
使用 Cobalt Strike
的鱼叉式网络钓鱼工具将武器化文档传递给目标网络中的一个或多个人。 Cobalt Strike
的网络钓鱼工具将保存的电子邮件重新用于精准的网络钓鱼。
使用 Cobalt Strike
的Beacon
控制目标的网络。这种后渗透攻击载荷使用高级威胁恶意软件常见的异步“低速且缓慢”的通信模式。 Beacon
将通过 DNS
、HTTP
或 HTTPS
方式与控制端通信。 Beacon
还可以通过常见的代理配置回连多个主机以避免阻塞。
Exercise your target’s attack attribution and analysis capability with Beacon’s Malleable C2 language. Reprogram Beacon
to use network indicators that look like known malware or blend in with existing traffic。
使用 Beacon
的 Malleable C2
扩展语言来锻炼目标的攻击归因和分析能力。对 Beacon
重新编程,使其看起来像已知恶意软件或与现有流量混合的网络指示器。
所谓的「让流量看上去像一些知名的恶意软件」,如下图中所示的 GitHub 开源 C2 拓展 文件项目中的 crimeware 文件夹,就是通过配置 C2 拓展文件、让
Beacon
的流量特征看上去像 Zeus、Asprox 等知名恶意软件。样可以达到掩盖、伪装Beacon
行动的目的。
借助 Beacon
自动化功能以及通过命名管道和 TCP
套接字进行的点对点通信,深入受感染的网络、发现主机并进行横向移动。Cobalt Strike
经过优化,可以捕获信任关系,并通过捕获的凭据、密码哈希、访问令牌和 Kerberos
票证实现横向移动。
使用 Cobalt Strike
的user-exploitation
工具展示有意义的业务风险。 Cobalt Strike
的工作流程可以轻松地在受感染的系统上部署击键记录器和屏幕截图捕获工具。使用浏览器劫持来获取受感染目标通过 Internet Explorer
登录的网站访问权限。这种 Cobalt Strike
独有的技术适用于大多数站点,并能绕过两因素身份验证。
Cobalt Strike
的报告功能可以重建客户的参与度。为网络管理员提供活动时间表,以便他们可以在监控设备中找到攻击痕迹。 可以将Cobalt Strike
生成高质量的报告作为独立报告呈现给客户或用作书面叙述的附录。
在上述每个步骤中,你将需要了解目标环境及其防御,并推理出利用可用资源实现目标的最佳方法。这就是规避。 Cobalt Strike
的目标并不是提供开箱即用的规避功能。Cobalt Strike
在其潜在配置和执行攻击操作的选项方面都提供了很大的灵活性,可以根据自己的情况和目标进行调整。
# 1.1、安装和更新
Fortra LLC
发行了适用于 Windows
、Linux
和 MacOS X
的 Cobalt Strike
软件包。
Cobalt Strike
使用C/S
模式。客户端和服务端可以部署在同一台机器上,也可以分开部署。Cobalt Strike
图形界面客户端被称为Cobalt Strike
或者Cobalt Strike GUI
,用于启动客户端的命令是cobaltstrike
。Cobalt Strike
服务器成为Team Server
,用于启动服务器端的命令是teamserver
。
安装 Cobalt Strike
的基本过程包括下载将其压缩包到你的操作系统上,并运行更新。
# 1.1.1、开始之前
在安装Cobalt Strike
之前,先仔细阅读本节内容。
系统要求
不管是运行服务端还是客户端都需要以下依赖条件或软件:
Java
Cobalt Strike
的 GUI
客户端和团队服务器需要以下 Java
环境之一:
- Oracle Java 1.8
- Oracle Java 11
- OpenJDK 11
如果你的组织没有允许将 Oracle Java 用于商业用途的许可证,我们建议你使用 OpenJDK 11
支持的操作系统
Cobalt Strike Team Server
可以在Linux
系统上运行,并且已在以下基于 Debian
的 Linux
发行版上进行了测试(其他版本可能有效,但尚未测试):
- Debian
- Ubuntu
- Kali Linux
Cobalt Strike Client
支持的操作系统:
- Windows 7及更高版本
- MacOS X 10.13及更高版本
- 带GUI的Linux发行版,比如Debian、Ubuntu和Kali Linux(其他版本可能有效,但尚未测试)
硬件要求
应满足以下最低硬件要求:
- 2Ghz+ 处理器
- 2GB 内存
- 500MB以上可用磁盘空间
- 在 Amazon 的 EC2 上,至少使用一个 High-CPU Medium (c1.medium, 1.7 GB) 实例。
Linux glibc
请注意,某些 Linux
发行版可能缺失或没有正确版本的 glibc
。如果遇到该问题,请查看 Fortra 门户上的知识文章(https://community.fortra.com/kb-nav/kb-article/?id=3cbb3322-1ecb-ec11-a7b5-0022480b2f00&redirect=false)
# 1.1.2、安装OpenJDK
Cobalt Strike
使用OpenJDK 11
进行了测试,其启动器与正确安装的OpenJDK 11
环境兼容。
Linux (Kali或Ubuntu )
1、更新APT软件源
sudo apt update
2、安装OpenJDK 11
sudo apt install openjdk-11-jdk
3、将OpenJDK 11设置为默认java执行器
sudo update-java-alternatives -s java-1.11.0-openjdk-amd64
其他Linux发行版
1、卸载当前的 OpenJDK 软件包
2、从https://jdk.java.net/archive/
网站下载OpenJDK for Linux/x64
压缩包
3、解压
tar -zxvf openjdk-11.0.1_linux-x64_bin.tar.gz
4、将 OpenJDK
目录移动到 /usr/local
mv jdk-11.0.1 /usr/local
5、添加环境变量到~/.bashrc
文件中:
JAVA_HOME="/usr/local/jdk-11.0.1"
PATH=$PATH:$JAVA_HOME/bin
6、刷新~/.bashrc
以使新的环境变量生效:
source ~/.bashrc
MacOS X
1、从https://jdk.java.net/archive/
网站下载OpenJDK for macOS/x64
压缩包
2、打开终端
,进入Downloads/
目录
3、解压文件:
tar -zxvf openjdk-11.0.1_osx-x64_bin.tar.gz
4、移动解压文件到 /Library/Java/JavaVirtualMachines/
目录
sudo mv jdk-11.0.1.jdk/ /Library/Java/JavaVirtualMachines/
MacOS X
上的 java
命令将使用 /Library/Java
中最高版本的 Java
作为默认值。
如果你看到 JRELoadError 消息,这是因为 Cobalt Strike 中包含的 JavaAppLauncher 存根从设定路径加载库以在存根进程中运行 JVM。发出以下命令来修复此错误:
sudo ln -fs /Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
将 jdk-11.0.2.jdk 替换为你的 Java 路径。下一个Cobalt Strike版本将使用更灵活的MacOS X的Java应用程序存根。
Windows
1、从https://jdk.java.net/archive/
网站下载OpenJDK for Windows/x64
压缩包
2、将其解压到c:\program files\jdk-11.0.1
3、将 c:\program files\jdk-11.0.1\bin
添加到用户的 PATH
环境变量中
- 控制面板->系统->更改设置->高级>环境变量
- 用户变量->PATH->编辑->新建->设置值为
c:\program files\jdk-11.0.1
->确定
Wayland Desktop不支持
Wayland
是X Windows
系统的现代替代品。虽然Wayland
已经取得了长足的进步,一些桌面环境将其用作默认窗口系统。不过,并非所有应用程序或应用程序环境在Wayland
上都能 100% 完美运行。仍有错误和问题需要解决。
Java
(或Wayland
)中存在一些错误,可能会导致图形Java
应用程序在Wayland
桌面中运行时崩溃。这些错误会影响Cobalt Strike
用户。不建议在 Wayland
桌面上使用 Cobalt Strike
。
确定是否在使用Wayland
?
使用echo $XDG_SESSION_TYPE
命令确定是使用的wayland
还是 x11
如何在 Kali Linux
上禁用 Wayland
1、用文本编辑器打开 /etc/gdm3/daemon.conf
2、找到[daemon]
部分
3、添加WaylandEnable=false
保存配置并重启系统。
# 1.1.3、安装Cobalt Strike
安装如下说明安装Cobalt Strike
Cobalt Strike
发行包(步骤一和三)包含特定操作系统的Cobalt Strike
启动器,支持文件和更新程序。但不包括Cobalt Strike
主程序。运行更新程序(步骤四)将下载Cobalt Strike
主程序并执行最后的安装步骤。
1、下载适用于受支持操作系统的Cobalt Strike
分发包。(提供一封电子邮件,其中包含下载链接)
2、配置好Java环境
3、解压缩下载的Cobalt Strike
压缩文件
-
Linux :
tar -zxvf cobaltstrike-dist.tgz
-
MacOS X
1、双击
cobaltstrike-dist.dmg
文件进行装载2、将
Cobalt Strike
目录拖到Applications
目录中 -
Windows
1、禁用反病毒软件
2、使用压缩软件解压文件到合适的位置
4、运行更新程序完成安装
-
Linux
cd /path/to/cobaltstrike ./update
-
MacOS X
打开
Cobalt Strike
目录,双击Update Cobalt Strike.command
-
Windows
打开
Cobalt Strike
文件夹,双击运行update.bat
使用许可证密钥更新团队服务器和客户端软件。Cobalt Strike
通常按用户授权。团队服务器不需要单独的许可证。
# 1.1.4、许可证授权文件
Cobalt Strike
的许可版本需要有效的授权文件才能启动。授权文件是一个加密的 blob
,提供有关你的 Cobalt Strike
产品许可证的信息。这些信息包括:你的许可证密钥、许可证到期日期以及与你的许可证密钥关联的ID
号。
如何获取授权文件
内置更新程序在运行时会向 Cobalt Strike
的更新服务器请求授权文件。即使你的 Cobalt Strike
版本是最新的,更新程序也会下载新的授权文件。这允许授权文件在运行时与 Fortra reports.server
中的许可证日期保持一致。
当我的许可证到期时会发生什么?
当授权文件过期时,Cobalt Strike
将拒绝启动。此外,获得许可的 Cobalt Strike
产品每天都会检查授权文件。如果授权文件在 Cobalt Strike
运行时过期,则 teamserver
将继续运行额外 14 天的宽限期。如果在此期间不更换授权文件,teamserver
将关闭。
详情:
Teamserver
在启动时和每天上午 10 点检查许可证。- 当团队服务器启动时,团队服务器许可证到期会记录在事件日志中。
- 连接到团队服务器的客户端将在许可证到期前 45 天开始显示许可证警告功能区。
- 在每日许可证检查期间关闭服务器之前,正在运行的团队服务器将有 14 天的宽限期。
- 如果你需要扩展正在运行的团队服务器的许可证,你可以在不同位置安装/更新
CobaltStrike
,并将“cobaltstrike.auth”文件从新安装复制/替换到正在运行的实例中
# 1.2、启动团队服务器
Cobalt Strike
分为客户端组件和服务器组件。服务器组件,也就是团队服务器,是 ``Beaconpayload
的控制器,也是 Cobalt Strike
社会工程学攻击功能的托管主机。团队服务器还存储Cobalt Strike
收集的数据并管理日志记录。
Cobalt Strike Teamserver
必须在受支持的 Linux
系统上运行。要启动Cobalt Strike teamserver
,使用以下命令运行Cobalt Strike Linux
安装文件中的teamserver
脚本:
./teamserver <ip_address> <password> [<malleableC2profile> <kill_date>
teamserver
脚本使用以下两个必需参数和两个可选参数
IP 地址 -(必填)输入团队服务器的外部可访问 IP
地址。Cobalt Strike
使用此值作为其功能的默认主机。
密码 -(必填)输入团队成员将用于将 Cobalt Strike
客户端连接到团队服务器的密码。
C2扩展配置 -(可选)指定有效的C2扩展文件。有关此功能的更多信息,后面会详细讲解
终止日期-(可选)以 YYYY-MM-DD
格式输入日期值。团队服务器将此终止日期嵌入到它生成的每个Beacon`stage`中。
Beaconpayload
将在此日期之后拒绝运行,如果在此日期后这个 ``Beaconpayload
醒来也会自动结束(对应 Beacon
会话中的 exit 选项)。
当团队服务器启动时,它将发布团队服务器的SSL
证书的 SHA256
哈希。将此哈希分发给你的团队成员。当你的团队成员连接时,他们的Cobalt Strike
客户端将在向团队服务器进行身份验证之前询问他们是否识别此哈希。这是防止中间人攻击的重要保护措施。
# 1.3、启动Cobalt Strike 客户端
1、要启动 Cobalt Strike
客户端,使用适用于你的平台的软件包内的启动器。
1、Linux:
./cobaltstrike
2、MacOS X
在Cobalt Strike
目录中双击cobaltstrike
3、Windows
在Cobalt Strike
目录中双击cobaltstrike.exe
启动后,将看到一个连接对话框
2、Cobalt Strike
会跟踪你连接的团队服务器并记住你的信息。从连接对话框的左侧选择这些团队服务器配置文件之一,以使用其信息填充连接对话框。使用Alias Names
和Host Names
按钮切换主机列表的显示方式。活动连接将以蓝色文本显示。你可以通过 Cobalt Strike
-> Preferences
-> Team Servers
来控制主机列表的初始显示方式、活动连接文本颜色以及列表样式。
参数选项:
Alias:输入主机别名或使用默认值,不能为空或以*
开头。
Host:指定团队服务器的IP地址,不能为空
Port:服务器的端口(默认为50050)
User:你在团队服务器上的昵称,不能为空。
Password:连接到服务器的密码
3、点击 Connect
按钮来连接到 Cobalt Strike
的团队服务器。
如果你是第一次连接到此团队服务器,Cobalt Strike
将询问你是否识别此团队服务器的 SHA256
哈希。
4、如果确认无误,请按是,Cobalt Strike
客户端将连接到服务器并打开客户端用户界面。
Cobalt Strike将会记住这个SHA256哈希值,以便将来连接。你可以通过 Cobalt Strike -> Preferences -> Fingerprints来管理这些哈希值。
# 1.4、分布式和团队行动
使用 Cobalt Strike
来协调红队的分散行动。使用一个或更多的远程主机分阶段的筹划 Cobalt Strike
基础设施。启动团队服务器并让你的团队与其建立连接。
连接至一个团队服务器,你的团队将:
- 使用相同的会话
- 共享主机、捕获的数据和下载的文件
- 通过共享事件日志进行通信
Cobalt Strike
客户端可以连接到多个团队服务器。 点击Cobalt Strike
-> NewConnection
可以设置新的连接。
当连接到多个服务器时,可以在Cobalt Strike
底部切换。
活动服务器将会以蓝色加粗文字线上。每一个团队服务器有它自己的按钮。在一个按钮上点击右键、选择重命名来使这个按钮的名称能够反映这台团队服务器在你行动中的作用。
当连接到多个团队服务器,Cobalt Strike
会汇总所有它连接的团队服务器的监听器。这种聚合允许你从一台团队服务器发送引用了托管在另一台团队服务器上的恶意网站的钓鱼邮件。在你行动的末期,Cobalt Strike
的报告功能会查询所有你连接到的团队服务器、合并这些数据来描述一个完整的行动。
重新连接客户端
当用户使用菜单、工具栏或开关栏服务器按钮启动客户端断开连接时,将显示一个带有重新连接(Reconnect
)和关闭(Close
)按钮的红色横幅。
点击close
关闭窗口。点击Reconnect
以重新连接到团队服务器。
如果TeamServer
不可用,则会显示一个对话框,询问你是否要重试(是/否)。如果选“是”,则再次尝试连接(如果需要,重复)。如果选“否”,对话框将关闭。
当 TeamServer
发起断开连接或其他网络中断时,红色横幅将显示一条消息,其中包含连接重试的倒计时。这将重复,直到与TeamServer
建立连接或用户单击“关闭”。在这种情况下,用户可以与 UI 的其他部分进行交互。
当客户端重新连接时,红色的重新连接栏将消失。
# 1.5、编写Cobalt Strike脚本
Cobalt Strike
可通过它的 Aggressor Script
语言来为其编写脚本。Aggressor Script
允许修改和扩展Cobalt Strike
客户端。
Aggressor Script
是 Armitage
的Cortana
脚本语言的精神继任者。
Aggressor Script
是一种脚本语言,用于红队操作和对手模拟,灵感来自可编写脚本的 IRC 客户端和机器人。它的目的是双重的。你可以创建长时间运行的机器人来模拟虚拟红团队成员,与你并排进行黑客攻击。你也可以使用它来扩展和修改Cobalt Strike
客户端以满足你的需求。
加载脚本
Aggressor Script
内置于Cobalt Strike客户端中通过 Cobalt Strike
->Script Manager
来对脚本进行管理。
Cobalt Strike
内部的默认脚本定义了Cobalt Strike
的所有弹出菜单,并格式化了Cobalt Strike
控制台中显示的信息。通过Aggressor Script
引擎,你可以覆盖这些默认值和自定义Cobalt Strike
。
你也可以使用 Aggressor Script
为 Cobalt Strike
的 Beacon
增加新的功能和自动执行某些任务。
要了解有关Aggressor Script
的更多信息,请参考后续章节<Aggressor Script
>内容。
# 1.6、在MacOS X上运行客户端
Cobalt Strike
客户端最初可能无法在文件浏览器中显示“文档”、“桌面”和“下载”文件夹的内容。(例如加载脚本、上传文件、生成攻击载荷等)
默认情况下,OSX 限制应用程序对“文档”、“桌面”和“下载”文件夹的访问权限。需要显式授予这些应用程序对这些文件夹的访问权限。
由于Cobalt Strike
是第三方应用程序,因此它并不像授予应用程序“Cobalt Strike”访问权限那么简单。你可能需要向运行 Cobalt Strike
客户端的 JRE
授予对文件系统的访问权限。你可以授予对特定文件和文件夹的访问权限或完全磁盘访问权限。
系统可能会提示你进行访问:
如果访问之前被拒绝,你可能需要在 OSX 系统偏好设置/安全性与隐私/隐私对话框中编辑访问权限:
请注意,使用JRE
的其他应用程序也将具有此访问权限。
# 说明
本文由笔者在Cobalt Strike官方用户指南原文(https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/welcome_main.htm)基础上编译,如需转载请注明来源。