Files
redc/README_CN.md
2026-01-23 12:39:15 +00:00

19 KiB
Raw Permalink Blame History

redc

红队基础设施多云自动化部署工具

GitHub stars GitHub releases License Downloads Go Report Card Twitter

探索更多模板 »

🧐如何使用 · ⬇️下载程序 · 反馈Bug · 🍭提交需求

中文 | English


📚 文档


Redc 基于 Terraform 封装,将红队基础设施的完整生命周期(创建、配置、销毁)进一步简化。

Redc 不仅仅是开机工具,更是对云资源的自动化调度器!

  • 一条命令交付,从购买机器到服务跑起来一条龙,无需人工干预
  • 多云部署支持适配阿里云、腾讯云、AWS 等主流云厂商
  • 场景预制封装,红队环境 ”预制菜“,再也不用到处找资源
  • 状态资源管理,本地保存资源状态,随时销毁环境,杜绝资源费用浪费

安装配置

redc 引擎安装 (第一步)

下载二进制包

REDC 下载地址:https://github.com/wgpsec/redc/releases

下载系统对应的压缩文件,解压后在命令行中运行即可。

HomeBrew 安装 WIP

安装

brew tap wgpsec/tap
brew install wgpsec/tap/redc

更新

brew update
brew upgrade redc

从源码编译安装

goreleaser

git clone https://github.com/wgpsec/redc.git
cd redc
goreleaser --snapshot --clean

# 编译成功后会在 dist 路径下

模版选择 (第二步)

默认下 redc 会读取用户目录下的 ~/redc/redc-templates 模板文件夹,对应的 "文件夹名称" 就是部署时的场景名称

可以自行下载模板场景,场景名称对应模板仓库 https://github.com/wgpsec/redc-template

在线地址:https://redc.wgpsec.org/

例如一键拉取ecs场景

redc pull aliyun/ecs

# 此时,模板会下载到 ~/redc/redc-templates 目录下

redc pull

每个场景的具体使用和命令请查看模板仓库 https://github.com/wgpsec/redc-template 里具体场景的 readme

引擎配置文件 (第三步)

redc 开启机器需要依靠 aksk

默认下 redc 会读取用户路径的 config.yaml 配置文件,格式如下

vim ~/redc/config.yaml
# 多云身份凭证与默认区域
providers:
  aws:
    AWS_ACCESS_KEY_ID: "AKIDXXXXXXXXXXXXXXXX"
    AWS_SECRET_ACCESS_KEY: "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW"
    region: "us-east-1"
  aliyun:
    ALICLOUD_ACCESS_KEY: "AKIDXXXXXXXXXXXXXXXX"
    ALICLOUD_SECRET_KEY: "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW"
    region: "cn-hangzhou"
  tencentcloud:
    TENCENTCLOUD_SECRET_ID: "AKIDXXXXXXXXXXXXXXXX"
    TENCENTCLOUD_SECRET_KEY: "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW"
    region: "ap-guangzhou"
  volcengine:
    VOLCENGINE_ACCESS_KEY: "AKIDXXXXXXXXXXXXXXXX"
    VOLCENGINE_SECRET_KEY: "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW"
    region: "cn-beijing"
  huaweicloud:
    HUAWEICLOUD_ACCESS_KEY: "AKIDXXXXXXXXXXXXXXXX"
    HUAWEICLOUD_SECRET_KEY: "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW"
    region: "cn-north-4"
  google:
    GOOGLE_CREDENTIALS: '{"type":"service_account","project_id":"your-project",...}'
    project: "your-project-id"
    region: "us-central1"
  azure:
    ARM_CLIENT_ID: "00000000-0000-0000-0000-000000000000"
    ARM_CLIENT_SECRET: "your-client-secret"
    ARM_SUBSCRIPTION_ID: "00000000-0000-0000-0000-000000000000"
    ARM_TENANT_ID: "00000000-0000-0000-0000-000000000000"
  oracle:
    OCI_CLI_USER: "ocid1.user.oc1..aaaaaaa..."
    OCI_CLI_TENANCY: "ocid1.tenancy.oc1..aaaaaaa..."
    OCI_CLI_FINGERPRINT: "aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99"
    OCI_CLI_KEY_FILE: "~/.oci/oci_api_key.pem"
    OCI_CLI_REGION: "us-ashburn-1"
  cloudflare:
    CF_EMAIL: "you@example.com"
    CF_API_KEY: "your-cloudflare-api-key"

