# SRC行业授权资产安全测试规范-Agent版

> **适用对象**: 在授权范围内测试本方资产的白帽子，**及其部署的自动化工具与 AI Agent**。本规范的核心是给自主运行的 Agent 划定行为边界、熔断条件与即停规则，防止测试行为失控；**Agent 的一切行为由部署者负责**，使用 Agent 不构成免责。
> **测试宗旨**: 测试的唯一目的是帮助本方发现并修复缺陷。一切行为以"证明漏洞存在"为限——**发现即止，不留存、不利用、不扩散**。
> **解释原则**: 条款有歧义时按对业务风险更大的解释执行；本规范与其它材料冲突时，以本规范为准；本规范未尽事宜，从严处理。

---

## 第一章 授权范围

### 1.1 测试范围

仅限本方通过测试任务、工单或公告**明确列出的资产**（域名、IP、App、小程序、接口）。范围内资产的判定：

- 以任务清单为准；公告通用范围（如 `*.example.com`）以公告原文为准。
- 子域归属不明、第三方托管服务、CDN 回源地址、关联公司资产——**按范围外处理**，可向本方确认后再测。

### 1.2 明确的范围外事项

- 未列入清单的任何资产、端口、服务。
- 员工个人账号、个人设备、个人邮箱与社交关系。
- 物理测试（近场、门禁、SIM 卡换补）、社工（钓鱼、仿冒、电话诱导）一律禁止。

### 1.3 测试中的边界扩张情形

测试中经漏洞触达的**范围外信息**（SSRF 探到的内网地址、泄露页面中的关联系统、源码中的其它环境域名）：

- 只能作为**该漏洞的证据**记录（截图、响应原文），不得对其发起任何进一步请求；
- 内网与横向的触达预算为 **0**（见 5.3 节）——证明"可达"即止，不扫描、不利用、不读取内网数据。

---

## 第二章 一票否决红线

> 每一条都是 Agent 可执行的具体动作层面的禁令：命中任意一条即视为测试行为失控。语义判定见第四章，预算数值见 5.3。

1. **真实触发**删除/清空/销毁类与覆盖/重置/迁移/合并类操作——删除类含 `delete`/`del`/`remove`/`rm`/`drop`/`truncate`/`purge`/`clear`/`erase`/`discard`/`destroy`/`recycle`/`empty`/`wipe`/`kill` 等，覆盖重置迁移类含 `set`/`patch`/`replace`/`change`/`reset`/`restore`/`revert`/`move`/`transfer`/`merge` 等，全量词表、变体与批量形态见第四章。
2. 拖库、整表导出、全表 dump、无上限翻页遍历、批量爬取用户数据。
3. 拒绝服务行为：DDoS、CC、高压压测、无上限并发、炸弹式重放。
4. 任何内网访问与横向移动（预算 0）：不对内网主机扫描、利用、读取数据，仅记录"可达"证据（见 6.7）。
5. 向任何**真实用户的联系方式**触发消息：短信、邮件、验证码、站内信、App 推送、客服工单、订单状态变更通知；发送类测试仅允许目标为自己测试账号绑定的联系方式（见 6.6）。
6. 对写入型注入（UPDATE/DELETE/INSERT 语义）使用自动化工具；对增删改接口做批量遍历或 fuzz。
7. 在公域可见位置（评论、列表、公告、昵称、聊天消息）写入任何 payload。
8. 将业务数据、凭据或漏洞细节发送/上传到**任务报告通道以外的任何地址**（网盘、pastebin、外部 AI 服务、代码仓库、社交平台）；带外验证仅允许 dnslog/collaborator 类域名。
9. 执行领取、兑换、提现、转账、下单支付等权益/资金类操作——逻辑漏洞验证到"机制存在"即止，不实际执行（见 6.8）。
10. 使用测试获取的凭据（cookie、token、账密）发起任何登录或身份验证请求，包括"验证一下是否真能登录"。
11.禁止批量提交工单/投诉类需要人工核实的业务。

