Cobaltstrike威胁狩猎总结
本文是对cobaltstrike的威胁狩猎总结,主要分为三个维度:主机、流量、统计学。
本文跳过静态特征,因为根据用途不同、stage1、2这些可能检测难度是不一样的。
申明:本文没有创新的检测方式,仅仅是对公开的检测方式的总结
Cobalt Strike简介
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
在介绍常见的检测手段之前先回顾一下Malleable-C2-Profiles,以下简称profile,主要能力有:
- 伪造流量
- 修改beacon的默认行为
同时由于结构化较强,也有一些工具可以随机生成profile,比如C2concealer
基于主机特征行为
基于主机主要通过进程、内存、命名管道等特征,检测可以从cs本身,cs的一些命令,比如psexec、hashdump
进程特征
首先是进程特征,这个是最好获取的特征。默认的cs使用rundll32.exe进程注入,所以会观察到一些没有进程参数的rundll32.exe进程。
可能有同学认为这样太简单,这里确认的最简单方式就是对rundll32创建转储,然后上传VT
假如dump的是powershell进程,甚至还可以发现里面的原始payload
命名管道
命名管道一般被集成入了沙箱类设备,包括cs官网博客也提醒了命名管道的opsec这个风险
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了
Index | URIs | Index | URIs | Index | 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时间还是可以修改的,同时可以加入抖动时间
云服务商检测
一些国外云厂商也对teamserver添加了检测,检测的主要是checksum8特征
小结
虽然检测cobaltstrike的角度比较多,但是对于防守方来说当然是多多益善。尤其是做好基础的安全检测,比如EDR、HIDS、全流量设备才能更好的防范其他C2。流量这里不够深入,有兴趣的可以参考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