从剖析CS木马生成到开发免杀工具的过程是怎样的

发布时间:2021-12-16 18:19:19 作者:柒染
来源:亿速云 阅读:417

这篇文章将为大家详细讲解有关从剖析CS木马生成到开发免杀工具的过程是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

木马是黑客实施网络攻击的常用兵器之一,有些木马可以通过免杀技术的加持躲过杀毒软件的查杀。本文旨在通过剖析CS木马生成过程以及开发免杀工具,帮助大家更好地理解CS木马的Artifact生成机制。

Cobaltstrike是用于红队行动、APT攻击模拟的软件,它具备很强大的协同能力和难以置信的可扩展性。

从剖析CS木马生成到开发免杀工具的过程是怎样的

无论是编写 shellcode,创建自定义的 C2二进制可执行文件,还是修改代码来隐藏恶意程序,它们都是红队日常工作的一部分,阅读和理解成熟的C2框架代码也是理所当然的事情。

CobaltStrike是如何生成ShellCode的

CS是使用Swing进行UI开发的,代码中直接找对话框对应操作类。

+ `aggressor\dialogs\WindowsExecutableDialog.class`

从剖析CS木马生成到开发免杀工具的过程是怎样的

可以看到很清晰的生成逻辑。

protected byte[] stager;

@Override
public void dialogAction(final ActionEvent actionEvent, final Map options) {
    this.options = options;
    this.stager = DialogUtils.getStager(options);
    if (this.stager.length == 0) {
        return;
    }
    final String string = options.get("output") + "";
    String s = "";
        if (string.indexOf("EXE") > -1) {
            s = "artifact.exe";
        }
        else if (string.indexOf("DLL") > -1) {
            s = "artifact.dll";
        }
        SafeDialogs.saveFile(null, s, this);
    }

通过 DialogUtils.getStager() 获得生成的 stager 然后通过 saveFile 保存文件。

getStager() 方法调用了 aggressor\DataUtils.shellcode() ,而这里其实是Stagers的接口。

return Stagers.shellcode(s, "x86", b);

最终在 stagers\Stagers.shellcode() 根据监听器类型,

实例化了继承自的 GenericStager 的 stagers\GenericHTTPStager 类,并由 generate() 生成shellcode

从剖析CS木马生成到开发免杀工具的过程是怎样的

shellcode生成时,读取了resources/httpstager.bin,并根据监听器的host和port等值组合为Packer

最终替换到多个X、Y占位的bin文件中,最后返回bytes[] 类型的shellcode

Patch Artifact

shellcode生成完成后,回到原点,可以看到根据用户的选择,对不同的 artifact 模板进行 patch ,以 x86 的模板为例,
继续跟进 patchArtifact

new ArtifactUtils(this.client).patchArtifact(this.stager, "artifact32.exe", s);

+ `common\BaseArtifactUtils.class`

public byte[] patchArtifact(final byte[] array, final String s) {
    final Stack<Scalar> stack = new Stack<Scalar>();
    stack.push(SleepUtils.getScalar(array));
    stack.push(SleepUtils.getScalar(s));
    final String format = this.client.getScriptEngine().format("EXECUTABLE_ARTIFACT_GENERATOR", stack);
    if (format == null) {
        return this.fixChecksum(this._patchArtifact(array, s));
    }
    return this.fixChecksum(CommonUtils.toBytes(format));
}

稍微看一下 fixChecksum ,是通过 PE 编辑器修复了校验码。

这里不赘述了,对编辑器实现感兴趣的可以去看看 pe\PEEditor.class

final PEEditor peEditor = new PEEditor(array);
peEditor.updateChecksum();
return peEditor.getImage();

注意看这里 this._patchArtifact(array, s) ,调用了同名方法,PS:差点以为在看Python

从剖析CS木马生成到开发免杀工具的过程是怎样的

读取了 resources 文件夹下的 artifact32.exe 作为模板文件,根据重复的1024个 A 来定位shellcode 位置。

与生成shellcode时类似,使用common/CommonUtils.replaceAt()对bytes流转为的字符串进行编辑替换。

public static String replaceAt(final String s, final String s2, final int n) {
    final StringBuffer sb = new StringBuffer(s);
    sb.delete(n, n + s2.length());
    sb.insert(n, s2);
    return sb.toString();
}

使用16进制编辑器可以直接看到用于标志存放 shellcode 的位置。

从剖析CS木马生成到开发免杀工具的过程是怎样的

值得一提的是,替换shellcode之后的pe文件,因为shellcode长度没有完全覆盖到标识的1024个A,一般生成的exe都会残留部分字符,当然这并不会影响shellcode的执行。从剖析CS木马生成到开发免杀工具的过程是怎样的

Shellcode Launcher

利用加载器远程回连获取下一阶段 payload 加载到内存中执行以规避杀软的探测,这种 VirtualAlloc到 WriteProcessMemory 的分配内存模式早已被众多远控木马软件广泛利用。

CS开发者在其最新的介绍视频中披露了部分 artifact 的源码,并演示了如何通过修改加载器绕过了Defender 的查杀。

他通过用 HeapAlloc 来代替 VitualAlloc ,躲避了大部分的杀软。

从剖析CS木马生成到开发免杀工具的过程是怎样的

在这个基础上,我们添加了对shellcode进行异或加密的功能,显然一个非常精简的基于c++的shellcode加载器就成形了。

然后参考CS的方式,在本应放置shellcode的buf中,置入大量重复的占位符作为定位。

python -c "print(1024*'A')"

用VisualStudio或MingW将其编译为 template.exe

开发免杀小工具

然后新建一个 JavaFx 的项目,样式与部分代码参考某chaos免杀小助手。

捋下流程,首先需要对CS或MSF的shellcode进行预处理,然后进行异或加密,读取模板文件,定位到shellcode位置,进行覆盖,最后保存。

从剖析CS木马生成到开发免杀工具的过程是怎样的

有很多类直接可以从CS复制过来就能用。

从剖析CS木马生成到开发免杀工具的过程是怎样的

从剖析CS木马生成到开发免杀工具的过程是怎样的

重点看下xor,为了跟launcher解密一致,需要先转换为int类型进行异或,然后再转回hex,最终打包为 jar

从剖析CS木马生成到开发免杀工具的过程是怎样的

生成veil类型的payload,复制粘贴,生成, 保存。从剖析CS木马生成到开发免杀工具的过程是怎样的从剖析CS木马生成到开发免杀工具的过程是怎样的

最终免杀效果取决于Launcher模板,作为一个非常精简、没什么改动的模板,效果已经出乎意料了。

毕竟目的并非追求免杀效果,而应注重于理解CS木马的Artifact生成机制。

关于从剖析CS木马生成到开发免杀工具的过程是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. django从请求到响应的过程讲解
  2. Java新手从代码到运行的过程是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

cs

上一篇:Springboot动态切换数据源怎么实现

下一篇:怎么解析Python中的Dict

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》