devcristianlopez/manel

GitHub: devcristianlopez/manel

面向开发环境的安全健康监控 CLI,自动扫描本地软件栈并查询已知漏洞,生成安全评分与修复建议。

Stars: 0 | Forks: 0

# Manel — 安全健康监控 CLI Manel 是一款专为开发环境设计的安全 CLI 工具,它在本地扫描已安装的软件(OS、工具、编程语言、数据库),从公开数据源(OSV、NVD、GitHub Advisories)查询已知漏洞,并生成安全评分(0-100)及可操作的建议。 [![Version](https://img.shields.io/badge/version-1.1.0-blue.svg)]() [![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6.svg)]() [![Node.js](https://img.shields.io/badge/Node.js-18+-339933.svg)]() [![License](https://img.shields.io/badge/license-MIT-green.svg)]() ## 快速开始 ``` # 全局安装 npm install -g manel # 或直接运行 npx manel scan # 快速状态检查 manel status ``` ## 安装 ### 前置条件 - **Node.js 18+** — 从 [nodejs.org](https://nodejs.org/) 下载 - **npm** — 包含在 Node.js 中 - **Git** — 用于从源码安装 ``` # 检查版本 node --version # Should show v18.x.x or higher npm --version git --version ``` ### 方法 1:通过 npm 安装(推荐) ``` npm install -g manel ``` ### 方法 2:自动安装脚本 ``` # Clone 代码库 git clone https://github.com/devcristianlopez/manel.git cd manel # 运行 installer bash setup.sh # 或在 development mode 下运行(包含 test tools) bash setup.sh --dev ``` 该安装脚本会: - ✅ 检测你的操作系统 - ✅ 验证/安装 Node.js 18+ - ✅ 安装依赖 - ✅ 编译 CLI - ✅ 全局链接 `manel` 命令 - ✅ 验证安装结果 ### 方法 3:手动安装 ``` git clone https://github.com/devcristianlopez/manel.git cd manel npm install npm run build:cli npm link ``` ### 方法 4:npx(免安装) ``` npx manel scan ``` ### 可用的 npm 脚本 ``` npm run install:global # Compile and install globally npm run uninstall:global # Uninstall globally npm run setup # Run bash setup.sh npm run uninstall # Run bash uninstall.sh ``` ### 验证安装 ``` manel --version manel status ``` ### 支持的操作系统 - ✅ Linux (Ubuntu, Debian, Fedora, Arch) - ✅ macOS - ⚠️ Windows(需手动安装) ## 卸载 ### 方法 1:卸载脚本(推荐) ``` # 如果您在项目目录中 bash uninstall.sh # 或使用项目路径 /path/to/manel/uninstall.sh ``` 脚本选项: ``` bash uninstall.sh --help # Show help bash uninstall.sh --yes # Skip confirmations bash uninstall.sh --all # Also remove installation directory ``` ### 方法 2:npm ``` npm uninstall -g manel ``` ### 方法 3:手动卸载 ``` # 移除全局 link npm unlink -g manel # 或直接移除 executable rm -f $(which manel) ``` ### 卸载后操作 ``` # 刷新 shell cache hash -r ``` ## 命令 | 命令 | 描述 | |---------|-------------| | `manel status` | 快速查看已安装技术的状态 | | `manel scan` | 完整扫描:漏洞 + 基线加固 + 评分 | | `manel vulnerabilities` | 仅扫描漏洞(别名:`vulns`) | | `manel hardening` | 仅执行基线加固检查 (Linux) | | `manel score` | 详细的的安全评分 | | `manel updates` | 检查可用的更新 | | `manel schema` | CLI 自省 JSON(适配 AI) | ### 使用示例 ``` # 快速状态 manel status # Full scan 并输出 JSON manel scan --format json # 仅限 Critical 和 High vulnerabilities manel vulnerabilities --severity CRITICAL,HIGH # Hardening 并输出到文件 manel hardening --output report.txt # 不带颜色的详细评分 manel score --no-color # 检查可用更新 manel updates --format json ``` ## 标准标志 所有命令均支持以下标志: | 标志 | 描述 | |------|-------------| | `-f, --format ` | 输出格式:`table`、`json`、`sarif`、`ndjson` | | `-o, --output ` | 将输出写入文件而非标准输出 | | `-s, --severity ` | 按严重程度过滤(逗号分隔) | | `--fail-on ` | 如果发现的问题 >= 指定严重程度,则以退出代码 1 退出 | | `--no-color` | 禁用 ANSI 彩色输出 | | `-q, --quiet` | 抑制非错误输出 | | `-V, --verbose` | 启用详细输出 | | `--no-interactive` | 禁用交互式提示(适用于 CI/CD) | ### 输出格式 | 格式 | 描述 | 推荐用途 | |--------|-------------|-----------------| | `table` | 带有颜色的格式化表格(默认) | 交互式终端 | | `json` | 格式化打印的 JSON | API、脚本、调试 | | `sarif` | 静态分析结果交换格式 | GitHub Code Scanning、SAST 工具 | | `ndjson` | 换行符分隔的 JSON | 管道、流式处理、批处理 | ## 退出代码 | 代码 | 含义 | |------|---------| | `0` | 成功,未发现问题 | | `1` | 检测到问题(漏洞、基线加固未通过) | | `2` | 内部错误 | | `3` | 无效输入 | ## CI/CD 示例 ### GitHub Actions ``` name: Security Scan on: [push, pull_request] jobs: security: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' - run: npm install -g manel - name: Run security scan run: manel scan --format sarif --output scan-results.sarif --no-interactive - name: Upload SARIF to GitHub uses: github/codeql-action/upload-sarif@v3 if: always() with: sarif_file: scan-results.sarif ``` ### 带有 fail-on 的流水线 ``` - name: Security gate run: manel scan --fail-on high --no-interactive --format json ``` ### 仅扫描漏洞 ``` - name: Check vulnerabilities run: manel vulns --severity CRITICAL,HIGH --format ndjson | jq '.severity' ``` ## 管道示例 ``` # 提取 Critical vulnerabilities manel scan --format json | jq '.vulnerabilities[] | select(.severity == "CRITICAL")' # 按 severity 统计 vulnerabilities manel scan --format json | jq '[.vulnerabilities[].severity] | group_by(.) | map({(.[0]): length}) | add' # 过滤过时技术 manel scan --format json | jq '.technologies[] | select(.updateAvailable == true)' # 发送结果到 logging service manel scan --format ndjson | while read line; do echo "$line" | curl -X POST -d @- https://api.example.com/logs; done # 生成 SARIF report 并上传到 GitHub manel scan --format sarif -o results.sarif # 仅检查评分 manel score --format json | jq '.overall' ``` ## 安全评分 评分基于以下权重进行计算: | 类别 | 权重 | |----------|--------| | 操作系统 | 15% | | 基线加固 | 15% | | 工具 | 10% | | 依赖 | 30% | | 数据库 | 10% | | 严重漏洞 | 20% | ## 可检测的技术 - **编程语言和运行时**:Node.js, Python, Python 3, Java - **包管理器**:npm, Yarn, pnpm, pip, Maven, Gradle - **工具**:Git, Docker, Docker Compose, VS Code - **数据库**:PostgreSQL, MySQL, MariaDB, MongoDB, Redis, SQLite, pgAdmin - **操作系统**:Ubuntu, Debian, Fedora, macOS, Windows ## 自省 Schema `schema` 命令会生成一个描述整个 CLI 接口的 JSON,这对于 AI 工具和文档生成非常有用: ``` manel schema | jq '.commands[] | .name' ``` ## 本地缓存与持久化 Manel 将 API 响应和扫描结果存储在位于 `~/.manel/manel.db` 的本地 SQLite 数据库中: - **版本缓存**(24 小时 TTL)— 在重复运行时,最新版本查询将跳过网络请求 - **漏洞缓存**(24 小时 TTL)— OSV/NVD/GHSA 的结果按 `ecosystem:package:version` 进行缓存,避免触发 API 速率限制 - **扫描历史** — 每次运行 `scan`/`vulnerabilities` 都会持久化检测到的软件、发现的问题和评分,以供审计 首次运行时会查询外部 API;在 24 小时内的后续运行对于缓存数据将不再发起网络请求。可以通过 `MANEL_DB_PATH` 环境变量覆盖数据库的存储位置(适用于测试和 CI 环境)。 ## 开发 ``` # 安装依赖 npm install # 构建 CLI npm run build:cli # 在 development 模式下运行 node bin/manel-cli.js scan # 运行 tests npm test # Type checking npm run lint ``` ## 技术栈 | 层级 | 技术 | |-------|-----------| | CLI 框架 | Commander.js 15 | | 编程语言 | TypeScript 5 | | 运行时 | Node.js 18+ | | 数据库 | SQLite (better-sqlite3) | | 测试 | Vitest | | 外部 API | OSV, NVD, GitHub Security Advisories, npm registry, PyPI, endoflife.date | ## 项目结构 ``` manel/ ├── bin/ │ └── manel-cli.js # CLI entry point ├── src/ │ ├── cli/ # CLI framework │ │ ├── commands/ # Command implementations │ │ ├── output/ # Formatters (table, json, sarif, ndjson) │ │ ├── flags.ts # Shared flags │ │ ├── errors.ts # Error handling │ │ └── index.ts # Main entry point │ ├── core/ # Business logic │ │ ├── scanner/ # Software detection │ │ ├── security/ # Security engine │ │ ├── update-engine/ # Version checking │ │ ├── database/ # SQLite persistence │ │ └── index.ts # Barrel export │ └── shared/ # Shared types │ └── types.ts ├── package.json ├── tsconfig.cli.json # TypeScript config for CLI └── vitest.config.ts ``` 请参阅 [ARCHITECTURE.md](./ARCHITECTURE.md) 获取详细的技术文档。 ## 数据源 - [OSV](https://osv.dev) — 开源漏洞数据库 - [NVD](https://nvd.nist.gov) — 国家漏洞数据库 (美国) - [GitHub Security Advisories](https://github.com/advisories) — 安全公告数据库 - [End of Life](https://endoflife.date) — 软件支持周期日期 - [npm registry](https://registry.npmjs.org) — 最新的 npm 包版本 - [PyPI](https://pypi.org) — 最新的 Python 包版本 - [GitHub Releases](https://api.github.com) — 最新的 GitHub 项目发行版 ## 贡献 请参阅 [CONTRIBUTING.md](./CONTRIBUTING.md) 了解开发和贡献指南。 ## 许可证 MIT
标签:MITM代理, TypeScript, WebSocket, 依赖分析, 安全基线检查, 安全插件, 开发安全, 自动化攻击