针对CobaltStrike中出现的Stager监听端口特征后门分析
背景
此前网络上出现了一些针对CobaltStrike的特征检测手段,利用了CS服务器中的一个特征后门来检测CS服务器,做网络测绘,详细文章可以看https://mp.weixin.qq.com/s/BLM8tM88x9oT4CjSiupE2A,网上也出现了一些规避手段,比如讲Starge监听stop掉,但是本人不喜欢这种方式,不够灵活,而且CS的逆向修改也没那么麻烦。另外我觉得描述这个问题也要严谨一些,我叫它特征后门,即通过这个特征能识别端口背后的服务,进而被威胁情报收录。造成这个特征的核心问题是,CS在生成Stager类型的可执行文件时,需要通过监听端口+URI去下载Payload,这个URI生成规则写的真的能算是后门了,只能感叹试用版终归是试用版。我觉得以后真没必要抢先用一些新版本的试用版,尤其是用于实战,你可能并不知道被作者在里面放了些啥,老版本功能够用就可以了。
这里的生成规则是随机从大写字母+小写字母+数字中取指定长度的几个字符,然后计算ASCII码和模256,符合这个规则就OK了。
然后在Stager服务器的响应代码中,也是同样命中这个规则就会返回Payload代码。
处理1
处理这个问题需要修改两个地方的代码,一个是生成URI的代码,一个是Stager服务器响应代码,需要两个地方对应即可。这里给出修改位置:
生成代码:
common.CommonUtils
public static String MSFURI(int paramInt) {...}
public static String MSFURI_X64() {...}
不建议直接修改Checksum8函数,可以通过新增一个自己编写的函数来实现计算校验和,因为其他地方还会调用common.CommonUtils中的checksum8函数
Stager响应代码:
cloudstrike.Webserver
public static boolean isStager(String uri) {...}
public static boolean isStagerX64(String uri) {...}
public Response _serve(String uri, String method, Properties header, Properties param) {...}
修改后重新编译打包即可,这里不再赘述。
处理2
实验室同学说,通过nginx反代理配置了C2 Profile的端口,在nginx路由规则中即可限制也可。