fcarvajalbrown/MuniANCI

GitHub: fcarvajalbrown/MuniANCI

MuniANCI 是一款面向智利政府机构的离线网络安全合规扫描器,结合主动网络扫描、声明式问卷和本地法律 RAG 助手,生成符合 Ley 21.663 和 ANCI 要求的合规报告。

Stars: 2 | Forks: 0

Logo de MuniANCI: escáner de ciberseguridad y asistente legal para municipios de Chile

MuniANCI

面向智利国家各市镇及政府机构的网络安全软件:Ley 21.663 (ANCI) 合规扫描器,以及一个 100% 离线运行的法律 RAG 助手。

Versión 0.4.0 Licencia MIT Plataforma Windows 10 y 11 Construido con Rust y Tauri 2 Funciona offline y air-gapped

MuniANCI 是一款面向智利政府机构的**市镇网络安全**桌面工具,符合 **Ley 21.663 (网络安全框架)** 以及 **ANCI**(国家网络安全局)的一般性指令。它将两个模块集成在单一的 Tauri 应用程序中,确保没有任何机构数据离开本地设备: - **合规扫描器** — 主动网络扫描加上声明式的自我评估问卷,可生成 **PDF 差距报告**以及**适用于智利国家 CSIRT 的 JSON 报告**。检测匿名 SMB 共享、防火墙禁用、明文协议、弱 TLS、生命周期结束 (EOL) 的软件和操作系统等。 - **离线法律助手 (RAG)** — 带有本地 AI 的助手(前身为独立产品 **MuniGPT**),通过引用法律语料库来回答有关智利市镇法规的咨询,所有推理均通过 **llama.cpp** + **LanceDB** 在本地设备上运行。它位于 `assistant/` 目录中,并作为 Tauri 进程的 *sidecar* 运行。详见 [assistant/README.md](assistant/README.md)。 **关键词:** 市镇网络安全、Ley 21.663、ANCI、法规合规、漏洞扫描器、CSIRT 自我评估、离线 AI 法律助手、RAG、Rust、Tauri、智利。 ## 目录 - [法律声明](#aviso-legal) · [系统要求](#requisitos) · [安装说明](#instalación) · [CLI 使用](#uso--cli) · [GUI 使用](#uso--gui-v02) · [评估的控制项](#controles-evaluados) · [架构设计](#arquitectura) · [测试](#pruebas) · [监管框架](#marco-normativo) · [许可证](#licencia) - 1.0 版本路线图:[ROADMAP.md](ROADMAP.md) ## 法律声明 在国家机构网络上使用此工具需要: 1. 提前在 ANCI 注册 ([portal.anci.gob.cl](https://portal.anci.gob.cl)) 2. 提前向 ANCI 通报访问情况 3. 向系统负责人和 ANCI 报告漏洞 满足这些条件后,该访问受 **Art. 2° Ley 21.459 的 safe harbor** 保护。若不满足,可能构成非法访问。 ## 系统要求 - Rust 1.78+ (`rustup update stable`) - Node.js 20+ 和 npm 10+ (仅用于编译 GUI) - Windows 10/11 或 Linux (Ubuntu 22.04+) - WebView2 Runtime (Windows):从源码编译/运行时必需;发布版的安装程序已包含其离线版本,因此隔离网络(air-gapped)的市镇设备无需单独安装(在 Win11 中已预装) - 建议使用本地管理员权限(BitLocker, WMI) ## 安装说明 ``` git clone https://github.com/fcarvajalbrown/MuniANCI cd MuniANCI cargo build --release -p muniani-cli ``` CLI 二进制文件位于 `target\release\muniani-cli.exe`。 要编译 GUI,请参阅下文的 **按客户端编译** 章节。 ## 使用 — CLI ``` # 本地扫描(使用交互式问卷) muniani-cli --name "Municipalidad de X" --tier pse --scope local # LAN 扫描(不使用问卷,所有 declarative controls = 未通过) muniani-cli --name "Municipalidad de X" --tier oiv --scope lan --no-questionnaire # 自定义输出 muniani-cli --name "..." --pdf informe.pdf --json csirt.json ``` ### CLI 参数 | 参数 | 默认值 | 描述 | |------|---------|-------------| | `--name` | `"Institución sin nombre"` | 机构名称 | | `--tier` | `pse` | 分类: `oiv`, `pse`, `unclassified` | | `--scope` | `local` | 范围: `local`, `lan` | | `--pdf` | `informe_brechas.pdf` | PDF 报告路径 | | `--json` | `csirt_report.json` | JSON 报告路径 | | `--no-questionnaire` | — | 省略声明式问卷 | ## 使用 — GUI (v0.2) GUI (`muniani-gui`) 是一款具有三个视图的 Tauri 2 桌面应用程序: - **市镇视图** — 规范西班牙语的执行摘要,UTM 罚款规模,CSIRT 义务通知 - **技术视图 (IT)** — 包含证据的完整差距表格,实时日志终端,支持导出 PDF/JSON - **助手** — 离线法律 RAG 聊天(模块 `assistant/`),在打开应用时作为 sidecar 自动启动 ### 按客户端编译 机构名称和分类 (tier) 直接编译在二进制文件中 — 没有供最终用户编辑的配置文件。单个值 `MUNIANI_INSTITUTION` 会标记**这两个**模块:扫描器将其盖在报告上,主机将其传递给助手(通过 `MUNIGPT_MUNICIPIO`),这样标题、报告和助手的定制都会指向同一个机构,而无需修改 `config.json`。 ``` # 从 gui\ $env:MUNIANI_INSTITUTION = "Municipalidad de Chillán" $env:MUNIANI_TIER = "pse" cargo tauri build ``` 安装程序位于 `target\release\bundle\`。 #### 编译环境变量 | 变量 | 有效值 | 描述 | |----------|----------------|-------------| | `MUNIANI_INSTITUTION` | 任意字符串 | 客户端机构名称(标记扫描器 + 助手) | | `MUNIANI_TIER` | `oiv`, `pse`, `unclassified` | Ley 21.663 下的分类 | ### 在开发模式下运行 ``` cd gui\frontend npm install cd .. cargo tauri dev ``` 为了使助手选项卡在开发环境中实现端到端的响应,主机需要定位到 Python backend 及其解释器。详见 [assistant/README.md](assistant/README.md) 中的 `MUNIGPT_BACKEND_DIR` 和 `MUNIGPT_PYTHON` 变量;sidecar 会启动 backend,探测 `GET /status`,并在关闭时终止进程树。 ## 评估的控制项 ### 目标项(自动扫描) | 控制项 | 严重程度 | 分类 | 依据 | |---------|-----------|------|------------| | 匿名 SMB/NFS/WebDAV 共享 | 严重 | 所有 | Art. 8° lit. e); IG N°4 | | 暴露的管理共享 (C$, ADMIN$) | 严重 | 所有 | Art. 8° lit. e); IG N°4 | | 防火墙已禁用 | 严重 | 所有 | Art. 8° lit. e); IG N°4 | | 明文协议 (Telnet/FTP) | 严重 | 所有 | Art. 8° lit. e); IG N°4 | | 启用了 TLS 1.0/1.1/SSLv3 | 严重 | OIV+PSE | Art. 8° lit. a); NIST SP 800-52 | | 操作系统处于 EOL | 严重 | 所有 | Art. 8° lit. a) 和 d) | | 证书过期或自签名 | 高危 | OIV+PSE | Art. 8° lit. a) | | 软件处于 EOL | 高危 | 所有 | Art. 8° lit. a) 和 d) | | 硬盘未加密 (BitLocker/LUKS) | 高危 | OIV | Art. 8° lit. a); ISO 27001 A.10.1 | | 云同步已激活 | 高危 | OIV | Art. 8° lit. a) | | 未检测到备份代理 | 高危 | OIV+PSE | Art. 8° lit. b) | ### 声明项(交互式问卷) | 控制项 | 严重程度 | 分类 | 依据 | |---------|-----------|------|------------| | 在 ANCI 平台注册 | 严重 | OIV+PSE | IG N°1 ANCI (jun 2025) | | 指定了网络安全代表 | 高危 | OIV | Art. 8° lit. i); IG N°3 | | 已实施 SGSI | 严重 | OIV | Art. 8° lit. a) | | SGSI 行动记录 | 高危 | OIV | Art. 8° lit. b) | | 制定的连续性计划 | 高危 | OIV | Art. 8° lit. c) | | 认证的连续性计划 | 高危 | OIV | Art. 8° lit. c) + Art. 28° | | 持续培训计划 | 中危 | OIV | Art. 8° lit. h) | ## EOL 数据库 (v0.2) 该工具包含一个从 [endoflife.date](https://endoflife.date) 编译而来的静态 EOL 数据库(2026 年 3 月快照),嵌入在二进制文件中。涵盖了 38 个产品,包括 Windows、Office、SQL Server、.NET、Python、Node.js、PHP、MySQL、PostgreSQL、Apache、nginx、OpenSSL 等。 ## 架构设计 ``` MuniANCI/ ├── core/ # Library crate — lógica de escaneo, cumplimiento y enriquecimiento EOL │ └── src/ │ └── data/ │ └── eol_db.json # Base EOL embebida (include_str!) ├── cli/ # Binary crate — interfaz de línea de comandos (solo escáner) ├── gui/ # Binary crate — Tauri 2 desktop app (escáner + Asistente) │ ├── src/ │ │ ├── assistant.rs # ciclo de vida del backend Asistente (sidecar) │ │ └── commands/branding.rs # institución/tier compilados -> ambos módulos │ └── frontend/ # React/TypeScript/Vite (Vista Municipal / Técnica / Asistente) ├── assistant/ # Módulo Asistente (subtree de MuniGPT) │ └── backend/ # FastAPI + RAG + llama.cpp + LanceDB (Python, corre como sidecar) │ └── eval/ # Harness de evaluación offline (set dorado + juez LLM local) ├── vendor/ # Mirror local de dependencias (resiliencia offline, ver vendor/README.md) ├── .github/ # CI: build/tests, gates de auditoría, SBOM └── docs/ # Plan de fusión y documentación de ingeniería ``` 助手仅存在于 GUI 中;扫描器的 CLI 仍作为独立的二进制文件保留。有关合并的详细信息,请参阅 [docs/MERGE-PLAN-MuniGPT.md](docs/MERGE-PLAN-MuniGPT.md);有关版本历史,请参阅 [CHANGELOG.md](CHANGELOG.md)。 ## 测试 ``` # Rust (core + cli + gui) cargo test # Assistant 后端(从 assistant\backend,使用模块的 venv) ..\.venv\Scripts\python.exe -m pip install pytest # una sola vez ..\.venv\Scripts\python.exe -m pytest # unidad: rag, ingest, audit, licencia, etc. ..\.venv\Scripts\python.exe acceptance_m1.py # 15 consultas de aceptación contra retrieve() ``` 由于体积较大,语料库、GGUF 模型、llama.cpp 二进制文件和向量数据库(`db/`, `db_/`)已被 gitignore;必须将它们存在于磁盘上才能运行 `acceptance_m1.py`。`acceptance_m1.py` 会验证 `db/` 中的国家语料库:如果本地的 `config.json` 指向了另一个市镇,请使用 `MUNIGPT_DB_DIR=db` 强制指定该数据库。 ### 持续集成与质量 每次推送都会运行 **CI**(GitHub Actions,`.github/workflows/ci.yml`):构建 + 测试,依赖审计关卡将**阻止**构建(`cargo audit`、`cargo deny`、`pip-audit`),并生成 **SBOM**(SPDX + CycloneDX)作为产物。助手模块还包含一个**离线评估工具集**(`assistant/backend/eval/`),用于根据从语料库派生的黄金集衡量检索质量(recall@k、MRR),并带有完全可选的本地 LLM 评判层。 ## 关于代码签名的说明 MuniANCI 的可执行文件在此版本中**没有进行数字签名**。在安装时,Windows Defender 和企业级 AV 解决方案(McAfee、Defender ATP)将显示警告。 使用 Authenticode 证书(DigiCert/Sectigo,每年约 200-400 美元)进行签名将留待市镇分发版本中落实。在此之前,必须由客户端的 IT 团队手动批准运行。 ## 监管框架 | 法规 | 描述 | |-------|-------------| | Ley 21.663 (DO 08/04/2024) | 网络安全框架法 | | Ley 21.459 (DO 20/06/2022) | 计算机犯罪 / 布达佩斯公约 | | DFL N°1/2024 | Art. 5°, 8°, 9° 生效 (01/03/2025) | | DS N°295/2024 | 事件报告条例 | | IG N°1 ANCI (jun 2025) | 报告平台注册 | | IG N°2, 3, 4 ANCI (dic 2025) | 补充报告、代表、遏制 | ## 许可证 MIT — Felipe Carvajal Brown Software
标签:RAG, Rust, Tauri, XXE攻击, 可视化界面, 合规扫描, 图探索, 审计报告, 插件系统, 本地大模型, 网络安全, 网络流量审计, 逆向工具, 通知系统, 防御绕过, 隐私保护