Ganglet/Anvil
GitHub: Ganglet/Anvil
面向 PyTorch 模型的全自动对抗红队审计管道,零人工干预完成攻击、聚类、解释、补丁与 PDF 报告生成。
Stars: 0 | Forks: 0
自主 ML 红队评估 · 攻击 · 聚类 · 解释 · 补丁 · 报告
实时演示 → |
API →
## 功能介绍
ANVIL 接收任何 PyTorch 神经网络,通过完全自主的 8 阶段对抗性审计 pipeline 运行,并生成专业的 PDF 审计报告 —— 无需任何人工干预。
## Pipeline 深度解析
### 阶段 1 — 模型接口
任何 PyTorch 网络都继承自 `BaseBaseModel` 并暴露三个方法。ResNet-18 和 DistilBERT 已作为第一方封装提供。
```
class ImageModel(BaseModel):
def predict(self, x: Tensor) -> Tensor: ... # → logits
def get_gradients(self, x, y) -> Tensor: ... # → ∂L/∂x
def get_activations(self, x) -> Tensor: ... # → penultimate layer
```
### 阶段 2 — 攻击面分析器
| 信号 | 方法 | 输出 |
|--------|--------|--------|
| 特征归因 | Captum Integrated Gradients | 逐像素重要性 |
| 梯度幅度 | 显著性 (|∂L/∂x|) | 敏感度图 |
| 脆弱性评分 | mean(梯度范数) × 激活熵 | 标量 ∈ [0, 1] |
| 攻击优先级 | 按每种攻击类型的梯度范数排序 | 有序列表 |
### 阶段 3 — 攻击引擎
四种攻击策略,全部通过 PyTorch autograd 从头实现:
| 攻击方式 | 类型 | 关键超参数 |
|--------|------|--------------------|
| FGSM | 单步梯度符号 | ε = 0.03 |
| PGD | 迭代投影梯度 | 40 步, α = 0.01 |
| Adversarial Patch | 局部扰动 (Brown 2017) | patch_size = 32px |
| Semantic | 非梯度:亮度、对比度、旋转、抖动 | 4 种变换 |
每次成功的攻击都会生成一个 `AdversarialExample`,包含原始张量、扰动张量、真实标签、预测标签、攻击名称、epsilon 以及每个样本的置信度分数。
### 阶段 4 — 失败模式聚类
倒数第二层的激活编码了模型*为什么*被欺骗 —— 而不仅仅是*被欺骗了*。UMAP 将这些高维向量投影到低维 embedding 中,保留局部流形结构。HDBSCAN 随后无需固定聚类数量即可发现基于密度的簇。
```
n_neighbors = min(15, N - 1)
n_components = min(5, N - 1)
If UMAP raises scipy.linalg.eigh (N < 20) → fallback to PCA(n_components=2)
Noise points (cluster = -1) are counted but not explained
```
### 阶段 5 — LLM 解释 Agent
一个有状态的 LangGraph agent,通过 FAISS 检索 10 篇对抗性 ML 论文:
对于每个聚类,agent 将聚类统计信息(质心、攻击分布、成员数量)+ 检索到的论文片段注入结构化 prompt 中。Gemini 2.5 Flash 生成带有推荐补丁策略的有据可依的解释。如果一致性检查失败,状态图可以重新进行推理。
### 阶段 6 — 自主打补丁
**安全门公式:**
$$score = 0.6 \times resistance\_gain + 0.4 \times accuracy\_retention$$
只有当 **score ≥ 0.70** 且 **accuracy drop ≤ 3%** 时,补丁才会被接受。如果失败,引擎将升级到下一个策略(每个聚类最多尝试 3 次)。
| 策略 | 机制 |
|----------|-----------|
| 对抗训练 | 使用修正后的标签在攻击集上进行微调 |
| 风格化增强 | 通过风格迁移进行域随机化 |
| 反事实生成 | 合成接近边界的样本 |
| 定向增强 | 针对特定聚类的过采样 |
### 阶段 7 — 审计报告
ReportLab 生成多页 PDF:包含审计元数据的封面页、执行摘要、展示各攻击成功率的 matplotlib 雷达图(扁平多边形 = 均匀的鲁棒性,尖角多边形 = 不对称的弱点)、包含 LLM 解释和补丁结果的各聚类卡片、方法附录。
### 阶段 8 — REST API
```
POST /audit/upload multipart: files[] + model + budget → { job_id }
GET /audit/job/{id} → { status, vulnerability_score, clusters_found, report_filename }
GET /report/{filename} → PDF stream
GET /health → { status: "ok" }
```
通过 FastAPI `BackgroundTasks` 实现异步作业管理。带有轮询机制的内存作业存储。为 `ganglet.github.io` 配置了 CORS。通过 Docker 部署在 HuggingFace Spaces(免费层级,16 GB 内存)。
## 技术栈
| 组件 | 技术 | 原因 |
|-----------|-----------|-----|
| 核心 ML | PyTorch 2.x | 使用 Autograd 进行攻击,使用 hooks 获取激活值 |
| 可解释性 | Captum | 在任何 nn.Module 上使用 IntegratedGradients + Saliency |
| 降维 | UMAP | 非线性流形 vs. PCA 的线性投影 |
| 聚类 | HDBSCAN | 无需固定 k 值;可处理噪声和任意形状的簇 |
| Agent 编排 | LangGraph | 有状态图,在一致性检查失败时可重访节点 |
| LLM | Gemini 2.5 Flash | 低延迟,适用于论文 RAG 的长上下文 |
| 向量搜索 | FAISS + nomic-embed-text | 对 10 篇对抗性 ML 论文进行快速密集检索 |
| 报告生成 | ReportLab + matplotlib | 程序化生成 PDF,无需编辑模板 |
| API | FastAPI + uvicorn | 异步,BackgroundTasks,multipart 上传 |
| 部署 | Docker + HuggingFace Spaces | 免费公共 endpoint,16 GB 内存 |
## 快速开始
**Pip (推荐)**
```
pip install anvil-redteam
anvil --model resnet18 --budget 50 # CLI
anvil-serve # API server on :8000
```
**从源码构建**
```
git clone https://github.com/Ganglet/Anvil
cd Anvil/Anvil_Project
pip install -e .
# 运行 API server
uvicorn api:app --host 0.0.0.0 --port 8000
# 或直接运行 CLI pipeline
python audit.py --model resnet18 --budget 50
```
**Docker**
```
docker pull ghcr.io/ganglet/anvil:latest
docker run -p 8000:8000 ghcr.io/ganglet/anvil:latest
```
使用位于 **[ganglet.github.io/Anvil](https://ganglet.github.io/Anvil)** 的托管演示 —— 上传图像,即可获取完整的 PDF 审计报告。
## 项目结构
```
Anvil_Project/
├── models/ # Phase 1 — BaseModel ABC + ResNet-18/DistilBERT wrappers
├── profiler/ # Phase 2 — AttackSurfaceProfiler (Captum)
├── attacks/ # Phase 3 — FGSM, PGD, Patch, Semantic + AttackEngine
├── clustering/ # Phase 4 — FeatureExtractor, FailureModeClusterer, VulnerabilityTaxonomy
├── agent/ # Phase 5 — LangGraph agent, FAISS RAG, Gemini integration
├── patching/ # Phase 6 — Patcher, 4 strategies, safety gate
├── reporter/ # Phase 7 — ReportLab PDF generation
├── api.py # Phase 8 — FastAPI server with async job management
├── audit.py # CLI entry point
├── requirements.txt
├── Dockerfile
└── frontend/ # React + Vite source for ganglet.github.io/Anvil
```
## 致谢
- **PyTorch** — [pytorch.org](https://pytorch.org)
- **Captum** — [pytorch.org/captum](https://pytorch.org/captum)
- **UMAP-learn** — [github.com/lmcinnes/umap](https://github.com/lmcinnes/umap)
- **HDBSCAN** — [github.com/scikit-learn-contrib/hdbscan](https://github.com/scikit-learn-contrib/hdbscan)
- **LangGraph** — [langchain.com/langgraph](https://langchain.com/langgraph)
- **LangChain** — [langchain.com](https://langchain.com)
- **FAISS** — [github.com/facebookresearch/faiss](https://github.com/facebookresearch/faiss)
- **ReportLab** — [reportlab.com](https://reportlab.com)
- **Matplotlib** — [matplotlib.org](https://matplotlib.org)
- **FastAPI** — [fastapi.tiangolo.com](https://fastapi.tiangolo.com)
- **HuggingFace** — [huggingface.co](https://huggingface.co)
- **Adversarial ML Benchmark (ATB)** — [github.com/MadryLab/ATB](https://github.com/MadryLab/ATB)
## 许可证
代码:MIT — 见 [LICENSE](LICENSE)
标签:AI漏洞检测, AI自动化工具, AV绕过, CISA项目, DLL 劫持, Docker, FAISS, FastAPI, FGSM, Gemini 2.5 Flash, HDBSCAN, HuggingFace, Kubernetes 安全, LangGraph, ML红队管线, Patch攻击, PDF报告生成, PGD, PyTorch模型攻击, RAG, RestAPI, UMAP, 主机安全, 人工智能安全, 凭据扫描, 反取证, 合规性, 向量数据库, 大语言模型, 失败模式分析, 安全评估, 安全门控, 安全防御评估, 对抗性机器学习, 对抗样本生成, 异常检测, 机器学习红队, 检索增强生成, 模块化设计, 模型安全审计, 模型鲁棒性, 深度学习, 聚类分析, 自动化修复, 语义攻击, 请求拦截, 逆向工具, 零人工干预