在配置文件加载失败的情况下,会尝试读取系统环境变量,使用前请配置好

AWS 环境变量

Linux/macOS 示例通过命令行设置环境变量:

export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

Windows 示例通过命令行设置环境变量:

setx AWS_ACCESS_KEY_ID AKIAIOSFODNN7EXAMPLE
setx AWS_SECRET_ACCESS_KEY wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

阿里云环境变量

Linux/macOS 系统

使用 export 命令配置的临时环境变量仅对当前 Shell 会话有效。如需长期保留,可将 export 命令写入 Shell 的启动配置文件(如 .bash_profile 或 .zshrc

# AccessKey ID
$ export ALICLOUD_ACCESS_KEY="<AccessKey ID>"
# AccessKey Secret
$ export ALICLOUD_SECRET_KEY="<AccessKey Secret>"
# 如果使用 STS 凭证,需配置 security_token
$ export ALICLOUD_SECURITY_TOKEN="<STS Token>"

Windows 系统

在桌面右键单击 此电脑,选择 属性 > 高级系统设置 > 环境变量。
在 系统变量 或 用户变量 中,单击 新建创建以下环境变量ALICLOUD_ACCESS_KEY、ALICLOUD_SECRET_KEY、ALICLOUD_SECURITY_TOKEN可选

腾讯云环境变量

Linux/macOS 系统

export TENCENTCLOUD_SECRET_ID=您的SecretId
export TENCENTCLOUD_SECRET_KEY=您的SecretKey

Windows 系统

set TENCENTCLOUD_SECRET_ID=您的SecretId
set TENCENTCLOUD_SECRET_KEY=您的SecretKey

火山引擎环境变量

Linux/macOS 系统

export VOLCENGINE_ACCESS_KEY=您的AccessKey
export VOLCENGINE_SECRET_KEY=您的SecretKey

Windows 系统

set VOLCENGINE_ACCESS_KEY=您的AccessKey
set VOLCENGINE_SECRET_KEY=您的SecretKey

快速上手

redc设计为docker like命令设计

使用 redc -h 可以查看常用命令帮助

初始化模版

首次使用模版需要运行。为了加快模版部署速度,建议运行 init 选项加快后续部署速度

redc init

默认init效果

默认会 init 在 ~/redc/redc-templates 路径下的所有场景,作用就是刷一遍 tf provider 的 cache

列出模版列表

redc image ls

默认会列出在 ~/redc/redc-templates 路径下的所有场景

redc image ls

创建实例并启动

ecs 为模版文件名称

redc plan --name boring_sheep_ecs  [模版名称] # 规划一个实例(该过程验证配置但不会创建基础设施)
# plan完成后会返回caseid 可使用start命令实际创建基础设施
redc start [caseid]
redc start [casename]

也可以直接启动模版

redc run aliyun/ecs

redc run aliyun/ecs

开启后会给出 case id ,这是标识场景唯一性的识别 id后续操作都需要用到 case id 例如 8a57078ee8567cf2459a0358bc27e534cb87c8a02eadc637ce8335046c16cb3c 可以用 8a57078ee856 效果一样

使用-e 参数可配置变量

redc run -e xxx=xxx ecs

停止实例

redc stop [caseid] # 停止实例
redc rm [caseid] # 删除实例(删除前确认实例是否已经停止)
redc kill [caseid] # init模版后停止实例并删除

redc stop [caseid]

查看case情况

redc ps

redc ps

执行命令

直接执行命令并返回结果

redc exec [caseid] whoami

redc exec [caseid] whoami

进入交互式命令

redc exec -t [caseid] bash

redc exec -t [caseid] bash

复制文件到服务器

redc cp test.txt [caseid]:/root/

redc cp test.txt [caseid]:/root/

下载文件到本地

redc cp [caseid]:/root/test.txt ./

redc cp [caseid]:/root/test.txt ./

更改服务

这个需要模版支持更改可实现更换弹性公网ip

redc change [caseid]

MCP模型上下文协议支持

redc 现已支持模型上下文协议,可与 AI 助手和自动化工具无缝集成。

主要特性

  • 两种传输模式STDIO 用于本地集成SSE 用于基于 Web 的访问
  • 全面的工具:创建、管理和在基础设施上执行命令
  • AI 友好:支持 Claude Desktop、自定义 AI 工具和自动化平台
  • 安全性STDIO 在本地运行无网络暴露SSE 可限制为 localhost

快速开始

启动 STDIO 服务器(用于 Claude Desktop 集成):

redc mcp stdio

启动 SSE 服务器(用于基于 Web 的客户端):

# 默认localhost:8080
redc mcp sse

# 自定义端口
redc mcp sse localhost:9000

可用工具

  • list_templates - 列出所有可用模板
  • list_cases - 列出项目中的所有场景
  • plan_case - 从模板规划新场景(预览资源而不实际创建)
  • start_case / stop_case / kill_case - 管理场景生命周期
  • get_case_status - 检查场景状态
  • exec_command - 在场景上执行命令

示例:与 Claude Desktop 集成

添加到 ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "redc": {
      "command": "/path/to/redc",
      "args": ["mcp", "stdio"]
    }
  }
}