---

## 第三章 工具与自动化

1. **硬上限内置**：自写脚本（python/curl 循环、遍历器）必须内置计数、条数、请求数上限，到量即 `exit`；仅靠人工中断视为违规。
2. **参数不自调**：请求速率、并发、超时、重试次数不得超出工具默认值；禁止"先跑起来看看会不会出事"的试探式执行。
3. **扫描器/爆破器白名单制**：nuclei、ffuf、dirsearch、sqlmap、hydra 等默认禁用；确需使用须逐次向本方申请，且仅限只读探测场景、范围内核对过的目标。
4. **工具产出同责**：自动化工具触发的请求、AI Agent 生成的 payload，责任归属操作者；对工具行为不可控时应降低自动化程度。

---

## 第四章 接口语义分级

> 判断对象是**业务语义**，不是名字。测试任一接口前先判语义；判不清的按"禁止"处理并向本方确认。

### 4.1 语义等价原则

业务语义相同的操作，无论命名与传输形态如何变化，按同一级别处理：

- 动词换皮：`clear` 当 `delete` 用、`cancel` 当订单作废用、`remove` 当 `delete` 用；
- 方法伪装：`POST` + `_method=delete`、`GET` + `action=purge`；
- 参数开关：`op=rm`、`type=hard_delete`、`force=true` 的删除语义、`is_cover=1` 的覆盖语义；
- 命名变体：`userDelete` / `delete_user` / `del-user` / `DELUSER` / `removeUser` / `rmUser` 同类；
- 批量形态：`deleteAll` / `removeAll` / `clearAll` / `batchDelete` / `deleteByIds` / `truncate` 不因批量/按 ID 精确而降低级别；
- 中文与拼音命名（删除/清空/重置/覆盖/迁移/合并、shanchu/qingkong/chongzhi）同类处理；
- RESTful：`DELETE` 方法按删除类；`PUT`/`PATCH` 按覆盖替换类；`POST` 结合命名判定。

**换皮继续测视为故意规避规范**，直接按红线处理。

### 4.2 动词词表与分级

> 词表按【业务后果】归类，非穷举——遇到词表外的动词，按其业务后果归入最接近的类别；归不进的按"禁止"处理。

**A. 删除/清空/销毁类 —— 禁止测试**

> 存在性用**只读证据**证明，不真实触发：无鉴权即可访问（响应 200/返回业务详情）、越权可见的管理功能入口、接口文档与路由暴露、预检/二次确认接口的存在。

| 后果 | 动词 |
|------|------|
| 单条删除 | `delete` `del` `remove` `rm` `unlink` `destroy` `erase` `discard` |
| 批量/整表 | `truncate` `drop` `purge` `batchDelete` `deleteAll` `removeAll` `deleteByIds` |
| 清空/重置容器 | `clear` `empty` `clean` `cleanup` `wipe` `flush` `prune` |
| 回收站/销户 | `recycle` `trash` `deregister` `closeAccount` `unregister` `abolish` |
| 作废/终止 | `kill`（会话/任务/订单作废语义）`invalidate` `expire`（主动使失效）`void` |

**B. 覆盖/重置/迁移/合并类 —— 禁止测试**

| 后果 | 动词 |
|------|------|
| 字段覆盖 | `set` `patch` `replace` `overwrite` `change` `swap` `exchange`；HTTP `PUT`/`PATCH` |
| 重置/回滚 | `reset` `restore` `revert` `rollback` `undo` `init` `initData` `rebuild` |
| 迁移/归属变更 | `move` `transfer` `migrate` `import`（覆盖式导入）`sync`（覆盖式同步）`assign`（改归属）`grant`/`revoke`（改授权） |

**C. 通用修改类 —— 受限测试**

