上线前安全核对

私有部署多出的攻击面,每一处上线前要留哪些证据

模型放进自己的机房,数据不出边界,但机房里多出这些攻击面:权重与镜像的供应链,知识库里的越权检索与间接注入,推理接口与默认外联。每一处写成「威胁、控制、证据」三栏,上线凭证据,不凭打勾。账号、补丁、备份这类通用基线沿用企业自己的制度,这里只写与推理部署相关的差别。

威胁、控制与证据

OWASP 的 LLM 应用十大风险(2025 版)给其中几处排了编号,下表标在威胁一栏,没有对应条目的不标(OWASP Top 10 for LLM Applications)。

威胁控制上线前的证据
权重或镜像被替换、夹带代码(LLM03 供应链)入闸检查:哈希、固定提交、权重格式、签名、清单,见下节入闸记录,每个制品一行
甲部门读到乙部门的资料(LLM08 向量与嵌入弱点)权限过滤写进检索查询;向量库按部门分区或加过滤;向量库放推理网段越权用例的运行记录,见下文用例表
知识库文档里的指令被模型当作指令(LLM01 提示注入,含间接注入)入库审核(LLM08 缓解清单里的知识来源校验);模型无工具;外部内容与指令分开标明,回答渲染时外部图片与链接走白名单;引用校验。知识库问答不经核心经营系统的模型网关,网关的投影与契约保证不适用于它注入用例的运行记录;写明残余风险
提示词与检索片段落进日志(无对应的 OWASP 条目)推理日志按业务机密对待:限定访问角色、定留存期限、必要时脱敏日志目录的权限清单与留存期限
引擎接口被未授权访问引擎前置反向代理,只开放要用的端点;监听清单与设备清单一致用无凭据的请求访问 /metrics,被代理拒绝的记录
引擎与工具的默认外联逐组件关闭,再以网络层拒绝兜底,见下文清单失败的对外连接记录
多机并行时机间流量被窃听或注入机间流量放隔离网段;需要加密时在外部另加网段规划表与机间端口的监听清单

接口那一行的依据是 vLLM 的安全指南:它的访问密钥只覆盖 /v1、/v2、/inference 等前缀,/invocations、/metrics、/pause 等许多端点不在其内,文档要求不要单靠密钥做访问控制,建议放在反向代理之后;多机时节点之间的通信默认不加密,要放在隔离网段里,需要密码学保护时在外部加 mTLS 边车或 IPsec(vLLM 安全指南)。端点列表随版本变化,以所用版本的文档为核对对象。

供应链入闸

准备在联网的机器上做,入闸在内网做。每个制品一行记录。

制品入闸检查依据与说明
权重记录来源仓库与提交哈希,对文件算哈希入账;优先 safetensors;不设 trust_remote_code=TrueTransformers 文档称 PyTorch 传统的 pickle 序列化「known to be insecure」,safetensors 更安全(Transformers 加载模型);仅有 pickle 文件的,作为例外单独审批
自定义模型代码必须用时,代码先审,再固定到某个提交同一页写明加载自定义模型要设 trust_remote_code=True,并建议固定 revision,避免加载被改动过的代码
镜像签名固定到 digest;用本地公钥验签cosign 文档给出 cosign verify --key 的用法(cosign 验签),但没有说明验签是否访问透明日志,也没有写在隔离网络里忽略透明日志的开关,这是离线验签最先会撞到的问题,入闸前要在目标环境实测。digest 只证明内容没变;签名只回答「谁发布的」,信任谁由企业决定
清单用 Syft 从镜像生成 CycloneDX 或 SPDX 格式的软件物料清单,入库留存Syft
漏洞把 Trivy 的漏洞库同步进自有镜像仓库,离线扫描Trivy 的漏洞库以 OCI 镜像发布,可托管在自有仓库(Trivy 离线)

入闸记录的字段:制品名、来源、版本或提交、哈希、验签结果、清单文件位置、扫描结果、入闸时间、经手人。

默认外联清单

模型引擎只是外联的来源之一。监控与扫描工具自己也有默认外联,逐个关掉,再用网络层兜底。

