atlas-crew/Crucible

GitHub: atlas-crew/Crucible

Crucible 是一款开源的实时攻击模拟与合规评估引擎,通过内置或自定义场景编排为企业提供直观的安全验证与量化打分。

Stars: 1 | Forks: 0

Crucible — Open-source attack simulation and compliance assessment engine

# 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安全, 业务逻辑漏洞, 依赖分析, 反取证, 可视化编辑器, 场景编辑, 安全态势评估, 安全插件, 安全测试, 安全评估, 实时模拟, 开源, 攻击性安全, 攻击模拟, 自动化攻击, 蓝队分析, 请求拦截, 驱动签名利用