CobaltStrike逆向学习系列(6):Beacon sleep_mask 分析

这是[信安成长计划]的第 6 篇文章
关注微信公众号[信安成长计划]
在这里插入图片描述

0x00 目录

0x01 C2Profile 分析

0x02 set userwx “true”

0x03 set userwx “false”

CobaltStrike 提供了一个内存混淆功能,它会在 Sleep 的时候将自身混淆从而避免一定的检测

0x01 C2Profile 分析

因为 sleep_mask 是从 C2Profile 中设置的,所以就需要先搞清楚 TeamServer 是如何解析的

图片

很明显它还跟其他的设置项有关,这里我们重点关注一下 rwx 的设置

图片

首先会将 text 段的结尾地址存储到 index=41 的位置

图片

接着判断了 text 段与 rdata 段中间的空白位置够不够 256 个字节,推测会将加解密函数放在这里

图片

obfuscate 就让它默认为 false,它不是我们这次关注的重点,接下来就会将 0 和 4096 添加到其中

图片

再看一眼 text 段的 Virtual Address,这块很明显就是 PE 头的那段内容

图片

接下来就是循环添加内容了,可以很明显的看到 do while 的循环条件是 text 段且不允许使用 rwx,这也就意味着,当我们不允许使用 rwx 的时候,text 段并不会被添加到 index=42 的项中,应该也就不会被混淆了,在最后还添加了零,用于标示结尾

图片

0x02 set userwx “true”

为了快速定位到加解密函数所在,可以设置断点来完成,因为按照之前的分析,使用 rwx 的时候,text 段也会被混淆的,所以跟入函数以后,直接滑倒开头下写入断点即可

图片

接着直接放过也就到达了位置

图片

接着根据这个位置到 IDA 中进行查找,然后通过回溯也很容易能够找到整个的调用链

图片

在主循环的最后有一个用于处理 Sleep 的函数

图片

它通过判断 0x29 来决定是否直接调用 Sleep,如果使用了 sleep_mask,0x29 中存储的就是 text 段的结尾地址

图片

首先它会将自己当前函数与加解密函数一起传入

图片

在函数中先计算了两个函数地址的差值,通过对比很明显能够看出这个就是加解密函数的长度

图片

接着从 0x29 中取出 text 段的结尾地址,并从全局变量中取出 PE 头的位置,相加也就得到了在内存中的 text 的结尾地址,也就是后面要存放加解密函数的地址,接着传统的拷贝也就不提了,重点是后面的赋值操作

图片

申请了 0x20 的空间,也就是 32 个字节,8 个字节存储 PE 头地址,8 个字节存储 0x2A 的地址

图片

这个 0x2A 也就是之前构造的那一串结构

图片

然后将加 16 的位置传入

图片

第一个使用 CryptoAPI 生成密钥

图片

如果失败的话,用第二个自己实现的算法生成密钥

图片

最后就来调用加解密函数了,第一个是构造的结构,第二个是 Sleep 函数,第三个是时间

图片

接着就来分析加解密函数,根据中间 Sleep 调用可以推断出,上面是加密函数,下面是解密函数

图片

参数是指针类型,取数组,下标 1,也就是 0x2A 所取到的值了

然后 v6 就是第一个值 sectionAddress,v7 就是第二个值 sectionEnd,然后将 v3 再后移

用来判断跳出规则的就是最后添加的两个零

do while 的混淆条件就是 sectionAddress<sectionEnd,也就是将所有的代码都进行混淆

图片

之后的解密也是一样的逻辑就不提了

接下来就是验证的时候了

Sleep 时候的状态

图片

此时的代码段

图片

接收命令时候的状态

图片

此时的代码段

图片

在允许 RWX 权限的时候,代码段是混淆的

0x03 set userwx “false”

理论在之前也都讲完了,这里就是验证一下最终的效果

Sleep 时候的状态

图片

此时的代码段

图片

接收命令时的状态

图片

此时的代码段

图片

在禁止 RWX 权限的时候,代码段是不混淆的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cobalt Strike插件是用于在Cobalt Strike平台上扩展功能的工具。根据引用,在linux上运行Cobalt Strike客户端,需要下载并加载genCrossC2.Linux脚本,而在Windows环境下运行,则需要下载并加载genCrossC2.Win.zip插件。这些插件可以在CobaltStrike 4.0以上版本中运行,并且可以在实验中成功上线。另外,根据引用和,Cobalt Strike的SSH客户端使用SMB Beacon协议,并实现Beacon命令调用以及子功能的使用。SSH会话可以看作是包含较少命令的Beacon会话,具有自己的唯一ID,与任务和元数据相关联。通过使用-beacons功能,可以获取有关所有Cobalt Strike会话(包括SSH会话和Beacon会话)的信息,并使用-isssh和-isbeacon来检测当前会话的类型。因此,Cobalt Strike插件提供了扩展功能和支持SSH会话的能力。123 #### 引用[.reference_title] - *1* [Cobalt Strike 插件CrossC2(小白教程)](https://blog.csdn.net/m0_63239459/article/details/129444567)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* *3* [cobalt strike从入门到精通之插件开发(二)](https://blog.csdn.net/hyj123480/article/details/115418324)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值