详细文档请参阅 MCP_CN.md


编排服务compose WIP

redc 提供了一个编排服务

启动编排服务

redc compose up

关闭compose

redc compose down

文件名称:redc-compose.yaml

compose 模版

version: "3.9"

# ==============================================================================
# 1. Configs: 全局配置中心
# 作用: 定义可复用的静态资源redc 会将其注入到 Terraform 变量中
# ==============================================================================
configs:
  # [文件型] SSH 公钥
  admin_ssh_key:
    file: ~/.ssh/id_rsa.pub

  # [结构型] 安全组白名单 (将被序列化为 JSON 传递)
  global_whitelist:
    rules:
      - port: 22
        cidr: 1.2.3.4/32
        desc: "Admin Access"
      - port: 80
        cidr: 0.0.0.0/0
        desc: "HTTP Listener"
      - port: 443
        cidr: 0.0.0.0/0
        desc: "HTTPS Listener"

# ==============================================================================
# 2. Plugins: 插件服务 (非计算资源)
# 作用: 独立于服务器的云资源,如 DNS 解析、对象存储、VPC 对等连接等
# ==============================================================================
plugins:
  # 插件 A: 阿里云 DNS 解析
  # 场景: 基础设施启动后,自动将域名指向 Teamserver IP
  dns_record:
    image: plugin-dns-aliyun
    # 引用外部定义的 provider 名称
    provider: ali_hk_main
    environment:
      - domain=redteam-ops.com
      - record=cs
      - type=A
      - value=${teamserver.outputs.public_ip}

  # 插件 B: AWS S3 存储桶 (Loot Box)
  # 场景: 仅在生产环境 ('prod') 启用,用于存放回传数据
  loot_bucket:
    image: plugin-s3
    profiles:
      - prod
    provider: aws_us_east
    environment:
      - bucket_name=rt-ops-2026-logs
      - acl=private

# ==============================================================================
# 3. Services: Case场景
# ==============================================================================
services:

  # ---------------------------------------------------------------------------
  # Service A: 核心控制端 (Teamserver)
  # 特性: 总是启动 (无 profile),包含完整生命周期钩子和文件流转
  # ---------------------------------------------------------------------------
  teamserver:
    image: ecs
    provider: ali_hk_main
    container_name: ts_leader

    # [Configs] 注入全局配置 (tf_var=config_key)
    configs:
      - ssh_public_key=admin_ssh_key
      - security_rules=global_whitelist

    environment:
      - password=StrongPassword123!
      - region=ap-southeast-1

    # [Volumes] 文件上传 (Local -> Remote)
    # 机器 SSH 连通后立即执行
    volumes:
      - ./tools/cobaltstrike.jar:/root/cs/cobaltstrike.jar
      - ./profiles/amazon.profile:/root/cs/c2.profile
      - ./scripts/init_server.sh:/root/init.sh

    # [Command] 实例内部自启动
    command: |
      chmod +x /root/init.sh
      /root/init.sh start --profile /root/cs/c2.profile

    # [Downloads] 文件回传 (Remote -> Local)
    # 启动完成后抓取凭证
    downloads:
      - /root/cs/.cobaltstrike.beacon_keys:./loot/beacon.keys
      - /root/cs/teamserver.prop:./loot/ts.prop

  # ---------------------------------------------------------------------------
  # Service B: 全球代理矩阵 (Global Redirectors)
  # 特性: 矩阵部署 (Matrix Deployment) + Profiles
  # ---------------------------------------------------------------------------
  global_redirectors:
    image: nginx-proxy

    # [Profiles] 仅在指定模式下启动 (e.g., redc up --profile prod)
    profiles:
      - prod

    # [Matrix] 多 Provider 引用
    # redc 会自动裂变出:
    # 1. global_redirectors_aws_us_east
    # 2. global_redirectors_tencent_sg
    # 3. global_redirectors_ali_jp (假设 providers.yaml 里有这个)
    provider:
      - aws_us_east
      - tencent_sg
      - ali_jp

    depends_on:
      - teamserver

    configs:
      - ingress_rules=global_whitelist

    # 注入当前 provider 的别名
    environment:
      - upstream_ip=${teamserver.outputs.public_ip}
      - node_tag=${provider.alias}

    command: docker run -d -p 80:80 -e UPSTREAM=${teamserver.outputs.public_ip} nginx-proxy

  # ---------------------------------------------------------------------------
  # Service C: 攻击/扫描节点
  # 特性: 攻击模式专用
  # ---------------------------------------------------------------------------
  scan_workers:
    image: aws-ec2-spot
    profiles:
      - attack
    deploy:
      replicas: 5
    provider: aws_us_east
    command: /app/run_scan.sh

