Hayder-Rzaigui/cybernom-community

GitHub: Hayder-Rzaigui/cybernom-community

一个将威胁情报采集、关键字告警、M365 安全态势监控与内置认证整合为单一 Go 二进制文件的自托管 SOC 监控平台。

Stars: 3 | Forks: 0

# CyberNom 社区版 **一个免费、开源的威胁情报与安全监控平台 —— 单一二进制文件,除 Postgres 外无需其他外部服务。** [![License: MIT](https://img.shields.io/badge/license-MIT-3F6E66)](LICENSE) [![Go](https://img.shields.io/badge/go-1.22%2B-3F6E66)](go.mod) [![Postgres](https://img.shields.io/badge/postgres-16%2B-3F6E66)](migrations/0001_init.sql) [![Security Policy](https://img.shields.io/badge/security-policy-3F6E66)](SECURITY.md) [![Enterprise available](https://img.shields.io/badge/enterprise-available-orange)](#-cybernom-enterprise) [![GitHub stars](https://img.shields.io/github/stars/hayderrzaigui/cybernom-community?style=social)](https://github.com/hayderrzaigui/cybernom-community/stargazers) 作者:**Hayder Rzaigui** img22
**问题所在:** SOC 团队最终不得不将威胁情报订阅阅读器、关键字告警器、M365 安全态势检查器以及覆盖在这一切之上的认证层拼凑在一起 —— 通常是三个独立且半成品的脚本,连登录界面都没有。CyberNom 将这整个技术栈整合在一个 Go 二进制文件中,并且从第一行代码起就实现了真正的身份验证。 **快速开始**(完整详情见下方的[安装说明](#installation)): ``` git clone https://github.com/hayderrzaigui/cybernom-community.git && cd CyberNom cp .env.example .env # set CYBERNOM_JWT_SIGNING_KEY and CYBERNOM_DB_PASSWORD cp config/config.yaml.example config/config.yaml cd deployments && docker compose --env-file ../.env up -d --build ``` CyberNom 将两条产品线融合为一个坚固的单一二进制服务: - **内部安全态势可见性** —— 通过严格的只读 Microsoft Graph 访问实现的 Microsoft 365 监控 - **外部威胁情报** —— 通过 Tor 访问的 RSS、JSON API、网站和 `.onion` 源,支持正则表达式/关键字告警 它的存在是为了修复这两个初始概念共有的弱点 —— **没有内置身份验证** —— 同时保留它们各自的优点:一方面是只读的最小权限 Graph 访问,另一方面是广泛的多源数据接入。 这是**社区版**:完整且开源的核心代码,免费且无限制,采用 MIT 许可证,并且支持在原生环境下直接使用普通的 `go build` 独立构建。 ## 目录 - [高性能核心](#high-performance-core) - [安装说明](#installation) - [仪表盘](#dashboard) - [配置](#configuration) - [API 概览](#api-overview) - [威胁模型](#threat-model) - [社区版与企业版对比](#community-vs-enterprise) - [CyberNom 企业版](#-cybernom-enterprise) - [许可证](#license) ## 高性能核心 以下所有功能都集成在单一的 `cybernom` 二进制文件中 —— 除了 Postgres 和可选的 Tor 外,无需运行任何额外的服务。 | 类别 | 功能 | |---|---| | **数据接入** | RSS/Atom、通用 JSON API、普通网站抓取、通过 Tor 独家访问的 `.onion` 源 —— 包含 24 个预置订阅源 | | **告警** | 支持精确匹配或正则表达式的关键字规则、严重级别、基于标签的过滤 | | **正则表达式安全** | 基于 Go 的 RE2 引擎构建 —— 从结构上免疫灾难性回tracking (ReDoS),并辅以模式长度/输入长度/超时限制作为深度防御 | | **仪表盘** | 内置于 `/dashboard` 的 Web UI —— 实时告警推送、严重级别分布、一键确认,无需单独部署前端 | | **通知** | Discord webhook、Slack webhook、Telegram、电子邮件 (SMTP) —— 每个渠道均支持独立的最小严重级别阈值 | | **M365 安全态势** | 只读 Microsoft Graph 采集器:安全警报、高风险登录 —— 写权限范围会在启动时被拒绝 | | **身份验证** | 内置 JWT 访问/刷新 token、bcrypt 密码哈希、双角色 RBAC (`admin`/`viewer`)、在认证 endpoint 上实施基于 IP 和用户名的速率限制 | | **合规性导出** | 导出 CSV 格式的警报和审计日志,JSON 格式的 SLA/MTTR 摘要报告 | | **运维** | 结构化 JSON 日志记录并自动脱敏 secret、优雅关闭、健康/就绪探针、支持 Docker Compose 一键部署 | **设计原则:** 每个外部订阅源都被视为对抗性输入;只有 CyberNom 进程及其配置是受信任的。请参阅 [`docs/THREAT_MODEL.md`](docs/THREAT_MODEL.md) 获取完整的分析,包括此版本防御的七种威胁类别(ReDoS、缺失身份验证、静态 secret、通过重定向导致的 SSRF、Graph 最小权限、onion 到 clearnet 的泄露以及注入)。 ## 安装说明 ### 原生安装(推荐) 需要 Go 1.22+ 和 Postgres 16+ 实例。 ``` git clone https://github.com/hayderrzaigui/cybernom-community.git cd CyberNom go mod tidy go mod download psql "postgres://cybernom:yourpassword@localhost:5432/cybernom" -f migrations/0001_init.sql psql "postgres://cybernom:yourpassword@localhost:5432/cybernom" -f migrations/0002_dashboard_metrics.sql psql "postgres://cybernom:yourpassword@localhost:5432/cybernom" -f migrations/0003_feeds.sql cp config/config.yaml.example config/config.yaml export CYBERNOM_DB_PASSWORD="yourpassword" export CYBERNOM_JWT_SIGNING_KEY="$(openssl rand -hex 32)" go build -o bin/cybernom ./cmd/cybernom ./bin/cybernom -config config/config.yaml -log-pretty ``` 无需构建标签 —— 普通 `go build` 即可生成社区版二进制文件。 ### Docker ``` git clone https://github.com/hayderrzaigui/cybernom-community.git cd CyberNom # 1. 配置 secrets cp .env.example .env # 编辑 .env — 设置 CYBERNOM_JWT_SIGNING_KEY (openssl rand -hex 32) 和 CYBERNOM_DB_PASSWORD mkdir -p secrets echo -n "your-db-password-here" > secrets/db_password.txt # 2. 配置 feeds/keywords/notifications cp config/config.yaml.example config/config.yaml # 根据需要编辑 config/config.yaml # 3. 启动 stack (Postgres, Tor, CyberNom, nginx reverse proxy) cd deployments docker compose --env-file ../.env up -d --build # 4. 验证 curl -k https://localhost:8443/healthz ``` ### 创建您的第一个管理员用户 ``` ./bin/cybernom -config config/config.yaml -init-admin ``` ## 仪表盘 打开 **`http:///dashboard`**(或在捆绑的 nginx 代理后访问 `https://localhost:8443/dashboard`): - 使用通过 `POST /api/v1/users` 创建的任何账号登录 - 实时更新的已触发告警表格,每 20 秒刷新一次 - 按严重程度过滤,一键**确认** - 连接状态指示器会显示仪表盘是否成功连接到 API ## 配置 CyberNom 从 `config/config.yaml` 读取结构性配置,并**从环境变量中读取所有 secret** —— YAML 文件中绝不应包含任何 secret。完整参考请参阅 [`config/config.yaml.example`](config/config.yaml.example) 和 [`.env.example`](.env.example)。 ## API 概览 | 方法 | 路径 | 角色 | 用途 | |---|---|---|---| | GET | `/dashboard` | — | 用于浏览和确认告警的 Web UI | | POST | `/api/v1/auth/login` | — | 使用用户名/密码换取 token 对 | | GET | `/api/v1/alerts` | admin, viewer | 列出已触发的关键字告警 | | POST | `/api/v1/alerts/{id}/ack` \| `/resolve` | admin, viewer | 处理告警 | | GET | `/api/v1/dashboard-metrics` | admin, viewer | 汇总组件数据 | | GET | `/api/v1/export/alerts.csv` \| `/audit.csv` \| `/report.json` | admin, viewer | 合规性导出 | | GET | `/api/v1/graph/security-alerts` \| `/risky-signins` | admin, viewer | M365 安全态势数据 | | POST | `/api/v1/users` | admin | 创建用户 | | POST/DELETE | `/api/v1/feeds` | admin | 管理威胁订阅源 | | GET | `/api/v1/audit` | admin, viewer | 审计日志 | ## 威胁模型 完整文档:[`docs/THREAT_MODEL.md`](docs/THREAT_MODEL.md)。 ## 社区版与企业版对比 CyberNom 社区版本身就是一个完整的、具备生产能力的平台。**CyberNom 企业版**基于完全相同的核心构建,并增加了 SOC 团队在真实安全团队和实际合规义务下大规模运行时所需要的功能: | 功能 | 社区版 | 企业版 | |---|:---:|:---:| | 核心数据接入 (RSS/JSON/website/`.onion`)、正则表达式/关键字告警 | ✅ | ✅ | | 内置仪表盘、JWT 身份验证、bcrypt、速率限制 | ✅ | ✅ | | Discord / Slack / Telegram / 电子邮件通知 | ✅ | ✅ | | Microsoft Graph 安全态势采集器(只读) | ✅ | ✅ | | 合规性导出(CSV / SLA-MTTR 报告) | ✅ | ✅ | | 角色模型 | 2 种角色 (Admin, Viewer) | **4 层 RBAC** — Admin, SOC Tier 1, SOC Tier 2, Compliance Auditor | | 订阅源管理粒度 | 仅限 Admin | SOC Tier 2 可以切换订阅源;Admin 保留创建/删除权限 | | **STIX/TAXII 2.1 订阅源接入** | ❌ | ✅ 将任何 TAXII 2.1 集合(通过 bearer 或 basic auth)直接拉取到与 RSS/JSON/网站源相同的告警 pipeline 中。基于游标的轮询机制旨在防止在获取失败时静默丢失数据。*已构建并完成代码审查;尚未针对真实的 TAXII 服务器进行验证。* | | **自动 IOC 提取** | ❌ | ✅ 从每个告警中提取 IP、域名和文件哈希,去重并存入共享目录,并通过 VirusTotal + AbuseIPDB 进行富化 | | **告警聚类 / 事件** | ❌ | ✅ 相关告警(相同的 CVE,或标题/摘要高度相似)自动分组为单个 Incident,并保留每个组成告警的完整审计追踪 | | **SIEM / Syslog 转发** | ❌ | ✅ RFC 5424 syslog + Splunk / Sentinel / 通用 webhook,接入每个已验证的告警 | | **加密 secret 保管库** | ❌ | ✅ 对 SIEM 凭据和集成 token 进行 AES-256-GCM 静态加密 | | 可视化正则表达式构建器 (IOC 演练场) | ❌ | ✅ | | 仪表盘 Incidents 和 IOCs 标签页 | ❌ | ✅ 专用视图,用于处理聚类后的事件并浏览带有信誉状态的已提取 IOC 目录 | | SOC 用户体验 (UX)(深色/浅色主题,重要告警声音提示) | ❌ | ✅ | | 支持 | 社区支持 (GitHub issues) | 商业支持 & SLA | | 许可证 | MIT,永久免费 | 商业许可证 | 关于每个企业版功能(endpoint、环境变量、数据库迁移、精确的 RBAC 范围)的完整技术细节,请参阅企业版安装包中的 `ENTERPRISE.md`。 ## 🔒 CyberNom 企业版 **CyberNom 企业版现已商业化推出**,专为在社区版所有功能之上,还需要精细化的 RBAC、出站 SIEM 集成以及加密 secret 保管库的 SOC 团队和组织设计 —— 此外还提供 STIX/TAXII 订阅源接入、带有信誉富化的自动 IOC 提取,以及将告警聚类为 Incident 等功能。 专为需要执行以下操作的团队构建: - 将已验证的告警直接路由到 Splunk、Microsoft Sentinel 或任何通用的 SIEM/webhook endpoint - 直接从任何 STIX/TAXII 2.1 集合中提取结构化威胁情报,与 RSS/JSON/网站源并存 - 通过 VirusTotal 和 AbuseIPDB 自动提取、去重并富化每个告警中的 IOC(IP、域名、哈希) - 通过将相关告警(共享 CVE 或高文本相似度)自动聚类为带有完整深入审计追踪的单个 Incident,从而消除告警疲劳 - 跨 SOC Tier 1/2 分析师、Admin 和 Compliance Auditor 细分访问权限,而不是简单的 admin/viewer 划分 - 对集成凭据进行静态加密,而不是以明文形式保存在配置中 - 获得带有 SLA 的商业支持,而不是尽力而为的社区 issue 支持 **对商业许可证或批量定价感兴趣?** 📧 **hayder.rzaiguii@gmail.com** 联系我们时,请务必提供您的团队规模以及最优先考虑的企业版功能(SIEM 转发、RBAC 分层、secret 保管库、TAXII 接入、IOC 富化或告警聚类)是什么 —— 这将有助于我们为您匹配合适的许可层级,并快速为您提供报价。 ## 许可证 MIT —— 详见 [`LICENSE`](LICENSE)。版权所有 © 2026 Hayder Rzaigui。 CyberNom 企业版是构建在此代码库基础上的独立商业产品;请参阅上面的对比表。企业版源代码单独授权,不在本 MIT 许可证下分发。
标签:Go, Microsoft Graph, Postgres, Ruby工具, SOC监控, 威胁情报, 安全运营, 开发者工具, 扫描框架, 日志审计, 测试用例, 自托管, 请求拦截