CobaltStrike二次开发

本文最后更新于:2024年3月9日 晚上

2022年过的真的很快啊,一转眼就2023了,本来想着元旦的时候,搞一点东西分享出来,但是因为太忙没有腾出时间,那就只好赶着春节前夕,水一点文章了。

CobaltStrike简介

CobaltStrike是一套商业化的C2框架,提供了较好的兼容性和可扩展性,也因此成为了目前红队中最为广泛使用的C2。但是因为使用广泛,其特征也被大量采集,并用于识别beacon及TeamServer,这里我就简单的把自己二开的一部分内容发出来和大家分享。

注:此文章大部分修改内容只说方案,不赘述原理,也不会包含成品文件,为节约篇幅,也不再赘述二开编译环境、破解等内容

修改内容

CobaltStrike的4.5版本是目前最适合二开的版本,所以以此版本为例进行修改

Teamserver/Controler

1.主题切换

此处涉及代码较多。一一截图太麻烦,就主要说下自己的一些思路了。

首先由于CS本身使用的是swing的界面,所以可以直接通过Flatlaf进行主题切换,除了自带的若干主题,也可以通过自己准备的json文件加载配置。

如果想做动态主题切换的话,可以在aggressor\dialogs\PreferencesDialog中添加一个combobox并添加一个新的属性,并制作对应点击事件。对于暗色调主题,可以在CS4.7中提取白色图标进行切换。

在使用Flatlaf的情况,会有部分界面出现显示问题,修复方案如下:

2.CVE-2022-39197修复

添加如下代码,并添加对javassist的引用即可

这种修改方式会禁用所有的html解析,导致部分界面显示出错,修改后最好全局搜索html标签,并依次进行修复,文件包括但不限于aggressor\browsers\Connect.java,aggressor\dialogs\AboutDialog.java,aggressor\dialogs\OfficeMacroDialog.java,aggressor\dialogs\ProxyServerDialog.java,dialog\DialogUtils.java,tunnel\TunnelReversePortForward.java,ui\ATable.java等

3.修改默认配置文件名

修改aggressor\Prefs.java中的myFile函数中文件名即可

4.修复foreign派生错误的bug

5.修改winvnc.dll加载位置

在server\ManageUser.java中更改即可,我自己是直接放进jar包内的资源部分了

6.启用Payload Generator(Stageless)生成选项

7.默认启用TLS1.0至TLS1.2,修复无补丁Windows7的https支持

新版本的Java8及其他更高版本的环境中,都已经默认禁用了TLS1.2以下的协议,这样如果在无补丁的Windows7机器上https上线可能会出现问题,可以通过启用协议进行修复

8.删除服务端响应返回字符串

删除cloudstrike\NanoHTTPD.java的serve函数中的”This is the default!”、sendError函数中忽略第二个参数内容

9.修改配置信息的异或密钥

将beacon\BeaconPayload.java中beacon_obfuscate函数内的异或值修改,并同步修改Beacon中的该值(Sleeve解密后二进制编辑器搜索即可)

10.修改控制端与服务端间socket的magic值

ssl\SecureServerSocket.java和ssl\SecureSocket.java两个文件中的0xBEEF值,随意修改一个类似的值即可

11.修复CVE-2022-23317

在_serve函数的一长串else if中添加一个判断

12.CheckSum8

其实更推荐直接在profile中关掉stage,但是考虑到有些人可能有需求,就还是改一下吧。这里我选择了一个比较与众不同的修改方案,直接更改cloudstrike\WebServer.java及common\CommonUtils.java两个文件中checksum8函数中的长度为16,并更改对应调用判断的几个函数即可。

13.其他

删除大量的javaagent判断,删除各种license判断,可以根据需求选择是否去除Sleeve改为不加密直接储存方便后续修改,可以使用Java8+Multi-Release编译实现jar的多版本兼容

Beacon

这部分需要有一定的逆向功底,为了避免修改方案重复,我就不附截图了

1.修改BeaconEye特征

简单逆向beacon.dll即可找到该部分,改汇编patch了memset的初始值即可

2.修改beacon中特征

内存查杀也是根据特征进行查找了,可以分块加载进内存测试,并定位特征块,或者直接通过各种Sleep Mask绕过内存查杀

3.修复CodeX发现的Sleep Mask未混淆部分的内存特征

来源:https://codex-7.gitbook.io/codexs-terminal-window/blue-team/detecting-cobalt-strike/sleep-mask-kit-iocs

经过特征定位及代码分析,可以确定是becon引用的libtomcrypt静态库中的base64编码解码函数,所以才会这么通杀,有修改需求的话也是需要自己去根据汇编修改等价代码

结语

最后祝大家新的一年,新年快乐,万事如意!


CobaltStrike二次开发
https://blog.qwqdanchun.com/CobaltStrike_Modify/
作者
qwqdanchun
发布于
2023年1月21日
更新于
2024年3月9日
许可协议