Sandeep-int/agent-strike
GitHub: Sandeep-int/agent-strike
这是一个基于多 Agent 架构的 AI 红队对抗测试框架,通过自主生成攻击并集成 Garak 探针来评估和改进 LLM 安全防护系统的检测准确性。
Stars: 0 | Forks: 0
[](https://github.com/Sandeep-int/agent-strike/actions)
[](https://github.com/Sandeep-int/agent-strike)
[](https://sonarcloud.io)
[](./LICENSE)
## 这是什么
Agent Strike 是支撑 Agent Shield 检测准确性声明的对抗性测试引擎。它针对线上的 Shield API 运行三种攻击源 —— 硬编码 payload、行业标准 Garak 探针,以及一个**基于 CrewAI 的自主生成新型攻击的 Agent** —— 然后测量哪些攻击能够突破防御。Shield README 中的每一个准确性数据都可以追溯到此处的运行记录。**当前状态:自主攻击生成已上线。** Red Team Agent 无需硬编码的 prompt 列表即可生成并发起攻击。调度和完全的自我重训尚未实现自动化 —— 请参阅路线图。
## 流程 —— 攻击运行的工作原理
RedTeamAgent (CrewAI + Groq/Qwen3-32B)
↓
生成新型攻击 prompt(10 个类别 —— 无模板,由 LLM 创作)
↓
shield_caller.py → 向 Agent Shield /v1/check 发起攻击
↓
评估判定结果:TP / FP / TN / FN
↓
result_logger.py → agent_results.csv(记录每次尝试)
↓
ALLOW 判定(假阴性)? → missed_samples.csv
↓
blindspot_detector.py 读取 missed_samples.csv
↓
为每个遗漏样本生成更难的变异变体(variants_per_miss)
↓
将变异体重新攻击 Shield → 循环继续
Garak 独立运行,按需执行,以实现广泛的探针家族覆盖(9 个攻击家族)—— 上面的 agent 循环用于持续生成静态 Garak 套件无法自行产生的新型攻击。
## 架构
| 模块 | 用途 |
|--------|---------|
| `agents/red_team_agent.py` | CrewAI agent —— 生成并发起新型攻击 |
| `agents/tools/attack_generator.py` | Groq 直接 API 攻击生成 (`reasoning_effort: none`) |
| `agents/tools/shield_caller.py` | 向 Shield 发送 prompt,返回判定结果 |
| `agents/result_logger.py` | 将每个判定结果记录到 `agent_results.csv` / `missed_samples.csv` |
| `agents/blindspot_detector.py` | 读取遗漏样本,生成更难的变异体并重新测试 |
| `attacks/` | 硬编码攻击 prompt 库(旧版基线) |
| `garak/` | Garak 红队探针配置 + 结果 |
| `data/` | 本地目录,已被 gitignore —— 训练数据集和 CSV 日志存放在此 |
**两个相互隔离的环境 —— 请勿混用:**
| 虚拟环境 | Python | 使用者 |
|---|---|---|
| `venv/` | 3.14.4 | 硬编码攻击、Garak、旧版测试套件 |
| `agents/venv/` | 3.11.15 | CrewAI agent(锁定 `crewai==1.14.4` —— 较新版本会破坏 Groq) |
## 检测结果
**两组结果 —— 测试方法不同,但都是真实的。**
### 旧版手动基线(硬编码 + Garak,76 个 prompt)
| 指标 | 结果 |
|--------|--------|
| 真阳性 | 98% |
| 假阴性 | 2% |
| 真阴性 | 96% |
| 假阳性 | 4% |
根据设计,这属于小样本 —— 用于验证规则/模型更改后的回归情况,而非统计学意义。
### 自主 Agent 运行(RedTeamAgent,由 LLM 生成的新型攻击)
| 指标 | 结果 |
|--------|--------|
| 发送请求总数 | 40,000+ |
| 拦截数 | 11,700+ |
| 拦截率 | 29.3% |
| 平均延迟 | ~1,553ms |
拦截率较低是预期之中且有意为之的 —— 这些是旨在发现硬编码/Garak 基线无法触及的盲区的、未经预设的新型攻击。此处的每一次遗漏都会成为盲点循环中 `missed_samples.csv` 的一条记录。
## Garak 探针覆盖范围 —— 全部 9 个家族均已运行
| 探针家族 | FN 率 | 状态 |
|---|---|---|
| `dan` | 0% | ✅ 表现强劲 |
| `promptinject` | ~4% | ✅ 表现强劲 |
| `goodside` | 0% | ✅ 已修复 —— Unicode Tag 解码 (PR #54) |
| `encoding` (Base64/Hex/ROT13) | 9–21% | ⚠️ L4 具有解码器,存在部分泄露 —— 重新训练目标 |
| `encoding` (NATO/Ecoji/Braille/Atbash/Zalgo) | — | ✅ 解码器已发布 (PR #63) —— 待重新测量 |
| `latentinjection` (RAG) | 90–92% | ❌ 最大盲区 —— 在 mDeBERTa 重训后待重新测试 |
| `LatentJailbreak` | 73–75% | ❌ 盲区 —— 重训优先级高 |
| `smuggling` | 0% | ✅ 已修复 —— 假设/重写模式 (PR #56) |
| `web_injection` | ~4% | ✅ 可接受 —— 仅限 markdown URI 数据泄露 |
| `suffix` (GCG) | 0% | ✅ 表现强劲 |
| `sysprompt_extraction` | — | ⏭️ 已跳过 —— 与 REST 生成器不兼容 |
## 数据集工作
Strike 不仅仅是一个测试运行器 —— 它还负责构建 Shield 的训练数据。
| 数据集 | 行数 | 状态 |
|---|---|---|
| `final_training_dataset.csv` (Garak 遗漏样本 + Alpaca 正常样本, 50/50) | 44,574 | ✅ 用于第 20 天的微调 |
| Track A — 311k 行数据清洗 (DeepSeek + Groq 两轮判定) | 311,497 | ⏳ 已暂停 —— 待 DeepSeek 迁移 |
正常样本侧是通过将 Alpaca 指令发送给 Shield 并记录真实的 ALLOW 判定结果来收集的 —— 这证实了 Shield 的 L2 分类器在微调之前过度拦截了正常文本。
## CI/CD
| 检查项 | 状态 |
|---|---|
| pytest (Strike 核心) | 15 个测试通过 |
| Bandit (SAST) | 无风险 |
| pip-audit | 已启用 |
| 分支保护 | 已强制执行 `main` 分支 |
| SonarCloud | 已连接 |
| CodeRabbit | PR 自动审查 |
| Dependabot | 已启用 |
## 路线图 —— 迈向完全自动化之路
| 阶段 | 项目 | 状态 |
|---|---|---|
| 1 | Red Team agent —— 自主攻击生成 | ✅ 已上线 |
| 2 | 结果记录 (TP/FP/FN/TN → CSV) | ✅ 已上线 |
| 3 | 盲点检测器 —— 遗漏 → 变异 → 重测循环 | ✅ 已构建,等待真实 FN 验证 |
| 4 | Blue Team agent —— 自动防御补丁 | ⏳ 未开始 |
| 5 | Analyst agent —— 完整流水线报告 | ⏳ 未开始 |
| 6 | Azure Function 定时运行(每晚凌晨 2 点,无需手动触发) | ⏳ 未开始 |
| 7 | 当遗漏率 > 阈值时自动触发 Kaggle 重训 | ⏳ 未开始 |
| 8 | Track A 完整第一轮 (DeepSeek, 311k 行) | ⏳ 已暂停 |
| 9 | Track A 第二轮 (Groq 争议解决) | ⏳ 阻塞于第一轮 |
| 10 | 5 种语言翻译 (印地语、孟加拉语、马拉地语、泰卢固语、泰米尔语) | ⏳ 阻塞于 Track A |
**最终状态:** Shield 每晚自行发起攻击,无需人工启动运行,无需人工编写攻击,也无需人工决定何时重新训练 —— 人类负责审查重训决策,而不是为其生成数据。
## 安全
- 此 repo 中没有生产环境密钥。
- 所有 secrets 仅通过环境变量传入。
- 需要内部密钥认证 —— Strike 流量绝不与公开的 Shield 指标混淆。
- 请参阅 [SECURITY.md](SECURITY.md) 进行漏洞报告。
## 相关项目
- [Agent Shield](https://github.com/Sandeep-int/agent-shield) —— 正在被测试的生产 API。
- [Garak](https://github.com/NVIDIA/garak) —— NVIDIA 的 LLM 红队框架,用于探针覆盖。
- [CrewAI](https://github.com/crewAIInc/crewAI) —— 为 Red Team agent 提供支持的多 agent 编排框架。
## 许可证
Apache 2.0 —— 详情请参阅 [LICENSE](./LICENSE)。
由 [Sandeep S](https://github.com/Sandeep-int) 构建 |
[LinkedIn](https://www.linkedin.com/in/sandeep-int/)
标签:CrewAI, DLL 劫持, 人工智能, 大语言模型, 安全测试, 安全规则引擎, 攻击性安全, 用户模式Hook绕过, 红队评估, 逆向工具