TriForMine/norn
GitHub: TriForMine/norn
Norn 是一个用 Rust 编写的 Linux 服务器运行时漏洞监控工具,通过关联实际运行状态与漏洞信息,为运维和安全团队提供上下文感知的风险评分与告警能力。
Stars: 0 | Forks: 0
# Norn
[](https://github.com/TriForMine/norn/actions/workflows/ci.yml)
[](LICENSE)
[](https://github.com/TriForMine/norn/releases)
[](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报告查看器, 上游代理, 单机安全, 可视化界面, 子域名枚举, 安全仪表盘, 安全运维, 安全防御评估, 容器安全, 容器安全扫描, 插件系统, 无线安全, 服务扫描, 漏洞监控, 漏洞管理, 端口监听, 系统安全, 网络安全, 网络安全审计, 网络流量审计, 网络测绘, 规避防御, 请求拦截, 通知系统, 隐私保护