首页
社区
课程
招聘
[原创]CobaltStrike的检测
2021-10-14 21:29 22258

[原创]CobaltStrike的检测

2021-10-14 21:29
22258

CobaltStrike是一款渗透测试神器,支持http/https、tcp、smb等多种通信方式。

 

在hvv防守方、应急响应等场景中,都有检测CobaltStrike的需求。

现有检测方案

使用特征码扫描

通常使用yara规则去匹配内存或者文件,但缺点如不支持3.x、只支持http/https的beacon等

内核检测方案

其技术原理是

  1. 在内核通过PsSetLoadImageNotifyRoutine设置镜像加载通知回调,之后任何exe,dll的加载都会被检测。
  2. 而CobaltStrike使用sRDI方案,shellcode会调用LoadLibrary来加载需要dll,此时获取堆栈回溯
  3. 检测调用者的内存属性为是否为private,是否可写

但缺点是

  1. 内核模块启动要先与CobaltStrike,如果已经运行则无法检测
  2. 在客户业务环境中内核模块要保证稳定性兼容性,还要解决数字签名等问题

CobaltStrike特征分析

鉴于以上两种方案各有缺点,CobaltStrike的特征到底是什么?

 

我认为有两个通用的特征

  1. 对于http/https通信而言CobaltStrike均使用WinINet.dll来进行通信
  2. 无论选择exe/dll/raw等格式,CobaltStrike内存均会sRDI

通过ETW记录WinINet日志

ETW可以记录WinINet的进程id、线程id、url、请求头、返回状态码、返回头等信息

 

在应急中,可以通过进程id、线程id、url进一步排查,进而阻断其网络和进程。

手动操作步骤

  1. 打开事件查看器
  2. 打开菜单 查看->显示分析和调试日志
  3. 进入 应用程序和服务日志->Microsoft->Windows->WinINet(Microsoft-Windows-WinINet)
  4. 右键启动 Microsoft-Windows-WinINet/UsageLog 日志

wininetlog

工具

用C#写了个简单的工具WinINetLogger

 

wininetlogger

通过应用层的堆栈回溯判断sRDI和CobaltStrike

sRDI本身具有很强的隐蔽性,在内存中可以任意编码、加密。

 

但正如前文提到的内核检测方案中,其调用系统api时,调用者的内存属性有问题。

 

正常调用系统api时,调用者内存属性一般为IMAGE类型,并且不可写。

 

但也有例外如C#和V8等包含jit即时编译的代码。

 

此时就需要结合CobaltStrike自身的特征

  1. http/https时,堆栈回溯只有两种情况
    1. 睡眠时: sRDI -> kernel32.dll!Sleep
    2. 通信时:sRDI -> WinINet.dll!xxxx
  2. bindSMB时,堆栈回溯只有两种情况
    1. 监听管道时:sRDI -> kernel32!ConnectNamedPipe
    2. 读取数据时:sRDI -> kernel32!ReadFile
  3. bindTCP时,堆栈回溯只有两种情况
    1. 监听端口时:sRDI -> ws2_32.dll!accept
    2. 接收数据时:sRDI -> ws2_32.dll!recv

分析调用堆栈时,如果这些api的调用者内存有问题,那么就可以确定是CobaltStrike

通过ProcessHacker插件检测CobaltStrike

results

参考链接

工具和代码


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞2
打赏
分享
最新回复 (5)
雪    币: 2418
活跃值: (2282)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dearfuture 2021-10-15 10:07
2
0
用ETW记录WinINet日志有点意思
雪    币: 2095
活跃值: (344)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
icesnowwise 2021-10-15 11:12
3
0
etw怎么什么都记录
雪    币: 151
活跃值: (808)
能力值: ( LV10,RANK:173 )
在线值:
发帖
回帖
粉丝
kaoyange 1 2021-10-16 13:46
4
0
网络上如何检测呢
雪    币: 1587
活跃值: (1583)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
HOWMP 1 2021-10-18 16:37
5
0
kaoyange 网络上如何检测呢
纯网络很难检测
游客
登录 | 注册 方可回帖
返回