facebookresearch/prompt-siren

GitHub: facebookresearch/prompt-siren

专注于大语言模型提示注入攻击与防御研究的工作台,用于开发和测试针对LLM的安全攻击场景。

Stars: 47 | Forks: 17

# Prompt Injection 工作台 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/c9d1fc04bf192008.svg)](https://github.com/facebookresearch/prompt-siren/actions/workflows/ci.yml) 一个用于开发和测试针对大型语言模型攻击的研究工作台,重点关注 prompt injection 漏洞和防御。 ## 核心功能 - **状态机设计**:对 agent 执行进行细粒度控制,以实现高级攻击场景 - **SWE-bench 支持**:在 SWE-bench 的真实代码编辑任务上对 agent 进行基准测试 - **Hydra 配置**:通过参数扫描实现强大的实验编排 - **可扩展架构**:用于自定义 agent、攻击和环境的插件系统 - **使用限制**:内置成本和资源控制 - **实验追踪**:自动缓存和结果整理 ## 快速开始 ### 安装 安装核心包及所需的可选功能: ``` # 完整安装(所有功能) uv sync --all-extras # 或仅安装所需组件: uv sync --extra agentdojo # AgentDojo benchmark support uv sync --extra swebench # SWE-bench support uv sync --extra docker # Docker sandbox manager uv sync --extra playwright # Web automation environment # 组合多个扩展 uv sync --extra agentdojo --extra docker ``` **可用的可选依赖项:** | 附加组件 | 描述 | |-------|-------------| | `agentdojo` | AgentDojo 数据集、环境和攻击 | | `swebench` | 用于代码编辑基准测试的 SWE-bench 数据集 | | `docker` | Docker 沙箱管理器 | | `playwright` | Web 自动化环境 | 设置环境变量: ``` cp .env.example .env # Fill in API keys ``` 导出默认配置: ``` # 导出到 ./config(默认) uv run prompt-siren config export # 导出到自定义目录 uv run prompt-siren config export ./my_config ``` 运行实验: ``` # 运行仅良性评估 uv run prompt-siren run benign +dataset=agentdojo-workspace # 运行攻击 uv run prompt-siren run attack +dataset=agentdojo-workspace +attack=template_string # 运行 SWE-bench 评估(需要 Docker) uv run prompt-siren run benign +dataset=swebench # 运行 SWE-bench Lite(较小 benchmark) uv run prompt-siren run benign +dataset=swebench dataset.config.dataset_name="SWE-bench/SWE-bench_Lite" # 覆盖参数 uv run prompt-siren run benign +dataset=agentdojo-workspace agent.config.model=azure:gpt-5 # 参数扫描(multirun) uv run prompt-siren run benign --multirun +dataset=agentdojo-workspace agent.config.model=azure:gpt-5,azure:gpt-5-nano # 验证配置而不运行 uv run prompt-siren config validate +dataset=agentdojo-workspace # 使用包含环境/攻击的配置文件(无需覆盖) uv run prompt-siren run attack --config-dir=./my_config ``` **提示**:环境和攻击可以通过 CLI 覆盖指定,也可以直接包含在配置文件中。有关详细信息,请参阅 [配置指南](docs/configuration.md)。 ## 分析结果 运行实验后,使用 `results` 命令聚合和分析结果: ``` # 使用默认设置查看结果(pass@1,按所有配置分组) uv run prompt-siren results # 指定自定义 jobs 目录 uv run prompt-siren results --jobs-dir=./jobs # 按不同维度对结果分组 uv run prompt-siren results --group-by=model uv run prompt-siren results --group-by=env uv run prompt-siren results --group-by=agent uv run prompt-siren results --group-by=attack # 计算 pass@k 指标(k>1) uv run prompt-siren results --k=5 uv run prompt-siren results --k=10 # 同时计算多个 pass@k 指标 uv run prompt-siren results --k=1 --k=5 --k=10 # 不同的输出格式 uv run prompt-siren results --format=json uv run prompt-siren results --format=csv ``` ### 理解 pass@k 指标 - **pass@1**(默认):对每个任务的所有运行分数取平均值。这是一个显示平均性能的连续指标。 - **pass@k** (k>1):二进制成功指标。如果 k 次运行中至少有一次达到满分 (1.0),则任务“通过”。当有超过 k 个样本可用时,使用统计估算。 ### 结果列 结果表包括: - **配置列**:`dataset`、`agent_type`、`agent_name`、`attack_type` - **指标列**:`benign_pass@k`、`attack_pass@k` - pass@k 分数 - **元数据列**: - `n_tasks` - 聚合的任务总数 - `avg_n_samples` - 每个任务的平均运行次数 - `k` - k 值(当计算多个 pass@k 指标时) ## 平台要求 - **Python**:3.10+ - **用于开发的包管理器**:`uv`(用于依赖管理) - **操作系统**:Linux 或 macOS(不支持 Windows) - **Docker**:SWE-bench 集成和某些环境所需 - 必须正在运行且可访问 - 基础镜像应具有可用的 `/bin/bash`(Alpine 镜像需要 `bash` 包) ## 文档 - **[配置指南](docs/configuration.md)** - Hydra 配置和参数覆盖 - **[使用限制](docs/usage_limits.md)** - 资源限制和成本控制 - **[插件](docs/plugins/README.md)** - 添加自定义 agent、攻击和环境 ## 开发 ### 代码检查、格式化和类型检查 ``` # Lint 和格式化 uv run ruff check --fix uv run ruff format uv run ty check # 测试 uv run pytest -v ``` ### 为 SWE-bench 预构建 Docker 镜像 主要的 `prompt-siren` CLI 仅适用于预构建的 Docker 镜像。要构建 SWE-bench 评估所需的所有镜像,请使用 `prompt-siren-build-images` 命令: 推送的默认注册表:`ghcr.io/ethz-spylab/prompt-siren-images`。使用 `--registry ""` 禁用推送或使用您自己的注册表覆盖。 ``` # 构建所有镜像(良性、恶意服务容器及 pairs) uv run prompt-siren-build-images # 仅为特定实例构建镜像 uv run prompt-siren-build-images --instance-ids django__django-11179 --instance-ids astropy__astropy-12907 # 限制要构建的实例数量(适用于测试) uv run prompt-siren-build-images --max-instances 5 # 使用 SWE-bench Lite 数据集 uv run prompt-siren-build-images --dataset "SWE-bench/SWE-bench_Lite" # 跳过构建某些镜像类型 uv run prompt-siren-build-images --skip-benign # Skip benign task images uv run prompt-siren-build-images --skip-malicious # Skip malicious task service images uv run prompt-siren-build-images --skip-pairs # Skip combined pair images # 重建现有镜像而非跳过 uv run prompt-siren-build-images --rebuild-existing # Tag 并推送镜像到 registry uv run prompt-siren-build-images --registry my-registry.com/myrepo # 启用详细日志记录以进行调试 uv run prompt-siren-build-images --verbose # 指定自定义 cache 目录 uv run prompt-siren-build-images --cache-dir /path/to/cache ``` **常用工作流:** ``` # 快速测试:为单个实例构建镜像 uv run prompt-siren-build-images --instance-ids django__django-11179 # 生产环境完整构建:构建所有镜像并推送到 registry uv run prompt-siren-build-images --registry my-registry.com/swebench # 更新后重建:强制重建现有镜像 uv run prompt-siren-build-images --rebuild-existing # 仅构建良性镜像(无攻击场景) uv run prompt-siren-build-images --skip-malicious --skip-pairs ``` # 许可证 Prompt Siren 根据 [MIT 许可证](https://github.com/facebookresearch/prompt-siren/blob/main/LICENSE.md) 授权。
标签:AgentDojo, AIGC安全, Apex, DLL 劫持, Facebook Research, Hydra配置, Python, SWE-bench, Web自动化, 人工智能, 代码编辑, 大语言模型, 实验管理, 提示注入, 攻击模拟, 无后门, 机器学习, 沙箱环境, 漏洞分析, 特征检测, 状态机, 用户模式Hook绕过, 请求拦截, 调试插件, 路径探测, 逆向工具, 集群管理, 驱动签名利用