NoMercyLabs/shield

GitHub: NoMercyLabs/shield

Shield 是一个自托管的跨生态系统依赖漏洞监控系统,通过 Docker 容器部署,实时推送安全警报以解决开发中的依赖安全问题。

Stars: 0 | Forks: 0

# 盾 跨生态系统依赖漏洞预警系统。自托管。无头 API + Web 界面。 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/5b46c75217134705.svg)](https://github.com/nomercylabs/shield/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Docker 拉取次数](https://img.shields.io/docker/pulls/nomercylabs/shield?logo=docker)](https://github.com/nomercylabs/shield/pkgs/container/shield) [![Shield](https://your-shield.example.com/api/badge/NoMercyLabs/shield.svg)](docs/sources.md#health-badge) ## 功能介绍 Shield 会监控你代码中的锁文件——包括 `package-lock.json`、`yarn.lock`、`pnpm-lock.yaml`、`packages.lock.json`、`composer.lock` 和 `gradle.lockfile`——这些文件位于你指定的 GitHub 仓库和本地文件夹中。它从 OSV.dev、GitHub Advisory Database 和 npm 注册表信息源(用于检测维护者转移和弃用信号)获取安全公告,将其与你的清单进行匹配,并在发现匹配项时立即向 Discord Webhook 和应用内收件箱推送警报。一个 Docker 镜像,一个 SQLite 数据卷,一个统一视图。 ## 快速启动 ``` docker run -d --name shield \ -p 8080:8080 \ -v shield-data:/data \ -v shield-keys:/data/keys \ -e Shield__Auth__JwtSigningKey="$(openssl rand -base64 48)" \ -e Shield__Auth__DataProtectionMasterKey="$(openssl rand -base64 48)" \ ghcr.io/nomercylabs/shield:latest # 打开 http://localhost:8842 — 默认为单用户模式 ``` **请妥善保管两个密钥。** `Shield__Auth__DataProtectionMasterKey` 用于加密 `/data/keys` 下的密钥环,并且在每次容器重启时都必须提供——如果在未提供此密钥的情况下重建容器,所有 Discord Webhook、OAuth 令牌和 OIDC 客户端密钥都将永久无法读取。 首次请求将直接进入仪表盘。从 **Sources -> New** 添加一个数据源,在 **Channels** 中配置一个 Discord Webhook,下一次扫描周期开始时就会填充发现结果。 ## 发展路线图 | 阶段 | 状态 | 范围 | |---|---|---| | 阶段 1 | 当前发布 | GitHub 仓库 + 本地文件夹数据源、npm/NuGet/Composer/Gradle 解析器、OSV + GHSA + npm 注册表信息源、Discord + 应用内收件箱、带单用户模式的 ASP.NET Identity 认证、Vue + Moooom UI、单一 Docker 镜像 | | 阶段 2 | 计划中 | 通过代理 + SSH 进行 Linux 主机扫描 (dpkg/rpm/apk)、Trivy DB 信息源、deps.dev + Socket.dev 信息源、ntfy + SMTP 渠道、OIDC 插件 (Keycloak/Authentik/Auth0/GitHub)、清单差异视图、加密的渠道配置 | | 阶段 3 | 计划中 | 开发机器预安装钩子 (`nm-shield`)、CycloneDX SBOM 上传模式、公开文档站点、托管 SaaS 服务 | ## 文档 - [快速入门](docs/getting-started.md) — Docker 快速启动、环境变量、首次运行演练 - [数据源](docs/sources.md) — GitHub 仓库 + 本地文件夹配置模式 - [信息源](docs/feeds.md) — 每个安全公告信息源的覆盖范围 - [认证](docs/auth.md) — 单用户模式、多用户、OIDC 计划 - [架构](docs/architecture.md) — 流水线、双数据库设计、扩展点 ## 为何选择 Shield 我们构建 Shield,是因为在部署到其他硬件上的自托管产品中,通过 YouTube 视频才得知 npm 蠕虫(如 Shai-Hulud、s1ngularity、slop-squat 攻击活动)是不可接受的。Dependabot 是一个优秀的基于推送的 PR 机器人,但它不监控主机,不合并生态系统,也不会将通知分发到我们已经在使用的渠道。Snyk 和 Socket 是出色的工具,但我们无法完全掌控。Shield 是一个简单直接的答案:一个 Docker 容器,将我们获取的安全公告与我们的清单进行匹配,并将警报发送到我们已关注的聊天平台。 如果你发布并维护软件,你很可能也需要同样的东西。 ## 尚未实现的功能 Shield 坦诚地说明了尚未实现的功能: - **无主机扫描。** Linux 软件包覆盖(通过 dpkg/rpm/apk 支持 Debian/Ubuntu/Alpine/RHEL)属于阶段 2。代理存根已存在,但接收 API 尚未连接。 - **无操作系统级别 CVE 信息源。** Trivy DB 属于阶段 2——它将在主机扫描功能上线时启用。 - **无 SBOM 上传。** CycloneDX/SPDX 接收属于阶段 3。 - **渠道配置未加密存储。** 数据库列名为 `ConfigJsonEncrypted`,但阶段 1 存储的是明文。不要在 Shield 中配置你不想放在私有 GitHub 仓库中的 Discord Webhook URL。 - **OIDC 未实现。** 认证基于 ASP.NET Identity(Cookie + JWT)和单用户模式。OIDC 将在阶段 2 引入。 - **无注册界面。** 多用户模式目前需要直接在数据库中创建用户。单机安装请使用单用户模式。 - **无 ntfy 或 SMTP 渠道。** 阶段 1 仅支持 Discord 和应用内收件箱。 ## 许可证 MIT。参见 [LICENSE](LICENSE)。
标签:Discord通知, Docker容器, GPT, SQLite存储, TCP SYN 扫描, Web UI, 依赖扫描, 实时警报, 攻击面发现, 无遥测, 模型提供商, 漏洞管理, 网络安全, 自托管工具, 请求拦截, 跨生态系统监控, 软件供应链安全, 远程方法调用, 隐私保护