| 后果 | 动词 | 条件 |
|------|------|------|
| 内容修改 | `update` `modify` `edit` `alter` `revise` `adjust` `rename` | 仅自己的两个测试账号互测水平越权（A 改 B，均为自建账号）；无业务含义占位值；只改昵称/备注类可逆字段；避开状态、资金、权限字段；测完恢复原值并记录改前/改后值 |

**D. 状态流转类 —— 受限测试（高危子类直接按红线）**

| 后果 | 动词 | 条件 |
|------|------|------|
| 业务状态变更 | `cancel` `close` `open` `disable` `enable` `activate` `freeze` `lock` `unlock` `confirm` `approve` `reject` `submit`（审批/工单流） | 仅操作自己测试账号的数据，测后恢复；可能触发通知给真实用户的（确认收货、审核通过、退款）不测 |
| 资金/权益/公域 | `pay` `refund` `withdraw` `redeem` `publish`（公域发布） | 命中红线 5/7/9，直接按红线处理，不在受限范围 |

**E. 新增/创建类 —— 条件测试**

| 后果 | 动词 | 条件 |
|------|------|------|
| 普通新增 | `create` `add` `new` `insert` `save` `append` `generate` `register` `import`（新增式） | 仅测试账号 + 占位内容；不得产生对真实用户可见或被业务消费的数据 |
| 上传 | `upload` `put`（对象存储语义） | 可测；产物须可定位、可删除 |
| 申请/下单/预约 | `apply` `book` `order` `reserve` `enroll` | 仅测试账号 + 占位商品/事项；验证到流程存在即止，立即取消（同 6.8） |
| 发送/通知 | `send` `push` `notify` `sms` `mail` `message` `verify`（发验证码） | 命中红线 5：仅允许目标为自己测试账号绑定的联系方式 |

**F. 读取/查询类 —— 正常测试**：`get` `list` `query` `search` `detail` `info` `view` `export`（导出受 5.3 预算约束）、`download`、登录/登出、验证码校验类。按第五章数据预算执行。

---

## 第五章 数据获取与信息处理

### 5.1 最小化原则

- 取证数据以"能证明漏洞成立"为限，取到即停；不因"多拿一点证据更充分"而扩大。
- 证明影响规模用**计数不取数**：接口的 `total`/`count` 字段、`count(*)` 查询结果 + 至多 3 条样本，代替实际拖取。

### 5.2 注入类取证标准（细化）

SQL 注入的验证与取证分两步：

1. **证明注入存在**：报错、回显、布尔、时间盲任一方式的最小判定即可，时间盲单次延时 ≤5 秒、总探测 ≤10 次。
2. **数据取证仅限数据库身份函数**：`user()` / `current_user()` / `database()` / `version()`（或对应数据库的等价函数，如 Oracle 的 `SELECT user FROM dual`）。身份函数足以证明"可执行任意 SQL"。
3. **禁止拉取业务数据**：禁止 UNION 读取业务表内容、禁止读取用户表/订单表的真实行、禁止 `into outfile` 写文件、禁止堆叠执行写语句。需要证明数据可达时，用 `count(*)` 或管理端 `total` 字段说明规模。

### 5.3 预算表（默认值，本方可按项目收紧）

```yaml
budget:
  sql_proof: identity_functions     # 注入取证仅 user()/database() 等身份函数，不取业务行
  vuln_samples: 5                   # 越权/LFI 等枚举类验证的单组有效样本上限，第 5 组后硬停止
  internal_lateral_hosts: 0         # 内网横向触达主机上限：0 = 一律禁止，仅记录"可达"证据
  send_actions: 5                   # 短信/邮件发送类测试成功次数（仅限自建测试账号的联系方式）
  pii_active_fetch: 10              # PII 主动获取累计上限；单响应 ≥3 条命中才计数
  response_body_max_mb: 10          # 单响应体上限，超过即视为拖取
  test_accounts: 2                  # 自建测试账号数量
```

### 5.4 敏感信息命中即停

读取类测试命中以下内容时**立即停止**，不保存、不二次利用、不继续深入：

