用于红队基础设施和网络靶场的画布。组合拓扑,导出可运行的 Terraform 和 Ansible,并自行部署。你的云凭证永远不会离开你的机器。

一个 Web 画布,你可以在其中以拓扑形式构建基础设施,然后导出一个完整、可运行的工作目录,包含 Terraform 和 Ansible。你在自己的机器上运行它。redStackPRO 从不持有你的云凭证。
[!IMPORTANT] redStackPRO 处于预发布(beta)阶段。 schema 和功能仍在变动。 GCP 和 AWS 已通过端到端测试;Azure、Proxmox 和 ESXi 在路线图中。 请预期会有粗糙之处,如需稳定性请固定到已发布版本。
遇到粗糙之处,或有反馈? 请在 Issues 提交 issue。如果是 部署问题,请附上运行所写的已脱敏
logs/deploy-*.log(它记录了版本、 provider 以及停止位置,并已移除机密),以便快速分析。你的 报告将塑造发布版本。
redStackPRO 将攻击基础设施和目标靶场放在同一画布上。两种
画布模式是 Offense(攻击基础设施)和 Defense(防御性 AD 靶场);
导出会相应地将其交接文件命名为 OFFENSE-BRIEFING.md 或 DEFENSE-BRIEFING.md。
分离地平线 C2,攻击基础设施:两个不共享命运的前门, Apache 前置 Sliver,Nginx 前置 Mythic,每个重定向器位于各自对等的 网络,teamserver、collector 和操作员位于跳板机之后。

多操作员,单一栈。 攻击基础设施跳板机可以指定一个
operators 列表(handle 加角色),每个操作员都会获得一个 Guacamole 门户登录,
使用共享的实验密码。将跳板机的 access_mode 设置为 wireguard 或
openvpn(默认是公共门户),每个操作员还会在 apply 时在跳板机上生成个人
VPN 凭证:密钥永远不会离开该机器
或进入导出,只有客户端配置文件会。门户登录目前
共享同一个实验密码,因此每个操作员的隔离来自每个操作员
自己的 VPN 凭证,而不是门户登录;单独的门户密码在
路线图中。在 VPN 访问模式下,门户对互联网关闭并移到
隧道之后,而 SSH 保持开放,以便管理员可以继续部署和管理
该机器。在运行中的跳板机上使用
sudo rsp-operator add <handle> 添加或移除队友。参见
wiki Deploying a Range。
Harbor,一个目标靶场:一个小型企业林,一个根域和一个子域通过 父子信任连接,具有从被钓鱼的工作站到该林的普通路径。

GOAD,完整实验:两个林中的三个域,五台机器及其信任, 书面解决方案所遵循的参考靶场。

