0x01 哲学
Strategic Cyber 责任有限公司会定期回答有关规避的问题。Cobalt Strike 是否能够绕过 AV 产品?它能绕过哪些 AV 产品?它多久检查一次?
Cobalt Strike 默认的 Artifact 可能会被大多数终端安全解决方案拦截。规避不是 Cobalt Strike 默认产品的目的。但是 Cobalt Strike 确实提供了灵活性。
你作为操作员可以改变 Cobalt Strike 在它的工作流中使用的可执行文件、DLL、applet 和脚本模板。你也可以以多种不同的格式导出 Cobalt Strike 的 Beacon payload,这样可以与用于帮助规避的第三方工具一起工作。
本章将重点介绍 Cobalt Strike 提供灵活性的的功能。
0x02 Artifact 工件集
Cobalt Strike 使用 Artifact 工件集来生成它的可执行文件和 DLL。这个 Artifact 工件集是一个源码框架、用于建立(build)可以规避一些反病毒产品的可执行文件和 DLL。
Artifact 工件集理论
传统的反病毒产品使用签名来识别已知的恶意程序。如果我们把一些被标记的恶意 shellcode 注入一个可执行文件,那么反病毒产品会识别 shellcode 并把此可执行文件标为恶意。
为了打败这种检测,攻击者通常会以某种方式混淆 shellcode 并将其放入二进制文件中。这种混淆过程会打败使用简单的字符串搜索来识别恶意代码的反病毒产品。
很多反病毒产品会进行更严苛的检测。这些反病毒产品模拟一个可执行程序在一个虚拟沙盒中的执行。在执行的每个模拟步骤中,这个反病毒产品会检测在模拟的进程空间中的已知的恶意部分。如果已知的恶意部分出现,反病毒产品会把这个可执行文件或 DLL 标记为恶意的。这项技术打败了许多编码器和程序包,它们试图去从基于签名的反 AV 产品中隐藏已知的恶意部分。
Cobalt Strike 对此的应对策略是很简单的。这个反病毒沙盒有一些限制。这不是完整的虚拟机。有一些反病毒沙盒不会模拟的系统行为。这个 Artifact 工件集是一些可执行文件和 DLL 模板的合,这些可执行文件和 DLL 模板依赖于一些反病毒产品不会模拟来还原二进制中的 shellcode 的行为。
一些技术[请参阅:Artifact 工件集中的 src-common/bypass-pipe.c ]生成可执行文件和 DLL,这些可执行文件和 DLL 通过命名管道为 shellcode 服务,通过命名管道传输 shellcode。如果反病毒沙箱不模拟命名管道,就发现不了那些已知的恶意 shellcode。
Artifact 工件集失效的地方
当然,反病毒产品可能击败 Artifact 工件集中的特定的实现。如果一个反病毒的供应商为你使用的Artifact 工件集技术编写了签名,那么它创建的可执行文件和 DLL 将被捕获。杀软的追踪始于 CobaltStrike 2.5 甚至更低的版本。随着时间的推移,Cobalt Strike 中默认的绕过技术会逐渐失效。如果你想最大化利用 Artifact 工件集,你可以使用这些 Artifact 工件集中的某项技术作为基础来构建你自己的Artifact 工件集实现。
但是哪怕是这样也还远远不够。一些反病毒产品会回连厂商的服务器。这些厂商来决定该可执行文件或DLL 是否是非恶意的或者是之前从未见过的未知可执行文件或 DLL。一些这些产品会自动的把未知的可执行文件或 DLL 发送到厂商用于进一步的研究和提醒用户。其他的一些产品会把未知的可执行文件或DLL 视为恶意的。这取决于反病毒产品及其设置。
关键是,在这种情况下,再怎么样“混淆”也帮不了你。你要面对的是不同的防御方式,需要针对性的解决方案。你应该像处理应用白名单一样处理这些情况。尝试找到一个已知的好的程序(比如powershell),利用它来把你的 payload stager 注入进内存中。
如何使用 Artifact 工件集
通过 Help → Arsenal (武器库),填入 Cobalt Strike 的注册码来下载 Artifact 工件集。你也可以通过这个地址来直接访问武器库网页:https://www.cobaltstrike.com/scripts
Strategic Cyber 有限责任公司将 Artifact 工件集以 .tgz 的格式分发。使用 tar 命令对其进行解压。此 Artifact 工件集包含一个 build.sh 脚本。在 Kali Linux 系统上运行此脚本,无需任何参数,使用最小化 GNU 来为 Windows 交叉编译器构建默认的 Artifact 工件集。
Artifact 工件集构建脚本会为每一项 Artifact 工件集中的技术创建一个包含模板 Artifact 的文件夹。要通过 Cobalt Strike 来使用某项技术,通过 Cobalt Strike → Script Manager (脚本管理器),并从该技术的文件夹加载 artifact.cna 脚本。
建议你定制化修改 Artifact 工件集及其技术,使其满足你的需求。尽管熟练的 C 程序员可以使用Artifact 工件集做更多事情,那些不是程序员但是乐于探索的人也可以使用 Artifact 工件集。比如,每当新版本发布时,主流的反病毒产品喜欢为 Cobalt Strike 的试用版中的可执行文件编写签名。直到Cobalt Strike 2.5版本,Cobalt Strike 的试用版和授权版都在其可执行文件和 DLL 中使用了命名管道技术。反病毒厂商就需要为可执行文件使用的命名管道字符串编写签名。击败它们的签名,一次又一次的发布,就像在管道技术的源代码中更改管道名称一样简单。
0x03 Veil 规避框架
Veil 是一个流行的框架,用于生成可以通过某些防病毒产品的可执行文件。你可以使用 Veil 来为Cobalt Strike 的 payload 生成可执行文件。通过 Attacks → Packages → Payload Generator 。选择你想要为其生成可执行文件的监听器。选择 Veil 作为输出类型,按 Generate 按钮来保存输出文件。
启动 Veil 规避框架并选择你想要使用的技术。Veil 最终会询问关于 shellcode 的生成选项。选择 Veil的“使用自定义 shellcode”的选项,把 shellcode 粘贴在 Cobalt Strike 的 payload 生成器使用的文件内容中。按 Enter 键然后你就会获得一个新鲜出炉的 Veil 制作的可执行文件。
0x04 Java 小程序攻击
Strategic Cyber 有限责任公司以小程序集的形式为 Cobalt Strike 的小程序攻击发布源码。这部分也可以在 Cobalt Strike 的武器库中。通过 Help → Arsenal (武器库)并下载小程序集。
使用包含的 build.sh 脚本来在 Kali Linux 上构建小程序集。很多 Cobalt Strike 的客户使用这种灵活性来使用一个他们购买的代码签名的证书为 Cobalt Strike 的 Java 小程序攻击签名。我们也强烈推荐这种做法。
要使 Cobalt Strike 使用你的小程序集而不是内置的那个,加载包含在小程序集里面的 applet.cna 脚本。
在 Cobalt Strike 武器库页面上你会注意到 Power Applet (Powershell 小程序)。这是 Cobalt Strike的 Java 小程序攻击使用 PowerShell 的替代实现,用于将 payload 注入内存。Power Applet 展示了你有使用完全不同的方法重建 Cobalt Strike 的标准攻击并把它门用于 Cobalt Strike 的工作流中的灵活性。
通过加载小程序集中包含的 applet.cna 脚本,可以使 Cobalt Strike 使用你的小程序集而不是内置的那个。
0x05 资源集
资源集是 Cobalt Strike 改变其在工作流中使用的 HTA,Powershell,Python,VBA 和 VBA 脚本模板的方法。同样,资源集在 Cobalt Strike 的武器库中,可以被有注册码的用户获取。通过 Help →Arsenal 来下载资源集。
资源集的 README.txt 文档记录了包含的脚本和哪些功能使用它们。要规避一个产品,考虑这些脚本中的改变字符串或行为。
要使 Cobalt Strike 使用你的脚本模板而不是内置的脚本模板,加载资源集中的 resources.cna 脚本。