知识点
1 、CS-表面特征消除
2 、CS-HTTP流量特征消除
3 、CS-Shellcode特征消除
编译代码面-ShellCode-混淆
编译代码面-编辑执行器-编写
编译代码面-分离加载器-编写
程序文件面-特征码定位-修改
程序文件面-加壳花指令-资源
代码加载面-Dll反射劫持-加载
权限逻辑面-杀毒进程干扰-结束
工具数据面-通讯内存流量-动态
对抗目标:
X60 Defender 某绒 管家 VT等
编程语言:
C/C++ Python C
涉及技术:
ShellCode混淆,无文件落地,分离拆分,白名单,DLL加载,Syscall,加壳加花,
资源修改,特征修改,二次开发CS,内存休眠,进程注入,反沙盒,反调试,CDN解析等
演示案例
1 、魔改搭建-CS反编译及导入IDEA编译
2 、表面配置-对端口密码证书做特征消除
3 、逆向源码-对http/s上线流量做特征消除
4 、逆向源码-对http/s生成Payload做特征消除
5 、逆向源码-对Powershell生成Payload做特征消除
环境:IDEA JDK8& 11
参考:https://github.com/zer0yu/Awesome-CobaltStrike
1 、反编译Jar包
2 、新建Java项目
3 、修改上线代码
4 、打包替换编译
5 、替换服务客户端
-反编译:
java -cp IDEA_HOME/plugins/java-decompiler/lib/java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs = true < src.jar> < dest dir>
-具体命令:
"D:\program files\Java\jdk11\b in\java.exe" -cp "C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\plugins\java-decompiler\lib\java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs = true cobaltstrike.jar coba
简单说下,较为简单,主要是源码的特征流量
•cobaltstrike.beacon_keys和cobaltstrike.store不要使用默认的文件,删除
•profile文件要换新的,启动服务端时记得加载,或直接把jar包里面的默认配置给改了
•开在公网的teamserver不要使用默认端口
https://github.com/zer0yu/Awesome-CobaltStrike
checksum8函数对比后续-common\ CommonUtils& cloudstrike\ WebServer
80 :http://IP/aaa9
443 :https://ip:443/aaa9
当然特征不止这一个「aaa9」例如「http://IP/HjIa」这个也会出现这种状态
只要是符合「checksum8」算法技术出来的文件都可以请求到 「不是唯一值」
public class EchoTest {
public static long checksum8( String text) {
if ( text.length( ) < 4 ) {
return 0L;
}
text = text.replace( "/" , "" ) ;
long sum = 0L;
for ( int x = 0 ; x < text.length( ) ; x++) {
sum += text.charAt( x) ;
}
return sum ;
}
public static void main( String[ ] args) throws Exception {
System.out.println( checksum8( "xiaodi" )) ;
}
}
BeaconHTTPStagerX86-> GenericHTTPStagerX86-> GenericHTTPStager->
-> resources/httpstager.bin
实验:用x86资源bin替换x64的,实现x64生成与x86一致
拓展:1、替换bin生成即免杀 2 、更改源码生成机制即免杀
功能生成-搜代码块-> 找引用( template.x86.ps1) -> BaseResourceUtils-> _buildPowerShellNoHint
实验:用x86资源ps1替换原本ps1,实现生成即免杀
拓展:1、仿前课程的函数打乱 2 、更改源码生成机制即免杀
总结
魔改(二次开发)CS,目的是修改其特征防溯源,或是替换模板让其生成的payload直接达到免杀效果
今天的内容主要涉及以下几个方面:(修改前提是将CS的jar文件反编译,修改完后再打包替换)
1 、表面配置特征消除
修改CS端口(没改的是50050端口,可修改成其他的端口)
修改CS证书配置
修改CS加载文件配置(比如profile文件要换新的,或直接把jar包里面的默认配置给改了)
2 、上线流量特征消除
采用默认http( s) 的CS请求url为4位字符串(如aaa9),将这4位字符串作为传入,通过算法checksum8会得到92( 93 ) ,蓝队可以以此判定为CS连接器
为了防止这一点,可以自定义字符串(如xiaodi),通过checksum8得到其值(比如是115),那么再替换CS源码中的92为115即可
3 、生成payload特征消除
比如对http( s) 生成payload做特征消除,用x86资源bin替换x64的,实现x64生成与x86一致,实现生成即免杀(结合之前的免杀技术效果更好)
对Powershell生成Payload做特征消除,用x86资源ps1替换原本ps1,实现生成即免杀(结合之前的免杀技术效果更好)