nuclide-research/ai-llm-redteam-operator
GitHub: nuclide-research/ai-llm-redteam-operator
一款面向 AI/LLM 基础设施的授权红队评估工具,将暴露场景自动规划为结构化攻击链并在严格安全管控下执行验证。
Stars: 0 | Forks: 0
ai-llm-redteam-operator
规划 AI/LLM 红队场景,并针对单一授权目标运行。
快速开始 • 工作原理 • 安全机制 • 用法 • 关注维度 • 数据包 • 状态与限制 • 适用范围
ai-llm-redteam-operator 是一个两阶段的授权 AI/LLM 评估工作流。 **`plan`** 将一个关注值(类别、平台或命名的攻击路径)转化为结构化的场景数据包:包含要发送的探测请求、确认每个步骤的弱信号、要执行的攻击链,以及相应的防御指南。它不会触碰网络。 **`run`** 将该数据包交给 agent,由其作为“感知-规划-行动”循环针对单一主机执行。agent 会发送数据包指定的探测请求,读取响应,仅在上一步确认后才推进攻击链,并返回一份证据账本:记录了发送了什么、返回了什么,以及证据实际支持了哪些假设。 agent 会发送真实的 HTTP,因此被设计为默认安全。它拒绝在没有授权参考的情况下发送;在你传入 `--live` 之前只进行规划而不发送;将每个请求都锁定在单一目标主机上;并且在未获你允许之前限制所有写操作。没有网络上的确凿证据,任何内容都不会被标记为 `confirmed`(已确认)。 它位于 NuClide 链的执行阶段。当 [aimap](https://github.com/nuclide-research/aimap) 回答“这是什么服务?”,而 [herald](https://github.com/nuclide-research/herald) 回答“它开放了吗?”时,ai-llm-redteam-operator 回答的是:“鉴于这种暴露类别,针对该主机走一遍完整的红蓝对抗计划,并向我展示证据。” ## 快速开始 ``` git clone https://github.com/nuclide-research/ai-llm-redteam-operator cd ai-llm-redteam-operator pip install -e . # installs the `ai-llm-redteam-operator` console command ``` 要求 Python 3.8 或更高版本。无需第三方包:运行时仅使用标准库中的 `dataclasses`、`argparse`、`sqlite3`、`json`、`urllib` 和 `ssl`,可选的 LLM 路径也保持在 `urllib` 上。 三个命令,风险从零递增到真实流量: ``` # 1. PLAN. No network. Write the scenario packet for a platform. ai-llm-redteam-operator plan platform LiteLLM # 2. DRY-RUN. Build every request for a target and send nothing. ai-llm-redteam-operator run platform LiteLLM \ --target https://10.0.0.5:4000 --authorize ENG-2026-014 # 3. LIVE. Send the planned read probes and report the evidence. ai-llm-redteam-operator run platform LiteLLM \ --target https://10.0.0.5:4000 --authorize ENG-2026-014 --live ``` `plan` 是默认的子命令,因此直接使用裸命令(`ai-llm-redteam-operator platform LiteLLM`)也是可以的。如果不想安装,可以从仓库根目录调用模块:`python -m ai_llm_redteam_operator.cli plan platform LiteLLM`。 ## 工作原理 ``` plan stage (no network) run stage (scoped, gated) ┌────────────────────────┐ ┌──────────────────────────────┐ │ focus value │ │ authorized target + scope ref │ │ category / │ │ │ │ platform / │ │ recon pre-pass: send each │ │ attack_path │ │ in-cap read probe once │ │ │ │ │ │ │ │ ▼ │ Scenario │ ▼ │ │ AegisLLM_Operator ───┼── Packet ──▶│ evaluate weak signals │ │ (planner / policy) │ (7 sections)│ against the responses │ │ │ │ │ │ │ │ ▼ │ │ ▼ │ │ playbook + 2 hand- │ │ walk each attack chain: │ │ authored scenarios │ │ advance a step only if the │ └────────────────────────┘ │ prior step confirmed │ │ │ │ │ ▼ │ │ Run Report: findings + │ │ chain outcomes + evidence │ │ ledger (md or json) │ └──────────────────────────────┘ ``` 这个循环是真实存在的,绝非摆设: - **感知。** agent 会对每一个能力内的探测请求运行一次,然后将每个测试用例的预期弱信号映射到具体的响应上。信号只能匹配真实的、已发送的观测结果,绝不是规划中的内容。 - **规划。** 默认情况下,攻击链按数据包顺序执行。提供一个 LLM endpoint,可选的策略器就会重新排列优先执行的攻击链;如果它执行失败或不存在,agent 将保持确定性的顺序。 - **行动。** 只有当前步骤被 `confirmed` 时,攻击链才会推进到下一步。一旦某一步的信号未能确认,攻击链就会停滞在那里。agent 不会执行前置条件无法满足的步骤。 只有在基于确凿的、已发送的证据时,发现结果才会是 `confirmed`:信号指定的 2xx 状态码且实际返回了 body,或者 2xx 响应上的 body token 或 header。在 403 响应体内回显的 token 不算数,而纯粹的 204 状态码也无法确认任何可窃取的内容。在 dry-run(试运行)模式下什么都不会发送,因此从构造机制上来说,每个发现都保持未确认状态。 ## 安全机制 agent 会发送真实的 HTTP。共有四道关卡,全部默认安全,每道关卡只能通过显式的 flag 解锁: ``` ┌─ authorization ── no --authorize → refuse, send nothing ├─ mode ────────── default dry-run → plan requests, send nothing ├─ scope ───────── every URL = target host + packet path; redirects captured, │ not followed; responding host re-checked → cannot leave host └─ two probe gates ├─ noise cap (--max-aggressiveness): filters READ probes by rated noise └─ mutation gate (--allow-writes): blocks ALL write methods until set, no matter how the packet rated them ``` 噪音上限和突变关卡是故意独立设计的。规划器将许多突变探测请求的噪音评级为 `medium`(中),因此仅靠噪音上限是允许它们触发的。提高 `--max-aggressiveness` 绝不意味着允许写操作。只有在设置了 `--allow-writes` 时,写操作(POST、PUT、PATCH、DELETE)才会发出;此外,无法识别的噪音标签会被视为最高级别,这样即使出现拼写错误也会自动拒绝执行。 范围经过了两次强制检查。根据约定,数据包路径必须是主机相对路径(绝对路径或带有 scheme 的相对路径会被拒绝);并且自定义重定向处理程序从不跟随 3xx 响应,而是将其作为终止性观测结果返回,以便操作员能看到 `Location` 并自行决定。作为纵深防御措施,在记录任何响应体之前,系统会再次根据目标检查响应 URL 的主机名。 克制原则也体现在循环中:每一步只获取一个证明 artifact 然后停止,对每个响应样本设置字节上限(`--max-body-bytes`),并设有全局请求预算(`--max-requests`),耗尽时即结束运行。 ## 用法 ### `run` flags | Flag | Default | Effect | |------|---------|--------| | `--target` | (必填) | 目标 base URL;每个请求都保持在此 scheme 和 host 下 | | `--authorize` | (必填) | 授权/范围参考;没有它就无法发送 | | `--dry-run` / `--live` | `--dry-run` | 仅规划,或实际发送 | | `--max-aggressiveness` | `medium` | 要发送的最高读取探测噪音级别 (`low_noise`, `medium`, `high`) | | `--allow-writes` | off | 允许 POST/PUT/PATCH/DELETE 探测,独立于噪音上限 | | `--max-requests` | `60` | 本次运行的全局请求预算 | | `--max-body-bytes` | `4096` | 响应 body 样本上限 | | `--delay` | `0.5` | 每次实际请求前的暂停时间(秒) | | `--timeout` | `8.0` | 单次请求超时时间(秒) | | `--verify-tls` | off | 验证目标证书(默认关闭,范围内的自签名证书很常见) | | `--llm-endpoint` / `--llm-model` / `--llm-api-key-env` | off | 可选的策略器 endpoint、模型和 key 环境变量 | | `--format` | `md` | 报告格式,`md` 或 `json` | | `--out` | stdout | 将报告写入文件 | 两个阶段共享 `--format` (`md` 或 `json`) 和 `--out`。`plan` 还增加了 `--min-severity`、`--sectors`、`--limit` 和 `--list-values标签:AI安全, Chat Copilot, CISA项目, LLM基础设施, 威胁建模, 红队评估, 自动化渗透测试, 逆向工具