atlas-crew/Crucible
GitHub: atlas-crew/Crucible
Crucible 是一款开源的实时攻击模拟与合规评估引擎,通过内置或自定义场景编排为企业提供直观的安全验证与量化打分。
Stars: 1 | Forks: 0
# Crucible
下一代安全测试平台。Crucible 提供了包含 80 多种攻击场景的目录、可视化场景编辑器、实时模拟引擎以及通过/失败评估打分——所有这些都通过由 WebSocket 流提供支持的网络用户界面进行编排。
## 主要特性
- **场景目录** — 80 多个预构建的安全场景,涵盖 OWASP API Top 10、Web 攻击、业务逻辑漏洞、合规性检查等
- **可视化编辑器** — 使用基于表单的编辑器或原始 JSON 创建和修改场景,支持实时验证
- **实时模拟** — 通过实时时间线观看逐步执行过程,提供暂停/恢复/取消控制以及变量提取
- **评估打分** — 在评估模式下运行场景,获得包含百分比得分的通过/失败判定
- **DAG 执行** — 步骤按依赖顺序执行,支持条件分支、重试和模板变量
## 架构
```
crucible/
├── packages/crucible # @atlascrew/crucible — unified server package (npm + Docker)
├── packages/catalog # @crucible/catalog — scenario schemas, validation, and loader
├── apps/web-client # Next.js 16 web UI (scenarios, assessments, simulations)
├── apps/demo-dashboard # Express + WebSocket simulation orchestrator
├── apps/client # @atlascrew/crucible-client — typed API client library
└── apps/cli # @atlascrew/crucible-cli — lightweight remote CLI
```
| 包 | 技术栈 | 描述 |
|---------|-------|-------------|
| `@atlascrew/crucible` | Express, Next.js, SQLite | 统一服务器 — 将 UI、API、引擎和场景目录打包到单个可安装程序中 |
| `@atlascrew/crucible-client` | TypeScript, native fetch | Crucible REST 和 WebSocket API 的类型化 API 客户端 — 零运行时依赖 |
| `@atlascrew/crucible-cli` | TypeScript, tsup | 轻量级 CLI,用于与运行中的 Crucible 服务器进行交互 |
| `@crucible/catalog` | TypeScript, Zod | 场景类型定义、JSON 模式验证、运行手册解析器 |
| `web-client` | Next.js 16, React 19, Tailwind 4, Radix UI | 用于浏览和编辑场景的主要 Web 界面 |
| `demo-dashboard` | Express, WebSocket | 带有实时仪表板的实时场景执行引擎 |
## 安装
### 服务器 (npm)
```
npm install -g @atlascrew/crucible
crucible start
```
打开 **http://localhost:3000**。UI、REST API 和 WebSocket 端点均由单个进程提供服务。
### 服务器 (Docker)
```
docker run -p 3000:3000 nickcrew/crucible:latest
```
### API 客户端库
```
npm install @atlascrew/crucible-client
```
```
import { CrucibleClient } from '@atlascrew/crucible-client';
const client = new CrucibleClient({ baseUrl: 'http://localhost:3000' });
const scenarios = await client.scenarios.list();
const { executionId } = await client.assessments.start('my-scenario');
const execution = await client.executions.get(executionId);
```
零运行时依赖 — 使用原生的 `fetch` 和 `WebSocket` (Node 22+)。
### 远程 CLI
```
npm install -g @atlascrew/crucible-cli
```
```
crucible-cli health
crucible-cli scenarios
crucible-cli assess my-scenario --fail-below 90
crucible-cli executions --status running,completed
crucible-cli reports abc123 --download pdf -o report.pdf
```
通过 HTTP 与运行中的 Crucible 服务器通信。设置 `CRUCIBLE_URL` 或使用 `--server
`。
### 环境变量
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `PORT` | `3000` | 服务器端口 |
| `CRUCIBLE_DB_PATH` | `./data/crucible.db` | SQLite 数据库位置 |
| `CRUCIBLE_REPORTS_DIR` | `./data/reports` | 评估报告输出目录 |
| `CRUCIBLE_TARGET_URL` | — | 被测系统的 Base URL |
| `CRUCIBLE_SCENARIOS_DIR` | *(内置目录)* | 自定义场景目录的路径 |
| `CRUCIBLE_MAX_CONCURRENCY` | `3` | 最大并发场景执行数 |
## 开发
### 前置条件
- **Node.js** 22+
- **pnpm** 9.15.4 (通过 `corepack enable` 启用)
### 从源码运行
```
git clone https://github.com/atlas-crew/Crucible.git
cd Crucible
pnpm install
pnpm build
```
在单独的终端中启动后端和前端:
```
# 后端 — 场景引擎 + REST API + WebSocket (端口 3001)
pnpm --filter @crucible/demo-dashboard dev
# 前端 — Web UI (端口 3000)
pnpm --filter web-client dev
```
打开 **http://localhost:3000** 并验证标题中是否出现 **CONNECTED** 指示器。
## 文档
### 用户指南
| 指南 | 描述 |
|-------|-------------|
| [入门指南](docs/user-guides/getting-started.md) | 安装、配置并启动 Crucible |
| [运行场景](docs/user-guides/running-scenarios.md) | 浏览目录、运行模拟并查看评估 |
| [编辑场景](docs/user-guides/editing-scenarios.md) | 创建和修改场景定义 |
### 架构
| 文档 | 描述 |
|----------|-------------|
| [系统概述](docs/architecture/system-overview.md) | 组件图、数据流图和通信协议 |
| [场景引擎](docs/architecture/scenario-engine.md) | DAG 调度、步骤执行、断言和 WebSocket 事件 |
### 开发
| 文档 | 描述 |
|----------|-------------|
| [测试指南](docs/development/testing/testing-guide.md) | 测试基础设施、约定和覆盖率明细 |
有关所有可用文档,请参阅完整的 [文档导航器](docs/NAVIGATOR.md)。
## CI/CD
### 拉取请求检查
每一个提交到 `main` 的 PR 都会通过 [GitHub Actions](.github/workflows/ci.yml) 运行构建、类型检查和测试。
### 包和 Docker 发布
推送 semver 标签会触发 npm 和 Docker 发布:
```
git tag v0.3.0
git push origin v0.3.0
```
发布工作流会对照 npm 检查每个 `@atlascrew/*` 包,并仅发布具有新版本的包:
| 包 | npm | 版本控制 |
|---------|-----|-----------|
| `@atlascrew/crucible` | [npmjs.com](https://www.npmjs.com/package/@atlascrew/crucible) | 独立控制 |
| `@atlascrew/crucible-client` | [npmjs.com](https://www.npmjs.com/package/@atlascrew/crucible-client) | 独立控制 |
| `@atlascrew/crucible-cli` | [npmjs.com](https://www.npmjs.com/package/@atlascrew/crucible-cli) | 独立控制 |
Docker 镜像 (`nickcrew/crucible`) 使用来自 git 标签的版本进行标记(例如 `0.3.0`、`0.3`、`latest`)。发布工作流需要 `NPM_TOKEN`、`DOCKERHUB_USERNAME` 和 `DOCKERHUB_TOKEN` 仓库密钥。
## 项目命令
| 命令 | 描述 |
|---------|-------------|
| `pnpm build` | 构建所有包(由 Nx 编排) |
| `pnpm build:release` | 构建所有可发布的 `@atlascrew/*` 包 |
| `pnpm test` | 运行所有测试套件 |
| `pnpm type-check` | 跨所有包进行 TypeScript 类型检查 |
| `pnpm lint` | 对所有包进行 Lint 检查 |标签:API安全, CISA项目, DAG执行, Express, GNU通用公共许可证, JSON输出, MITM代理, Node.js, REST API, SQLite, TypeScript, WebSocket, Web安全, 业务逻辑漏洞, 依赖分析, 反取证, 可视化编辑器, 场景编辑, 安全态势评估, 安全插件, 安全测试, 安全评估, 实时模拟, 开源, 攻击性安全, 攻击模拟, 自动化攻击, 蓝队分析, 请求拦截, 驱动签名利用