QuantumDef1337/RuleVis
GitHub: QuantumDef1337/RuleVis
RuleVis 是一个多租户 Wazuh 规则智能平台,通过交互式依赖图帮助安全团队可视化、分析和管理 Wazuh 规则集的健康状况与合规覆盖。
Stars: 0 | Forks: 0
# RuleVis — Wazuh 的多租户规则智能平台
RuleVis 将您的 Wazuh 规则集转化为动态、交互式的依赖图——并将其封装在一个完整的多租户平台中:RBAC、MFA、审计日志、实时 Wazuh/GitHub 同步、webhook、公共 API 以及 OIDC 单点登录。它帮助安全团队可视化规则关系、发现结构性问题、追踪 MITRE ATT&CK 和合规性覆盖情况,并通过真实的审计跟踪管理规则变更——所有这些都在您所需的任意数量的隔离租户工作区中完成。
专为 SOC 分析师(了解规则的实际作用及其原因)、SOC 管理员(健康/覆盖报告、变更审计)和平台工程师(多租户管理、集成)打造。

## 功能
### 规则智能
* **交互式图表可视化** — 力导向、分层和径向布局,在 Canvas 上渲染以实现大规模下的高性能。
* **规则详情面板** — 对任何规则进行通俗易懂的拆解:严重程度、父规则、子规则,以及触发警报必须匹配的每一个条件,自上而下排列。
* **依赖分析** — 将父/子关系(`if_sid`、`if_group`、`if_matched_sid`、`if_matched_group`)作为有向边,并进行断链和重复 ID 检测。
* **规则健康仪表盘** — 禁用的父规则、孤儿规则、MITRE ATT&CK 覆盖率、合规性标签覆盖率、依赖链深度。
* **规则 ID 热力图** — 查看哪些 ID 范围被大量使用,哪些可用于新的自定义规则。
* **对比** — 对比两个规则集或 manager 快照的差异。
* **产品映射** — 将规则文件组织成逻辑产品(例如“Windows”、“FortiGate”),并提供每个产品的规则计数。

### 多租户与访问控制
* **隔离的租户工作区** — 每个工作区都有各自的规则、产品、manager、GitHub 源、webhook 和成员。
* **RBAC** — `tenant_admin` / `analyst` / `viewer` 角色,加上针对特殊例外的逐用户权限覆盖,以及一个全平台超级管理员层。
* **直接或基于邀请的用户创建** — 用户名、可选电子邮件、密码、角色、权限覆盖、强制重置密码和要求注册 MFA,全部集中在一个表单中完成。

### 安全性
* **基于 TOTP 的 MFA**,支持二维码注册和一次性备用代码。
* **账户锁定**和**基于 IP 的登录速率限制**(后者由数据库支持,而不是进程内计数器——它在多个 worker 进程或主机下依然有效)。
* **静态加密密钥** — Wazuh manager 密码和 GitHub token 在接触磁盘之前都会使用 Fernet 进行加密。
* **审计日志和删除日志** — 记录每一项管理操作,包含操作者、IP 地址,以及(针对规则同步的)完整的增加/删除/更改差异对比。
* **登录活动监控**,带有可疑活动标记。
* **OIDC 单点登录** — 适用于 Okta、Azure AD/Entra ID、Google Workspace、Auth0、Keycloak 或任何标准的 OIDC 身份提供商。
### 集成
* **实时 Wazuh manager 同步** — 连接 manager 的 REST API,按需同步或在一定时间间隔自动同步,每次同步都有完整的变更差异对比。
* **GitHub 源同步** — 直接从公开或私有仓库拉取规则文件。
* **Webhook** — 将规则变更和删除事件推送到 Slack、Microsoft Teams 或任何 JSON endpoint(ServiceNow、Jira、n8n、自定义),并使用 HMAC 签名。
* **公共 API** — 用于程序化访问的、可限定作用域和可撤销的 API key,每个 key 对应一个租户和一个角色。

