Skip to content

install&deploy

本文主要部署相关的参数细节

Config 示例

config.yaml 是 Malice-Network 服务器的配置文件,其中包含了一些服务器以及 listener 可选的配置。

默认配置中包含了 tcp, pulse, website, bind 的 pipeline 示例.

debug: false # 开启debug日志
server:  
  grpc_port: 5004  
  grpc_host: 0.0.0.0  
  ip: 127.0.0.1  
  audit: 1  # 0 close , 1 basic , 2 detail  
  enable: true  
  config:  
    packet_length: 10485760 # 10M: 1024*1024*10  
    certificate:  
    certificate_key:  
  notify:            # 第三方应用通知
    enable: false    
    telegram:         
        enable: false
        api_key:
        chat_id:
    dingtalk:
        enable: false
        secret:
        token:
    lark:
        enable: false
        webhook_url:
    serverchan:
        enable: false
        url:
  github:           # github action build 配置
    repo: malefic  
    workflow: generate.yaml  
    owner:  
    token:  

listeners:          # listener 配置, 可独立生效
  name: listener  
  auth: listener.auth  
  enable: true  
  ip: 127.0.0.1   
  # 自动化编译, 如果配置了saas/docker/github action, 会自动执行编译任务
  auto_build:
    enable: true
    build_pulse: true
    target:
      - x86_64-pc-windows-gnu
    pipeline:
      - tcp
      - http
  tcp:  # tcp example            
    - name: tcp # tcp pipeline
      port: 5001  
      host: 0.0.0.0  
      protocol: tcp  
      parser: malefic  # auto/malefic/pulse
      enable: true  
      tls:          # tls配置, 按照配置生成证书或者使用已有的证书文件
        enable: true  
        # 自签名证书
        CN: "test"  
        O: "Sharp Depth"  
        C: "US"  
        L: "Houston"  
        OU: "Persistent Housework, Limited"  
        ST: "State of Texas"  
        # 自定义证书  
        cert_file: ""  
        key_file: ""  
        ca_file: ""   
      encryption: # 加密配置, 需要与implant对应
        - enable: true
          type: aes
          key: maliceofinternal
        - enable: true
          type: xor
          key: maliceofinternal        
  http: # http example
    - name: http  
      enable: true  
      host: 0.0.0.0  
      port: 8080  
      parser: malefic  # auto/malefic/pulse
      tls:  
        enable: tls  
        # 填写如下选项会进行替换 
        CN: "test"  
        O: "Sharp Depth"  
        C: "US"  
        L: "Houston"  
        OU: "Persistent Housework, Limited"  
        ST: "State of Texas"  
        #   
        cert_file: ""  
        key_file: ""  
        ca_file: ""  
      encryption:
        - enable: true
          type: aes
          key: maliceofinternal
        - enable: true
          type: xor
          key: maliceofinternal 
      error_page: ""  

    - name: http-pulse  
      enable: true  
      host: 0.0.0.0  
      port: 8081  
      parser: pulse  
      encryption:  
        enable: true  
        type: xor  
        key: maliceofinternal  
      error_page: ""  

  bind:  
    - name: bind_pipeline  
      enable: true  
      encryption:  
        enable: true  
        type: aes  
        key: maliceofinternal 

  website:  # website 启动配置
    - name: default-website  
      port: 80  
      root: "/"  
      enable: true  

  rem:  # rem 启动配置
    - name: rem_default  
      enable: true  
      console: tcp://0.0.0.0:12345

Pipeline Config

tcp

最常用的 pipeline, 适用于主体程序交互的 pipeline.

tcp 是目前支持了最多特性的 pipeline.

单个 tcp pipeline 配置:

- name: tcp_default   # pipeline 名字
      port: 5001          # pipeline 监听的端口
      host: 0.0.0.0       # pipeline 监听的host
      protocol: tcp       # 传输层协议
      parser: malefic     # implant协议
      enable: true        # pipeline是否开启
      tls:                # tls配置项,留空则自动生成
        enable: false
        CN: "test"
        O: "Sharp Depth"
        C: "US"
        L: "Houston"
        OU: "Persistent Housework, Limited"
        ST: "State of Texas"
        cert_file: ""
        key_file: ""
        ca_file: ""
      encryption:
        enable: true
        type: aes
        key: maliceofinternal

