btdt1983/vulnscan-ai

GitHub: btdt1983/vulnscan-ai

一款 FIPS 感知的 RHEL 系漏洞扫描工具,结合多源数据与 AI 辅助进行审批式事务化修复。

Stars: 1 | Forks: 0

# vulnscan-ai [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/993938d8ce5e902ccfb9d6747725c320d855dea3235ed9a304cedf0d94c9321f.svg)](https://github.com/btdt1983/vulnscan-ai/actions/workflows/ci.yml) [![License: AGPL-3.0-or-later](https://img.shields.io/badge/license-AGPL--3.0--or--later-blue)](LICENSE) [![Release](https://img.shields.io/github/v/release/btdt1983/vulnscan-ai)](https://github.com/btdt1983/vulnscan-ai/releases) **[官方网站](https://vulnscan-ai.techhack.nl)** · **[通过 dnf 安装](https://repo.techhack.nl)** · **[命令参考](COMMANDS.md)** · **[贡献指南](CONTRIBUTING.md)** 一个感知 FIPS 的命令行工具,适用于 **基于 RHEL 的发行版** (RHEL, AlmaLinux, Rocky, CentOS Stream, Fedora),它可以: 1. 使用原生和公开的来源对主机**扫描**已知漏洞, 2. 从在线漏洞数据库中**丰富**发现的信息, 3. 使用 **LLM**(默认为 Claude;可选 OpenAI / Gemini / Kimi / DeepSeek / Mistral / 本地模型)来**提出修复建议**, 4. **仅在明确批准后应用修复**(或在 `--dry-run` 模式下),根据安全拒绝列表筛选 每一个命令, 5. 导出 **PDF 报告**(如果未安装 `reportlab`,则导出 HTML)。 它在底层使用 CLI 工具(`dnf`/`yum`、`rpm`,可选 `oscap`)并 查询漏洞网站(Red Hat Security Data API、NIST NVD)。 ## 为什么这样选择 | 决策 | 选择 | |---|---| | 语言 | Python 3(RHEL 自带;无强制第三方依赖) | | 扫描器 | CVE: `dnf`/RHSA, OpenSCAP/OVAL, NVD/Red Hat feeds. 加固/暴露: `ssh`, `systemd`, `ports`, `webroot`, `container` | | 优先级排序 | **CISA KEV**(已被积极利用)+ 每个发现结果的 **EPSS** 利用概率 | | 安全公告 | `news` 命令 + dashboard 标签页: CISA KEV, NVD, 发行版勘误(带缓存,支持离线) | | 修复模式 | 默认为 **建议 + 批准**(对生产环境/FIPS 最安全) | | AI 后端 | 默认为 **Claude**;为其他提供可插拔的适配器 | ## FIPS 状态 - 不捆绑密码学。所有 TLS/哈希操作均使用 **系统 OpenSSL**,这是 RHEL 上经过 FIPS 140 验证的模块。 - 从 `/proc/sys/crypto/fips_enabled` 自动检测 FIPS 模式 (`vulnscan-ai info` 会显示状态)。 - 出站 HTTPS 强制锁定 **TLS 1.2+** 并遵循系统加密策略。 - 哈希仅使用 **SHA-256**;从不使用旧版摘要算法(如 md5),因此当 FIPS 策略禁用它们时,工具仍能正常工作。 - 对于数据敏感或与物理隔离(air-gapped)的站点,请使用 `--provider local`,这样任何发现的数据都不会离开主机。 ## 安装说明 ``` # 核心工具(无需第三方依赖)— PDF 开箱即用 pip install . # 可选:通过 reportlab 获得更丰富的 PDF 布局(否则自动使用内置的) # 无依赖 PDF 写入器 pip install '.[pdf]' # pulls in reportlab # 或在 RHEL 上: dnf install python3-reportlab ``` 也可以直接从检出的代码中运行:`python -m vulnscanai ...` ## 配置 AI 提供商 AI 步骤会提出修复建议(由您批准)。默认为 Claude。有两种 设置方法。 ### 最简单的方法:设置向导 运行 **`vulnscan-ai setup`**(它也会在首次交互使用时运行)并选择: - **云提供商** — `claude` / `openai` / `gemini` / `kimi` / `deepseek` / `mistral`。粘贴 API 密钥(隐藏输入),从该提供商已知 ID 的菜单中选择 模型(仍允许使用自定义 ID),对于 Claude,还可以选择推理 努力程度。密钥存储在每用户配置(模式 0600)中并自动 使用 — 无需管理环境变量。 - **本地离线模型** — 下载适合主机规格的 Ollama 模型;无需 密钥,数据不会离开机器。 ### 手动配置:环境变量 或者您自己设置密钥 — 真实的 env 变量始终优先于向导存储的变量: ``` export ANTHROPIC_API_KEY=sk-ant-... # claude (default) export OPENAI_API_KEY=... # openai export GEMINI_API_KEY=... # gemini export MOONSHOT_API_KEY=... # kimi export DEEPSEEK_API_KEY=... # deepseek (DeepSeek-Coder) export MISTRAL_API_KEY=... # mistral (Mixtral 8x7B) export OLLAMA_HOST=http://127.0.0.1:11434 # local (no key) export OLLAMA_MODEL=llama3.2:1b # local model to use export NVD_API_KEY=... # optional, higher NVD rate limit ``` DeepSeek 和 Mistral 都使用 OpenAI Chat Completions API;使用 `DEEPSEEK_BASE_URL` / `MISTRAL_BASE_URL` 覆盖端点,使用 `--model` 覆盖模型(例如 `deepseek-chat`, `mistral-large-latest`)。**StarCoder 2** 没有 托管 API — 可通过 `local` 提供商离线运行: `vulnscan-ai --provider local --model starcoder2 fix`(在执行 `ollama pull starcoder2` 之后)。 **模型与推理努力程度。** 使用 `--model`(或 `model` 配置)选择模型,例如使用 `--model claude-opus-4-8` 选择功能最强大的 Claude。对于 Claude, 您还可以使用 `--effort low|medium|high|xhigh|max` 调节**推理努力程度** (配置项 `claude_effort`,环境变量 `VULNSCANAI_CLAUDE_EFFORT`)— 它会开启自适应 思考机制,使模型在处理复杂的修复时更加深入。当正确性比成本更重要时,请使用 `max`;其他提供商会忽略此标志。 ### 完全离线 / 物理隔离 (Ollama) 无需 API 密钥,不进行外部调用 — AI 步骤针对本地模型运行。 **最简单的方法:设置向导。** 在首次交互式运行时,该工具会提供一个 离线模型菜单(根据主机 RAM 调整大小),可以安装 Ollama,下载 您选择的模型,并将其保存为默认值。随时可以通过以下命令运行: ``` vulnscan-ai setup ``` ``` vulnscan-ai setup — offline AI model Detected RAM: 7.3 GB total, 2.0 GB available. # model download needs RAM notes 1 qwen2.5:0.5b 0.4 GB fits tiny & fastest (recommended) 2 llama3.2:1b 1.3 GB tight/swap good balance, CPU-friendly 3 llama3.2:3b 2.0 GB tight/swap better quality ... 0 skip for now ``` 自动提示仅在交互式终端上出现(systemd 定时器永远不会触发);使用 `VULNSCANAI_NO_SETUP=1` 抑制它。 **GPU 支持。** 当存在带驱动程序的 NVIDIA/AMD GPU 时,Ollama 会自动运行所选模型的 GPU 加速版本 — 无需不同的模型或配置。 向导会检测 GPU,根据 **VRAM** 调整菜单大小(提供更大、 更高质量的模型),并且 `vulnscan-ai info` 会报告 GPU。在仅支持 CPU 的 主机上,它会根据 RAM 调整大小,并引导您使用更小的模型。 **手动等效操作:** ``` curl -fsSL https://ollama.com/install.sh | sh sudo systemctl enable --now ollama ollama pull llama3.2:1b vulnscan-ai providers # 'local' shows 'ready' when the server answers vulnscan-ai --provider local --model llama3.2:1b fix --min-severity important ``` 该工具要求 Ollama 输出受 JSON 约束的结果,因此即使是小型模型也能返回 可解析的修复计划。禁用丰富功能 (`--no-enrich`) 也可以使扫描 完全离线;OVAL/RHSA 数据可以通过 `update-oval` 和 镜像仓库进行预置。 ## 用法 ``` # 不想记住参数?运行时不带命令即可进入交互式菜单 # (方向键 / 数字)涵盖所有命令: vulnscan-ai # or: vulnscan-ai menu # 显示主机 / FIPS / 扫描器 / provider 状态 vulnscan-ai info # 扫描,保存发现结果,并生成 PDF vulnscan-ai scan --pdf report.pdf # 仅显示重要及以上级别的问题 vulnscan-ai scan --min-severity important # 使用 Claude 提议修复方案并以交互方式批准 vulnscan-ai fix # 一次性完成扫描 + 修复,dry-run(仅规划,不执行任何操作),输出 PDF vulnscan-ai fix --scan --dry-run --pdf plan.pdf # 使用不同的 provider/model vulnscan-ai --provider openai --model gpt-4o fix vulnscan-ai --provider claude --model claude-opus-4-8 fix # 非交互模式(CI):自动批准每个已审查的修复 vulnscan-ai fix --yes # 从上次扫描重新渲染报告 vulnscan-ai report -o latest.pdf # 使用 OpenSCAP/OVAL 扫描 — 当数据过期(>7 天)时 feed 会自动刷新; # update-oval 仅用于预载(适用于 air-gapped 主机) vulnscan-ai update-oval vulnscan-ai scan --scanner dnf --scanner oscap --pdf report.pdf # 审计 sshd 加固(root 登录、弱加密算法/MACs/KEX 等) vulnscan-ai scan --scanner ssh # 审计 systemd 服务沙箱化(systemd-analyze security) vulnscan-ai scan --scanner systemd # 审计网络暴露情况(通过 ss 查看存在风险的监听端口) vulnscan-ai scan --scanner ports # 审计 web 文档根目录中暴露的文件(.sql 导出文件、.env、.git/、备份文件) vulnscan-ai scan --scanner webroot # 审计运行中的 Podman/Docker 容器是否存在不安全的运行时设置 vulnscan-ai scan --scanner container # 一次性运行所有可用的扫描器 vulnscan-ai scan --all ``` `systemd` 扫描器默认是保守的(仅针对 `UNSAFE`、已启用的 服务、暴露分数 ≥ 9.0,跳过无法加固的单元);使用 `VULNSCANAI_SYSTEMD_MIN_EXPOSURE` 放宽或收窄范围。它的修复是通过 同一个事务引擎应用的 systemd drop-in 文件(`daemon-reload` → `systemd-analyze verify` → 重启 → 回滚)。 ### 降低误报率 扫描器的构建旨在避免噪声: - **OVAL (`oscap`)** 仅报告真正的 *补丁* 建议 — `inventory`/合规 定义(例如“OS 已安装”)会被丢弃 — 并从 feed 元数据中提取正确的 CVE ID 和严重性。 - **`ports`** 会抑制主机防火墙阻止的端口(如果防火墙丢弃了 `0.0.0.0` 上的套接字,则它就不是一个暴露点)。它在 运行时会读取 **firewalld**,并在没有 firewalld 的主机上回退到原始的 **nftables** (`nft --json list ruleset`) — 遵循默认拒绝的 `input` 策略、接受规则 (单个端口、命名集合、范围)和显式的丢弃/拒绝规则。它只会抑制那些它能确信被阻止的端口,因此解析遗漏永远不会 隐藏真正的暴露。 - **`dnf` 和 `oscap` 同时报告**的发现结果(相同的建议/CVE)被合并 为一个。 - **已修补** (`dnf check-update`):如果某个软件包发现结果的修复已在 仓库元数据中,但*没有可安装的更新*,则会被丢弃 — 因为该主机已经 拥有该补丁。这可以清除常见的 **陈旧旧内核** 噪声:旧内核保持 安装状态,因此扫描器会不断列出历史内核建议,但 `dnf` 报告为“无需操作”,因为最新的内核已在系统上。 Won't-fix(不予修复)类型的建议永远不会通过这种方式丢弃。使用 `"patched_filter": false` 禁用。 - **供应商修复状态**(在丰富信息期间):Red Hat 会针对每个 CVE 和每个 产品发布每个软件包是否确实受到影响。对于此 RHEL 发行版,被 Red Hat 标记为 **“不受影响”** 的发现结果会被作为已确认的误报丢弃;**“不予修复” / “超出支持范围” / “推迟修复”** 的结果会被 保留并添加注释(这是一个真实的问题,但不会发布 dnf 更新 — 需手动 缓解),这样 AI 就不会提出无意义的 `dnf update` 建议。在配置中使用 `"vendor_state_filter": false` 禁用。 - **运行时暴露**(本地,`rpm` + `systemctl`):如果存在漏洞的守护进程软件包 的服务单元**全部停止 *并且* 被禁用/屏蔽**,那么在有人启动它之前都不会构成暴露,因此该发现结果会被 **降级为 `low`** 并 添加注释(它仍然会显示在完整报告中,并且如果您启用该单元,它会以完整的严重性重新出现)。设计上保持保守:**不**包含 服务单元的软件包(如 `openssl`/`glibc` 等库、CLI 工具)永远不会被触及, 处于启用状态、`static` 或拥有监听套接字的单元被视为存在暴露,而未确定的状态将保持完全的严重性。在配置中使用 `"service_state_filter": false` 禁用。 - **`container`** 仅检查**正在运行**的容器,并标记那些明确具有 危险性设置的容器(`--privileged`、运行时控制套接字或绑定了敏感的 宿主机路径、host 网络/PID/IPC 命名空间、添加了危险的 capabilities、禁用的 seccomp/SELinux)。良性的绑定挂载将被忽略, 只读挂载会降低一个严重等级,并且 `--privileged` 将仅被报告一次, 而不是像洪水一样产生每个 capability 的单独发现。 - **基线 (baseline)** 会静默处理已接受的发现结果:配置中的 `"ignore": [...]`, `~/.config/vulnscan-ai/ignore` 中的一行一条,`VULNSCANAI_IGNORE=a,b`,或者 `--ignore PATTERN`。模式匹配发现结果的 ID、CVE、建议、软件包或 标题(允许通配符);扫描器会报告它抑制了多少结果。在 `fix` 期间,您还可以按 **`i`** 键接受已审查的发现结果,并将其 立即添加到基线中 — 这对于您已接受的加固项非常有用(例如在仅限局域网的主机上进行 SSH 密码认证;使用 `--ignore "SSH*"` 可接受整个类别的项目)。 ### 感知漏洞利用的优先级排序 减少噪声只是工作的一半;另一半是呈现攻击者*实际上正在使用*的内容。在丰富信息期间,每个 CVE 都会与两个公开数据源进行比对: - **CISA KEV** — 已知被利用漏洞目录。如果匹配,则意味着 该缺陷正在野外被利用:发现结果会被标记为 `[KEV]`,排序到最前,并提升至至少 `important` 级别,这样它就不会出现在您的严重性底线之下而被忽视。 - **EPSS** — FIRST.org 的漏洞利用概率评分;高数值会显示为 `[EPSS xx%]`。 相同的数据源还为 **`news`** 命令和 dashboard 的 **Advisories** 标签页 (CISA KEV、NVD 以及您发行版的勘误)提供支持,这些数据会在本地缓存,因此可以离线 工作。使用 `"exploit_enrich": false` 禁用丰富功能;使用 `"news_enabled": false` 关闭新闻标签页。 ``` # 最新安全公告,优先显示被积极利用的;[on-host] = 匹配您上次的扫描 vulnscan-ai news --refresh ``` PDF 输出始终会生成真正的 PDF:如果安装了 `reportlab`,它会使用它, 否则使用内置的无依赖 PDF 编写器。使用 `.html` 扩展名可以 生成 HTML 报告。 ### 安全修复支持自动回滚的事务性应用 当修复涉及到 **配置文件或服务**(例如 sshd 加固发现结果)时, `fix` 会以事务性的方式应用它,而不是盲目地运行命令: 1. **备份** `/backups//` 下受影响的文件。 2. **应用**更改。 3. **在重启前验证** — 例如 `sshd -t` — 这样损坏的配置永远不会进入到重启阶段。 4. **重新加载**服务(优先使用 `reload` 而非 `restart`)并确认其保持活动状态。 5. **自动回滚** — 如果*任何*步骤失败,都会恢复备份并重新启动服务,因此糟糕的 sshd 编辑不会将您拒之门外。 每一步在运行时都会**实时流式传输** — 备份、每个命令、验证 步骤、重新加载/健康检查(以及任何回滚)— 以及命令自身的 输出,让您可以准确看到修复在执行时正在做什么。 ``` # AI 提议并应用,并带有上述安全网 vulnscan-ai fix --scanner ssh --scan # 稍后根据其存储的备份撤销修复 vulnscan-ai rollback --list vulnscan-ai rollback ``` 不想立即应用?可以生成可审查的产物来代替 — 一个 独立的 bash 脚本(具有相同的备份/验证/回滚逻辑)或 Ansible playbook: ``` vulnscan-ai fix --export-script fix.sh --export-ansible fix.yml ``` ### 机读格式导出(用于工单系统 / 代码扫描) 输出格式由文件扩展名决定 — `.pdf`、`.html`、`.json` 或 `.sarif` (SARIF 2.1.0): ``` vulnscan-ai scan --sarif findings.sarif --json findings.json vulnscan-ai report -o findings.sarif # from the last saved scan ``` - **SARIF 2.1.0** 可导入 GitHub code scanning、DefectDojo 和大多数 漏洞管理流水线中。严重性映射到 SARIF 级别 (critical/important→`error`,moderate→`warning`,low→`note`),并且每个结果 都带有一个数字 `security-severity`(已知时使用 CVSS)以及 CVE/建议/ 软件包/修复元数据和一个稳定的 `partialFingerprints` ID。 - **JSON** 是一个扁平文档:包含工具元数据、严重性摘要和完整的 发现结果(包括任何 AI 修复建议)。 典型的操作员循环:`scan` → 审查表 → `fix`(逐项批准) → 将 PDF 附加到您的更改工单中。 ## 计划内的自动扫描 (systemd 定时器) `scheduled` 子命令以非交互方式运行:它会进行扫描,将带有日期的 报告写入报告目录,轮换旧报告,并且**从不应用修复**。 ``` # timer 运行的内容 vulnscan-ai scheduled --keep 30 # 其中嵌入了 AI 修复建议(需要 provider 密钥;不执行任何操作) vulnscan-ai scheduled --plan # CI/监控:当发现严重问题时以非零状态码退出 vulnscan-ai scheduled --fail-on important # exit 3 if any >= important ``` RPM 安装了一个 `vulnscan-ai.timer`(每日运行,1 小时抖动,支持追赶执行)。通过以下命令启用它: ``` sudo systemctl enable --now vulnscan-ai.timer systemctl list-timers vulnscan-ai.timer journalctl -u vulnscan-ai.service # last run's output ls /var/lib/vulnscan-ai/reports/ # generated PDFs ``` 仅扫描的运行不需要 API 密钥,也不会向主机外部发送任何内容。若要启用 `--plan`,请在 `/etc/vulnscan-ai/vulnscan-ai.env`(模式 0640)中放入密钥,并将 `--plan` 添加到 `ExecStart`(通过 `systemctl edit vulnscan-ai.service` 覆盖)。 ### 扫描之间的漂移 每次 `scan` 都会与之前保存的发现结果进行比较,并打印出自上次运行以来**新增**的内容以及已**解决**的内容,这样您就可以观察主机安全态势随时间的变化。`scheduled` 会报告相同的漂移计数。 ### 邮件通知 当计划内扫描发现达到或超过特定严重级别的内容,或自上次扫描以来有任何新发现时,它可以通过电子邮件发送纯文本摘要。请在向导(`vulnscan-ai setup` → *Email notifications*)或配置中进行设置: ``` { "notify_email": "ops@example.com", "notify_min_severity": "important", "smtp_host": "smtp.example.com", "smtp_port": 587, "smtp_from": "vulnscan-ai@example.com", "smtp_user": "vulnscan-ai", "smtp_starttls": true } ``` SMTP 密码从 `VULNSCANAI_SMTP_PASSWORD`(首选)读取,或者从配置中的 `smtp_password` 读取。发送邮件绝不会中断扫描 — 失败的邮件会被记录下来,运行会继续。如果未设置 `notify_email`,则不会发送任何内容。 ## Dashboard (HTTPS, 登录) `vulnscan-ai dashboard` 通过一个小巧的 HTTPS Web UI 提供已保存的发现结果 — 包含其解释、CVE 和任何 AI 修复计划 — 并位于登录机制之后。它仅使用标准库(无需额外安装包),使用首次运行时生成的自签名证书,并采用单一管理员账户 — 默认用户名为 **`admin`**(通过 `--user` 更改),密码使用 PBKDF2-SHA256 哈希处理。启动时,它会打印登录用户名,并且如果端口在 firewalld 中看起来是关闭的,它还会打印防火墙提示。 ``` # 1. 设置管理员密码(以哈希值存储;默认用户名为 'admin',除非指定了 --user) sudo vulnscan-ai dashboard --set-password # 2. 运行它(前台运行),或者启用该服务 sudo vulnscan-ai dashboard # https://:65101/ sudo systemctl enable --now vulnscan-ai-dashboard ``` 默认情况下,它**仅绑定到 localhost** — 可通过 SSH 隧道访问 (`ssh -L 65101:localhost:65101 host`)。要让特定机器访问,请将它们添加到 允许列表(通过 CLI 或 dashboard 本身);随后服务器也会监听 网络,但**仅**为允许列表中的客户端(和 localhost)提供服务: ``` sudo vulnscan-ai dashboard --allow 10.0.0.0/24 --allow 192.168.1.5 sudo vulnscan-ai dashboard --list # show user/port/bind/allow-list ``` 在设置密码之前它拒绝启动,因此发现结果永远不会在未经身份验证的情况下暴露。端口 (`--port`,默认 65101) 和绑定地址 (`--bind`) 是可覆盖的。 ### 从 Dashboard 进行扫描和修复 - 顶部的**摘要磁贴**显示总数和每个严重级别的计数,此外,当有任何发现匹配时,还会显示一个 **actively-exploited (CISA KEV)** 磁贴和一个 **EPSS ≥50%** 磁贴 — 利用信号会直接显示在前面,而不是被埋没在列表中。 - **Scan now**(顶部按钮)在后台运行配置的扫描器,并在完成后刷新页面。 - **Preview fix**(针对每个发现)会向 AI 请求修复建议并显示该 计划 — 属于 dry-run(空运行),不会执行任何操作。需要配置 AI 提供商。 - **Apply fix** 实际上会在主机上运行修复(事务性,并带有 自动回滚)。它**默认关闭** — 除非您在配置中使用 `"dashboard_allow_fix": true` 选择开启,否则 dashboard 保持只读状态。只有 在那之后“Apply”按钮才会出现。(登录 + 允许列表仍然会控制访问权限。) 向网络开放它分为两层:应用程序允许列表**和**主机 防火墙。firewalld 默认阻止该端口 — 请仅为您的客户端允许该端口: ``` sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" \ source address="192.168.0.0/24" port port="65101" protocol="tcp" accept' sudo firewall-cmd --reload ``` ## 安全模型 - 模型**仅提出**命令建议;它从不自行执行任何操作。 - 建议的命令在运行前必须经过拒绝列表检查 (`rm -rf /`、`mkfs`、`curl|sh`、 `setenforce 0`、`--nodeps`、软件包移除、加密策略降级等)。 - 除非您传递 `--yes`,否则如果没有针对每个发现的批准,则不会运行任何命令。 - `--dry-run` 会在报告中记录完整的计划,而不会对系统产生任何影响。 - 需要重启的修复会在输出和报告中标记出来。 - 配置/服务修复是**事务性**的:备份 → 应用 → 重启前验证 → 重新加载 → **失败时自动回滚**,因此糟糕的编辑不会导致服务停滞。稍后可以使用 `rollback` 进行还原。 ## 布局 ``` vulnscanai/ cli.py # argparse CLI: info/scan/fix/rollback/report/providers/... config.py # config file + env + flag precedence fips.py # FIPS detection, approved hashing, hardened TLS context http.py # stdlib HTTP over the hardened TLS context models.py # Finding / Remediation dataclasses remediation.py # AI prompt, JSON parse, screening, transactional apply+rollback export_fix.py # render fixes as a bash script or Ansible playbook report.py # block model + reportlab / native-PDF / HTML renderers pdfwriter.py # dependency-free PDF writer (built-in fonts) scanners/ # dnf+RHSA, OpenSCAP/OVAL, sshd/systemd/ports hardening, CVE enrich ai/ # claude (default), openai, gemini, kimi, deepseek, mistral, local ``` ## 免责声明 自动化修复会更改实时系统。请审查建议,优先考虑 先执行 `--dry-run`,并在非生产主机上进行测试。AI 建议可能是 错误的 — 批准把关机制的存在是有原因的。 ## 许可证 版权所有 (C) 2026 techhack。基于 **GNU Affero General Public License v3.0 or later** ([AGPL-3.0-or-later](LICENSE)) 授权。这使得项目保持 开源:任何运行修改版本的人 — 包括通过网络作为服务 — 都必须在相同的条款下公开其源代码。 版权所有者保留根据单独的**商业条款**提供软件的权利。贡献将在 [贡献者许可协议](CLA.md) 下被接受(参见 [CONTRIBUTING.md](CONTRIBUTING.md)),该协议保留了该选项。如需商业许可证,请联系 btdt1983@protonmail.com。
标签:AI风险缓解, CSV导出, RHEL, Web报告查看器, 人工智能, 加密, 安全合规, 模块化设计, 漏洞扫描器, 用户模式Hook绕过, 系统运维, 网络代理, 自动化修复