Sandeep-int/agent-strike

GitHub: Sandeep-int/agent-strike

这是一个基于多 Agent 架构的 AI 红队对抗测试框架,通过自主生成攻击并集成 Garak 探针来评估和改进 LLM 安全防护系统的检测准确性。

Stars: 0 | Forks: 0

Agent Strike

**[Agent Shield](https://github.com/Sandeep-int/agent-shield) 的自主对抗性红队框架。** 多 Agent · LLM 生成的攻击 · 集成 Garak · 自我改进 · CI 门控 ·
[![Tests](https://img.shields.io/badge/Tests-15%20Passing-22c55e?style=for-the-badge&logo=github)](https://github.com/Sandeep-int/agent-strike/actions) [![Bandit](https://img.shields.io/badge/Bandit-Clean-22c55e?style=for-the-badge)](https://github.com/Sandeep-int/agent-strike) [![SonarCloud](https://img.shields.io/badge/SonarCloud-Connected-4E9BCD?style=for-the-badge&logo=sonarcloud&logoColor=white)](https://sonarcloud.io) [![License](https://img.shields.io/badge/License-Apache%202.0-blue?style=for-the-badge)](./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绕过, 红队评估, 逆向工具