TriForMine/norn

GitHub: TriForMine/norn

Norn 是一个用 Rust 编写的 Linux 服务器运行时漏洞监控工具,通过关联实际运行状态与漏洞信息,为运维和安全团队提供上下文感知的风险评分与告警能力。

Stars: 0 | Forks: 0

# Norn [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/bae2d90041161853.svg)](https://github.com/TriForMine/norn/actions/workflows/ci.yml) [![许可证](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE) [![发布](https://img.shields.io/badge/release-v0.1.0-lightgrey.svg)](https://github.com/TriForMine/norn/releases) [![Rust](https://img.shields.io/badge/rust-1.88%2B-orange.svg)](Cargo.toml) Norn 是一个用于 Linux 服务器的模块化运行时漏洞监控器。它会扫描机器上实际运行的内容:Docker 容器、活跃服务、监听端口、已安装的包以及暴露的服务。然后,它将运行时清单与漏洞扫描器的输出进行关联,计算出实用的风险评分,将扫描历史记录存储在 SQLite 中,提供 API 和仪表盘,并为重要的新风险发送 Discord 通知。 Norn 采用 Apache-2.0 许可证。 ## 仪表盘预览 MVP 包含一个 React 仪表盘,带有摘要卡片、服务、漏洞、扫描历史、通知测试和忽略控制。使用 `cd apps/web && bun install && bun run build` 构建它,然后运行 `norn serve`。 ## 功能 - 单机一体化模式:收集器、扫描器、数据库、API、仪表盘、调度器和通知。 - 用于收集器、漏洞扫描器、通知器和扫描运行器的模块化 Rust traits。 - 支持 Unix socket 和 HTTP socket-proxy 的 Docker 运行时收集器。 - Docker 镜像扫描在调用 Grype 之前,会尽可能使用本地镜像 ID,并对相同镜像进行去重。 - 用于 systemd 服务、dpkg 包和监听端口的 Linux 主机收集器。 - Grype 扫描器适配器,支持子进程执行、超时处理、缺失二进制文件错误和夹具解析。 - 运行时风险引擎,综合考虑严重性、公开暴露、容器权限、Docker socket 挂载和修复可用性。 - 带有版本化迁移 SQL 的 SQLite 扐描历史记录。 - Axum REST API 和 Vite/React 仪表盘,支持持久化的亮/暗主题。 - 精心打磨的终端输出,包含扫描进度、可读表格和交互式 TUI。 - Discord webhook 通知。 - 优先使用夹具的测试,无需 Docker、systemd、dpkg、`ss` 或 Grype。 ## 非目标 Norn MVP 不实现 Kubernetes、Windows、macOS、自动补丁、远程多主机代理、身份验证、RBAC、AI 功能或云账户扫描。 ## 快速开始 从仓库根目录运行由夹具支持的扫描: ``` cargo run -p norn-cli -- scan --config ./examples/config.toml ``` 示例输出: ``` Host: homelab Running containers: 12 Active services: 48 Listening ports: 81 Publicly bound inventory items: 5 Critical runtime risks: 1 High runtime risks: 3 Medium runtime risks: 11 Low runtime risks: 7 Informational runtime risks: 13 ``` 构建并测试所有内容: ``` cargo fmt --all -- --check cargo clippy --all-targets --all-features -- -D warnings cargo test --workspace cd apps/web bun install bun run lint bun run test bun run build ``` 启动 API 和仪表盘: ``` cargo run -p norn-cli -- serve --config ./examples/config.toml ``` 打开 `http://127.0.0.1:8787`。 ## CLI ``` norn scan --config /etc/norn/config.toml norn scan --config /etc/norn/config.toml --jobs 8 norn scan --config /etc/norn/config.toml --no-progress norn tui --config /etc/norn/config.toml norn serve --config /etc/norn/config.toml norn inventory --config /etc/norn/config.toml --output table norn report --config /etc/norn/config.toml norn notify test --config /etc/norn/config.toml norn ignore CVE-2026-0001 --service nginx --days 30 --config /etc/norn/config.toml ``` ## API - `GET /api/health` - `GET /api/summary` - `GET /api/inventory` - `GET /api/services` - `GET /api/vulnerabilities` 接受可选的 `?limit=500` 样式上限,用于适应仪表盘大小的响应 - `GET /api/scans` - `POST /api/scans/run` - `POST /api/ignore` - `POST /api/notifications/test` ## 配置 默认路径:`/etc/norn/config.toml`。使用 `--config` 或 `NORN_CONFIG` 来覆盖它。 ``` [server] bind = "0.0.0.0:8787" static_dir = "/opt/norn/web" [database] url = "sqlite:///var/lib/norn/norn.db" [scan] interval = "6h" run_on_start = true [scanner] parallelism = 4 [collectors.docker] enabled = true socket = "/var/run/docker.sock" [scanner.grype] enabled = true binary = "grype" timeout_seconds = 300 [notifications.discord] enabled = false webhook_url = "" [risk] notify_minimum = "High" max_notifications_per_scan = 50 ``` 环境变量覆盖包括 `NORN_SERVER_BIND`、`NORN_DATABASE_URL`、`NORN_SCAN_INTERVAL`、`NORN_SCANNER_PARALLELISM`、`NORN_GRYPE_BINARY`、`NORN_DISCORD_ENABLED`、`NORN_DISCORD_WEBHOOK_URL`、`NORN_RISK_NOTIFY_MINIMUM` 和 `NORN_RISK_MAX_NOTIFICATIONS_PER_SCAN`。 ## Docker Compose 直接 Docker socket 模式: ``` docker compose -f docker/docker-compose.yml up --build ``` Socket-proxy 模式: ``` docker compose -f docker/docker-compose.socket-proxy.yml up --build ``` 挂载 `/var/run/docker.sock` 具有敏感性。只读挂载并不能确保 Docker socket 的安全:对 Docker API 的访问仍然可能暴露主机控制路径。尽可能使用 socket-proxy 示例,并且仅授予 Norn 所需的端点。 ## Discord 通知示例 ``` Critical runtime risk: CVE-2026-0001 Host: homelab Service: norn-nginx Artifact: nginx:1.25.3 Severity: Critical Runtime risk: Critical Exposure: public Recommended action: Patch or redeploy the affected service as soon as possible. ``` ## 示例报告 ``` # Norn Runtime Security Report Generated at: 2026-04-25T10:00:00Z Host: homelab ## 紧急 - **CVE-2026-0001** on `norn-nginx`: Critical risk, public exposure, fix Available ## 重要 - **CVE-2026-0002** on `norn-postgres`: High risk, internal exposure, fix NotAvailable ## 低优先级 - None ``` ## 安全模型 Norn 观察运行时状态并存储本地扫描历史记录。它不会对工作负载进行沙箱处理、修补系统、执行网络策略或替代安全加固基线。Docker 访问权限是最敏感的权限。请参阅 [安全模型文档](docs/security-model.md)。 ## 路线图 - EPSS 和 CISA KEV 丰富化。 - 支持更多包管理器和服务管理器。 - 为暴露的仪表盘提供可选的身份验证。 - 远程代理和多主机聚合。 - 使用 JSON stdin/stdout 的社区收集器协议。 - SARIF 和 CycloneDX 导出。 ## 贡献 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。安全问题请遵循 [SECURITY.md](SECURITY.md)。 ## 许可证 Apache-2.0。请参阅 [LICENSE](LICENSE)。
标签:Angular, Axum, Claude, CVE检测, DevSecOps, Discord通知, Docker, GPT, Grype, Linux服务器, PB级数据处理, React, Rust, SQLite, Syscalls, Web截图, Web报告查看器, 上游代理, 单机安全, 可视化界面, 子域名枚举, 安全仪表盘, 安全运维, 安全防御评估, 容器安全, 容器安全扫描, 插件系统, 无线安全, 服务扫描, 漏洞监控, 漏洞管理, 端口监听, 系统安全, 网络安全, 网络安全审计, 网络流量审计, 网络测绘, 规避防御, 请求拦截, 通知系统, 隐私保护