CobaltStrike逆向学习系列(11):自实现 Beacon 检测工具
这是[信安成长计划]的第 11 篇文章
关注微信公众号[信安成长计划]

0x00 目录
0x01 检测原理
0x02 检测方案
0x03 存在的问题
0x04 解决方案
0x05 示例代码
0x06 写在最后
年也过了,继续开始卷卷卷...
目前使用比较多的检测工具就是 BeaconEye,在之前的文章中也已经提到过它的检测原理与 Bypass 的方法《Bypass BeaconEye》《Bypass BeaconEye - Beacon 堆混淆》,BeaconEye 所依赖的就是 C2Profile 解析后的内存结构来检测的,根据之前逆向分析的成果,发现还有一种检测的方案而且也相对增加了绕过的难度
0x01 检测原理
BeaconEye 所依赖的是 C2Profile 解析后的固定内存结构,对于其解析的逻辑在之前也已经提到过了,这里也就不详细说了

对于 Beacon 的检测,针对 C2Profile 是一个比较稳妥的方案,这样会降低误报的概率,所以还是按照这个逻辑继续走才比较稳妥,所以检测逻辑就可以从检测 C2Profile 数据,改变为检测解析 C2Profile 的代码,或者获取 C2Profile 数据的函数
根据之前对 C2Profile 全流程的分析,这里就可以有四个检测方案——解析函数、GetShortValue、GetIntValue、GetPtrValue
0x02 检测方案
在检测的时候,可以直接将整个函数都作为特征,为了方便起见,也可以再缩小检测范围,这里以 GetShortValue 为例

经过观察可以发现,所有的获取函数在获取完值以后,都会再判断一下当前的类型是否正确,所以就可以把这一点拉出来作为检测的一个特征

再或者将寄存器取值作为特征也都是可行的,而且还能跟其他几个点进行配合,相互之间的组合方式也就有很多种了
0x03 存在的问题
以这些点来作为特征也存在一个问题,CS 自带的 Sleep_Mask 会在 Sleep 的时候将整块内存都进行混淆,我们之前也进行过分析它具体的实现原理,所以还需要在对之前的检测方案进行完善

根据之前的混淆逻辑可以很清楚的发现,CS 是将加解密函数拷贝到了 text 段的结尾位置,并且在处理完以后当前内存就一直存在了,不会去对其进行清理
0x04 解决方案
既然这样,那就直接按照前面所说的逻辑,直接将加解密函数作为特征来完成对 Beacon 的检测

如果计划缩小特征码,逻辑也与之前一致,从中间取出关键的几个步骤即可
0x05 示例代码
想了想代码还是交给你们自己写吧,将上面提到的几个方案的特征提取出来,在全内存中进行搜索即可
在网上搜 “内存搜索特征码” 也能找到很多可以来参考的例子
0x06 写在最后
其实整个的操作就是在进行特征码的搜索,这也就是被针对以后的问题了,倒是不是不能 Bypass,就是会比之前更麻烦一点,就是进行 inline Hook 关键的位置,然后将原始的内容抹零就好了。
CobaltStrike逆向学习系列(11):自实现 Beacon 检测工具的更多相关文章
- CobaltStrike逆向学习系列(2):Stageless Beacon 生成流程分析
这是[信安成长计划]的第 2 篇文章 关注微信公众号 [信安成长计划] 0x00 目录 0x01 Patch Beacon 0x02 Patch Loader 0x03 文件对比 0x04 流程图 C ...
- CobaltStrike逆向学习系列(3):Beacon C2Profile 解析
这是[信安成长计划]的第 3 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Controller 端分析 0x02 Beacon 端分析 0x03 展示图 在上一篇文章中完成了 S ...
- CobaltStrike逆向学习系列(8):Beacon 结果回传流程分析
这是[信安成长计划]的第 8 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Beacon 接收与处理 0x02 结果回传 Beacon 在接受完命令并执行后,会将数据加密回传给 T ...
- CobaltStrike逆向学习系列(6):Beacon sleep_mask 分析
这是[信安成长计划]的第 6 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 C2Profile 分析 0x02 set userwx "true" 0x03 s ...
- CobaltStrike逆向学习系列(4):Beacon 上线协议分析
这是[信安成长计划]的第 4 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Beacon 发送 0x02 TeamServer 处理 0x03 流程图 0x04 参考文章 在上一篇 ...
- CobaltStrike逆向学习系列(15):CS功能分析-BOF
这是[信安成长计划]的第 15 篇文章 0x00 目录 0x01 BOF功能分析 0x02 BOF功能执行 0x03 写在最后 其实在看过 RDI 与 DotNet 功能执行之后,BOF 的执行基本就 ...
- CobaltStrike逆向学习系列(14):CS功能分析-DotNet
这是[信安成长计划]的第 14 篇文章 0x00 目录 0x01 DotNet功能分析 0x02 DotNet功能执行 0x03 写在最后 在上两篇文章中,讲述了 CS 中的一种功能执行方式 RDI, ...
- CobaltStrike逆向学习系列(1):CS 登陆通信流程分析
这是[信安成长计划]的第 1 篇文章 关注微信公众号[信安成长计划][SecSource] 0x00 目录 0x01 密码校验 0x02 aggressor.authenticate 0x03 agg ...
- CobaltStrike逆向学习系列(12):RDI 任务发布流程分析
这是[信安成长计划]的第 12 篇文章 0x00 目录 0x01 任务构建 0x02 结果处理 0x03 功能 DLL 分析 之前的分析都是针对整个 CS 的框架来进行的,但是功能也是整个 C2 中相 ...
随机推荐
- JUC之线程池基础与简单源码分析
线程池 定义和方法 线程池的工作时控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等待其他线程执行完成,再从队列中取出任 ...
- Linux增加用户
Linux增加用户 注意一个不加-m不会出现家目录 sudo useradd Hans -m sudo passwd Hans sudo usermod -s /bin/bash Hans sudo ...
- 1013day-人口普查系统
1.shuchu.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- 【刷题-LeetCode】228. Summary Ranges
Summary Ranges Given a sorted integer array without duplicates, return the summary of its ranges. Ex ...
- 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」Broker服务端自动创建topic的原理分析和问题要点指南
前提背景 使用RocketMQ进行发消息时,一般我们是必须要指定topic,此外topic必须要提前建立,但是topic的创建(自动或者手动方式)的设置有一个开关autoCreateTopicEnab ...
- golang中goroutine协程调度器设计策略
goroutine与线程 /* goroutine与线程1. 可增长的栈os线程一般都有固定的栈内存,通常为2MB,一个goroutine的在其声明周期开始时只有很小的栈(2KB),goroutine ...
- Servlet程序常见错误
常见错误1:url-pattern中配置的路径没有以斜杠打头. 常见错误2:servlet-name配置的值不存在 常见错误3:servlet-class 标签的全类名配置错误
- linux区分atime,ctime and mtime
- 学习Java第1天
今天所做的工作:1.了解Java语言的发展历史 2.安装了Eclipse软件 3.学习了Eclipse的基本使用方法 4.学习了Java基本输出语法 5.成功输出了helloworld 6.学习了Ja ...
- Ubuntu 18.04 安装教程
准备材料 Ubuntu安装U盘 足够的硬盘空间 未初始化的硬盘需要提前初始化 注意事项 Ubuntu安装盘的制作请参考我的另外一个博客,里面写清楚了怎么制作Ubuntu安装盘,步骤非常简单 请将要拿给 ...