[!IMPORTANT] 导出即边界。 画布生成文件;你在自己的凭证下运行它们。 redStackPRO 从不部署任何东西,也从不持有机密。
[!CAUTION] 仅限授权使用。 redStackPRO 构建攻击性基础设施和 故意易受攻击的靶场。仅在你拥有或 明确授权测试的实验环境中使用它,切勿针对你没有书面 许可的系统使用。
预发布,拓扑 schema 仍在变动。流水线本身可以端到端 工作:拓扑编译为 Terraform 和 Ansible,导出即可部署。
| Provider | 状态 |
|---|---|
| GCP、AWS | 已支持并端到端测试,适用于目标靶场和攻击基础设施。 |
| Azure、Proxmox、ESXi | 在路线图中,尚未支持。 |
整个画布在一个容器中,API 和 Web 应用在一个端口上:
docker compose up # builds from this repo, http://127.0.0.1:8000
或者拉取已发布的镜像,而不是构建它:
docker run -p 8000:8000 -v redstackpro-data:/data \
ghcr.io/devzero-security/redstackpro:0.9.0
画布在容器内监听 8000。要在不同的主机
端口上提供服务,请更改映射的左半部分(-p 8787:8000),或为 compose 设置
REDSTACKPRO_PORT(REDSTACKPRO_PORT=8787 docker compose up)。
Compose 还带有一个可选的 Postgres 后端,用于共享部署:
REDSTACKPRO_DATABASE_URL=postgresql+psycopg://redstackpro:redstackpro@db:5432/redstackpro \
docker compose --profile postgres up
该镜像仅是组合层。它不携带 Terraform 或 Ansible, 也从不持有你的云凭证:你从自己的 机器运行它产生的导出,完全如下面的从源码流程所述。
Python 3.11 或更新版本,以及用于画布的 Node 24。
git clone <this repo> && cd redStackPRO
python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
画布是两个进程,API 和 Web 应用:
redstackpro serve # http://127.0.0.1:8000
cd frontend && npm install && npm run dev
redstackpro serve --port 8787 将 API 移到不同的端口。使用
REDSTACKPRO_API=http://127.0.0.1:8787 将画布开发服务器指向它。
打开它,使用 Load blueprint(按钮或模式面板)打开一个 随附的起点,在工具栏 provider 选择器中选择你的云(GCP 或 AWS),打开 Export 标签页(它会随操作编译),然后 Download。你会得到一个如下所述的工作目录的 zip。
或者完全跳过画布,从命令行编译一个随附的蓝图,相同的编译器,相同的输出:
redstackpro compile frontend/public/goad/goad-light.json -o export
命令行默认为 GCP。对于 AWS,传入 --provider aws。
这会写出大约 200 个文件:用于云的 Terraform,用于
机器上发生的一切的 Ansible,一个 deploy.sh,以及一个 DEFENSE-BRIEFING.md,告诉你
凭证以及在哪里植入了什么。goad-light 是一个双域 Active
Directory 靶场:sevenkingdoms 及其子域 north,一个林中的父子信任,
两个域控制器和一个成员服务器,外加一台跳板机。
[!IMPORTANT] 部署前有两件事。 你的云身份需要权限来 创建导出所构建的资源(VPC 或网络、子网、安全 组或防火墙规则、实例、弹性或静态 IP),并且你的机器 需要
terraform、ssh、tar和 Python 3.8 或更新版本。redStackPRO 生成 代码,但不为你安装这些;Ansible 会在 跳板机上自行安装。不熟悉 AWS CLI 或 gcloud?针对你所选目标的快速设置:
AWS
aws configure aws sts get-caller-identity将
AmazonEC2FullAccess托管策略附加到你 配置的 IAM 用户或角色。GCP
gcloud auth login gcloud auth application-default login gcloud config set project <project-id> gcloud services enable compute.googleapis.com --project <project-id>在你的项目上为你的账户授予
roles/compute.admin。完整的权限表、安装链接以及 GCP vCPU 配额说明 (
CPUS_ALL_REGIONS,每个项目默认 32)在 wiki Cloud Prerequisites 中。 完整清单参见 Getting Started。
要部署它,填写 export/deploy.tfvars(在导出根目录)并运行:
cd export && bash deploy.sh
deploy.sh 在 apply 时将 deploy.tfvars 复制到 terraform/terraform.tfvars
,如果 deploy.tfvars 缺失则中止,因此请编辑根文件,而不是
terraform/ 下的那个。
在 Windows 上,改为运行 .\deploy.ps1:在 PowerShell 提示符下运行 bash deploy.sh
会启动 WSL,一个具有不同凭证的不同文件系统。详情参见 wiki
Deploying a Range。
deploy.sh 应用 Terraform,然后从靶场自己的
跳板机进行配置,因为受管主机位于其他任何东西都无法
到达的私有子网上。你的云凭证始终留在你的机器上。
每次运行都会在导出中向
logs/deploy-<timestamp>.log 写入一个带时间戳、已脱敏的日志。如果部署失败或靶场
启动错误,请将最新的一个附加到 GitHub issue;deploy.sh 在
出错时会打印其路径和链接。
管理和拆除。 导出还附带生命周期脚本 manage.sh
(Windows 上为 manage.ps1),用于运行中的靶场。它们接受 status、
start、stop 和 teardown:stop 暂停计费而不销毁
靶场,teardown 销毁它。
./manage.sh status
./manage.sh start
./manage.sh stop
./manage.sh teardown
AWS 配额是按区域的,编译不会检查它们。在 大型或并发部署之前对其进行规划,以免 apply 中途失败并 留下正在运行和计费的基础设施。
t3.large 和 t3.medium(各 2 vCPU),一个完整的 AD 靶场(GOAD 加一个
SIEM)可能超过默认值。在大型部署前检查并提高它。所有这些都是按区域的。同时运行多个靶场?给每个一个不同的 prefix,以便其主机名保持清晰;少数账户全局名称(密钥对 和自动停止角色)会按部署自动添加后缀,因此靶场在一个 账户中永远不会冲突。完整的配额表、增加命令以及部署前清单 在 wiki 中: Providers 和 Deploying a Range。
画布所做的一切都可以无头使用,因此代理可以操作
redStackPRO 而无需人工点击。拓扑是针对
已发布 schema 的纯 JSON(src/redstackpro/schema/topology/,也在 /api/v1/registry/schema 提供),
registry 端点报告节点类型、provider 和角色的词汇表,
画布调用的 validate 和 compile 步骤是相同的 REST 端点。
API 在 /docs 和 /openapi.json 中有文档,模型可以将其作为
工具读取。