Files
autumn-recruitment/06.AI/agent-design/沙箱权限治理_test.md
T

147 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags: [test/review, ai, agent-design, sandbox]
create time: 2026-08-09 12:00
---
# 沙箱权限治理 — 测试题
## 概述
本测试覆盖代码执行隔离方案(Docker/gVisor/Wasm/Firecracker)、资源限制四层架构、工具白名单设计、审计日志规范以及 Prompt Injection 纵深防御策略。共 10 道题目(6 选择 + 3 填空 + 1 简答)。
---
## 一、选择题(6道,由浅入深)
> **难度阶梯**: Q1-Q2 基础概念 → Q3-Q4 核心原理 → Q5-Q6 深入应用/边界场景
### Q1(基础)— 考察定义层面
以下哪种代码执行隔离方案的启动速度最快?
A. Docker 容器(~2s)
B. gVisor(~500ms)
C. WebAssembly / Wasm(~10ms)
D. Firecracker MicroVM(~125ms)
### Q2(基础)→
沙箱的 Docker 核心配置中,`ReadOnlyRootFilesystem: true` 和 `NetworkMode: "none"` 的主要作用是什么?
A. 提高执行速度
B. 防止恶意代码修改宿主文件系统并切断外网访问
C. 增加内存上限
D. 自动重启异常进程
### Q3(进阶)— 核心原理
工具白名单设计的核心理念是:
A. 拦截所有包含危险关键词的工具调用
B. 黑名单模式——列出禁止调用的工具
C. 白名单模式——显式声明允许的工具,其余全部拒绝
D. 让 LLM 自己判断该调用哪个工具
### Q4(进阶)— 比较/辨析
关于防 Prompt Injection 的三层防御,以下哪个匹配是错误的?
A. 层级一(系统提示注入检测)— 分隔符保护、角色隔离、指令优先级
B. 层级二(用户输入净化)— 关键字过滤、长度限制、转义特殊字符
C. 层级三(行为防护)— 工具调用二次确认、输出过滤、速率限制
D. 单层分隔符保护足以完全防御所有 Prompt Injection 攻击
### Q5(深入)— 场景推理
一个 Agent 需要执行用户提供的 Python 代码并返回结果。以下安全配置组合最合理的是:
A. 普通 Linux 进程 + 无网络限制 + 无限时
B. Docker 容器只读文件系统 + 无特权 + 切断网络 + 256MB 内存上限 + 10s 超时
C. Wasm + 只读文件系统 + 有完整网络访问权 + 1h 超时
D. 直接在宿主机上运行用户代码,加一个 kill -9 的兜底脚本
### Q6(深入)— 源码级/边界场景
关于审计日志的设计,以下哪个字段不是必须的?
A. trace_id — 一次对话的唯一标识
B. timestamp — ISO8601 精确到毫秒
C. user_id — 发起者身份
D. model_version — LLM 的具体版本号
---
## 二、填空题(3道)
### F1 — 填空1
资源限制分为四层,每层针对不同类型的 DoS 风险:时间维度用_____控制强制中断无限循环;CPU 维度用 CFS Quota 限制计算占比;内存维度用 cgroup limit 配合 OOM Killer 兜底;网络维度用 eBPF 策略做白名单域名 + 内网隔离。
> **提示**: 第一个空对应原文时间维度的关键词。
### F2 — 填空2
防 Prompt Injection 的核心原则是纵深防御:至少_____层组合形成互补。没有任何单一手段能完全防御。具体来说,层级一是系统提示注入检测(_____保护),层级二是用户输入净化(关键字过滤),层级三是行为防护(高危操作需人工审批)。
> **提示**: 第一空填数字,第二空填一种技术名称。
### F3 — 填空3
工具调用必须使用结构化 JSON 而不是自然语言的原因有三点:① 可被程序化校验;② 参数类型明确不需要_____解析;③ IDE 可提供自动补全和 schema hint 提高 LLM 出参准确率。
> **提示**: 第二个原因中的技术缩写。
---
## 三、简答题(1道)
### S1
某 AI 编程助手项目允许 Agent 执行用户的代码片段以提供实时反馈。请设计一个完整的安全治理方案,要求涵盖:
1. 执行环境的隔离方案选型及理由
2. 资源限制的四层设计
3. 工具调用白名单策略
4. 审计追踪与告警机制
> **答题框架提示**:
> 1. 各层的防护目标
> 2. 方案间的依赖关系
> 3. 异常场景的应急处理
---
## 参考答案与解析
### 选择题答案
| 题号 | 正确答案 | 解析 |
|------|---------|------|
| Q1 | C | Wasm 启动只需约 10ms,远超 Docker(~2s)和 gVisor(~500ms)。但代价是不支持文件系统操作——适合纯计算场景。Firecracker ~125ms 是最快的虚拟机方案。 |
| Q2 | B | 只读文件系统防止恶意代码写入或修改文件;NetworkMode: none 切断外网阻止数据外泄。这两项是沙箱的基础安全屏障。 |
| Q3 | C | 白名单设计理念:不依赖黑名单拦截(总有漏网之鱼),而是显式声明允许的工具,其余全部拒绝。这是一种零信任思路。 |
| Q4 | D | D 是错误的!没有任何单一手段能完全防御 Prompt Injection。分层防御才是正道——至少三层组合形成互补。 |
| Q5 | B | Docker 容器提供最全面的隔离能力:只读文件系统、无特权、断网、内存/CPU 限制、超时控制。Wasm 不支持文件系统不适合需要写文件的操作。直接宿主运行完全没有安全保障。 |
| Q6 | D | 审计日志的核心字段是 trace_id、timestamp、user_id、tool_name、input_snapshot、output_snapshot、result_status、latency_ms、cost_tokens。model_version 虽有用但不是必记字段。 |
### 填空题答案
| 题号 | 答案 | 解析 |
|------|------|------|
| F1 | `超时控制` | 四层资源限制的典型值:全局超时≤30s,子任务超时≤10s,单步超时≤5s。外层自动取消内层上下文。 |
| F2 | `三`;`分隔符` | 纵深防御至少三层:分隔符保护阻止指令混淆,关键字过滤拦截已知 injection patterns,行为防护限制实际损害。 |
| F3 | `NLP` | 结构化 JSON 避免了自然语言的歧义性。LLM 输出的 tool_call JSON 可以被 Schema Validator 和 Policy Engine 程序化检查参数格式、工具名是否在白名单、用户是否有权限。 |
### 简答题参考答案
S1:**参考答案要点**:
1. **隔离方案**:选 Docker 容器而非 Wasm(需要文件系统操作支持),也非 gVisor(Google Cloud 专属)。核心配置:只读根文件系统、Privileged=false、NetworkMode=none、内存/CPU 限制、10s 超时。
2. **四层限制**:超时控制(全局30s/子任务10s/单步5s)+ CFS Quota(0.5 CPU)+ cgroup 内存上限(256MB)+ eBPF 网络白名单。
3. **白名单策略**:预注册 8 个 Tool(代码生成、Git 操作、文档搜索等),Tool Calling Schema 通过 JSON Schema validator 校验参数格式,Policy Engine 检查工具名和权限。
4. **审计与告警**:每次工具调用记录 trace_id/timestamp/user_id/tool_name/input/output/result/latency/cost。写入 Elasticsearch 支持按 trace_id 回溯。设置 RateLimit/SecurityAlert/PerformanceAlert 三类告警。
5. **应急处理**:检测到异常时立即终止容器、冻结该用户的所有 token、通知安全团队介入。
**评分标准**:答出任意 2 个要点即可得满分;完全正确需覆盖全部要点。
## 关联笔记
- [[Eino DAG 工作流设计]]
- [[循环状态机在Agent中的应用]]