fundanger/Sentriq

GitHub: fundanger/Sentriq

Sentriq 是一个企业级 AI 赋能的威胁检测规则库平台,帮助安全团队集中管理、解释、调优和部署跨多种 SIEM/EDR/WAF 语言的检测规则。

Stars: 0 | Forks: 0

# Sentriq Sentriq 是一个企业级的威胁检测与防护规则库。它为安全团队提供了一个可搜索、文档丰富的规则目录,包含跨八种 SIEM/EDR/WAF/runtime 语言的约 7,500 条检测规则,并配备了一个 AI 助手,用于解释、调优和起草新规则——此外还提供与主流安全平台的直接部署和触发追踪集成。 ## 功能 - **多语言规则库** — 包含跨 KQL, Sigma, Splunk, YARA, Elastic, SentinelOne, Cloudflare 和 Falco 的约 7,500 条规则,支持按语言和类别浏览与过滤,并可保存过滤预设和进行全文搜索。 - **14 个 MITRE ATT&CK 对齐类别**,涵盖从侦察到数据渗出,以及云/SaaS、内部威胁和基于 CVE 的覆盖,涵盖 608 项 MITRE 技术和 13 个 CVE。 - **深度文档化的规则** — 每条规则均包含攻击技术说明、检测逻辑演示、误报/调优指南、MITRE ATT&CK 技术映射,以及相关的 CVE/CVSS 背景。 - **可定制仪表盘** — 拖拽式小组件(语言/类别/严重性细分、MITRE 覆盖率、最新和最近查看的规则、最常触发的规则、快捷操作),支持按用户保持布局持久化。 - **AI 助手(自带 LLM key)** — 一个具备上下文感知能力的聊天抽屉,了解您当前查看的规则,支持跨整个库的 RAG 搜索、规则解释/调优建议,以及一键“使用 AI 生成”来起草新规则。 - **受支持的 AI 提供商** — Anthropic, OpenAI, Google Gemini, DeepSeek 或任何兼容 OpenAI 的 endpoint。API key 静态加密 (AES-256-GCM),并且仅在服务端解密。 - **平台集成** — 连接 Microsoft Sentinel, Elastic Security, Splunk, SentinelOne 和 Cloudflare,可直接从库中部署规则,追踪每条规则的部署状态,并将真实的触发计数同步回仪表盘。 - **认证、角色与 SSO** — Auth.js v5 基于会话的认证(本地 Credentials provider,以及根据实例配置的 OIDC SSO provider),具有四级角色模型(`super_admin`, `admin`, `analyst`, `viewer`)。只有 `super_admin` 可以管理 AI 提供商凭证、集成、用户、品牌和 SSO。 - **白标品牌化** — 超级管理员可以在运行时自定义站点名称、强调色和 logo。 - **生产力工具** — 键盘快捷键(`/` 搜索,`g r` 跳转至规则库,`Esc` 清除过滤器),保存的过滤预设,最近查看的规则,以及一键下载规则正文。 - **深色/浅色主题**,贯穿始终的由 Motion 驱动的流畅动画。 ## 技术栈 - [Next.js 16](https://nextjs.org) (App Router) + React 19 + TypeScript - SQLite (`better-sqlite3`) 上的 [Drizzle ORM](https://orm.drizzle.team),设计旨在未来能够平滑迁移至 Postgres - [shadcn/ui](https://ui.shadcn.com) (Base UI primitives) + Tailwind CSS v4 - [Auth.js v5](https://authjs.dev) (Credentials provider + 动态 OIDC SSO provider + Drizzle adapter) - [Motion](https://motion.dev) 用于动画,[Zod](https://zod.dev) 用于验证,[recharts](https://recharts.org) 用于仪表盘图表,[@dnd-kit](https://dndkit.com) 用于仪表盘拖拽重排 - AES-256-GCM 加密用于存储的 LLM API key 和平台集成凭证 ## 快速开始 ### 前置条件 - Node.js 20+ - npm ### 设置 1. 安装依赖: npm install 2. 创建您的本地环境文件: cp .env.example .env.local 然后填写 `.env.local`: - `DATABASE_PATH` — 默认为 `./data/sentriq.db` (SQLite, gitignored) - `ENCRYPTION_KEY` — 用于加密存储的 LLM API key 和集成凭证的 32 字节十六进制密钥。生成方式: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" - `AUTH_SECRET` — Auth.js 会话密钥。使用相同的方式生成。 3. 推送数据库 schema 并初始化基础数据(类别、MITRE 技术、CVE 以及种子规则库): npm run db:push npm run db:seed 4. 启动开发服务器: npm run dev 打开 [http://localhost:3000](http://localhost:3000)。 ### 首次登录 种子脚本会创建一个紧急维护管理员账号: - **邮箱:** `admin@sentriq.local` - **密码:** `password` 首次登录时,您将被强制要求设置新密码。此账号为 `super_admin`,可以管理 AI 提供商、平台集成、用户、SSO 和品牌设置。 ### 导入额外的规则源 除了内置的种子规则库外,Sentriq 还可以通过可插拔的导入器框架(`src/db/seed/importers/`)从第三方代码库批量导入规则。每个导入器在一个 id 下注册,并通过以下命令运行: ``` npm run db:import -- ``` | id | 来源 | 许可证 | 导入的规则数 | | --- | --- | --- | --- | | `sigma` | [SigmaHQ/sigma](https://github.com/SigmaHQ/sigma) (`rules/` + `rules-threat-hunting/`) | DRL-1.1 | ~3,268 | | `splunk` | [splunk/security_content](https://github.com/splunk/security_content) | Apache-2.0 | ~2,056 | | `azure-sentinel` | [Azure/Azure-Sentinel](https://github.com/Azure/Azure-Sentinel) (KQL analytic rules) | MIT | ~2,001 | | `falco` | [falcosecurity/rules](https://github.com/falcosecurity/rules) | Apache-2.0 | ~93 | | `yara` | [0xN0n4m3d3v/kit-shell](https://github.com/0xN0n4m3d3v/kit-shell) (YARA core rules) | CC0-1.0 | ~53 | | `cloudflare` | [mintyYuki/cf-waf-ruleset](https://github.com/mintyYuki/cf-waf-ruleset) | MIT | ~4 | 对于 `sigma`,传入 `--include-emerging` 也会导入 `rules-emerging-threats/` 和 `rules-compliance/`(这些在上游更新频繁——请定期重新运行以获取更改)。所有导入都是幂等的:重新运行将跳过已存在的规则。导入的规则在其详情页上会显示一个“来源与归属”块,注明上游项目、原作者及许可证。 对于 Docker 部署,请在容器内针对持久化卷运行导入: ``` docker compose exec sentriq npm run db:import -- sigma ``` 要添加新的规则源,请在 `src/db/seed/importers/` 下的新模块中实现 `RuleImporter` 接口,并在 `registry.ts` 中注册它——共享的运行器会处理幂等插入、MITRE 技术预填充和归属追踪。 ### AI 功能 AI 聊天、规则解释/调优、生成和 RAG 搜索需要 LLM provider key。请在 **Settings → AI** 下使用任何受支持的提供商(Anthropic, OpenAI, Gemini, DeepSeek 或兼容 OpenAI 的 endpoint)进行配置。保存 key 后,运行: ``` npm run db:embed ``` 为规则库生成 embedding,以便 RAG 搜索能立即返回结果。该脚本在有限的并发量下运行,并在达到速率限制时重试,且支持恢复执行——它只对尚未具有 embedding 的规则进行嵌入。对于完整的规则库(约 7,500 条规则),这将需要一段时间并消耗 API 额度;对于尚未嵌入的规则,RAG 搜索会优雅降级(回退到较少/无匹配项)。传入 `--force` 可重新嵌入每条规则(例如在切换 embedding 模型之后)。 ### 平台集成 超级管理员可以在 **Settings → Integrations** 下连接外部平台: - **Microsoft Sentinel**, **Elastic Security**, **Splunk**, **SentinelOne**, **Cloudflare** 连接后,每个规则的详情页将获得一个 **Deployments** 标签页,用于在任何已连接且语言兼容的集成上部署、重新部署或移除该规则。**Settings → Integrations** 还允许您同步触发计数(每条部署的规则触发的频率)——Sentinel 通过针对 `SecurityIncident` 的 Log Analytics 查询拉取,Cloudflare 通过其 GraphQL Analytics API 拉取——这随后将为仪表盘的“最常触发规则”小组件提供数据支持。 ### 单点登录 (SSO) 超级管理员可以在 **Settings → SSO** (`/settings/sso`) 下注册 OIDC 身份提供商:显示名称、issuer URL、client ID/secret(已加密)、带有 `group = role` 映射的可选 groups claim,以及针对未映射用户的默认角色。新的提供商初始处于禁用状态,以便您在启用前与您的 IdP 验证回调 URL (`/api/auth/callback/sso-`)。启用后,该提供商将作为登录选项显示在本地电子邮件/密码旁边。 ## 部署到生产环境 ### 选项 1:独立构建(无 Docker) `build.sh` (Linux/macOS) / `build.bat` (Windows) 会安装依赖,如果缺失则使用随机密钥生成 `.env.local`,在首次运行时推送/播种数据库,并生成 Next.js `output: standalone` 构建,其中 `public/` 和静态资产被复制到 `.next/standalone/`: ``` ./build.sh # or build.bat on Windows ./start.sh # or start.bat on Windows ``` `start.sh`/`start.bat` 将 `.env.local` 加载到进程环境中,并直接运行 `node .next/standalone/server.js`(使用 `output: standalone` 时不支持纯 `next start`)。拉取新代码或更改 schema 后,请重新运行构建脚本。 ### 选项 2:Docker Sentriq 附带多阶段 `Dockerfile` 和 `docker-compose.yml`,可作为单一自包含容器运行——适合在本地托管或在 VPS、Fly.io、Railway 等上面向公众部署。SQLite 数据库位于持久化卷(`sentriq-data`)上。 1. 从 `.env.example` 创建 `.env.local` 并填入 `ENCRYPTION_KEY` 和 `AUTH_SECRET`(见上文)。对于公开部署,还需将 `AUTH_URL` 设置为您的公开 URL(例如 `https://sentriq.example.com`)。 2. 构建并启动容器: docker compose --env-file .env.local up -d --build 3. 初始化数据库(仅在首次运行时——在容器内针对持久化卷运行): docker compose exec sentriq npm run db:push docker compose exec sentriq npm run db:seed 4. 打开 [http://localhost:3000](http://localhost:3000)(或您配置的 `AUTH_URL`)。 ### 生产环境加固说明 - **立即更改紧急维护管理员密码** — 首次运行强制流程会处理此操作,但在登录前,请不要让新播种的实例可在公共互联网上访问。 - **将部署置于 HTTPS 之后**(使用像 Caddy、Traefik 或 nginx 这样的反向代理,或您的托管平台内置的 TLS 终端)。已启用 `trustHost`,因此 Auth.js 将信任代理转发的 host/protocol 标头。 - **备份数据库**(`data/sentriq.db`,或 Docker 中的 `sentriq-data` 卷)— 它包含规则、用户以及加密的 API key/集成凭证。 - 登录和 AI 聊天 endpoint 开箱即用地按 IP/按用户进行速率限制(内存中,适用于单实例)。 ## 脚本 | 命令 | 描述 | | --- | --- | | `npm run dev` | 启动开发服务器 | | `npm run build` | 为生产环境构建 | | `npm run start` | 启动生产服务器 (`next start`;对于 `output: standalone` 请改用 `start.sh`/`start.bat`) | | `npm run lint` | 运行 ESLint | | `npm run db:generate` | 从 schema 更改生成 Drizzle 迁移 | | `npm run db:push` | 将当前 schema 推送到 SQLite 数据库 | | `npm run db:seed` | 播种类别、MITRE 技术、CVE 和规则库 | | `npm run db:import -- ` | 从已注册的源(例如 `sigma`)批量导入规则 | | `npm run db:embed` | 为缺少 embedding 的规则生成 RAG embedding(需要配置 AI 提供商;`--force` 重新嵌入所有) | ## 项目结构 ``` src/ app/ Next.js App Router pages (auth, dashboard, rules, settings) actions/ Server Actions (rule CRUD, AI generation, integrations, SSO, settings, auth) components/ UI components (rules, dashboard, AI chat, layout, shadcn/ui primitives) lib/ Auth config, crypto helpers, AI provider adapters, RAG, platform integration adapters db/ Drizzle schema and seed/import data ```
标签:AMSI绕过, CISA项目, EDR, ntdll.dll, 云计算, 威胁检测, 安全AI, 安全运营, 扫描框架, 脆弱性评估, 自动化攻击, 规则引擎