电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 799 人浏览分享

从剖析CS木马生成到开发免杀工具

[复制链接]
799 0
本帖最后由 zhaorong 于 2021-11-24 16:06 编辑

木马是黑客实施网络攻击的常用兵器之一,个别木马可以通过免杀技术的加持躲过杀毒软件查杀
Cobaltstrike是用于行动,APT模拟攻击的软件它具备很强大的协
同能力状语从句:难以置信的柯林斯扩展性。

1594110495.jpg

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

CobaltStrike是如何生成的ShellCode的

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

+ ` aggressor \ dialogs \WindowsExecutableDialog.class`

QQ截图20211124154419.png

可以看得很清楚的生成逻辑。
  1. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">受保护的字节[] stager;</font></font>
  2. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">@覆盖</font></font>
  3. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">公共无效dialogAction(最终的ActionEvent ActionEvent的,最终地图选项){ </font></font>
  4. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    this.options =选项; </font></font>
  5. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    this.stager = DialogUtils.getStager(options); </font></font>
  6. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    如果(this.stager.length == 0){</font></font>
  7. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        返回;</font></font>
  8. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    } </font></font>
  9. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    final String string = options.get("output") + ""; </font></font>
  10. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    字符串 s = ""; </font></font>
  11. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        if (string.indexOf("EXE") > -1) { </font></font>
  12. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">            s = "artifact.exe"; </font></font>
  13. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        } </font></font>
  14. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        else if (string.indexOf("DLL") > -1) { </font></font>
  15. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">            s = "artifact.dll"; </font></font>
  16. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        } </font></font>
  17. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        SafeDialogs.saveFile(NULL,S,这一点);</font></font>
复制代码

通过DialogUtils.getStager()获得生成的stager然后通过saveFile保存文件。
getStager()方法调用了aggressor\DataUtils.shellcode()
而这里实际上是Stagers的接口。
  1. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">返回 Stagers.shellcode(s, "x86", b);</font></font>
复制代码

最终在 stagers\Stagers.shellcode() 可知监听器类型,
实例化了继承自的 GenericStager 的 stagers\GenericHTTPStager 类
并由 generate() 生成shellcode

666.png

shellcode生成时,读取了resources/httpstager.bin并根据监听器的host和port等值组合为Packer
最终替换到多个X、Y占位的bin文件中最终返回bytes[]类型的shellcode

Patch Artifact

shellcode生成完成后,回到原点可以看到根据用户的选择对不同的神器进模板
补丁。以86的模板为例,

继续跟进patchArtifact
  1. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">new ArtifactUtils(this.client).patchArtifact(this.stager, "artifact32.exe", s);</font></font>
复制代码

+ `common\BaseArtifactUtils.class`
  1. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">public byte[] patchArtifact(final byte[] array, final String s) { </font></font>
  2. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    final Stack<Scalar> stack = new Stack<Scalar>(); </font></font>
  3. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    stack.push(SleepUtils.getScalar(array)); </font></font>
  4. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    stack.push(SleepUtils.getScalar(s)); </font></font>
  5. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    最终字符串格式 = this.client.getScriptEngine().format(" </font></font>
  6. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">EXECUT ABLE_ARTIFACT_GENERATOR", stack); </font></font>
  7. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    if (format == null) { </font></font>
  8. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        return this.fixChecksum(this._patchArtifact(array, s)); </font></font>
  9. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    }</font></font>
  10. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    返回this.fixChecksum(CommonUtils.toBytes(格式)); </font></font>
  11. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">}</font></font>
复制代码

好像是通过PE编辑器修复了校验码。

这里不赘述了对编辑器实现动物的可以去看看pe\PEEditor。
  1. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">最终 PEEditor peEditor = new PEEditor(array); </font></font>
  2. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">peEditor.updateChecksum(); </font></font>
  3. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">返回 peEditor.getImage();</font></font>
复制代码

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

665.png

读取了资源文件夹下的artifact32.exe视为模板文件重复
的1024个A来定位shellcode位置。
与生成shellcode时类似,使用common/
CommonUtils.replaceAt ()对bytes流转为的字符串进行编辑替换。
  1. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">public static String replaceAt(final String s, final String s2, final int n) { </font></font>
  2. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    final StringBuffer sb = new StringBuffer(s); </font></font>
  3. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    sb.delete(n, n + s2.length()); </font></font>
  4. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    sb.insert(n, s2); </font></font>
  5. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    返回 sb.toString(); </font></font>
  6. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">}</font></font>
复制代码

使用16个编辑器可以直接显示用于宣讲的shellcode的位置。

663.png

值得一提的是,替换shellcode的pe文件,因为shellcode长度没有完全覆盖到标识的1024
个一般生成的exe普遍保留部分字符。这当然并不会影响shellcode的执行。

662.png

Shellcode Launcher

利用加载器远程连获取下一阶段payload加载到内存中的软件检测Alloc到
WriteProcessM虚拟应用的内存模式虚拟化被
其最新的远控软件广泛利用。介绍视频中披露了部分神器的源码并演示了如何
通过修改加载器绕过了防御者的查杀。

661.png

在上面我们添加了一个非常专业的shellcode异或清洁的功能,基于
c++的shellcode加载这个基础进行了基础。
然后参考CS的方式,在本应应用的shellcode的缓冲区中置入大量重复的占位符作为定位。
  1. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">python -c "打印(1024*'A')"</font></font>
复制代码

用VisualStudio或MingW将其编译为模板。exe

开发免杀小工具并

新建一个JavaFx的项目样式与部分代码参考某混沌免杀小助手。
捋下流程首先需要对CS或MSF的shellcode进行重构。然后进行异性或扫描读取
模板文件定位到shellcode位置,进行最后的保存。

660.png

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

599.png

598.png

重点看下xor,是为了跟发射器性格一致需要先转换为int类型进行异或然后
再转回hex最终打包为jar

596.png

生成载体类型的有效载荷 复制粘贴 生成保存。

595.png

11.png

最终免杀效果取决于Launcher模板,作为一个非常精简、没什么改动
的模板效果已经出乎意料了。
毕竟目的并非追求免杀效果而应注重于理解CS木马的Artifact生成机制。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.