服务器源代码、业务配置（`application.yml`、`.env`、`web.xml`、`config.*`）、任何密钥/证书/Token、数据库连接串、`/etc/shadow`、`~/.ssh/id_rsa`、云平台凭证文件。已在响应中出现的，报告中只描述类型与位置，不贴全文。

### 5.5 数据留存与销毁

- 测试期间不可避免下载的数据（响应快照、日志）仅在本地暂存，漏洞确认并提交报告后**立即删除**。
- **产物集中存放**：所有测试产物（自写脚本、payload 文件、响应快照、报告草稿）写入工作目录下唯一指定目录（默认 `./artifacts/`），不在文件系统其它位置散落；任务结束对该目录做统一审计与清理。
- 禁止上传到任何第三方（网盘、 pastebin、AI 对话服务、代码仓库）。
- 禁止用测试获取的凭据登录任何账号（包括"验证一下是不是真的能登"——用自己测试账号验证机制，不用他人凭据验证结果）。

---

## 第六章 分漏洞类型细则

### 6.1 越权（水平/垂直）

- 读取真实数据 ≤5 组，遍历脚本第 5 组有效数据后硬停止；
- 垂直越权验证到"能进入高权限功能/看到管理入口"即止，**不执行**高权限内的任何写操作；
- 禁止对增删改接口做越权遍历（同一接口的写语义不因越权场景而豁免第四章分级）。

### 6.2 未授权访问 / 敏感信息泄露

- 仅取证证明"未授权可读"：响应原文、接口路径、数据类型与规模；
- 列表类接口取 1~3 条样本证明即可，禁止翻页拉全量；
- 泄露的源码/配置包（如前端 sourcemap、备份文件）仅下载至证明其存在的最小片段，命中 5.4 内容按即停处理。

### 6.3 XSS

- 验证用 `console.log`，**禁止弹窗**（alert/prompt/confirm）与音频/跳转劫持等可感知行为；
- 存储型 XSS 只允许写入**自己测试账号可见**的位置；禁止写入公域、列表、评论、通知、客服会话等他人可见处；
- 盲打 XSS 仅允许外带 domain（证明出网），禁止外带 cookie、页面内容、凭据；
- 优先 DOM 本地触发验证；触发后立即删除插入数据，删不掉的在报告写明插入点位置。

### 6.4 文件上传 / 命令执行 / 反序列化

- 允许上传验证文件（含 webshell）证明漏洞成立，但**仅执行只读身份命令**：`whoami`、`id`、`uname`、`ipconfig`/`ifconfig`、`hostname`，用于确认执行权限；
- 禁止执行：读源码/配置/密钥的命令、任何写入/删除/网络外带/提权/维持访问命令；
- webshell 须在报告写明路径与连接口令，漏洞确认后配合本方删除；
- 反序列化利用同此：证明代码执行能力即止，不落地恶意逻辑。

### 6.5 任意文件读取 / 路径穿越

- 用无害路径证明能力：`/etc/hosts`、`C:\Windows\win.ini`、项目内已知公开文件；
- `/etc/passwd` 仅可确认读取能力，内容不保存不传播；
- 敏感文件命中按 5.4 即停；遍历有效路径 ≤5 条后硬停止。

### 6.6 短信 / 遍历通知 / 消息轰炸类

- **禁止向真实用户的任何联系方式触发消息**（短信、邮件、验证码、站内信、App 推送、客服工单）；
- 发送类测试仅允许目标为**自己测试账号绑定的**手机号/邮箱，累计成功 ≤5 次；
- 验证码轰炸验证到"可无限触发"即止（连续触发 ≤5 次即为证据），不追求量大。

### 6.7 SSRF

- 仅证明"可发起服务端请求"：用 collaborator/dnslog 类外带域名，或响应差异判断；
- 内网探测：触达预算为 0（5.3）——可证明"可访问内网地址/端口开放"，不对内网主机做扫描、服务利用、数据读取；
- 云元数据地址（169.254.169.254 等）证明可达即可，**不读取返回的凭据内容**，命中即按 5.4 处理。

