CobaltStirke BOF技术剖析(一)|BOF实现源码级分析

admin 2022年5月29日15:35:53评论109 views字数 2648阅读8分49秒阅读模式
CobaltStirke BOF技术剖析(一)|BOF实现源码级分析

简介

对BOF(Beacon Object File)的支持是在CobaltStrike4.1版本中新引入的功能。BOF文件是由c代码编译而来的可在Beacon进程中动态加载执行的二进制程序。无文件执行与无新进程创建的特性更加符合OPSEC的原则,适用于严苛的终端对抗场景。低开发门槛与便利的内部Beacon API调用与使得BOF特别适合后渗透阶段攻击工具的快速开发与移植。


01 BOF本质-OBJ文件

当我们通过file命令查看编译后的BOF文件,我们会发现它是一种名为COFF的文件格式。在Windows操作系统中编译产生的.obj中间文件使用的便是这种格式的文件,也可以作为BOF在cobaltstrike中被正确执行。

Intel amd64 COFF object file, no line number info, not stripped, 7 sections, symboloffset=0x1330, 212 symbols


利用PEView等工具可以观察其结构:

CobaltStirke BOF技术剖析(一)|BOF实现源码级分析


在.text段存在编译完成的代码

CobaltStirke BOF技术剖析(一)|BOF实现源码级分析


通过如下命令可以调用cobaltstrike自带的BOF解析函数查看BOF文件的属性,及其中的重定向信息。

CobaltStirke BOF技术剖析(一)|BOF实现源码级分析
CobaltStirke BOF技术剖析(一)|BOF实现源码级分析



02 BOF执行过程分析

cobaltstrike将一部分对BOF文件的处理在客户端程序中完成,传输至beacon的已经是解析过的数据。将bof文件的解析前置到客户端完成一方面减少了Beacon侧的代码,另外一方面也避免了诸如文件Magic头之类BOF文件本身存在的特征被应用于内存检测中。

CobaltStirke BOF技术剖析(一)|BOF实现源码级分析


对于重定向表的处理是此步骤的核心,对.rdata、.data、.text段的重定向在此处未作过多处理,而对符号表中的函数则进行了分类处理。一类函数是Beacon中内置的函数,另一类函数则需要由Beacon动态解析函数地址。

CobaltStirke BOF技术剖析(一)|BOF实现源码级分析


BOF内部API

在Beacon内部存在着BOF可调用的一系列内部API,在解析内部函数的地址时直接以函数数组的形式去计算内部地址。

CobaltStirke BOF技术剖析(一)|BOF实现源码级分析


BOF C API共有以下几类:

Win32 API-主要用于函数动态解析

LoadLibraryA、FreeLibrary、GetProcAddress、GetModuleHandleA


数据解析API-用于从bof_pack打包的数据中提取函数参数

BeaconDataParse、BeaconDataPtr等


内容格式化API-辅助构造大型或重复性的输出

BeaconFormatAlloc、BeaconFormatReset等


打印输出API-将结果返回cobaltstrike控制端

BeaconOutput、BeaconPrintf等


Beacon 内部API-一些功能性的API,包括token操作、派生进程、进程注入等

BeaconUseToken、BeaconRevertToken、BeaconSpawnTemporaryProcess等


辅助性API

toWideChar-将多字节字符串转换为宽字符字符串


核心特性-动态函数解析DFR

Dynamic Function Resolution(动态函数解析 DFR)是cobaltstrike在BOF文件解析中提供的特性,它支持动态解析并调用DLL的导出函数。动态解析的过程在beacon执行BOF的过程中完成。

CobaltStirke BOF技术剖析(一)|BOF实现源码级分析


通过对beacon的逆向可知,DFR依然是利用GetModuleHandleA、LoadLibraryA、GetProcAddress这几个函数去动态解析函数地址,与直接调用这几个函数没有本质区别,但为函数的动态解析提供了一种简便的方法。

CobaltStirke BOF技术剖析(一)|BOF实现源码级分析


技巧-活用DFR导入libc函数

在cobaltstrike官方文档中称:“由于不会将BOF链接到libc,strlen,strcmp等通用函数将无法使用”。但利用DFR的特性,我们可以通过直接调用msvcrt.dll中导出的标准c函数。

CobaltStirke BOF技术剖析(一)|BOF实现源码级分析



03 BOF的优点

1. 内存中不落地执行,避免针对文件内容的检测

2. 在本进程加载执行BOF中的功能代码,规避了针对进程创建的检测(更符合opsec安全)

3. 低成本地迁移由c编写的小型后渗透工具

4. 基于BOF.NET等项目可以在避免创建新进程的情况下实现.NET程序加载执行



04 BOF的局限性

1. 不支持解析bss段,因此不能正确解析未手动初始化的全局变量(必须以非0值进行初始化)

2. 若执行的BOF程序的执行错误将导致整个进程崩溃

3. BOF执行期间将阻塞beacon进程,不能执行其他任务,也不会返回信息(若BOF执行进入死循环则session无响应)

4. 不适于长时间运行的大型程序,对多线程没有官方支持


05 优秀BOF项目集合

1. FindObjects-BOF:利用直接系统调用枚举具有特定模块或句柄的进程

https://github.com/outflanknl/FindObjects-BOF

2. Situational Awareness BOF:提供了一些常用的信息收集命令的BOF实现(例如sc_query)

https://github.com/trustedsec/CS-Situational-Awareness-BOF

3. BOF.NET:为Beacon BOF文件提供的.NET运行时

https://github.com/CCob/BOF.NET



参考

https://www.cobaltstrike.com/help-beacon-object-files 


https://www.trustedsec.com/blog/a-developers-introduction-to-beacon-object-files/ 


https://wbglil.gitbook.io/cobalt-strike/cobalt-strike-yuan-li-jie-shao/untitled-3 


https://blog.cobaltstrike.com/2017/06/23/opsec-considerations-for-beacon-commands/



CobaltStirke BOF技术剖析(一)|BOF实现源码级分析

绿盟科技M01N战队专注于Red Team、APT等高级攻击技术、战术及威胁研究,涉及Web安全、终端安全、AD安全、云安全等相关领域。通过研判现网攻击技术发展方向,以攻促防,为风险识别及威胁对抗提供决策支撑,全面提升安全防护能力。


CobaltStirke BOF技术剖析(一)|BOF实现源码级分析

M01N Team

聚焦高级攻防对抗热点技术

绿盟科技蓝军技术研究战队


原文始发于微信公众号(M01N Team):CobaltStirke BOF技术剖析(一)|BOF实现源码级分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月29日15:35:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CobaltStirke BOF技术剖析(一)|BOF实现源码级分析http://cn-sec.com/archives/880315.html

发表评论

匿名网友 填写信息