Webba-Creative-Technologies/vice
GitHub: Webba-Creative-Technologies/vice
一款集黑盒远程扫描与白盒本地代码审计于一体的 Web 应用安全审计 CLI 工具,可集成到 CI/CD 管道实现自动化安全把关。
Stars: 334 | Forks: 17
██╗ ██╗██╗ ██████╗███████╗
██║ ██║██║██╔════╝██╔════╝
██║ ██║██║██║ █████╗
╚██╗ ██╔╝██║██║ ██╔══╝
╚████╔╝ ██║╚██████╗███████╗
╚═══╝ ╚═╝ ╚═════╝╚══════╝
针对 Web 应用程序的黑盒与白盒安全审计工具。
## 什么是 VICE? VICE 是一款安全审计 CLI 工具,用于查找 Web 应用程序中的漏洞。它具有两种模式: **远程扫描** 需要提供一个 URL。它会使用真实的浏览器爬取您的网站,从 JS 包中提取机密信息,测试您的登录是否容易受到暴力破解和 SQL 注入攻击,扫描您的 VPS 端口,检查您的 Supabase RLS 等。就像攻击者所做的那样,但针对的是您自己的系统。 **本地审计** 需要指向您的项目目录。它会读取您的源代码,检查您的 `.env` 文件,运行 npm audit,分析您的 Supabase 迁移中是否缺少 RLS,在您的代码中查找 SQL 注入和 XSS,并明确告诉您需要修复什么。 由 [Webba Creative Technologies](https://webba-creative.com) 构建。
## 快速开始 ``` # 全局安装 npm install -g vice-security # Interactive mode vice # 或直接运行 vice scan # Remote scan (black-box) vice audit . # Local audit (white-box) vice audit . --ci # CI mode (exit code 0 or 1) vice history # View saved reports ```
## GitHub Action VICE 作为一个 GitHub Action 发布,它会在每次 pull request 和 push 时扫描您的代码,将扫描结果作为 PR 评论发布,并在您的仓库中维护一个安全徽章。 ### 快速入门 将 `.github/workflows/security.yml` 添加到您的仓库中: ``` name: Security on: push: branches: [main] pull_request: permissions: contents: write pull-requests: write security-events: write jobs: vice: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: Webba-Creative-Technologies/vice@v3 ``` 就是这样。该 Action 会安装 VICE,审计您的代码,在每次 PR 时附上带有分数和扫描结果的评论,并更新默认分支上的 `.github/vice-badge.json` 文件,以便您可以在 README 中嵌入实时的安全徽章。 ### 它的作用 - **在 pull request 上**:发布一条包含安全分数、严重程度统计以及按严重程度分组的顶级扫描结果的评论。此评论会在每次提交时更新,不会产生垃圾信息。 - **在推送到默认分支时**:使用当前分数刷新 `.github/vice-badge.json`,使您的 README 徽章保持最新。 - **SARIF 集成**:将扫描结果上传到 GitHub Code Scanning,以便它们显示在“Security”选项卡以及 pull request 更改行的内联注释中。 - **分数把关**:如果分数低于 `min-score`(默认为 `70`),则使工作流失败。在倒退合并之前将其捕获。 - **与基准分支的差异**:当基准分支上已存在徽章时,PR 评论将显示分数差异(例如 `87 (-5 vs base)`)。 ### 权限 该工作流需要三项权限: - `contents: write` — 用于在 push 事件时提交徽章文件 - `pull-requests: write` — 用于发布和更新 PR 评论 - `security-events: write` — 用于将 SARIF 扫描结果上传到 GitHub Code Scanning(Security 选项卡) ### 输入 | 输入 | 描述 | 默认值 | |---|---|---| | `path` | 要审计的项目路径 | `.` | | `min-score` | 通过所需的最低分数 (0-100) | `70` | | `fail-on-score` | 如果分数低于 `min-score` 则使工作流失败 | `true` | | `comment-pr` | 在 pull request 上发表评论 | `true` | | `update-badge` | 在 push 时更新安全徽章文件 | `true` | | `upload-sarif` | 将 SARIF 结果上传到 GitHub Code Scanning | `true` | | `badge-path` | 徽章 JSON 文件的路径 | `.github/vice-badge.json` | | `github-token` | 用于发表评论和提交徽章的 Token | `${{ github.token }}` | ### 输出 | 输出 | 描述 | |---|---| | `score` | 安全分数,从 0 到 100 | | `grade` | 评级,从 A 到 F | | `total-findings` | 发现结果总数 | | `critical-findings` | 严重(Critical)级别的发现数量 | | `high-findings` | 高危(High)级别的发现数量 | | `report-path` | JSON 报告文件的绝对路径 | 如果您为步骤分配了 `id`,则可以在后续步骤中通过 `${{ steps.
## 远程扫描(黑盒) 为 VICE 提供一个 URL,它将使用无头浏览器从外部审计您的网站。它会捕获每个 JS 文件、每个网络请求和每个 cookie,然后针对它们运行 15 个安全模块。
## 本地审计(白盒) 将 VICE 指向您的项目目录。它会读取您的源代码并为您提供具体的修复建议。 ``` vice audit . vice audit /path/to/project ``` ### 模块 | 模块 | 检查内容 | |---|---| | **代码机密** | 源文件中硬编码的 API 密钥和令牌,附带行号和修复建议 | | **环境文件** | `.gitignore` 中的 `.env`、`.env.example` 中的真实机密、暴露的敏感配置文件 | | **依赖项** | 针对 CVE 的 `npm audit`,具有已知漏洞的过时软件包 | | **Supabase RLS** | 分析 SQL 迁移中是否缺少 `ENABLE ROW LEVEL SECURITY`、空策略、不安全的授权、没有身份验证检查的 SECURITY DEFINER | | **Auth 与中间件** | 速率限制的存在情况、CORS 通配符、CSRF 保护、会话配置、JWT 过期时间、硬编码密码 | | **代码漏洞** | SQL 注入(查询中的模板字符串)、XSS(`v-html`、`dangerouslySetInnerHTML`、`innerHTML`)、`eval()`、命令注入、开放重定向、弱加密、ReDoS | | **Headers 配置** | Nuxt、Next.js、Vercel、Netlify、Express 配置中的 CSP 和 HSTS 配置 |
## 评分 每次扫描都会产生一个 0 到 100 之间的安全分数,评级从 A 到 F。
## HTML 报告 每次扫描都可以导出为整洁的 HTML 报告,以便与您的团队分享。
## 配置 ### CLI 选项 ``` vice scan # Interactive remote scan vice audit . # Audit current directory vice audit /path/to/project # Audit specific project vice audit . --ci # CI mode, exit 1 if score < 70 vice audit . --ci --min-score 80 # Custom threshold vice history # Browse saved reports ``` ### 配置文件(可选) 在您的项目根目录中创建 `vice.config.js`: ``` export default { url: 'https://your-site.com', ignore: ['Supabase Anon Key', 'Firebase API Key'], ci: { minScore: 70, failOnCritical: true, }, supabaseMigrations: './supabase/migrations', } ``` ### `.viceignore`(可选) 在项目根目录中创建一个 `.viceignore` 文件,以在本地审计中排除文件或目录。其工作方式类似于 `.gitignore`: ``` # 忽略 translation files **/i18n/** **/locales/** # 忽略特定文件 src/config/ui-labels.ts # 按 pattern 忽略 *.locale.* ``` 被排除的文件将被所有本地审计模块(机密、身份验证、代码漏洞等)跳过。
## 面向开发者 ### 项目结构 ``` vice/ ├── bin/ │ └── vice.js # CLI entry point ├── src/ │ ├── core/ │ │ ├── findings.js # Shared findings store │ │ ├── score.js # A-F score calculator │ │ └── reporter/ │ │ ├── console.js # Terminal output │ │ ├── json.js # JSON export │ │ └── html.js # HTML report │ ├── local/ # White-box modules │ │ ├── index.js # Module orchestrator │ │ ├── secrets.js # Source code secrets │ │ ├── env.js # .env audit │ │ ├── dependencies.js # npm audit │ │ ├── supabase-rls.js # RLS in migrations │ │ ├── auth.js # Auth & middleware │ │ ├── code-vulnerabilities.js # SQLi, XSS, eval │ │ └── headers-config.js # CSP/HSTS config │ └── utils/ │ ├── fetch.js # HTTP with timeout │ └── patterns.js # Shared regex patterns ├── scan.js # Remote scan engine (15 modules) ├── scans/ # Saved reports └── package.json ``` ### 添加本地审计模块 1. 创建 `src/local/your-module.js`: ``` import { addFinding } from '../core/findings.js'; export async function auditYourModule(projectPath, spinner) { spinner.text = 'Running your check...'; // Your logic here addFinding( 'HIGH', // CRITICAL, HIGH, MEDIUM, LOW, INFO 'Module Name', // Shown as section header in report 'Short title', // One-line summary 'Detailed info', // File paths, values, context 'How to fix this' // Concrete fix with code examples ); } ``` 2. 在 `src/local/index.js` 中注册它: ``` import { auditYourModule } from './your-module.js'; // Add to LOCAL_MODULES array: { name: 'Your module description', value: 'yourmod', fn: auditYourModule }, ``` ### 添加远程扫描模块 在 `scan.js` 中添加您的模块函数,并使用微调器将其注册到 `main()` 函数和模块选择菜单中。 ### 贡献 有关指南,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。简而言之:Fork、创建分支、提交 PR。保持较低的误报率,并始终提供具体的修复建议。
## 更新日志 ### v3.0 - 两种模式:远程扫描(黑盒)和本地审计(白盒) - 15 个远程模块,7 个本地模块 - 首次启动时的法律免责声明 - 设计简洁的 HTML 报告 - 带有 JSON/HTML 导出的扫描历史记录 - 带有退出代码的 CI 模 - A-F 评分系统 - npm 包 (`vice-security`) ### v2.0 - 用于爬取的 Puppeteer 无头浏览器 - 技术栈检测和指纹识别 - 子域名扫描、DNS/电子邮件安全 - 存储桶审计、WebSocket 测试 - 评分系统和 HTML 报告 ### v1.0 - 初始发布版本 - 使用 fetch 的基于 URL 的扫描 - 机密信息、Headers、Supabase RLS、VPS 端口扫描 - 登录表单上的 SQL 注入测试
## 许可证 MIT。请参阅 [LICENSE](LICENSE)。 由 [Webba Creative Technologies](https://webba-creative.com) 构建。 此工具仅用于授权的安全测试。您需对如何使用它承担全部责任。请参阅首次启动时显示的法律免责声明。
标签:AppImage, CISA项目, CLI, DOE合作, GNU通用公共许可证, GraphQL安全矩阵, MITM代理, Node.js, NPM包, OSV-Scalibr, RLS, Supabase, Web安全, Web应用防火墙, WiFi技术, XXE攻击, 安全扫描器, 密码管理, 密钥提取, 数据统计, 暗色界面, 白盒测试, 端口扫描, 结构化查询, 网络安全, 自动化安全, 自定义脚本, 蓝队分析, 隐私保护, 黑盒测试