Skip to content

面试题 ​

初级 ​

1. 为什么加载来路不明的 .bin(pickle)模型文件等于执行远程代码?

pickle 是栈式虚拟机指令流而非纯数据格式。GLOBAL/STACK_GLOBAL opcode 会 import 任意模块的属性,REDUCE 以栈顶可调用对象执行调用——构造 __reduce__ 返回 (os.system, (cmd,)) 的类,unpickle 时就会执行 os.system(cmd)。因此扫描器(picklescan/ModelScan/Fickling)都用 pickletools.genops 只读遍历指令流、静态收集 import 引用做风险分级,而不是真的加载。

2. safetensors 解决了什么问题?没解决什么?

解决:格式层面删除全部可执行语义(只有 JSON 头 + 原始字节缓冲区),结构性免疫反序列化 RCE,且支持零拷贝内存映射。没解决:权重本身的投毒/后门——一个后门权重文件可以 hash 全对、格式全合法。所以"用了 safetensors"不能替代行为评测与来源可信。

3. Hugging Face 的 pickle 扫描是怎么工作的?边界在哪?

平台用 picklescan 提取 pickle 文件引用的 import 列表(基于 pickletools.genops,不执行),在文件页展示、可疑引用高亮。边界:官方自述 best-effort;解析器差异可被利用(2025 年 nullifAI 逃逸事件,恶意模型潜伏约 8 个月);不覆盖权重后门;ClamAV 扫描只覆盖已知恶意软件特征。

4. 什么是 MCP tool poisoning 和 rug pull?

tool poisoning:把模型可见、用户 UI 不展示的隐藏指令写进工具 description,操纵 Agent 执行恶意动作(如读私钥文件并从参数外带)。rug pull:用户批准的良性 Server 事后悄悄更新工具描述或代码。防线都是"批准 = 代码 digest + 描述快照 + 版本"的绑定校验。

5. PyTorch 2.6 的 torch.load 默认行为变化是什么?

2.6 起默认 weights_only=True:只允许反序列化张量与基础数据结构,禁止任意类构造,从而把 pickle RCE 的默认攻击面关掉大半。但它只防"恶意代码",不防权重后门。

中级 ​

6. 设计一条模型工件的签名-验证链,说明为什么签 merkle root 而不是直接签权重文件。

逐文件 sha256 作为 merkle 叶节点聚合出 root,对 root 签名;验证时先验签、再重算 root、再逐叶对比。原因:(1)大模型权重上百 GB,签名单一 root 让验证 O(1);(2)merkle 结构让任何单文件篡改了 root 的同时,还能定位到具体叶子(事件响应需要);(3)清单可以扩展携带元数据(版本、评测结论)。生产上用 Sigstore/cosign 做签名(OIDC 身份、短期证书、Rekor 透明日志),google/model-transparency 是这个思路的现成实现。

7. canary 触发率检测后门的原理、阈值怎么定?

构造一批真实标签固定且注入候选触发器的样本,统计模型输出错误标签的比例。干净模型对决策无关扰动的预测不应改变(期望 ≈0),带后门模型会把触发器关联到投毒目标标签(比例显著升高)。阈值是假设检验问题:由 canary 样本量 n、可接受误报 α、要检出的最小触发率差决定,不是拍 0.5;样本量要用功效分析算。demo 数据:干净 0.040 vs 后门 0.740(n=100,阈值 0.5)。

8. 为什么后门检测"没有银弹"?列举三条互补的检测线。

后门是权重里的统计关联,攻击者可以训练到"干净输入下分布与干净模型不可区分"。三条互补线:canary 触发率(行为层)、红队探针集对比基线(行为层)、异常权重分布检测(参数层)。Sleeper Agents 实验证明后门可挺过安全微调,所以任何单一信号都可被对抗绕过,组合才有纵深。

9. 权重水印的检测统计量是什么?有哪些失效模式?

