19 KiB
红队基础设施多云自动化部署工具
探索更多模板 »
🧐如何使用
·
⬇️下载程序
·
❔反馈Bug
·
🍭提交需求
中文 | English
📚 文档
- 使用指南 - 完整的安装和使用指南
- AI 运维 Skills - AI 代理和自动化工具的综合指南
- MCP 协议支持 - AI 助手的模型上下文协议集成
- 模板仓库 - 预配置的基础设施模板
- 在线模板 - 浏览和下载模板
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
例如,一键拉取ecs场景
redc pull aliyun/ecs
# 此时,模板会下载到 ~/redc/redc-templates 目录下
每个场景的具体使用和命令请查看模板仓库 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 在 ~/redc/redc-templates 路径下的所有场景,作用就是刷一遍 tf provider 的 cache
列出模版列表
redc image ls
默认会列出在 ~/redc/redc-templates 路径下的所有场景
创建实例并启动
ecs 为模版文件名称
redc plan --name boring_sheep_ecs [模版名称] # 规划一个实例(该过程验证配置但不会创建基础设施)
# plan完成后会返回caseid 可使用start命令实际创建基础设施
redc start [caseid]
redc start [casename]
也可以直接启动模版
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模版后停止实例并删除
查看case情况
redc ps
执行命令
直接执行命令并返回结果
redc exec [caseid] whoami
进入交互式命令
redc exec -t [caseid] bash
复制文件到服务器
redc cp test.txt [caseid]:/root/
下载文件到本地
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",
]
}
}
设计规划
- 先创建新项目
- 指定项目下要创建场景会从场景库复制一份场景文件夹到项目文件夹下
- 不同项目下创建同一场景互不干扰
- 同一项目下创建同一场景互不干扰
- 多用户操作互不干扰(本地有做鉴权,但这个实际上要在平台上去做)
- 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)
- 场景1 (./project1/[uuid1])
- 项目2 (./project2)
- 场景1 (./project2/[uuid1])
- main.tf
- version.tf
- output.tf
- 场景2 (./project2/[uuid2])
- ...
- 项目状态文件 (project.ini)
- 场景1 (./project2/[uuid1])
- 项目3 (./project3)
- ...




![redc stop [caseid]](/admin/redc/media/branch/master/img/image7.png)

![redc exec [caseid] whoami](/admin/redc/media/branch/master/img/image3.png)
![redc exec -t [caseid] bash](/admin/redc/media/branch/master/img/image4.png)
![redc cp test.txt [caseid]:/root/](/admin/redc/media/branch/master/img/image5.png)
![redc cp [caseid]:/root/test.txt ./](/admin/redc/media/branch/master/img/image6.png)