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 中相 ...
随机推荐
- vue3代码setup中this为什么无效
结论:setup并没有通过各种方式去绑定this 在vue2中,我们可以在optionsApi中调用this来指向当前组件的实例,但是在vue3的setup中并不能这样做,因为setup位于组件创建成 ...
- 【涨姿势】原来golang的case <-time.After(xxx)还有这样的坑
偶然看到这样一篇文章:<使用 pprof 排查 Golang 内存泄露>https://www.toutiao.com/i6881796351139676680/ 最后一段让我很疑惑: 修 ...
- 【记录一个问题】opencv + cuda编译release版本后,链接出现奇怪的符号
链接出现以下信息: 1 /home/admin/opencv/20190610_cuda_release/lib64/libopencv_core.a(ocl.cpp.o): In function ...
- 关于启动bash提示‘bash: export: `//这是新的': not a valid identifier’的解决办法
学习linux以来将centos改的也不少了,也不知道这个问题是由于那个修改来的.最近改bash的操作环境配置文件,用到了~/.bashrc这个文件,发现里面被我修改过. 那是当年安装fcitx输入法 ...
- 公司内部一次关于kafka消息队列消费积压故障复盘分享
背景现象 1.20晚上8点业务线开始切换LBS相关流量,在之后的1个小时时间内,积压量呈上升趋势,一路到达50W左右,第二天的图没贴出具体是50W数字,以下是第一天晚上的贴图部分. 现象一: 现象二: ...
- Redisson 实现分布式锁原理分析
Redisson 实现分布式锁原理分析 写在前面 在了解分布式锁具体实现方案之前,我们应该先思考一下使用分布式锁必须要考虑的一些问题. 互斥性:在任意时刻,只能有一个进程持有锁. 防死锁:即使有 ...
- Servlet-斜杠在web中不同意义
Servlet-斜杠在web中不同意义 在web中 / 斜杠是一种绝对路径 / 斜杠 如果被浏览器解析,得到的地址是:http://ip/port/ / 斜杠 如果被服务器解析,得到的地址是:http ...
- Cobbler批量安装操作系统
1,关闭selinux getenforce 查看selinux状态 Disabled 修改/etc/selinux/config 文件 将SELINUX=enforcing改为SELINUX=di ...
- MySQL OOM
问题 前几天遇到一个奇怪的问题,服务器内存明明够用,结果在对 MySQL 进行测压的时候却出现了 OOM,是 Linux 内核出错了吗? 具体现象如下:使用 sysbench 对 mysql 进行压测 ...
- Java多线程专题4: 锁的实现基础 AQS
合集目录 Java多线程专题4: 锁的实现基础 AQS 对 AQS(AbstractQueuedSynchronizer)的理解 Provides a framework for implementi ...