其中 parser 协议用来区分对应的 implant 类型. pulse 与 malefic 目前的传输协议略有不同, 因此 pulse 需要单独的 parser 配置.

    - name: shellcode
      port: 5002
      host: 0.0.0.0
      parser: pulse    # 对应malefic-pulse上线
      enable: true
      encryption:
        enable: true
        type: xor
        key: maliceofinternal

website

IoM 允许将一些文件挂载 web 服务上

  websites:             # website http任务
    - name: test        # website 名字
      port: 10049       # website 端口
      root: "/test"     # website route根目录
      enable: false     # website 是否开启
      content:          # website 映射内容
        - path: '\images\1.png'
          raw:  maliceofinternal
          type: raw
        - path: '\images\2.png'
          raw: maliceofinternal
          type: raw

bind (Unstable)

主动发送数据的 pipeline, 不同于 tcp 监听端口. bind 会主动向目标发送对应协议序列化后的数据.

  bind:
    -
      name: bind_default
      enable: true
      encryption:
        enable: true
        type: aes
        key: maliceofinternal

启动 Server

Malice-Network 服务器是能与控制 Implant 并与 Malice-Network 客户端交互的主机。服务器还存储了部分 Malice-Network 收集的数据,并管理日志记录。

需要提前获取对应的配置文件: https://github.com/chainreactors/malice-network/blob/master/server/config.yaml ,并放到malice-network所在目录下

最简启动

./malice-network

如果配置文件非默认的 config.yaml, 可以通过 -c path/any.yaml 指定

Server 启动参数