对密钥派生的 ±1 伪随机模式求逐坐标相关:未标记权重期望 0,标记权重期望为嵌入强度 s,阈值取 s/2。失效模式:量化步长大于 s(物理抹除,demo 实测)、针对性微调/裁剪稀释相关、攻击者对权重做分布变换后再分发。所以水印定位是举证工具不是访问控制,strength 必须大于发布链路最粗量化步长。

10. Agent 代码执行沙箱怎么选型?egress 控制为什么这么关键?

gVisor(syscall 拦截、毫秒启动、隔离较弱)/ Firecracker microVM(KVM 隔离、百毫秒启动、AWS Lambda 同款)/ 托管沙箱如 E2B(Firecracker 产品化 + 快照)。egress 关键是因为 prompt injection 的传导链最终都要出站:恶意内容 → 模型决策 → 工具动作 → 外带数据。沙箱只拦"执行",egress 白名单才断"外带"。

高级 ​

11. 你的组织要接入 20 个第三方 MCP Server,设计完整的供应链管控方案。

分两层。Registry 层:curated 目录登记每个 Server 的代码 digest、维护者信誉审查记录、批准版本、运行策略(沙箱档位/egress 白名单/动作确认级别);发布新版需重新审批。Gateway 层(运行时):每次工具列表变更做三件事——版本锁定检查(防 rug pull)、当前代码 digest 与登记值比对(防服务器端替换)、description 与审批快照 diff(防 tool poisoning);全部写入只增审计日志。执行层:所有工具调用进 Firecracker 沙箱 + egress 代理白名单。运营:工具加载阻断率、描述 diff 告警量作为水位指标;事件剧本含"回滚到上一已批准版本"快捷路径。

12. 论证"训练不可复现"对模型 provenance 设计的影响,以及工程上怎么补救。

权重级 bitwise 复现需要锁定数据顺序、硬件、kernel、精度模式与随机源,实践中几乎不可达成,因此 provenance 无法像软件 SLSA 那样锚定"构建结果",只能锚定"流程与身份":签名绑定发布身份与 CI 工作流(Sigstore OIDC),清单绑定输入(数据清单、代码 commit、镜像 digest、评测报告),透明日志提供事后可审计性。补救的核心是把"结果验证"换成"多信号交叉":行为评测 + canary + 社区信誉 + 平台扫描记录共同构成置信度。

13. 一个声称"100% 检出 pickle 恶意负载"的商业扫描器,你如何评估?

要求对方在三个维度上给数据:(1)对抗样本集上的表现——解析器差异(nullifAI 类)、多态 pickle、torch 容器嵌套、opcode 混淆后的检出率与扫描器自身的解析正确性;(2)误报运营成本——在真实 HF 流量上的 unsafe/误报率分布(业界公开数据是 96% 量级误报);(3)覆盖面——非 pickle 格式(SavedModel Lambda、ONNX 自定义算子)是否覆盖。任何"100%"声明本身即红旗:这是静态分析与对抗构造的军备竞赛,不存在终态。

14. 模型 API 被怀疑遭遇蒸馏抽取,如何确认并处置?

确认:API 流量画像(覆盖广度、形似评测集的查询、无会话上下文、系统化扫参数);构造指纹输入(特殊构造的输入-输出对)探测可疑下游模型的错误一致性;权重水印检测(若对方发布了开源权重)。处置:限流与分级定价、对高风险输出加扰动、指纹命中后进法律流程。同时复盘自身:logits 是否暴露过多、是否有未授权批量导出路径。

15. EU AI Act 的 GPAI 义务里,哪些条款直接要求供应链机制?

技术文档(Article 53)要求保留训练数据摘要与评测记录——直接对应数据清单与行为评测存档;系统性风险模型(训练算力 >10^25 FLOPs,Article 55)要求系统性风险评估与对抗测试——对应红队流程;2026-08 起强制执行的罚则使这些从最佳实践变成法定义务。工程上把门禁 G1-G3 的日志聚合成技术文档,是最低成本合规路径。

Released under CC-BY-SA-4.0 License.