一、前言
二、Cobalt Strike简介
-
介绍
-
Malleable-C2-Profiles
三、狩猎角度
-
主机特征行为
-
流量
-
统计学
四、小结
Cobalt Strike 是一个商业的、功能齐全的渗透测试工具,它自称是“旨在执行有针对性的攻击并模拟高级威胁参与者的利用后行为的对手模拟软件”。Cobalt Strike 的交互式后期利用功能涵盖了所有 ATT&CK 战术,所有这些都在单个集成系统中执行。除了自己的功能外,Cobalt Strike 还利用了 Metasploit 和 Mimikatz 等其他知名工具的功能。
以上来自MITRE ATT&CK官方描述。由于4.5以前可以Java agent启动,破解版盛行,基本攻击队人手一份。从一些teamserver测绘数据也可以佐证这一点。
首先来基本了解一下cobaltstrike的ATT&CK覆盖情况,这样可以知道哪些阶段检测。
但是ATT&CK官网的Software映射并没有包含cs的自定义脚本能力,如果把GitHub上的各类脚本加上去基本覆盖了所有后渗透行为,当然也增加了攻击者暴露的风险。
在介绍常见的检测手段之前先回顾一下Malleable-C2-Profiles,以下简称profile,主要能力有:
-
伪造流量
-
修改beacon的默认行为
同时由于结构化较强,也有一些工具可以随机生成profile,比如C2concealer
最经典的profile就是模仿成jQuery的流量
基于主机主要通过进程、内存、命名管道等特征,因此可以从cs本身,cs的一些命令,比如psexec、hashdump
进程特征
首先是进程特征,这个是获取最简单的特征。默认的cs使用rundll32.exe进程注入,所以会观察到一些无进程参数的rundll32.exe进程。
可能有同学认为这样太简单,这里确认的最简单方式就是对rundll32创建转储,然后上传VT
假如dump的是powershell进程,甚至还可以发现里面的原始payload
除此之外还有很多lolbas的滥用,所以需要对lolbas较熟悉
命名管道
包括cs官网博客也提醒了命名管道的opsec这个风险。
cs的很多行为,例如SMB Beacon在创建listener时候就需要指定命名管道,默认的是msagent_xx
而且如果是新建的会话,原会话的进程也会带一个相同的管道
4.2以前命名管道不能被修改,效果是这样
除了这些,命名管道这个行为主要在Keylogger、Screenshot、Mimikatz、Powerpick、Net这些后渗透相关行为
4.2+默认命名管道是postex_xxxx,但是也可以在profile修改post-ex -> pipename
命名管道特征比较多,可以看文末参考
内存特征
比较经典的就是BeaconEye,但是前提是环境内可以对进程的内存进行扫描,这就要求对绝大多数环境内的基础检测方式进行改造。有兴趣可以阅读一下相关文章,本文就不展开。
文件特征
比如加载的dll以及在cs使用过程中上传的一些利用工具等
其他还有一些后渗透行为必然产生的异常,在此不再展开,典型案例是psexec、扫描等
文章开始就提到了profile,这块是profile的强项,但是不免存在基于大数据,对已知的一些profile进行特征工程,进而实现识别。
URI特征
默认profile的请求的URI是submit.php?id=xxxx
PA总结了一份cs默认的profile会请求的URI,大家在看NTA时候就知道为啥某些数据包会报cs了
id |
URIs |
id |
URIs |
id |
URIs |
1 |
/ca |
8 |
/fwlink |
15 |
/push |
2 |
/dpixel |
9 |
/cm |
16 |
/ptj |
3 |
/__utm.gif |
10 |
/cx |
17 |
/j.ad |
4 |
/pixel.gif |
11 |
/pixel |
18 |
/ga.js |
5 |
/g.pixel |
12 |
/match |
19 |
/en_US/all.js |
6 |
/dot.gif |
13 |
/visit.js |
20 |
/activity |
7 |
/updates.rss |
14 |
/load |
21 |
/IE9CompatViewList.xml |
威胁情报碰撞
不过对于周期限定的攻防演练可能不适用,因为短期、快速全网cs测绘还是存在一定难度、同时简单的措施即可规避这些测绘措施,比如Mandiant就在博客里直接写明了会定期测绘全网的teamserver。
主要有以下方式构建威胁情报:
● 沙箱--识别cs payload--解析出profile配置等信息--打标签
● 公网teamserver特征:(当然,大型企业内网也可能有teamserver)
○ JA3/S & JARM
○ teamserver默认证书
○ 端口
至于这里的威胁情报,其实是属于IOC型。那么时效性也就很重要,刚租的VPS,自然也缺乏情报,旧情报又有情报新鲜度的问题。不过长期来看,对于常见的cs config的识别与特征工程很有帮助。
除了上述,还有cs的一些默认user-agent,已经附在文末
一个典型场景就是,cs上线的机器的进程启动日志可能比正常机器多,这个也比较符合逻辑。毕竟演习还是有周期,动作越快越好,也就造成了更多的日志量。
cs的sleep时间,默认是60s,所以可以检测这个特征
但是和上面一样,默认sleep时间还是可以在profile和命令中修改的,同时可以加入抖动时间。
云服务商检测
一些国外云厂商也对teamserver添加了检测,检测的主要是checksum8特征。
虽然狩猎cobaltstrike的角度比较多,但是对于防守方来说当然是多多益善。尤其是在狩猎过程发现自身检测缺陷,从而做好基础的安全检测才能更好的防范其他安全事件。
https://attack.mitre.org/software/S0154/S0154-enterprise-layer.json
https://www.cobaltstrike.com/blog/learn-pipe-fitting-for-all-of-your-offense-projects/
https://github.com/BinaryDefense/ThreatHuntingJupyterNotebooks/blob/main/Cobalt-Strike-detection-notes.md
https://redcanary.com/threat-detection-report/threats/cobalt-strike/
https://www.unh4ck.com/detection-engineering-and-threat-hunting/lateral-movement/detecting-conti-cobaltstrike-lateral-movement-techniques-part-1
https://unit42.paloaltonetworks.com/cobalt-strike-malleable-c2-profile/
https://underdefense.com/guides/how-to-detect-cobaltstrike-command-control-communication/
https://www.mandiant.com/resources/defining-cobalt-strike-components
https://labs.f-secure.com/blog/detecting-cobalt-strike-default-modules-via-named-pipe-analysis/
https://github.com/SigmaHQ/sigma/blob/2c1fd87a27c98117946d11a66df107d2ef810f24/rules/windows/pipe_created/pipe_created_mal_cobaltstrike.yml
https://github.com/SigmaHQ/sigma/blob/2c1fd87a27c98117946d11a66df107d2ef810f24/rules/windows/pipe_created/pipe_created_mal_cobaltstrike_re.yml
https://docs.google.com/spreadsheets/d/1bpeziZ-ObG8zKronKGyhXg2UsETk_fqY5dD4Tx0q_eY/edit#gid=1635920259
原文始发于微信公众号(无界信安):Cobaltstrike威胁狩猎总结
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论