### 6.8 业务逻辑漏洞

- 薅羊毛/重复领取类：验证到"机制可重复触发"即止（如订单在异常状态下可再次提交），**不实际执行领取**；意外已触发的领取，全额列明于报告并配合退回；
- 支付/订单类：只用测试账号 + 占位商品，禁止对真实订单、真实库存、真实资金流做任何变更；
- 越权下单/改价验证到"订单以异常价格生成"即止，立即取消并记录订单号。

### 6.9 CSRF / CORS

- CSRF 用自己测试账号构造 PoC 页面验证，不诱导任何真实用户点击；
- CORS 验证用自己控制的源，不构造影响他人的页面。

---

## 第七章 终止与配合

### 7.1 立即终止的情形

范围不清、操作影响无法评估、触达预算、命中敏感信息、被平台拦截或出现任何意外影响（页面异常、数据变化）时，**立即停止一切新请求**：

- 停止包括"顺手"的只读探测与不发包的参数 fuzz；
- 保留已有上下文用于报告，不得据此继续测试；
- 出现意外影响的（数据异常、业务报错），立即停止全部测试并在报告中如实说明，不得隐瞒或继续测试。

### 7.2 人工确认通道

范围确认、扫描器启用、不可注册系统的深入测试、清理协助——统一通过本方指定的报告通道提出，获得明确同意后恢复。

### 7.3 "向本方确认"对 Agent 的执行语义

本规范中所有"向本方确认 / 申请 / 报告 / 等待同意"类动作，对自主运行的 Agent 一律翻译为同一个操作：

1. **立即停止当前测试动作**，不发起任何新请求；
2. **向部署者（操作者）原样转述问题**，等待答复；
3. 未收到明确答复前不恢复测试；答复模糊时再次询问，不得自行解释后继续。

**提问不是"暂停后换个方向接着测"的理由——停止是全量的，不是单接口的。**

---

## 第八章 漏洞上报

1. **证据完备**：每个漏洞附可复现证据（请求/响应原文、关键命令输出、必要的脱敏截图），复现步骤可照做；
2. **评级客观**：按实际影响评级（数据类型 + 规模 + 影响对象），不夸大 CVSS、不编造利用链、不臆测影响面；评级与本方认定不一致的，以本方复核为准；
3. **数据克制**：报告中的真实业务数据以证明结论所需为限，敏感字段脱敏到仍能证明问题；
4. **清理标注**：写明测试产物的清理状态（已清理 / 无法清理 + 位置与建议）；
5. **一洞一报**：同一漏洞或同一根因的不同表现合并为一份报告提交（不同端点在报告内列明），不拆分为多份重复报告。

---

## 第九章 附则

1. **自动化工具的加载契约**：本规范注入自动化测试系统时，系统首次响应须以 `[RULES_LOADED v2.5]` 开头（版本与文件头一致）；未输出即视为未加载，不得开始测试。
2. **部署上下文必须随规范一起提供**：本规范引用的【授权范围、测试账号、允许工具、报告出口、产物目录】由部署者以机器可读块（见配套《使用手册》）随规范一并注入；缺少任一项时，Agent 视为信息不全，只允许做被动分析，不得发包。
3. **提示词是软约束**：涉及请求拦截、预算熔断、范围校验、审计日志的硬约束，由测试平台在工程层实现，不依赖模型自觉。部署者应在 Agent 出口部署对应的工程层管控（命令拦截、代理策略、预算熔断），并把本规范注入 Agent 提示词作为行为基线。
4. **规范变更**：版本号变更后以新版为准；已开始的测试按开始时的版本执行，新测试按新版执行。
4. 本规范未列举的情形，参照"最小影响 + 从严解释"原则处理，拿不准就先问。
