lindsey98/camel-prompt-injection

GitHub: lindsey98/camel-prompt-injection

CaMeL 是论文「从设计上击败提示注入」的实验代码库,提供基于解释器与安全策略引擎的 LLM 提示注入防御机制及可复现的评测框架。

Stars: 0 | Forks: 0

# `CaMeL`:[从设计上击败提示注入](https://arxiv.org/abs/2503.18813) Edoardo Debenedetti1,3, Ilia Shumailov2, Tianqi Fan1, Jamie Hayes2, Nicholas Carlini2, Daniel Fabian1, Christoph Kern1, Chongyang Shi2, Florian Tramèr3 1Google, 2Google DeepMind, 和 3ETH Zurich ## 前置条件 1. 安装依赖项: pip install -r requirements.txt 2. 将 `.env.example` 重命名为 `.env` 并填入你的 API 密钥 (`OPENAI_API_KEY`、`ANTHROPIC_API_KEY`、`GOOGLE_API_KEY`)。 3. 在运行之前将密钥加载到你的环境中: set -a && source .env && set +a 模型始终以 `provider:model_name` 的格式传递。在无攻击情况下, 根据 CaMeL 实用性表现最好的三个模型——如下面的示例中所使用的——是: `openai:o3-2025-04-16`(带有 `--reasoning-effort high`)、 `openai:o4-mini-2025-04-16`(带有 `--reasoning-effort high`)和 `anthropic:claude-sonnet-4-20250514`。 默认情况下,运行结果会报告**实用性**(无攻击)。添加 `--run-attack` 也可以报告在 AgentDojo 的 `important_instructions` 攻击下的**安全性**。 ## 运行模式 有三种运行方式,总结如下,下面有详细说明: | 模式 | 标志 | 是什么 | | --- | --- | --- | | **无 CaMeL(基线)** | `--use-original` | 原生工具调用 API,无防御 | | **CaMeL,无策略** | *(无)* | CaMeL 解释器,安全策略**关闭** | | **CaMeL + 策略** | 两个步骤,见下文 | 强制执行安全策略的 CaMeL 解释器 | ### 1. 无 CaMeL — 原生工具调用(`--use-original`) 这是未防御的基线(即“原生工具调用 API”的数值)。它使用常规的工具调用循环运行模型,没有 CaMeL 解释器。 ``` python main.py openai:o3-2025-04-16 --reasoning-effort high --use-original ``` ### 2. 无安全策略的 CaMeL(单步) 在**没有额外标志**的情况下运行 CaMeL 会使用 CaMeL 解释器,但**不会**强制执行任何安全策略(它内部使用了一个无操作策略引擎)。这就是 `+camel` 配置。 ``` python main.py anthropic:claude-sonnet-4-20250514 ``` ### 3. 带有安全策略的 CaMeL(`+camel+secpol`)— 两个步骤 ``` # 步骤 1 — 生成 CaMeL traces(写入到 ./logs/+camel/...) python main.py openai:o3-2025-04-16 --reasoning-effort high # 步骤 2 — 在强制执行 security policies 的情况下重放相同的代码 python main.py openai:o3-2025-04-16 --reasoning-effort high --replay-with-policies ``` 这两个步骤中的模型**必须完全相同**(重放时会根据 pipeline 名称查找 trace)。**不要**在第 1 步中传入 `--q-llm`,否则 trace 路径在第 2 步中将无法匹配。 ## 在攻击下运行(安全性) 默认情况下,运行会报告无注入的**实用性**。添加 `--run-attack` 以注入 AgentDojo 的 `important_instructions` 提示注入攻击;随后运行将同时报告**实用性**和**安全性**(安全性 = 攻击者成功的注入任务比例,因此**越低越好**)。 `--run-attack` 可以与上述每种模式组合使用: ``` # 受攻击下的 No CaMeL(baseline) python main.py openai:o3-2025-04-16 --reasoning-effort high --use-original --run-attack # 受攻击下的 CaMeL(无 policies) python main.py anthropic:claude-sonnet-4-20250514 --run-attack ``` 对于**在攻击下带有策略的 CaMeL**,仍然是相同的两个步骤——只需将 `--run-attack` 添加到**两者**中即可。第 1 步在存在注入的情况下生成 trace;第 2 步在强制执行安全策略的情况下重放它们(这就是攻击实际上应该被阻止的地方): ``` # 步骤 1 — 生成注入 attack 的 traces python main.py openai:o3-2025-04-16 --reasoning-effort high --run-attack # 步骤 2 — 在强制执行 policies 的情况下重放 -> security numbers python main.py openai:o3-2025-04-16 --reasoning-effort high --run-attack --replay-with-policies ``` ## 常用选项 - `--run-attack` — 同时运行 `important_instructions` 攻击并报告安全性(如果是仅实用性/无攻击运行,则省略它)。 - `--reasoning-effort {low,medium,high}` — **仅**影响 OpenAI 推理模型(`o3`、`o4-mini`、`o1`、`codex`)。会被 Gemini / Claude / GPT-4.1 忽略。 - `--thinking-budget-tokens N` — Anthropic 思考预算(例如,对于带推理的 Claude Sonnet 4 设为 `16000`)。这与 `--reasoning-effort` 是分开的。 - `--suites workspace banking travel slack` — 限制为特定的测试套件。 - `--user-tasks user_task_0 user_task_1` — 限制为特定的用户任务。 - `--q-llm provider:model` — 使用更便宜的模型作为隔离 LLM(仅适用于单步 CaMeL 运行,不适用于重放)。 - `--eval-mode {normal,strict}` — 策略的依赖传播模式(`strict` 对应于 `+camel+secpol+strict`)。 完整列表:`python main.py --help`。 ### 复现顶级模型 在无攻击的 CaMeL 实用性方面表现最好的三个模型是 **o3 (high)**、 **o4-mini (high)** 和 **Claude Sonnet 4**(无推理)。要通过 `+camel+secpol` pipeline(实用性和安全性,均作为两步重放)运行这三个模型,请使用辅助脚本: ``` set -a && source .env && set +a ./scripts/run_top3.sh # 例如,限制为单个 suite: SUITES="--suites workspace" ./scripts/run_top3.sh ``` ### 示例 ``` # Baseline(无 CaMeL),受 attack -> security numbers python main.py anthropic:claude-sonnet-4-20250514 --use-original --run-attack # OpenAI reasoning model(高 reasoning effort),CaMeL + policies python main.py openai:o3-2025-04-16 --reasoning-effort high python main.py openai:o3-2025-04-16 --reasoning-effort high --replay-with-policies # Claude Sonnet 4(16k thinking budget),CaMeL + policies,仅限 workspace python main.py anthropic:claude-sonnet-4-20250514 --thinking-budget-tokens 16000 --suites workspace python main.py anthropic:claude-sonnet-4-20250514 --thinking-budget-tokens 16000 --suites workspace --replay-with-policies ``` ## 常见问题解答 你可以将其添加到 [`models.py`](src/camel/models.py) 文件中的 `_supported_model_names` 变量中。键是带有指定提供商的模型名称(查看该提供商的 API),而值是当模型被问及“你是什么模型?”时它所回答的内容。请记住,OpenAI 推理模型反而存储在 `_oai_thinking_models` 变量中。 请在此仓库中提一个 issue。请注意,我们不打算修复 bug,因为此代码库仅作为研究制品提供。 ## 运行测试和 linter ``` ruff check --fix ruff format pyright pytest ``` 这不是官方支持的 Google 产品。本项目不符合参与 [Google 开源软件漏洞奖励计划](https://bughunters.google.com/open-source-security) 的条件。
标签:AI安全, Chat Copilot, DLL 劫持, Petitpotam, TruffleHog, 人工智能, 大语言模型, 学术论文, 提示词注入防御, 用户模式Hook绕过, 逆向工具