# ==============================================================================
# 4. Setup: 联合编排 (Post-Deployment Hooks)
# 作用: 基础设施全部 Ready 后,执行跨机器的注册/交互逻辑
# 注意: redc 会根据当前激活的 Profile 自动跳过未启动服务的相关任务
# ==============================================================================
setup:

  # 任务 1: 基础检查 (总是执行)
  - name: "检查 Teamserver 状态"
    service: teamserver
    command: ./ts_cli status

  # 任务 2: 注册 AWS 代理 (仅 prod 模式有效)
  # 引用裂变后的实例名称: {service}_{provider}
  - name: "注册 AWS 代理节点"
    service: teamserver
    command: >
      ./aggressor_cmd listener_create 
      --name aws_http 
      --host ${global_redirectors_aws_us_east.outputs.public_ip} 
      --port 80

  # 任务 3: 注册 Tencent 代理 (仅 prod 模式有效)
  - name: "注册 Tencent 代理节点"
    service: teamserver
    command: >
      ./aggressor_cmd listener_create 
      --name tencent_http 
      --host ${global_redirectors_tencent_sg.outputs.public_ip} 
      --port 80

  # 任务 4: 注册 Aliyun 代理 (仅 prod 模式有效)
  - name: "注册 Aliyun 代理节点"
    service: teamserver
    command: >
      ./aggressor_cmd listener_create 
      --name ali_http 
      --host ${global_redirectors_ali_jp.outputs.public_ip} 
      --port 80


配置缓存和加速

仅配置缓存地址:

echo 'plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"' > ~/.terraformrc

配置阿里云加速 修改 /.terraformrc 文件

plugin_cache_dir  = "$HOME/.terraform.d/plugin-cache"
disable_checkpoint = true
provider_installation {
  network_mirror {
    url = "https://mirrors.aliyun.com/terraform/"
    # 限制只有阿里云相关 Provider 从国内镜像源下载
    include = ["registry.terraform.io/aliyun/alicloud",
               "registry.terraform.io/hashicorp/alicloud",
              ]
  }
  direct {
    # 声明除了阿里云相关Provider, 其它Provider保持原有的下载链路
    exclude = ["registry.terraform.io/aliyun/alicloud",
               "registry.terraform.io/hashicorp/alicloud",
              ]
  }
}

设计规划

  1. 先创建新项目
  2. 指定项目下要创建场景会从场景库复制一份场景文件夹到项目文件夹下
  3. 不同项目下创建同一场景互不干扰
  4. 同一项目下创建同一场景互不干扰
  5. 多用户操作互不干扰(本地有做鉴权,但这个实际上要在平台上去做)
  • redc 配置文件 (~/redc/config.yaml)
  • 项目1 (./project1)
    • 场景1 (./project1/[uuid1])
      • main.tf
      • version.tf
      • output.tf
    • 场景2 (./project1/[uuid2])
      • main.tf
      • version.tf
      • output.tf
    • 项目状态文件 (project.ini)
  • 项目2 (./project2)
    • 场景1 (./project2/[uuid1])
      • main.tf
      • version.tf
      • output.tf
    • 场景2 (./project2/[uuid2])
      • ...
    • 项目状态文件 (project.ini)
  • 项目3 (./project3)
    • ...

文章介绍