【干货】使用内存特征检测 Cobalt Strike

admin 2022年3月24日02:53:21评论293 views字数 2262阅读7分32秒阅读模式

文章来源:黑白天实验室

Beacon 通常是反射加载到内存中,还可以配置各种内存中混淆选项以隐藏其有效负载。


Beacon 可以配置各种内存中混淆选项以隐藏其有效负载。例如,obfuscate-and-sleep 选项会试图在回调之间屏蔽部分 Beacon 有效负载,以专门避开基于特征的内存扫描。

Obfuscate and Sleep是一个Malleable C2选项,在Cobalt Strike 3.12.引入。启用后,Beacon将在进入Sleep状态之前在内存中混淆自身。

那么我们先使用默认的关闭Obfuscate and Sleep来查看CobaltStrike进行进程注入会的具体情况。

【干货】使用内存特征检测 Cobalt Strike


然后我们把进程注入到微信中。

【干货】使用内存特征检测 Cobalt Strike

【干货】使用内存特征检测 Cobalt Strike


注入微信进程

【干货】使用内存特征检测 Cobalt Strike


正常执行命令

【干货】使用内存特征检测 Cobalt Strike


然后我们在目标主机中使用Process Hacker 2进行检测查看:

【干货】使用内存特征检测 Cobalt Strike

查找调用 SleepEx 的线程来定位内存中的 Beacon,一般在比较活跃的之中。

【干货】使用内存特征检测 Cobalt Strike


然后,我们可以将关联的内存区域进行分析,转到Memory查看分析这个偏移量。

【干货】使用内存特征检测 Cobalt Strike


我们可以对比看一下Beacon的情况:

【干货】使用内存特征检测 Cobalt Strike

转到Memory查看分析这个偏移量并对比一下:

【干货】使用内存特征检测 Cobalt Strike

可以看到我们可以看到我们的整个beacon在内存中未加密。


检测这样没有加密的beacon不难,我们在最简单的做法是,从这个区域挑选一些独特的字符串并将它们用作我们的检测的特征就行。

【干货】使用内存特征检测 Cobalt Strike

rule cobaltstrike_beacon_strings{meta:     author ="Elastic"description ="Identifies strings used in Cobalt Strike Beacon DLL."strings:   $a = {70 6F 77 65 72 73 68 65 6C 6C 20 2D 6E 6F 70 20 2D 65 78 65 63 20 62 79 70 61 73 73 20 2D 45 6E 63 6F 64 65 64 43 6F 6D 6D 61 6E 64 20 22 25 73}condition:       any of them }


当然上面的我只是举个例子,在实战中还得细一点。

【干货】使用内存特征检测 Cobalt Strike


国外也有个安全研究人员给出了个yar

rule cobaltstrike_beacon_strings{meta:  author = "Elastic"  description = "Identifies strings used in Cobalt Strike Beacon DLL."strings:    $a = "%02d/%02d/%02d %02d:%02d:%02d"    $b = "Started service %s on %s"    $c = "%s as %s\%s: %d"condition:   2 of the }

同时Cobalt Strike给出了一种Bypass方法

# Obfuscate Beacon, in-memory, prior to sleepingset sleep_mask "true";


【干货】使用内存特征检测 Cobalt Strike


Set sleep_mask “true”; 设置使beacon在睡眠之前混淆内存中的代码,睡眠后对自己进行混淆处理

【干货】使用内存特征检测 Cobalt Strike


可以看到在混淆内存中的代码,然后我们使用前面的规则并不能检测到了beacon

【干货】使用内存特征检测 Cobalt Strike


其实如果你刷新几次也可以发现解密的beacon,因为在每次使用beacon,都会重新加密数据和字符串。

【干货】使用内存特征检测 Cobalt Strike


那么我们也可以多检测几次也可以检测到:

【干货】使用内存特征检测 Cobalt Strike


因为我现在使用的4.3的Cobalt Strike,使用 13 字节的 XOR 密钥,

【干货】使用内存特征检测 Cobalt Strike


如果是4.2以下Cobalt strike 使用的是使用简单的单字节 XOR 混淆,使用下面的yar一样可以检测:

rule cobaltstrike_beacon_xor_strings{meta:    author = "Elastic"    description = "Identifies XOR'd strings used in Cobalt Strike Beacon DLL."strings:    $a = "%02d/%02d/%02d %02d:%02d:%02d" xor(0x01-0xff)    $b = "Started service %s on %s" xor(0x01-0xff)    $c = "%s as %s\%s: %d" xor(0x01-0xff)condition:    2 of them}


这里不多讨论。

【往期推荐】

【内网渗透】内网信息收集命令汇总

【内网渗透】域内信息收集命令汇总

【超详细 | Python】CS免杀-Shellcode Loader原理(python)

【超详细 | Python】CS免杀-分离+混淆免杀思路

【超详细 | 钟馗之眼】ZoomEye-python命令行的使用

【超详细 | 附EXP】Weblogic CVE-2021-2394 RCE漏洞复现

【超详细】CVE-2020-14882 | Weblogic未授权命令执行漏洞复现

【超详细 | 附PoC】CVE-2021-2109 | Weblogic Server远程代码执行漏洞复现

【漏洞分析 | 附EXP】CVE-2021-21985 VMware vCenter Server 远程代码执行漏洞

【CNVD-2021-30167 | 附PoC】用友NC BeanShell远程代码执行漏洞复现

【奇淫巧技】如何成为一个合格的“FOFA”工程师

【超详细】Microsoft Exchange 远程代码执行漏洞复现【CVE-2020-17144】

【超详细】Fastjson1.2.24反序列化漏洞复现

  记一次HW实战笔记 | 艰难的提权爬坑

走过路过的大佬们留个关注再走呗【干货】使用内存特征检测 Cobalt Strike

往期文章有彩蛋哦【干货】使用内存特征检测 Cobalt Strike

【干货】使用内存特征检测 Cobalt Strike

一如既往的学习,一如既往的整理,一如即往的分享。【干货】使用内存特征检测 Cobalt Strike

如侵权请私聊公众号删文

本文始发于微信公众号(渗透Xiao白帽):【干货】使用内存特征检测 Cobalt Strike

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月24日02:53:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【干货】使用内存特征检测 Cobalt Strikehttps://cn-sec.com/archives/537448.html

发表评论

匿名网友 填写信息