stariik/SentinelForge

GitHub: stariik/SentinelForge

SentinelForge 是一个安全优先的 Sigma 检测规则管理平台,解决团队在规则构建、验证、版本追踪和审计流程中缺乏统一工作区的问题。

Stars: 0 | Forks: 0

# SentinelForge **一个安全优先的工作区,用于构建、审查和管理 Sigma 检测规则。** [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/stariik/SentinelForge/actions/workflows/ci.yml) [![Python 3.12+](https://img.shields.io/badge/Python-3.12%2B-3776AB?logo=python&logoColor=white)](https://www.python.org/) [![FastAPI](https://img.shields.io/badge/FastAPI-0.139-009688?logo=fastapi&logoColor=white)](https://fastapi.tiangolo.com/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
SentinelForge 将一个包含检测规则的文件夹转化为一个可搜索、带版本控制且可审计的规则库。分析师可以安全地导入 Sigma YAML,使用 pySigma 对其进行验证,检查可解释的质量评分,将规则映射到 MITRE ATT&CK,审查变更,并通过强类型的 REST API 再次导出该规则库。 ## 目前已实现的功能 - 安全的 Sigma 解析,具备输入大小和嵌套层级限制,使用 `yaml.safe_load` 以及 pySigma 的核心验证器。 - 跨元数据、检测逻辑、ATT&CK 映射、误报指导、参考链接、测试、状态和描述性内容的可解释规则质量评分。 - 规则 CRUD、复制、可逆归档以及仅限管理员的永久删除。 - 不可变的版本历史,支持统一差异对比 (unified diff) 和“作为新版本恢复”的语义。 - 针对状态、严重程度、日志来源、作者、标签、ATT&CK 技术、已归档规则和未测试规则的搜索、分页和过滤功能。 - 支持单文件 YAML 和有大小限制的 ZIP 导入,以及单次和批量导出。 - 内置 MITRE ATT&CK Enterprise v19.1 快照,包含 15 个战术 (tactics) 和 697 个技术 (techniques)。 - JWT access token 和轮换的 refresh token,bcrypt 密码哈希,账户锁定,登录限流,分析师/管理员 RBAC,以及审计日志。 - PostgreSQL 原生持久化,并提供用于本地开发和封闭测试的 SQLite 可移植层。 ## 架构 ``` flowchart LR A[Analyst or API client] -->|REST + bearer token| F[FastAPI] subgraph Backend F --> AUTH[Authentication and RBAC] F --> RULES[Rule library and versions] RULES --> SIGMA[Sigma validation and scoring] RULES --> ATTACK[ATT&CK mapping] AUTH --> AUDIT[Audit log] RULES --> AUDIT end AUTH --> DB[(PostgreSQL / SQLite)] RULES --> DB ATTACK --> CACHE[Versioned ATT&CK cache] AUDIT --> DB ``` 该服务在设计上是同步的:规则解析和有界的评估任务是偏向 CPU 密集型的,而 FastAPI 会在其线程池中运行同步 endpoint。SQLAlchemy 模型在 PostgreSQL 上使用原生的 UUID/JSONB 类型,并在 SQLite 上使用兼容的 UUID/JSON 类型。 如需了解更详细的设计原理、数据流和计划中的检测引擎,请阅读 [ARCHITECTURE.md](ARCHITECTURE.md)。 ## 截图 ### 交互式 API 资源管理器 ![SentinelForge Swagger UI 显示认证、用户和检测规则 endpoints](https://raw.githubusercontent.com/stariik/SentinelForge/main/docs/images/swagger-api.png) ### 生成的 API 参考文档 ![SentinelForge ReDoc 参考文档显示登录契约和响应 schemas](https://raw.githubusercontent.com/stariik/SentinelForge/main/docs/images/redoc-api.png) ## 快速开始 环境要求: - Python 3.12 或更高版本 - Git - 用于类生产环境的 PostgreSQL;本地使用 SQLite 即可 在全新克隆的仓库中,进入 API 包并创建一个虚拟环境: ``` git clone https://github.com/stariik/SentinelForge.git cd SentinelForge/apps/api python -m venv .venv ``` 在 Windows PowerShell 上使用 `.venv\Scripts\Activate.ps1` 或在 macOS/Linux 上使用 `source .venv/bin/activate` 激活它,然后安装该项目: ``` python -m pip install --upgrade pip python -m pip install -e ".[dev]" ``` 将示例配置复制到 `apps/api/.env`: ``` # Windows PowerShell Copy-Item ..\..\.env.example .env ``` ``` # macOS/Linux cp ../../.env.example .env ``` 如果希望使用零依赖的本地数据库,请修改 `.env` 中的这一行: ``` DATABASE_URL=sqlite:///./sentinelforge.db ``` 应用数据库 schema 并启动 API: ``` python -m alembic upgrade head python -m uvicorn sentinelforge.main:app --reload ``` 打开 访问交互式 OpenAPI 接口,或查看 了解服务健康状况。 ### 创建首位管理员 系统特意禁用了自助注册功能。在受信任的开发 shell 中,启动 `python` 并一次性创建初始管理员: ``` from getpass import getpass from sentinelforge.core.db import get_session_factory from sentinelforge.models.enums import UserRole from sentinelforge.services.auth import create_user db = get_session_factory()() create_user( db, email="you@example.com", password=getpass("New administrator password: "), full_name="Local Administrator", role=UserRole.ADMIN, ) db.commit() db.close() ``` 使用 `POST /api/v1/auth/login` 获取访问/刷新 token 对。在 API 文档中选择 **Authorize** 并提供 access token,即可调用受保护的 endpoint。 管理员可以通过 `POST /api/v1/users` 创建分析师账户。 ## API 导航 | 领域 | 主要 endpoint | 访问权限 | |---|---|---| | 服务 | `GET /health`, `/docs`, `/redoc`, `/openapi.json` | 公开 | | 认证 | `/api/v1/auth/login`, `/refresh`, `/logout`, `/me` | 混合 | | 用户 | `GET/POST /api/v1/users`, `PATCH /api/v1/users/{id}` | 管理员 | | 规则 | `/api/v1/rules` 下的 CRUD、验证、复制、归档、搜索和过滤 | 分析师 | | 版本 | `/api/v1/rules/{id}` 下的历史记录、详情、差异对比和恢复 | 分析师 | | 导入/导出 | `/api/v1/rules` 下的单个 YAML 和 ZIP 归档操作 | 分析师 | 正在运行的服务 OpenAPI 文档是权威的 endpoint 和 schema 参考。 ## 安全模型 重要的安全防护措施包括: - 规则解析或查询渲染过程中不执行 shell 或子进程; - 有界的 YAML 解析和仅在内存中处理的归档操作; - 针对 ZIP 路径遍历、绝对路径、符号链接、条目数量、展开大小和压缩比的检查; - 默认拒绝的已认证路由,并带有明确的分析师/管理员依赖项; - 如果仍配置着示例密钥,则在生产环境启动时会拒绝运行;以及 - 短生命周期的 access token 以及单次使用的 refresh token 轮换。 这是一个正在积极开发中的工程项目,而不是生产级的 SIEM。在将其暴露于不受信任的网络或数据之前,请查阅[威胁模型](docs/threat-model.md)。 ## 仓库结构 ``` SentinelForge/ ├── apps/api/ FastAPI package, migrations, and tests ├── docs/ Database contract and threat model ├── scripts/ ATT&CK cache maintenance ├── .github/workflows/ Continuous integration ├── ARCHITECTURE.md System design and engineering decisions ├── TASKS.md Phased delivery plan └── .env.example Documented configuration surface ``` ## 开发检查 在提交 pull request 之前,请从 `apps/api` 目录运行以下命令: ``` python -m ruff check . python -m ruff format --check . python -m mypy sentinelforge python -m pytest -q ``` 测试使用内存中的 SQLite 数据库,不需要 Docker 或 PostgreSQL。 ## 路线图 下一个主要的功能是事件摄取和归一化,带有匹配解释的进程内 Sigma 条件评估器,检测测试运行,ATT&CK 覆盖快照,事件重放,Next.js 界面,演示内容以及容器化部署。进展和范围决策记录在 [TASKS.md](TASKS.md) 中。 ## 文档 - [架构](ARCHITECTURE.md) - [数据库模型与 ERD](docs/database.md) - [威胁模型与安全限制](docs/threat-model.md) - [交付计划](TASKS.md) - [后端包说明](apps/api/README.md) ## 许可证 SentinelForge 采用 [MIT 许可证](LICENSE)。
标签:AV绕过, FastAPI, PostgreSQL, Sigma规则管理, 安全规则引擎, 安全运营, 扫描框架, 测试用例, 逆向工具