Intro
IoM通过几个月的快速迭代, 已经具备了一个现代化C2的绝大部分功能.
v0.0.4将是v0.1.0之前的最后一个版本, 可以在这里看到我们v0.1.0的路线图: https://chainreactors.github.io/wiki/IoM/roadmap/#v010-professional-release
广告时间:
在这几个月的开发历程中,我们积累了足够多的独一无二的功能。 从v0.1.0 开始, 我们将尝试发布professional。
professional 将提供从静态、行为、内存、流量场景的解决方案
v0.0.4 更新日志
v0.0.4 是一个过渡版本,大部分更新都在修复bug, 提高兼容性稳定性, 降低使用难度与简化操作上。
本次更新发布后的版本,已经是开源C2中具有最丰富功能,最自由拓展能力,最强大兼容性的C2框架。甚至CS的Arsenal-kit中的大部分组件都已经使用了更先进的技术实现。
implant更新
兼容win7/windows 2008
新版的rust放弃了对windows7/windows server 2008的支持。 为了兼容win7,我们调整了编译环境的版本, 使用1.74 rust + lto 链接, 使得v0.0.4的implant能运行在低版本的windows中。
重载了链接过程,解决rust lto无法正确加载符号表的bug: https://github.com/rust-lang/rust/issues/44322
修复sRDI 静态 TLS 无法加载的问题
解决了PE loader 无法加载存在静态 TLS
的PE文件, 导致以 Rust
编写的程序加载panic问题。
目前还没有解决了这个问题的sRDI, 为此我们实现了自己的sRDI并替换了原有的link sRDI
.malefic-mutant.exe build srdi -i .malefic.exe
(在v0.0.4发布之时,我们同步开启了硬核的系列技术文章分享, 将分享一些尚未有人解决过的问题)
dllspawn
由于还有很多资源停留在 CS
的各类库中, 因此, 我们提供了 dllspawn
来适配 CS
的对应功能
CS中各种提权的dll以及各种功能, 绝大部分都基于此实现, 现在我们能完美的兼容CS的dll像相关命令了
图为迁移了 https://github.com/rsmudge/ElevateKit 为mal插件的效果:
http pulse
在v0.0.3 中, 支持了基于tcp协议的stager,但是因为静态TLS锁的问题, 现有的所有sRDI或PE loader (donut, pe2shellcode, No-Consolation等等)都无法加载rust MSVC编译的程序。又因为GNU的win7兼容性问题, pulse事实上只是一个摆设。
现在我们同时解决了win7兼容性与静态TLS锁的问题。并新增了pulse的http实现,现在pulse可以真正发挥stager的作用了。
v0.0.4的子标题`自举`也表示rust offensive security 生态的彻底闭环, 现在终于可以使用rust加载rust的程序了。
自动化编译
在刚发布的v0.0.3中, 我们使用docker作为自动化编译的解决方案。 但是rust复杂的编译方案不得不准备每个target对应的编译环境。这导致了对CPU, 内存,硬盘都有巨大的占用, 并且我们目前只实现了基于linux的自动化安装。
比起sliver或者CobaltStrike过于笨重, 这导致上手门槛极大提高。为此, 我们准备了更加轻量的解决方案。
在v0.0.2中, 提供了使用两行gh命令实现的自动化编译, 在v0.0.4中,我们将github action的云编译接入到client/server中, 只需要申请一个github token, 即可实现对client/server无任何环境要求的自动化编译。
v0.0.4支持无任何本地环境的自动化编译了, 极大减轻了malefic编译的心智负担
基于github action的快速编译
github相关配置
使用github action前,需要先在server所处服务器上对server二进制文件同一目录下的config.yaml进行配置。将malefic源码所在的github仓库名、github用户名github token以及workflow配置文件名填入。
... github: repo: # malefic的仓库名 owner: # github用户名 token: # github的token workflow: # workflow的配置文件名(默认为generate.yaml)
若有多个用户使用服务器,也可以在client所处主机的~/.config/malice/malice.yaml下进行配置。当client端的github 配置填入之后,server会优先使用client提供的github配置,来启动工作流。
... github_repo: # malefic的仓库名 github_owner: # github用户名 github_token: # github的token github_workflow_file: # workflow的配置文件名(默认为generate.yaml)
action build
使用action和子命令来进行编译,必须指定build target以及对应的profile。当workflow运行成功时,client会提示当前workflow的html_url,方便在网页端进行查看。当编译完成时,也会在client进行通知。
action run的参数命令与docker build的参数基本一致。命令示例:
action beacon --profile test --target x86_64-pc-windows-msvc
docker优化
添加了服务器端的docker编译队列,因为rust端对性能占用较大, 编译时会占用所有的CPU。现在添加了编译队列, 同时只会运行一个编译任务。
极大减少了install.sh安装时的配置, 现在只会下载一个allinone的镜像. 这个镜像允许除了arm架构以及win MSVC之外的所有架构编译。
原本的install.sh 会下载约13g的镜像, 然后生成几个g的编译中间文件。现在我们大大简化了对服务器的负担, 提供了新的allinone的编译镜像以及简化安装脚本。
allinone 镜像: ghcr.io/chainreactors/malefic-builder:v0.0.4
这个镜像解决了大量的rust的环境安装,交叉编译等问题。如果有其他rust项目在编译上遇到各种错误, 不妨使用这个试试。
client更新
artifact功能组
为了在提权脚本中更方便使用IoM, 就像CS能直接通过listener生成对应的shellcode一样. patch2将一系列shellcode与artifact操作的函数暴露出来了。
我们添加大量shellcode生成,sRDI等操作相关的api。
• artifact_payload ,对应CobaltStrike中的同名函数, 用于生成stageless的shellcode, 在IoM是SRDI后的beacon • artifact_stager, 对应CobaltStrike中的同名函数, 用于生成stager的shellcode, 在IoM中式SRDI后的pulse • donut_dll2shellcode, 基于donut实现的dll转shellcode • donut_exe2shellcode, 基于donut实现的exe转shellcode • sgn_encode, shellcode sgn混淆 • srdi, 能调用malefic-mutant中支持的srdi将二进制程序转为shellcode • .....
详细文档可以查阅: https://chainreactors.github.io/wiki/IoM/manual/mal/builtin/#artifact
donut
将内置的donut从 https://github.com/Binject/go-donut 迁移到 https://github.com/wabzsy/gonut .
并对其进行了大量改动:
1. 将内置的donut 从v1.0 更新到v1.1 , 现在更加稳定 2. 将execute-assembly替换为donut生成的shellcode (临时, 后续会使用malefic-srdi代替) 3. 新增donut命令
非交互式client
特定场景下使用, 更轻量的交互模式
.client.exe implant whoami --use 08d6c05a21512a79a1dfeb9d2a8f262f --auth admin_127.0.0.1.auth --wait
Other of others
• lua api文档格式重构, 现在更加清晰 • 将sgn与malefic-mutant在编译时内嵌, 减少安装时的步骤 • 优化 !
命令, 能更好得执行本地的命令, 而不需要退出程序• 编译pulse时 联动beacon • 重构website • 优化tui渲染的颜色 • 修复了各种细节处的bug数十处
End
在我们最初的计划中, 我们的ASM框架mapping可以与C2框架IoM同步进行。 但是C2需要耗费的精力远超想象, 所以ASM再次被搁置。 好在代理工具rem的进展顺利,不出意外近期就可以见面。
rem
rem的简介:
在 rem 中, 基于传输层之上重新抽象了整个网络交互的流程。
• 传输层, 对应 tunnel, 分为 listener 和 dialer, 可以实现自定义的任意传输层信道, 只需要实现对应的 golang 的接口即可。目前实现了,tcp, udp, icmp, websocket. • 会话层, 实现了链接复用(mux),会话管理. • 加密混淆层(对应表示层),对应 core/wrapper,对应的接口是 ReadWriteCloser, 只需要实现对应的 Read 和 Writer 接口, 即可实现对传输层流程的加密,混淆, 伪装。甚至可以实现上下行流量分别配置不同的 wrapper. 目前实现了 aes, xor, padding. • 中转/代理层(对应表示层) (可选), 可以通过第三方代理/服务中转流量, 例如通过 ssh, socks5, neoreg, suo5 等任意具有流量功能的实现数据转发, 目前实现了 http/https, socks5/4, ssh, shadowsocks • 应用层, 基于上面三层实现的信道, 可以被封装为不同的应用, 目前实现了 socks5, port forward, http 代理, shadowsocks, trojan
基于这样的抽象层级, 我们可以任意拓展 rem 的能力边界。 我们可以快速添加一个传输层协议, 或是加密混淆算法, 或是代理中转工具, 又或是最终面向用户的协议。
这是前所未有的潜力, 理论上不存在任何在流量上被特征/统计学检测的可能。
可以在 https://chainreactors.github.io/wiki/rem/design/ 找到rem的设计文档(update 2024.12), 更新了重构后的rem架构设计。
IoM-gui
并且IoM的GUI也已经完成了大部分工作, 马上可以发布v0.0.1的IoM-gui .
我们终于可以通过可视化的方式呈现各种复杂的功能。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...