红队专题-Cobalt strike 4.x - Beacon重构

红队专题

招募六边形战士队员

一起学习 代码审计、安全开发、web攻防、逆向等。。。

私信联系

重构后 Beacon 适配的功能

不局限于cobalt strike 功能的跨平台后渗透免杀信标

没有beacon的特征,针对beacon特征的AV是检测不出来的;

windows平台

sleep、

shell、

upload、

download、

exit、cd、pwd、file_browse、ps、kill、getuid、mkdir、rm、cp、mv、run、execute、drives、powershell-import、powershell命令混淆、免杀bypassuac(uac-to。ken-duplication)、

免杀系统服务提权(svc-exe)、

execute-assembly(不落地执行c#)、

多种线程注入的方法(可自己更换源码)、

spawn、

inject、shinject、

dllinject(反射型dll注入)、管道的传输、

多种cs原生反射型dll注入(mimikatz、portscan、screenshot、keylogger等)、

令牌的窃取与还原、令牌的制作、权限的获取、runu父进程欺骗、代理发包、自删除、timestomp更改文件时间等功能。支持cna自定义插件的reflectiveDll、execute-assembly、powershell、powerpick、upload and execute等功能。

linux和mac平台

sleep、shell、upload、download、exit、cd、pwd、file_browse、ps、kill、getuid、mkdir、rm、cp、mv、自删除、timestomp

后续会添加linux与mac平台下后渗透功能

进程管理部分、文件管理部分支持图形化交互

C2profile

适配了C2profile流量侧的设置与部分主机侧的设置,支持的算法有base64、base64url、mask、netbios、netbiosu。

重构思路

传统cs的免杀偏向于如何加载上线

杀软对beacon的特征查得非常严,尤其是卡巴这种查内存的

入门cs的通信协议以及cs原生的beacon实现。

根据实战的需求来调试并实现beacon的各种功能。

考虑稳定性

体积的大小

跨平台

部分功能需要分平台实现

不同平台间同一个功能部分的实现又是相同的

抽出了一个service层来实现不同平台间功能重复的部分,进而减少代码的冗余。

功能免杀

很多地方原封不动照搬cs的原生实现并不是很好

对部分功能进行了实现的调整,同时针对cs不免杀的功能进行了替换

代码部分

main.go作为主函数

在beacon第一次与服务端通信之前执行隐藏窗口、反沙箱等操作。

成功建立了连接则每隔一段时间向服务端发送请求,

查看是否有需要下发的命令及数据,如果有的话则根据下发的命令号进行不同的处理。

sysinfo包

获取不同平台下目标主机的基本信息的功能,

拼装了beacon与服务器建立通信所需的meta数据。

windows平台下部分复杂的功能被拆分成execute_assembly.go、jobs.go、token.go等来单独实现。

services.go实现了对不同命令的跨平台处理。

packet包

实现了对命令的具体的处理操作以及通信等功能。

config.go

是配置文件,类似于C2profile

适配了大部分C2profile流量端与部分主机端配置的同时

还加入了代理发包、自删除、反沙箱等cs没有的设置。

命令的执行

shell、run、execute

区别在于shell调用cmd,run调用执行的程序本身,而execute无回显。

基于go的os/exec实现了跨平台的shell

golang的底层库并不是很稳定

os/exec库的cmd不支持Token的使用 无法实现令牌的窃取

将命令执行的实现更改为了windows api CreateProcess。

首先会判断当前是否有窃取/制作的Token,若有的话则用CreateProcessWithTokenW以Token权限来执行,没有的话则用CreateProcess执行。

shell和run在执行之后会用管道将结果回传,而execute不会。

Linux和Mac平台下目前用/bin/bash来执行shell。

powershell

shell powershell是从cmd调用powershell,

而powershell命令本身是以-nop -exec bypass -EncodedCommand参数来执行编码后的命令,

如whoami

java 复制代码
powershell -nop -exec bypass -EncodedCommand dwBoAG8AYQBtAGkA

对powershell命令集成了混淆

由于360对powershell命令执行监控的过于严格,powershell命令执行暂时过不了360

将混淆后落地的ps1文件用powershell -ExecutionPolicy Bypass -File执行可过360

可以用shell powershell执行未混淆的powershell。

powerpick命令

可以在内存中不通过powershell.exe执行powershell来绕过监控,

不过在实现的时候发现powerpick可以执行成功但是部分情况拿不到回显

可以考虑使用execute-assembly执行来代替powerpick。

powershell-import

beacon中有一个导入powershell模块的功能,

将powershell后渗透利用框架导入到内存中方便后续的利用。

在目标主机上开一个端口放上module的内容,

在下次要执行powershell命令的时候download下载该端口的module内容

并用iex进行不落地的执行。

尽管是不落地的执行,但最好还是把powershell模块混淆下。

execute-assembly

execute-assembly是在内存中执行C#程序,用不落地执行来绕过杀软的查杀,在实战中很常用。

服务端下发的主体内容为patch过的用于开环境的反射型dll、.NET程序、执行的参数

1、用CreateProcess拉起来一个rundll32.exe(默认)进程

2、服务端下发patch之后的反射型dll,

beacon将该反射型dll注入到1中的进程中并执行,该dll的作用是开.NET的环境。

3、beacon之后把.NET程序注到1的进程中并执行。

考虑到过于麻烦、某些杀软会查杀远程线程注入的操作、卡巴会内存查杀反射型dll、容易拿不到执行的回显,

https://github.com/timwhitez/Doge-CLRLoad实现了go的原生execute-assembly。

堆内存加密

堆内存加密这个功能,即在sleep之前将内存中数据加密,sleep之后再解开,可以避免杀软对内存的扫描。

在sleep之前先将除主线程之外的线程挂起,之后遍历堆对堆内存进行加密。

sleep结束后解密并将线程恢复。

不过该功能较为不稳定,有时在进行堆遍历的时候会突然卡住或者直接退出,

并且考虑到后台可能会有keylogger或portscan这种的持久任务,将线程全部挂起有些不合适

go的time.Sleep函数在其他线程都挂起之后调用会一直沉睡,而调用windows.SleepEx就不会有问题

字符集

CobaltStrike在服务端与Beacon通信的时候协商了字符集类型,如windows默认的是GBK,linux则是UTF-8。

go对字符串的处理默认是UTF-8,但有时windows通信时服务端下发的命令中包含中文,由于是GBK无法进行正常的处理。

参考链接

红队兵器:跨平台重构Cobaltstrike Beacon

https://mp.weixin.qq.com/s/VEIQYXiqJkXXgU1X4F3pBw

Z3ratu1 H4de5-7

CobaltStrike's Beacon in Go

https://github.com/darkr4y/geacon

4.0 geacon_plus

https://github.com/Z3ratu1/geacon_plus

鸡哥文章

cs的通信协议以及cs原生的beacon实现

https://github.com/WBGlIl/ReBeacon_Src

go的原生execute-assembly

https://github.com/timwhitez/Doge-CLRLoad

跨平台重构CobaltStrike的Beacon并使行为对主流杀软免杀

https://mp.weixin.qq.com/s/cVBPbR_hbQVyrwaj-nG2sw

魔改CobaltStrike重写Stager和Beacon

https://mp.weixin.qq.com/s/vMd_K28sxFpOyqdZactc3A

dotnet beacon

https://github.com/mai1zhi2/SharpBeacon

相关推荐
我自是年少韶华倾负2 天前
架构师应如何考虑重构
重构
Cooloooo9 天前
树的重构【东北大学oj数据结构7-4】C++
数据结构·c++·重构
C咖咖10 天前
第6章 第一组重构
重构
AI服务老曹12 天前
云、边、端分布式一体化计算架构,进行统一调度和统一监控的智慧物流开源了
人工智能·分布式·重构·架构·开源·音视频
第八学期13 天前
用Ansible Roles重构LNMP架构(Linux+Nginx+Mariadb+PHP)
linux·nginx·重构·架构·ansible·自动化运维
AI服务老曹17 天前
具备安全生产风险管控及评分等分析功能的名厨亮灶开源了
人工智能·安全·重构·开源·自动化·音视频
网络点点滴24 天前
重构项目架构
javascript·重构
Da_un1 个月前
矩阵重构——reshape函数
矩阵·重构
Da_un1 个月前
矩阵重新排列——sort函数
矩阵·重构
sp42a1 个月前
老旧前端项目如何升级工程化的项目
前端·webpack·重构