## 安装
```
git clone https://github.com/QuantumDef1337/RuleVis.git
cd RuleVis
pip install .
```
所有依赖项(Flask、networkx、waitress、SQLAlchemy、cryptography、python-jose)都会通过 `pyproject.toml` 自动安装——在 Windows、Linux 或 macOS 上无需手动处理依赖项。前端已预编译(`src/internal/static/dist/`),因此在运行应用时**不需要 Node.js**。
仅当您将 RuleVis 指向 Postgres 而不是默认的 SQLite 时才需要(见下文):
```
pip install .[postgres]
```
## 使用方法
```
rulevis
```
这会启动服务器,在默认浏览器中打开 `http://localhost:5000/`,并引导您完成第一个管理员账户的创建。接下来,所有操作——连接规则源、创建租户、邀请用户——都在应用内完成。
您可以选择在启动时从本地规则目录为第一个租户填充初始数据:
```
rulevis --path /var/ossec/ruleset/rules,/var/ossec/etc/rules
```

## 数据库
默认情况下,RuleVis 使用位于 `~/.rulevis/rulevis.db` 的本地 SQLite 文件——无需配置,开箱即用。对于多进程或多主机部署,请将其指向 Postgres:
```
export RULEVIS_DATABASE_URL="postgresql+psycopg2://user:pass@host/rulevis"
```
身份/授权层中的每一个查询在编写时都兼顾了在两种后端上的可移植性。
## 重新构建前端
仅当您要修改 `web/src` 时才需要——运行 RuleVis 本身并不需要此操作。
```
cd web
npm install
npm run build # outputs to ../src/internal/static/dist/
```
## 数据位置
所有应用数据都位于 `~/.rulevis/` 目录下:
| 路径 | 内容 |
|---|---|
| `rulevis.db` | 身份/授权 — 用户、租户、角色、审计日志(或您配置的外部数据库) |
| `secret_key` | 会话签名密钥,在首次运行时生成一次 |
| `tenants//config.json` | 租户专属的产品、manager、GitHub 源、webhook、SSO 配置 |
| `tenants//cache//` | 从已连接的 Wazuh manager 镜像过来的规则文件 |
| `tenants//cache/gh-/` | 从 GitHub 源镜像过来的规则文件 |
| `tenants//uploads/` | 手动上传的规则 XML |
## 日志
RuleVis 遵循操作系统惯例,将诊断日志写入用户特定的位置:
| 平台 | 日志文件位置 |
|---|---|
| Windows | `%LocalAppData%\rulevis\Logs\rulevis.log` |
| macOS | `~/Library/Logs/rulevis/rulevis.log` |
| Linux / BSD | `$XDG_STATE_HOME/rulevis/rulevis.log`(回退至 `~/.local/share/rulevis/logs/rulevis.log`) |
可以安全删除——下次运行时会自动创建一个新文件。
## 测试
```
pip install .[dev]
pytest tests/
```
每个测试都针对一个隔离的一次性数据库运行(在每个测试中将 `HOME`/`USERPROFILE` 重定向到临时目录)——绝不会触及真实数据。
## 架构
- **后端**:Flask,在生产环境中通过 [waitress](https://github.com/Pylons/waitress) 提供服务。
- **身份/授权**:基于 SQLite 或 Postgres 的 SQLAlchemy Core。
- **租户配置**:磁盘上的扁平化 JSON,在结构上与最初的单租户设计保持一致。
- **图形引擎**:[networkx](https://networkx.org/) `MultiDiGraph` — 规则是节点,`if_sid`/`if_matched_sid`/`if_group`/`if_matched_group` 是边。
- **前端**:React + TypeScript + Vite,被构建为由 Flask 直接提供服务的静态资源。
请参阅 [`docs/RULEVIS_PRODUCT_GUIDE.md`](docs/RULEVIS_PRODUCT_GUIDE.md) 获取完整的架构参考、数据模型、逐模块拆解,以及每个主要功能背后的设计逻辑。
## 关于规则条件解析的说明
虽然 Wazuh 文档将 `` 定义为另一种创建父子关系的条件,但在任何内置规则中都没有使用它,因此在这里被特意省略了。
``(*首次出现*)也特意不被视为父子关系,因为它并不会创建这种关系。
## 致谢
RuleVis 最初是 Zafer Balkan 的 [zbalkan/rulevis](https://github.com/zbalkan/rulevis) 的一个分支,该项目引入了核心的规则解析引擎和力导向图可视化。本项目在很大程度上建立在那个基础之上——请参阅 [`LICENSE`](LICENSE) 获取完整的归属说明。
## 许可证
MIT — 请参阅 [`LICENSE`](LICENSE)。
标签:Mutation, SOC分析, Streamlit, Wazuh, 云计算, 可视化, 安全运营, 扫描框架, 规则引擎, 访问控制, 逆向工具