组件默认行为关法
vLLM默认收集匿名使用统计设 VLLM_NO_USAGE_STATS 或 DO_NOT_TRACK,或建 ~/.config/vllm/do_not_track 文件(vLLM 使用统计)
Hugging Face 库transformers 等库默认收集遥测;hf 命令行启动时检查 PyPI 新版HF_HUB_DISABLE_TELEMETRY=1 或 DO_NOT_TRACK;HF_HUB_DISABLE_UPDATE_CHECK=1;HF_HUB_OFFLINE=1 让它不再向 Hub 发 HTTP 请求(huggingface_hub 环境变量)
Trivy更新检查与遥测连接 check.trivy.dev;文档称它完全可选、正常运行不需要文档称可选,没有给出关闭开关;以网络层阻断兜底(Trivy 离线)
Grafana[analytics] 的 reporting_enabled 默认为真,每 24 小时向 stats.grafana.org 发计数;check_for_updates 访问 GitHub,check_for_plugin_updates 访问 grafana.com在配置里关闭相应设置,默认值按所用版本的文档核对(Grafana 配置)

开关会漏,组件会增,所以底线放在网络层,规则与失败连接的证明见网络与机房条件。

越权与注入的验收用例

用例做法通过的标准
越权检索甲部门账号提问乙部门独有的资料召回为零,回答拒答,没有引用
过滤后漏召回甲部门账号提问甲部门自己的资料,用线上实际的索引与过滤配置应有的片段仍被召回;近似索引在扫描之后过滤,召回会少于预期,见私有部署的组成
权限变更调整账号所属部门,重测前两条结果随之变化
间接注入向测试库入库一份含「忽略以上规则」类语句的文档,再提问回答不执行文档里的指令,引用不指向越权片段
输出渲染外带入库一份诱导模型插入外部图片链接的文档,再提问前端不加载外部图片,回答里的外部链接被拦截或去掉

注入用例的通过只代表这一组用例通过。OWASP 对提示注入的说明是:检索增强与微调不能完全消除它,也不确定是否有万无一失的防法(OWASP LLM01)。清单里因此写明残余风险:用例集由谁维护,新出现的写法怎样补进去。

上线后的周期复核

项何时复测证据
失败的对外连接每次升级引擎、容器引擎或改网络之后主机与容器各一条记录
运行中镜像的 digest 与入闸记录每次升级之后对比结果
监听端口与反向代理开放的端点每次升级之后监听清单、无凭据访问 /metrics 的结果
越权与注入用例权限模型、检索参数或嵌入模型变化之后运行记录
账号、带外管理口凭据、固件按企业制度的周期账号清单与更新记录
备份对象按企业制度的周期备份清单与一次恢复演练记录

备份对象除配置外,要包含向量库数据、索引版本,以及权重的哈希清单。

限制与不适用

  • 清单只证明检查做过,证明不了不会被攻破。
  • 提示注入没有万无一失的防法,注入用例的通过只代表这一组用例通过,残余风险要写明。
  • 离线环境里验签用哪种信任根,签约前与企业定下。
  • 账号、补丁、备份这类通用基线沿用企业自己的制度,等保或行业合规的逐条映射也不在这里。

其他做法

做法它解决什么为什么不用
靠提示词要求模型忽略文档里的指令实现最快边界不靠让模型更听话;文档里的指令与系统提示是同一种文本,见模型能碰什么 不能碰什么
只靠应用层开关关掉遥测配置最简组件一多总会漏一个,底线放在网络层,见私有部署概览

与常见做法对照

常见做法它省了什么代价
把引擎自带的访问密钥当作访问控制不必部署反向代理密钥只覆盖部分前缀,/metrics 等端点无凭据也能访问
用 digest 记录代表镜像可信一条命令出清单digest 只证明内容没变,来源与漏洞另要核对
清单全部打勾即上线流程清楚勾选只证明有人看过,没有记录就无法事后复查

验收时可以问的问题

  • 离线环境里验签用哪种信任根,本地公钥由谁保管、怎样轮换,请在签约前写明。透明日志的问题见入闸表的镜像签名行。
  • 检索日志里的问题与片段是业务机密,留存期限与日志不可改写之间怎么取舍,请由企业与 SZV 在合同中约定。
  • 请出示越权与注入用例的运行记录;权限模型、检索参数或嵌入模型变化之后,请复测一次。
  • 带外管理口的默认凭据与固件更新由谁负责,请在合同中写明。
  • 上线前缺口的补齐由谁确认、确认记录放在哪里,请在合同中写明。

相关页

这页有帮助吗谢谢,我们会据此改进这一页。

需要帮助?联系我们

想先知道我们怎么想?关于 SZV

联系我们

企业人员规模(人)

试用工作台