参数 说明
-c, --config 配置文件路径(默认 config.yaml
-i, --ip 外网 IP 地址,覆盖配置文件中的 ip 字段
--server-only 仅启动 server,不启动 listener
--listener-only 仅启动 listener,不启动 server
--daemon 以守护进程模式运行
--debug 开启 debug 日志
--opsec 启用 OPSEC 模式
--quickstart 交互式配置向导,引导完成初始配置

启动后服务器会输出以下信息, 并生成两个配置文件, 分别为listener.authadmin_[server_ip].auth, 这两个配置文件后续还有用处

需要注意的是, server 中的 ip 字段需要在启动时设置为 listener 与 client 能访问到的地址, 所以可以手动修改config.yaml

server:
    ...
    ip: 123.123.123.123
    ...

也可以使用-i 重载这个参数

./malice-network -i 123.123.123.123

同时启动 server 与 listener

在设计上, server 和 listener 是独立的, 为了方便部署提供了同时部署的用法, 仓库中提供的默认config.yaml同时配置了 server 与 listener. 会同时启动server, listener.

启动 Listener

listener与IoM中用来管理pipeline的控制器, 一般在一台服务器上只需要部署一个listener, 即可添加、删除、修改pipeline。 pipeline与真正与implant交换数据的管道。

独立部署listener

可选的listener启动方式

默认情况下listener与server同时启动

从 v0.0.2 开始, 将只提供一个服务端配置文件, 会根据配置自动解析需要开启的服务. 可以通过 enable 字段进行简单控制

刚才提到 Server 的 config.yaml 中已经包含了 listener 配置。 是对 server 与 listener 在同一台机器上部署时的简化。但在交互逻辑上, 同时启动的 listener 与 server 依旧通过 rpc 通讯, 与独立部署的 listener 没有任何区别.

如果要独立启动listener, 只需要创建一个单独的配置文件即可。

如果配置文件非默认的 listener.yaml, 可以通过 -c path/any.yaml 指定.

配置样例:

listeners:
  enable: true
  name: default
  auth: listener.auth
  tcp:
    - name: tcp_default
      port: 5001
      host: 0.0.0.0
      protocol: tcp
      enable: true
      tls:
        enable: false
        CN: "test"
        O: "Sharp Depth"
        C: "US"
        L: "Houston"
        OU: "Persistent Housework, Limited"
        ST: "State of Texas"
      encryption:
        enable: false
        type: aes-cfb
        key: maliceofinternal

请检查 listener.auth

如果换了一台服务部署 listener, 请检查目录下是否存在listener.yamllistener.auth

listener 成功启动后,listener 终端会输出以下信息:

image-20240816214150489

Malice-Network 服务器也会输出 listener 登录信息:

image-20240816214248821

autobuild

如果在server上配置了autobuild选项,并且配置了docker/github action至少一个编译环境,在pipeline启动时, 就会自动下发编译任务。

listeners:  
  name: listener  
  auth: listener.auth  
  enable: true  
  tcp:  
    - name: tcp_malefic  
      port: 5001  
      host: 0.0.0.0  
      protocol: tcp  
      parser: malefic  
      enable: true  
      auto_build:  
        target:  
          - x86_64-unknown-linux-musl

编译结果可以通过artifact命令查看

启动客户端

将生成的用户配置文件, 默认为 admin_[server_ip].auth 复制到 Malice-Network 客户端的所在位置。使用新的用户配置文件时,可以使用以下指令启动客户端:

.\iom login [admin_ip.auth]

执行命令后,客户端会自动使用新的客户配置文件与服务器连接,并将用户配置文件移动至客户端的用户配置文件夹 (Windows 下为 C:\Users\user\.config\malice\configs, Linux 为 /home/[username]/.config/malice/configs,MacOS 为 /Users/[username]/.config/malice/configs

客户端登录成功后会输出以下信息:

下次登录后,客户端会自动显示在用户配置文件夹下所有的用户配置,根据需求,选择对应的用户进行选择。

./iom

每个client下拥有独立的profile配置,每次client启动都会读取对应的用户配置。如果在多用户情况下需要进行私有配置,可以在client的用户配置文件下的malice.yaml进行修改。

resources: ""                             
tmp: ""
aliases: []                             # sliver aliases本地加载列表
extensions:[]                           # sliver extensions本地加载列表
mals: []                                # mals本地加载列表
settings:
  max_server_log_size: 10               # 每个session在iom保存的最大日志个数
  github_repo: ""                       # malefic的仓库名
  github_owner: ""                      # github用户名
  github_token: ""                      # github的token
  github_workflow_file: generate.yaml   # workflow的配置文件名(默认为generate.yaml

ROOTRPC

malice-network 实际上还存在一个高权限的管理组件. 需要根证书配置才可实现. 这个证书不会生成.auth文件, 直接保存在服务端配置和数据库中.

只允许已经启动了malice-network的机器上, 继续通过malice-network usermalice-network listenermalice-network license 进行管理。

支持的子命令:

  • malice-network user — 用户管理(add/del/list)
  • malice-network listener — Listener 管理(add/del/list)
  • malice-network license — License 管理

认证文件

Malice-Network 客户端需要使用用户配置文件才能与服务端进行交互。用户配置文件中包含由服务端生成的证书信息。每次客户端尝试连接服务端时,服务端都会校验该证书信息,以确保用户的合法性。这一过程保证了只有经过认证的用户才能访问和使用 Malice-Network 服务,从而提升了系统的安全性和可靠性。

所有的远程 rpc 交互都需要auth文件使用 mtls 认证.

operator: listener # 操作者名字
host: 127.0.0.1    # server grpc ip
port: 5004         # server grpc port
type: listener     # 操作者类型, 如果不匹配则会认证失败, 默认生成的即可
ca: |
   ...
private_key: |
   ...
certificate: |
   ...

添加 client

默认情况下, 会生成一个admin_[server_ip].auth的配置. 大部分情况下, 使用这个 auth 即可.

目前所有用户都是平级的, 但可以在服务端添加或吊销指定用户的证书实现简单的管理

在确保 Malice-Network 服务器已经运行后,在终端输入以下指令:

.\malice-network user add [username]

执行命令成功后,服务端会输出以下信息并在所处文件夹下生成对应用户配置文件:

也可以删除用户, 吊销证书, 使其无法登录 server

.\malice-network user del [username]

列出所有可用的用户配置

.\malice-network user list

添加 listener

在确保 Malice-Network 服务器已经运行后,在终端输入以下指令:

.\malice-network listener add [listener_name]

执行命令成功后,服务端会输出以下信息并在所处文件夹下生成对应 auth 配置文件:

也可以删除用户, 使其无法登录 server

.\malice-network listener del [listener_name]

列出所有可用的用户配置

.\malice-network listener list