首页
社区
课程
招聘
[原创]CobaltStrike分析2 - beacon 解析
发表于: 2023-4-29 18:53 17079

[原创]CobaltStrike分析2 - beacon 解析

2023-4-29 18:53
17079

本篇详细的分析了CS beacon payload的加载过程

IDA 逆向,在入口处很容易能够找到 main 函数的地址 修改前是 403040

重点关注 sub_4017F8()

基于一些特征随机利用格式化字符串生成了一个字符串 buffer, 同时创建了一个新的线程,执行函数sub_4016E6


直接看sub_401630

以上面生成的buffer为名字创建了一个命名管道,然后进行判断,如果命名管道创建成功,ConnectNamedPipe函数将等待客户端连接到管道。如果成功连接到管道, 使用WriteFile函数将shellcode数据写入已连接的命名管道。如果写入成功,则更新指针lpBuffer和剩余要写入的字节数nNumberOfBytesToWrite。其中 lpbuffer是将要写入的数据指针, &dword_404020[5]

返回 sub_4017F8 返回的是一个函数 sub_4017A6(0i64)

开辟了一块内存,然后等待 sub_401704 函数执行返回一个非0值

sub_401704主要是从FileA也就是前面创建的命名管道中读取数据,然后写入lpBuffer指向的位置,也就是说 从FileA中读取内容,然后写入v0。

然后调用sub_401595,修改一下数据类型之后有:

利用a3所在的密钥循环解密shellcode,然后创建线程执行。

至此,loader所做的事已经十分清晰了:

其跳转顺序和参数如下所示

接下来动态分析一下

由于cobaltstrike并没有地址空间随机化,每次都是在固定位置加载的,所以在上面静态分析的基础上很容易下断动态分析

创建命令管道

![image-20230424224308896]

解密过程:

解密后的shellcode写入这里:

jump rcx之后跳转到shellcode执行 可以将其dump下来,也就是beacon.dll, Cobaltstrike 的 payload 许多都是和msf相似的,因此如果想要深入的理解CS的相关原理,推荐同时阅读msf的相关源码。

使用IDA分析

检查导出函数:

第一个是反射式DLL注入,限于篇幅,在本篇中不展开分析

第二个是DLL的入口函数。

一直跟进到DLLmain,其分析可以参考4beK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6T1k6i4y4@1M7%4m8W2j5i4u0Q4x3V1k6d9k6f1u0W2j5h3y4G2L8W2)9#2k6V1k6G2M7V1y4D9j5h3&6Y4i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6V1^5i4@1q4r3N6$3u0Y4L8r3W2D9i4@1f1#2i4K6W2o6i4@1p5^5h3p5y4G2L8U0t1H3x3U0u0Q4c8e0g2Q4z5o6S2Q4z5o6k6Q4c8e0k6Q4z5f1g2Q4z5e0m8Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0S2Q4b7f1g2Q4b7f1g2Q4c8e0W2Q4b7e0u0Q4z5e0S2Q4c8f1k6Q4b7V1y4Q4z5p5y4K6L8r3W2V1k6g2!0q4y4g2)9^5c8W2!0m8c8W2!0q4y4q4!0n7b7W2!0m8y4g2!0q4y4g2)9&6b7#2!0m8z5l9`.`.这里下载。余下内容不再一一详解,如果感兴趣,可以参考鸡哥的文章和wbglil的研究展开分析。在后续的文章中,会根据检测特征和csprofile的绕过按照专题进行分析。

本篇主要是总结了一下beacon模式下payload加载的方式,CS马有大量的思路和msf是相似的,因此,在分析的时候可以同时看一看msf相关的资料。在本人第一次分析的时候,花了比较长时间才dump下来beacon的payload。同时,大部分的CS检测特征都是在此。而在后续的文章分析中,将会着重的分析CS beacon中使用到的几种DLL注入方式;beacon config的检测;同时结合CS profile 的配置,研究一下CS的对抗检测方式。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 5
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回