IoM v0.1.1 Out of the Box 开箱即用¶
前言¶
距离上次大版本的更新已经过去了三个月, 我们大概每个月会发布一个patch, 修复已知bug、对功能进行小的改动。 积累了足够发布一个大版本的更新内容,决定将v0.1.1提前搬上来。
我们在v0.1.0 之前就在implant侧积累了足够多的底层技术, 但受限于精力,这些内容都需要熟悉rust的编译才能被很好的管理与使用。底层的功能实际上已经远远超越任何一家开源的C2, 普通使用者却无法很好的感知。 因此v0.1.1主要为了提升用户体验、简化复杂操作, 将之前较为复杂的TLS、REM、HotLoad等等功能简化到所有用户都能轻易使用的程度。
本次更新的主要内容是 开箱即用, 让不具备专业知识的用户也能轻松使用
从v0.1.1开始, IoM的implant编译部分不再具有任何门槛, 只需要允许单个二进制文件即可使用, 不再需要依赖docker或者安装脚本。 client和server都只需要单个二进制文件**开箱即用**
GUI 将会在1-2周后适配v0.1.1
新特性¶
build 开箱即用¶
我们也进行了大量的测试和实战, 接收到了一定的反馈。目前IoM最大的上手难度还是rust编译部分。即使我们提供了一行命令即可试用的docker自动化编译以及github action自动化编译, 比起Cobaltstrike这样的通过patch生成beacon还是不够直接。
因此将给**所有用户提供最基础版本的自动化编译**, 这个编译服务托管在服务器上, 如果有安全上顾虑, 可以手动关闭这个功能。
使用自动化编译服务即视为同意用户协议
在提供自动化编译的同时, 也添加了malefic.yar
任何防护设备的厂家可以通过我们的malefic.yar 检测通过自动化服务编译的二进制文件
saas:
enable: true
url: http://build.chainreactors.red
token: **** # community用户会自动注册生成license
如果token为null, 则会自动注册, 向服务器获得一个token, 对于用户来说是无感的。
listener新增了autobuild配置块, 将会使用自动化编译服务生成最基本的implant 二进制文件。 以达到接近CobaltStrike的用户体验
listeners:
enable: true
auto_build:
enable: true
build_pulse: true
target:
- x86_64-pc-windows-gnu
pipeline:
- tcp
- http
......
我们极大的简化了原本安装docker/github action -> new profile -> build
的流程, 现在只需要运行server的二进制文件, 即可直接使用
mal 开箱即用¶
我们发现了mal-community因为实现的过于匆忙, 导致bug较多,用户体验极差,实际使用者也寥寥无几。 并且需要通过mal install进行手动安装。 而v0.1.1 中, 我们将最常用的插件嵌入到client中,实现**开箱即用**。
我们在client中维护一个内置的mal 插件工具集, 这个工具集将被良好的维护以及持久更新, 但只会添加必要的功能,已防止client二进制文件体积过度膨胀。
rem 开箱即用¶
原本的rem相关功能有很大一部分位于 mal-community的community-proxy下, 造成了极强的割裂感。 而现在我们将rem也移动到了embed mal中。
原本的rem需要通过编译、插件等等方式进行加载。 而现在完全内置, 并提供了预编译的版本。
用法1 动态加载rem module
# 加载rem dll
rem_community load
# 选择对应的rem pipeline, 搭建了反向代理隧道
rem_community socks5 rem_pipeline
用法2 通过静态链接.a 编译implant
build beacon --profile tcp_deafult --target x86_64-pc-windows-gnu --rem
profile/build/artifact 命令组重构¶
- artifact download 支持--format, 支持十数种不同的格式
- artifact自动挂载到website, 通过自定义密钥映射目录
- 新增artifact show 命令, 展示artifact 基本信息
- 简化client build 命令组
- build module 新增--3rd, 允许编译3rd modules
- build beacon 新增 --rem, 静态链接rem
- build beacon 实装 --proxy命令
- build beacon 新增 --tls 命令, 开启tls
- ......
profile/build/artifact 经过多次优化用户体验,并结合自动化编译, 现在已经能让完全不懂的用户也能做到开箱即用。
证书管理¶
目前IoM的tls相关功能被使用较少, 主要原因是tls使用较为复杂, 需要手动申请证书,通过多个flag进行配置。 为此, 我们优化了这个流程, 大大简化了证书自动申请, 证书配置,自签名证书相关操作。
如果不指定特定的字段, 自签名证书将通过随机值填充, 尽可能减少特殊相关特征。
重构transport/pipeline¶
implant上的transport进行了完全的重构, 从接口到实现都与之前完全不同
- 支持socks5/http代理
- 修复与重构tls支持, 可以配置tls1.2,tls1.3
- 优化transport性能
- 优化rem的支持
- 通过泛型实现, 能接收所有基于
pub trait TransportImpl: AsyncRead + AsyncWrite + Unpin + Send {}
的实现 - 修复了一系列边界条件下implant假死的bug
- 修复默认tokio最大线程数为2的bug, 导致多个任务时会阻塞
- 新增swtich internal module, 允许动态切换pipeline
- .....
我们调整了transport的代码结构、具体实现、性能以及大量bug修复。
现在的implant的transport可以适配多异步运行时,smol/async-std/tokio。 并且完全基于futures库的trait实现, 后续将能更自由的接入各种信道。
同样的, 在server/listener 上, 我们也完全重构了pipeline。 最大的改动来自于pipeline的 encryption/cryptor/tls可以复用在一个端口上。
在此之前,一个端口只支持一种加密方式,一种协议,tls开/关。 而新增, 可以同时配置多种协议, 多种加密方式,TLS自动识别。
也就是说, 之前需要6个端口实现的工作, 现在通过多路复用在一个端口中实现。
配置对比, 左边是新版的, 配置参数已经极大简化
并且artifact与website有了类似CobaltStrike的web delivery 的联动
implant anti sandbox¶
我们实现一组简单的反沙箱的检测机制,技术来自 https://github.com/ayoubfaouzi/al-khaser 。 我们使用rust进行了简单的修改与实现。 这个检测机制非常简单, 实际上也不具备对抗效果。 目的是提供反沙箱的相关接口, 以供后续定制化开发
其他更新¶
- exec module支持实时回显
- 修复darwin 编译报错
- 特定操作系统下,随即数生成器失效的bug
- fix XOR cryptor not work
- 实现runas、rev2self、privs模块
- BOF多个buf修复, 适配windows server2012
- 大量的用户体验调整与细节bug修复不一一列举
- ...
End¶
从v0.1.1 开始, 我们可以丢掉安装脚本, 丢掉编译环境, 只需要server和client两个二进制文件, 即可在任意位置使用IoM,不再有复杂的环境安装,rust编译操作。 对绝大多数轻度用户不会带来任何的负担, 能做到接近CobaltStrike/vshell级别的开箱即用。