VitStudio/scandeck

GitHub: VitStudio/scandeck

一个自托管的 Web 安全扫描器,融合 SAST 与 DAST 并提供完整的风险分类与合规映射,帮助团队在开发生命周期中高效发现与修复安全问题。

Stars: 1 | Forks: 0

# ScandDeck — 网络安全扫描器 一个用于 PHP/HTML/CSS/JS 代码库和实时 URL 的自托管、基于 Web 的安全扫描器。 ## 功能特性 - **SAST**:PHP 污点分析(XSS、SQLi、CMDi、SSRF 等) - **SAST**:基于 JavaScript DOM 的 XSS 检测 - **SAST**:敏感信息检测(AWS 密钥、GitHub 令牌、PEM 密钥等) - **SAST**:配置安全审查 - **SAST**:依赖漏洞审计 - **DAST**:爬虫 + 头部审计、CSRF 检测、反射探测 - 分类工作流程:抑制、分配、差异扫描 - 合规映射:OWASP Top 10、ISO 27001、SOC 2 - CVSS v3.1 评分 - 导出 JSON、HTML、CSV、SARIF 和 Markdown 报告 - 自定义 YAML 规则 - CLI 用于 CI/CD 集成 ## 系统要求 - Node.js 18+ - PHP 8.0+(仅用于仪表盘 Web 服务器 — 扫描无需 PHP) - npm - Git ## 安装与运行 ### Linux / macOS(推荐) ``` # 克隆仓库 git clone https://github.com/VitStudio/scandeck cd scandeck # 运行交互式安装程序(创建 config.json 并安装引擎依赖) bash install.sh # 启动应用程序 bash start.sh ``` 启动后: - 仪表盘:`http://localhost:8080` - 引擎 API:`http://localhost:4000/api/scans` 停止方法: - 在运行 `start.sh` 的终端中按下 `Ctrl + C`。 ### Windows ScandDeck 脚本基于 Bash(`install.sh`、`start.sh`),因此请使用以下方式之一: #### 选项 A:Git Bash 或 WSL(在 Windows 上推荐) 运行与 Linux/macOS 相同的命令: ``` git clone https://github.com/VitStudio/scandeck cd scandeck bash install.sh bash start.sh ``` #### 选项 B:原生 PowerShell(手动安装) 1. 克隆并打开项目: ``` git clone https://github.com/VitStudio/scandeck cd scandeck ``` 2. 安装引擎依赖: ``` npm install --prefix .\engine ``` 3. 在仓库根目录创建 `config.json`(如果不存在): ``` @' { "engine_port": 4000, "dashboard_port": 8080, "db_path": "./engine/db/scandeck.sqlite", "scan_upload_dir": "./uploads", "deployment_mode": "on-prem", "max_scan_depth": 5, "request_delay_ms": 500, "max_crawl_pages": 100 } '@ | Set-Content -Path .\config.json -Encoding UTF8 ``` 4. 启动引擎(终端 1): ``` node .\engine\server.js ``` 5. 启动仪表盘(终端 2): ``` php -S 0.0.0.0:8080 -t .\dashboard\ ``` 启动后: - 仪表盘:`http://localhost:8080` - 引擎 API:`http://localhost:4000/api/scans` 停止方法: - 在每个终端窗口中按下 `Ctrl + C`。 ## 项目结构 ``` scandeck/ ├── engine/ # Node.js scan engine (API + CLI) │ ├── cli.js # CLI entry point │ ├── server.js # Express API server │ ├── db/ # SQLite database │ ├── scanner/ │ │ ├── rules/ │ │ │ ├── builtin/ # Built-in YAML detection rules │ │ │ └── custom/ # Drop custom YAML rules here │ │ └── ... │ └── ... ├── dashboard/ # PHP/HTML front-end dashboard ├── docs/ │ ├── ci-github-actions.yml # GitHub Actions example workflow │ └── ci-gitlab.yml # GitLab CI example configuration ├── uploads/ # Scan upload staging directory ├── config.json # Runtime configuration (created by install.sh) ├── install.sh # One-step installer └── start.sh # Start engine + dashboard ``` ## CI 集成 复制并调整 `docs/` 中的现成示例: | 平台 | 文件 | |------------|-------------------------------| | GitHub Actions | `docs/ci-github-actions.yml` | | GitLab CI | `docs/ci-gitlab.yml` | 两个示例均运行 `node engine/cli.js scan --path . --fail-on HIGH --format json` 并将 JSON 报告作为流水线工件上传。当检测到 HIGH 严重性问题时,作业会失败(退出代码 1)。 ## 配置 `config.json` 由 `install.sh` 自动创建。编辑它以更改端口、路径或部署模式。 ``` { "engine_port": 4000, "dashboard_port": 8080, "db_path": "./engine/db/scandeck.sqlite", "scan_upload_dir": "./uploads", "deployment_mode": "on-prem", "max_scan_depth": 5, "request_delay_ms": 500, "max_crawl_pages": 100 } ``` ## CLI 用法 ``` # 扫描本地路径,发现 HIGH 级别问题时失败,生成 JSON 报告 node engine/cli.js scan --path ./myapp --fail-on HIGH --format json --output report.json # 扫描活动 URL node engine/cli.js scan --url https://example.com --format html --output report.html ``` ## API 参考 | 方法 | 端点 | 描述 | |------|----------------------------------------------|---------------------------------------| | POST | `/api/scan` | 开始新扫描 | | GET | `/api/scan/:id` | 获取扫描状态/详情 | | GET | `/api/scans` | 列出所有扫描 | | DELETE | `/api/scans/:id` | 删除扫描及相关发现/分类 | | GET | `/api/results/:scanId` | 获取扫描的发现结果 | | GET | `/api/finding/:id` | 按 ID 获取单个发现 | | POST | `/api/triage/suppress` | 抑制发现(需要 `finding_id`) | | POST | `/api/triage/assign` | 分配发现(需要 `finding_id` 和 `owner`) | | GET | `/api/diff?a=&b=` | 比较两个扫描(`a` = 从,`b` = 到) | | GET | `/api/rules` | 列出已加载规则 | | POST | `/api/rules` | 从 YAML 创建自定义规则 | | PUT | `/api/rules/:id` | 更新自定义规则 | | DELETE | `/api/rules/:id` | 删除自定义规则 | | GET | `/api/report/:scanId/json` | 下载 JSON 报告 | | GET | `/api/report/:scanId/html` | 下载 HTML 报告 | | GET | `/api/report/:scanId/csv` | 下载 CSV 报告 | | GET | `/api/report/:scanId/md` | 下载 Markdown 报告 | | GET | `/api/report/:scanId/sarif` | 下载 SARIF 报告 | 参数命名说明: - `/api/scan/:id` 和 `/api/scans/:id` 中的 `:id` 指扫描 ID。 - 结果/报告端点中的 `:scanId` 也指扫描 ID。 - `/api/finding/:id` 中的 `:id` 指发现 ID,`/api/rules/:id` 中的 `:id` 指规则 ID。 分类请求格式(JSON 主体): ``` # 抑制发现 curl -X POST http://localhost:4000/api/triage/suppress \ -H "Content-Type: application/json" \ -d '{"finding_id":"","justification":"accepted risk","suppressed_by":"security-team"}' # 分配发现 curl -X POST http://localhost:4000/api/triage/assign \ -H "Content-Type: application/json" \ -d '{"finding_id":"","owner":"alice"}' ``` ## 自定义规则 将 `.yml` 规则文件放置在 `engine/scanner/rules/custom/` 中。规则遵循与内置规则(位于 `engine/scanner/rules/builtin/`)相同的架构。
标签:API密钥, AWS密钥, BeEF, CLI, CMS安全, Crawler, CSRF检测, CSS, CSV报告, CVSS, CVSS v3.1, DAST, DInvoke, Git, GitHub令牌, GNU通用公共许可证, GPT, HTML, HTML报告, IPv6, ISO 27001, JavaScript, JSON报告, LNA, Markdown报告, MITM代理, Node.js, npm, OpenVAS, OWASP Top 10, PEM密钥, PHP, PHP 8, PowerShell, Redis利用, SARIF, SAST, SOC 2, SSRF, Triage工作流, Web安全扫描器, WiFi技术, YAML规则, 依赖审计, 分配, 动态应用安全测试, 反射探测, 反序列化, 合规映射, 命令注入, 头部审计, 差异扫描, 恶意软件分析, 抑制, 数据可视化, 源码审计, 漏洞管理, 漏洞评分, 爬虫, 盲注攻击, 秘密检测, 自动化分析, 自定义脚本, 自定义规则, 自托管, 跨站脚本, 配置安全, 静态应用安全测试