152 lines
12 KiB
Markdown
152 lines
12 KiB
Markdown
---
|
||
name: re-ai-attack
|
||
type: atomic
|
||
description: >
|
||
AI 模型安全评估与取证(行为层):extraction assessment(API 黑盒提取评估)、
|
||
fingerprint verification(行为指纹与归属验证)、privacy leakage evaluation(成员推断/隐私泄露评估)、
|
||
robustness evaluation(对抗鲁棒性评估)。
|
||
触发词:API模型窃取、黑盒模型复制、模型指纹、成员推断、对抗样本、行为水印、模型安全评估、隐私泄露评估。
|
||
guard: {"require_authorization": true, "forbidden": ["unauthorized_api_testing", "bypass_access_control", "model_theft_against_third_party"]}
|
||
capabilities: [ai-model-analysis]
|
||
---
|
||
|
||
# AI 模型安全评估与取证(行为层)
|
||
|
||
## CORE RULE:攻击面由可观测性决定,不由攻击名称决定
|
||
|
||
先问接口/资产给什么,再选攻击面——三者是三个世界:
|
||
|
||
| 可观测性 | 世界 |
|
||
|---|---|
|
||
| `logits available`(API 返回概率/logits) | 蒸馏(soft label)、指纹、成员推断全部可用 |
|
||
| `labels only`(API 只返回标签) | 降级:决策边界采样、黑盒迁移、影子模型 |
|
||
| `weights available`(拿到模型文件) | 白盒:梯度方法(FGSM/PGD)、直接比对、阈值成员推断 |
|
||
|
||
同一攻击名在不同可观测性下可行性与实现完全不同——先按「输入资产盘点」确认 API 输出字段/模型文件,再选路径。
|
||
|
||
## 任务分类器(intent → 路径)
|
||
|
||
用户目的识别,命中即走对应分支;未命中落入下方「何时使用」判断:
|
||
|
||
| 用户目的(intent) | 路径 |
|
||
|---|---|
|
||
| 怀疑模型被复制 / 模型被盗用 / 嫌疑副本比对 | → **fingerprint**(模型指纹/水印检测,步骤 2) |
|
||
| 判断训练数据泄露 / 某样本是否在训练集 | → **membership**(成员推断,步骤 3) |
|
||
| 测试 API 是否容易被复制 / 接口可提取性 | → **extraction**(模型提取,步骤 1) |
|
||
| 测试鲁棒性 / 对抗样本效果 / 防御验证 | → **adversarial**(对抗样本评估,步骤 4) |
|
||
|
||
## 输入资产盘点(INPUT INVENTORY)
|
||
|
||
路径命中后先确认已有资产——不同资产组合决定可走路径,缺资产先向用户索要或说明局限:
|
||
|
||
| 资产 | 影响路径 |
|
||
|---|---|
|
||
| API endpoint(+ query budget) | **extraction**(步骤 1)必需——无 endpoint 无法提取 |
|
||
| model file(本地模型/权重) | fingerprint 比对与成员推断(步骤 2/3)可用;无则只能走 API 侧 |
|
||
| training dataset(疑似训练集样本) | **membership**(步骤 3)必需——无样本无法推断成员 |
|
||
| suspected copy(嫌疑副本) | **fingerprint**(步骤 2)必需——无副本无从比对 |
|
||
| baseline model(受害者/参考模型) | fingerprint 比对必需——无基线只有副本无法定指纹 |
|
||
| watermark hypothesis(水印假设) | fingerprint 水印验证(步骤 2)——有具体假设(触发集/后门)可定向验证 |
|
||
|
||
**规则**:intent 命中后检查该路径所需资产;缺失 → 先向用户询问(有无/能否提供),用户无法提供则说明该路径不可执行并转可用路径。
|
||
|
||
## 何时使用 / 何时不用
|
||
|
||
- 用:模型泄露/窃取取证、API 模型攻击评估(提取/指纹)、训练数据泄露判定、模型鲁棒性评估(对抗样本)
|
||
- 用:水印/指纹验证(嫌疑副本与受害者模型比对)
|
||
- 用:模型 API 一致性审计(同输入多查询/多端点比对,找副本/代理)
|
||
- 用:鲁棒性基线评估(上线前/防御验证前测一遍干净与扰动准确率)
|
||
- 不用:模型文件格式解析与权重提取(转 [[re-ai-model]]);模型训练/微调(非逆向);部署加固(防御侧不在本技能)
|
||
- 不用:无授权目标(红线:仅授权评估场景;授权边界见 [[gotchas]])
|
||
- **RE_AUTH 前置(guard 联动)**:本技能 guard.require_authorization=true——执行前确认授权上下文(triage 第 0 步 `RE_AUTH`):owned / ctf / research 可执行;unknown 先询问目标归属(所有权 / 测试授权 / 研究环境),未说明只做静态评估不进入动态步骤
|
||
- 不用:提示注入/提示泄露评估(LLM 侧攻击面)与 API 服务本身的注入/越权测试(应用侧漏洞不在本技能)
|
||
|
||
## 工具准备
|
||
|
||
### python3(核心运行时)
|
||
|
||
- 各平台安装见 [[re-python]] 工具准备
|
||
|
||
### 模型库(torch / tensorflow,按目标格式选)
|
||
|
||
- 多平台: `pip install torch` / `pip install tensorflow`(按硬件可选 CPU 版;按目标框架选一即可,蒸馏脚本只依赖其张量操作)
|
||
- 验证: `python3 -c "import torch"`
|
||
|
||
### 攻击评估库(ART,可选)
|
||
|
||
- 多平台: `pip install adversarial-robustness-toolbox`(对抗鲁棒性工具箱,覆盖提取/指纹/对抗样本攻击模块)
|
||
- 验证: `python3 -c "import art"`
|
||
|
||
### 查询接口客户端(API 目标)
|
||
|
||
- 多平台: `pip install requests`;验证: `python3 -c "import requests"`
|
||
- 可视化(分布对比图,可选):`pip install matplotlib`
|
||
|
||
## 操作步骤
|
||
|
||
按顺序执行;仅限授权评估场景(红线:不针对未授权目标)。方法学依据:模型提取(API 查询蒸馏)、成员推断(影子模型)、对抗样本(FGSM/PGD)为公开研究框架,实现细节按目标模型域调整(见 [[decision-tree]] 分支)。
|
||
|
||
1. **模型提取攻击**(Overview:通过 API 查询重建近似模型——蒸馏):
|
||
- Checklist:
|
||
1. 确认授权与用途(评估/取证声明记录)
|
||
2. 接口探测:读 API 文档/试查询 → 确认限额与输出字段(logits/概率或仅标签——可观测性决定策略,见 CORE RULE)
|
||
3. 查询采样(输入分布覆盖:代表性输入 + 边界扰动 + 标签分布均衡)
|
||
4. 蒸馏训练(以 API 输出为教师标签)
|
||
5. 评估近似度(同输入集输出对比:一致率 + 标签分布对比,不是只看精度)
|
||
- 实现经验(soft label 优先、边界扰动、评估一致性、蒸馏基线、查询日志等)见 [[implementation-notes]]
|
||
- 仅标签时:降级为决策边界采样(输出分布重建受限,见 [[gotchas]] 接口坑);查询预算内先小批估计(坑 1)
|
||
|
||
2. **模型指纹/水印检测**(Overview:**行为级**水印——模型表现出来是什么:trigger 触发响应 / 查询响应 / 黑盒指纹;文件级水印(权重 pattern/metadata/tensor hash)走 [[re-ai-model]]):
|
||
- Checklist:
|
||
1. 嵌入检测:输入扰动(特定噪声/触发器)→ 输出特征比对(水印触发行为)
|
||
2. 指纹提取:模型行为签名(代表性输入集输出向量)→ 与疑似副本比对
|
||
3. 窃取取证:嫌疑模型与受害者模型的指纹距离 → 阈值判定相似(阈值校准见 [[decision-tree]] 证据分级)
|
||
4. 产出:指纹向量 + 距离报告(距离值 + 阈值依据 + 置信度)
|
||
- 实现经验(输入集难度分层、归一化、反例对照组、抹除对抗、时效、水印枚举)见 [[implementation-notes]]
|
||
- 抹除对抗:剪枝/微调/蒸馏会削弱指纹——用鲁棒指纹并标注「可能被抹除」(见坑 3)
|
||
|
||
3. **成员推断**(Overview:判定某样本是否在训练集中):
|
||
- Checklist:
|
||
1. 确认输入形态:目标模型输出的概率向量 + 样本特征(可观测性见 CORE RULE)
|
||
2. 选攻击类型:白盒(有 loss)用阈值法;黑盒(只有输出)用影子模型(同分布代理模型校准)
|
||
3. 对照基线:同分布随机样本(非训练样本)的损失分布作基准线
|
||
4. 输出:统计判定(ROC/阈值曲线、给定 FPR 下的 TPR、置信区间),不是确定性结论
|
||
- 实现经验(基线设计、隐私脱敏、统计口径)见 [[implementation-notes]]
|
||
- 局限:只能给出统计判定(误报控制:阈值校准;隐私保护训练目标可对抗,见 [[gotchas]])
|
||
|
||
4. **对抗样本基础**(Overview:鲁棒性评估与防御验证,非攻击部署):
|
||
- Checklist:
|
||
1. 选路径:白盒(模型权重可加载且 loss 可微)用梯度扰动(FGSM/PGD);黑盒用查询/迁移扰动(可观测性见 CORE RULE)
|
||
2. 设扰动预算(epsilon)——评估口径可比
|
||
3. 评估对照:先测干净样本基线(扰动前准确率),报告扰动前后对比
|
||
- 实现经验(预算梯度、迁移性边界)见 [[implementation-notes]]
|
||
- 边界:对抗样本迁移性差(白盒扰动对黑盒目标不保证有效,见 [[gotchas]])
|
||
|
||
5. **评估报告与存证**:
|
||
- 三要素全记录:方法(采样集/蒸馏超参/距离阈值)、结果(指标)、参数(随机种子/框架版本)
|
||
- 攻击脚本与评估产物 sha256 存档;结论按 [[re-analyze/analysis-contract]] 交付
|
||
|
||
## 跨域联合
|
||
|
||
- [[re-ai-model]]:**消费文件级证据**(文件级证据 → 行为级验证单向流)——有模型文件时先经 re-ai-model 提取结构/权重/文件级 fingerprint,再在本技能做行为一致性验证;仅 API(无文件)时无文件侧输入,直接黑盒评估
|
||
- [[re-python]]:Python 工具链基础
|
||
- [[re-feedback]]:攻击案例经验沉淀(脱敏后)
|
||
- [[re-analyze/analysis-contract]]:评估结论交付格式
|
||
|
||
## 常见坑与陷阱
|
||
|
||
- **查询预算限制**:现象——API 限流/计费中断;原因——高查询量;对策——预算内采样设计(先小批估计),记录已用配额
|
||
- **置信度不可得时降级**:现象——接口只返回标签;原因——服务端裁剪输出;对策——决策边界采样 + 标注局限,不硬造概率
|
||
- **水印被抹除**:现象——指纹比对失败;原因——嫌疑方做了剪枝/微调/蒸馏;对策——用鲁棒指纹(多触发器)并标注「可能被抹除」;距离接近但未达阈值时输出「弱相似」而非「无关」
|
||
- **成员推断误报**:现象——统计判定错误;原因——阈值偏差/影子模型分布不匹配;对策——影子模型校准 + 报告置信区间
|
||
- **评估指标误导**:现象——提取模型「精度高」但输出分布完全不同;原因——只比精度不比分布;对策——一致率 + 标签分布 + 校准度多指标联合
|
||
- **提取不收敛**:现象——蒸馏效果差;原因——采样分布与目标分布不匹配/接口输出裁剪;对策——按目标数据域重采样,标注数据分布假设
|
||
- **输出解析错误**:现象——logits 与标签错位;原因——API 响应字段解析错;对策——先打印原始响应核对字段再批量
|
||
- **结果不可复现**:现象——复跑结果不同;原因——随机种子/采样顺序未固定;对策——固定 seed 并记录
|
||
- **对比对象口径错**:现象——指纹比对用了不同任务模型;原因——未确认任务口径;对策——比对前确认任务/标签空间一致
|
||
- **多端点口径差异**:现象——同一模型不同端点输出不同;原因——A/B 路由/版本不同;对策——锁定端点做前后对比,标注端点标识
|
||
- **批查询触发风控**:现象——正常速率查询被风控;原因——触发速率阈值;对策——查询节奏控制(限速/随机间隔),记录风控事件
|
||
- **资源预算**:现象——蒸馏 OOM/长任务中断;原因——学生模型过大/时长估计不足;对策——分阶段 checkpoint(采样/训练分步存档),小批量/CPU 降级
|
||
- **授权边界**:现象——对未授权 API 发起攻击测试;原因——范围未确认;对策——先确认授权(使用边界红线)
|
||
- 场景分支与证据分级见 [[decision-tree]];边界与反例见 [[gotchas]]
|