TGKDre/autonomous-injection-agent

GitHub: TGKDre/autonomous-injection-agent

一个由LLM驱动的自主红队Agent,能够在无需人工干预的情况下发现并利用AI应用中的提示词注入漏洞。

Stars: 1 | Forks: 0

# 自主提示词注入 Agent [![License](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](LICENSE) [![Last Commit](https://img.shields.io/github/last-commit/TGKDre/autonomous-injection-agent?style=flat-square&color=blueviolet)](https://github.com/TGKDre/autonomous-injection-agent/commits/main) [![Python](https://img.shields.io/badge/python-3.10%2B-3776AB?style=flat-square&logo=python&logoColor=white)](https://www.python.org/) [![Anthropic](https://img.shields.io/badge/Anthropic-compatible-5436DA?style=flat-square&logo=anthropic)](https://www.anthropic.com/) [![OpenAI](https://img.shields.io/badge/OpenAI-compatible-412991?style=flat-square&logo=openai)](https://openai.com/) [![Docker](https://img.shields.io/badge/Docker-compatible-2496ED?style=flat-square&logo=docker&logoColor=white)](https://www.docker.com/) ## 概述 一个由 LLM 驱动的自主红队 Agent,能够在**启动后无需任何人工干预**的情况下,发现并利用 AI 支持的 Web 应用程序中的提示词注入漏洞。该 Agent 会探测端点,跨 7 个攻击类别生成新型 payload,执行投递,评估响应,对部分成功的 payload 进行变异,并生成结构化的研究报告。 是 [agent-security-sandbox](https://github.com/TGKDre/agent-security-sandbox) 的配套项目。 ## 架构 ``` run_attacker.py Entry point agents/ attacker_agent.py AutonomousAttackerAgent -- drives the full assessment loop tool_registry.py 4 tools: probe_endpoint, inject_payload, mutate_payload, record_finding (all sandboxed, local HTTP only) judges/ injection_judge.py Multi-signal evaluator: keyword matching + instruction-echo detection + structural pattern matching targets/ vulnerable_app/ app.py Deliberately vulnerable Flask + Claude target app Dockerfile Container definition scenarios/ targets.yaml Attack surface definitions and mutation strategies reports/ Timestamped JSON + Markdown output per run docker-compose.yml One-command target environment ``` ### Agent 循环 该 Agent 在完全自主的智能体循环中运行,最多可达 20 轮: 1. **侦察** -- 在每个攻击面上调用 `probe_endpoint` 以发现字段名称、参数结构以及任何可见的系统提示词片段。 2. **Payload 生成** -- LLM 跨 7 个攻击类别生成新型注入候选:角色劫持、指令覆盖、数据提取、上下文中毒、分隔符注入、目标劫持和越狱。 3. **投递** -- 调用 `inject_payload`,将 payload POST 到目标并捕获完整响应。 4. **评估** -- `InjectionJudge` 使用三个独立的检测层对每个响应的入侵信号进行评分。结果会反馈到 Agent 上下文中。 5. **变异** -- 对于部分成功的 payload,Agent 会使用选定的策略(紧急性框架、Base64 编码、嵌套分隔符等)调用 `mutate_payload`,并使用演化后的变体进行重试。 6. **记录** -- 确认的入侵通过 `record_finding` 进行记录,包含攻击面、payload、严重性、响应摘录和攻击类别。 当达到 `MAX_TURNS` 或覆盖所有攻击面时,Agent 将停止运行。 ## 快速开始 ``` git clone https://github.com/TGKDre/autonomous-injection-agent.git cd autonomous-injection-agent pip install -r requirements.txt # 启动沙盒化目标(需要 Docker) export ANTHROPIC_API_KEY=sk-ant-... docker compose up -d --build # 启动自主攻击者 python run_attacker.py \ --target http://localhost:5050 \ --model anthropic/claude-haiku-4-5-20251001 \ --turns 20 ``` 报告将以 JSON 和 Markdown 格式写入 `reports/` 目录。 ## 使用方法 ### 基础侦察与攻击 ``` python run_attacker.py --target http://localhost:5050 --model anthropic/claude-haiku-4-5-20251001 ``` ### 自定义轮数限制 ``` python run_attacker.py --target http://localhost:5050 --model openai/gpt-4o-mini --turns 10 ``` ### 使用 OpenAI 作为攻击模型 ``` export OPENAI_API_KEY=sk-... python run_attacker.py --target http://localhost:5050 --model openai/gpt-4o-mini --turns 20 ``` ## 结果 Agent 会在 `reports/` 目录下生成带有时间戳的 JSON 和 Markdown 格式研究报告。每份报告包含: - 发现的端点及其参数结构 - 每个攻击类别投递的 payload - 带有严重性评级的入侵判定 - 显示注入证据的响应摘录 - 展示 payload 演化过程的变异历史 - 汇总统计信息(探测的攻击面总数、确认的入侵数、变异的 payload 数) ## 目标应用程序 `targets/vulnerable_app/app.py` 是一个故意设计为不安全的 Flask + Claude 应用程序,模拟了真实的基于 AI 的客户支持系统。它: - 未经清理直接将用户输入传递到 LLM 上下文中 - 在系统提示词中包含合成机密(格式逼真,但并非真实值) - 暴露 4 个输入面:`/chat`、`/ask`、`/document-qa`、`/search` - 文档问答面映射了在 `agent-security-sandbox` 中发现的 `pi_agent_001` 文档存储漏洞——用户提供的内容被直接插入到 LLM 提示词中,没有进行结构隔离 所有机密都是具有真实格式的合成值,以确保检测的保真度。本项目中未使用任何真实的凭证。 ## 攻击类别 | 类别 | 描述 | |---|---| | `role_hijacking` | 试图在上下文中重新分配 Agent 身份 | | `instruction_override` | 使用新指令覆盖系统提示词 | | `data_exfiltration` | 从 Agent 内存中提取合成机密 | | `context_poisoning` | 注入虚假上下文以改变 Agent 行为 | | `delimiter_injection` | 使用特殊 token 来逃避提示词结构 | | `goal_hijacking` | 用攻击者指定的目标替换任务目标 | | `jailbreak` | 彻底移除模型的安全约束 | ## InjectionJudge -- 检测架构 三个独立的检测层: 1. **特定类别的关键字信号** -- 按攻击类别索引的模式库 2. **跨类别信号** -- 数据提取和目标劫持模式始终适用 3. **指令回显检测** -- 识别 payload 和响应之间危险的关键字重叠,捕获模型释义了注入的指令而非逐字回显的情况 当模型明确将注入尝试标记为可疑时,防御信号会将入侵降级为 SAFE(安全)。 ## 变异策略 | 策略 | 机制 | |---|---| | 紧急性框架 | 添加 `URGENT SECURITY ALERT:` 前缀 | | Base64 编码 | 对 payload 进行编码;指示模型解码并执行 | | 嵌套分隔符 | 包装在 `[INST]...[/INST]` token 模式中 | | 角色混淆 | 构造为系统管理员指令框架 | | Markdown 注入 | 使用 `**[SYSTEM OVERRIDE]**` 粗体格式 | | 上下文逃逸 | 前置 `---END OF USER INPUT---` 换行符中断 | | Token 填充 | 用 `Ignore previous... Note: this is authorized` 括起 | ## 设计说明 - 所有 HTTP 调用都被沙箱化到 localhost——运行期间没有真实的互联网访问 - 合成机密使用逼真的格式(`sk-` 前缀,token 模式)以确保检测保真度 - `InjectionJudge` 指令回显层能够捕获单靠关键字匹配会遗漏的语义入侵信号 - 变异策略涵盖了对抗性机器学习文献中最常见的绕过技术(Perez & Ribeiro 2022, Greshake et al. 2023) - 通过 `tenacity` 指数退避处理速率限制(兼容 Tier 1 API) - 多提供商:支持 Anthropic 和 OpenAI 作为攻击模型 ## 路线图 - [x] 通过 `probe_endpoint` 进行自主端点侦察 - [x] LLM 生成的跨越 7 个攻击类别的新型 payload - [x] 带有指令回显检测的多信号 `InjectionJudge` - [x] 具有 7 种变异策略的 Payload 变异引擎 - [x] 沙箱化的易受攻击目标应用程序(Flask + Claude) - [x] 结构化的 JSON + Markdown 研究报告 - [ ] 作为防御层的语义工具输出分类器(关闭 agent-security-sandbox pi_agent_001) - [ ] 多跳数据提取链场景 - [ ] 通过出站工具调用进行 SSRF - [ ] 跨模型攻击者比较(GPT 与 Claude 作为攻击者) - [ ] 从成功运行中自动提取 Payload 语料库(用于语义分类器的训练集) ## 相关项目 - [agent-security-sandbox](https://github.com/TGKDre/agent-security-sandbox) -- 对使用工具的 LLM Agent 进行多阶段对抗性评估,确立了 pi_agent_001 的能力边界 - [llm-redteam-harness](https://github.com/TGKDre/llm-redteam-harness) -- 结构化的对抗性评估框架,具有可配置的场景库和防御评分 - [llm-redteam-portfolio](https://github.com/TGKDre/llm-redteam-portfolio) -- 索引所有红队研究项目的作品集仪表板 由 [Andre Uzoukwu](https://github.com/TGKDre) 构建 -- IAM 与云安全工程师 / AI 安全研究员 - LinkedIn: [linkedin.com/in/andre-uzoukwu-tgkdre](https://www.linkedin.com/in/andre-uzoukwu-tgkdre/) - 电子邮件: andre.obiuzo@gmail.com
标签:AI安全, Chat Copilot, CISA项目, DLL 劫持, Petitpotam, Python, 大语言模型, 无后门, 请求拦截, 逆向工具, 配置审计