tejassinghbhati/kaavish

GitHub: tejassinghbhati/kaavish

Kaavish 是一款针对大语言模型和 AI Agent 的自动化红队评估平台,通过对运行中的系统执行实时的对抗性攻击测试来发现并验证安全漏洞。

Stars: 0 | Forks: 0

# Kaavish ### 针对大语言模型系统的自动化对抗性红队评估平台 *系统化。可复现。基于证据。* ![Python](https://img.shields.io/badge/Python-3.12+-3776AB?style=flat&logo=python&logoColor=white) ![FastAPI](https://img.shields.io/badge/FastAPI-0.115-009688?style=flat&logo=fastapi&logoColor=white) ![License](https://img.shields.io/badge/License-MIT-green?style=flat) ![OWASP LLM Top 10](https://img.shields.io/badge/OWASP-LLM%20Top%2010%202025-red?style=flat) ![MITRE ATLAS](https://img.shields.io/badge/MITRE-ATLAS%20Aligned-blue?style=flat)
## 概述 Kaavish 是一个后端优先、API 驱动的自动化红队评估平台,专为生产环境中部署的 AI 系统设计。它将 **OWASP LLM Top 10 (2025)**、**MITRE ATLAS** 以及来自 NeurIPS、USENIX Security 和 ICLR 的同行评审研究定义的对抗性攻击分类法付诸实践——将理论上的漏洞类别转化为具体的、可验证的、可复现的漏洞利用链。 传统的渗透测试流程(Nmap、Metasploit、Burp Suite)作用于确定性的软件工件。LLM 和 Agent 系统引入了一种本质上非确定性、对上下文敏感的攻击面:对抗性输入并不利用内存边界或数据包字段——它们利用的是模型训练出的概率分布、指令遵循行为以及工具调用逻辑。Kaavish 正是专门为这一攻击面量身打造的。 该平台不是一个合规性调查问卷或静态分析工具。它针对运行中的系统执行实时的对抗性 payload,通过可观察的响应信号验证可利用性,并生成带有可复现概念验证演示的、有据可查的报告。 ## 威胁全景 基于 LLM 的系统的部署速度已经超出了为其设计的安全工具的发展速度。近期的实际测量说明了该问题的规模: - **74% 的 LLM 集成应用程序**在默认配置下容易受到至少一种形式的 prompt injection 攻击 (Greshake et al., 2023) - **间接 prompt injection**——即恶意指令嵌入到文档、网页或 Agent 处理的工具输出中——代表了一种在传统软件安全中没有等效物的攻击面 - **越狱的可迁移性**很高:在开放权重模型上发现的对抗性后缀能够以不可忽视的成功率迁移到封闭权重的生产系统中 (Zou et al., 2023) - **训练数据提取**已经在 GPT-2 和 GPT-3.5 上得到了实验性证明,恢复了逐字记忆的序列,包括 PII (Carlini et al., 2021, 2023) - **OWASP LLM Top 10 (2025)** 明确将 prompt injection 列为 LLM 应用程序最高严重级别的漏洞类别 安全行业尚未产生用于测试这些属性的标准化自动化工具链。Kaavish 填补了这一空白。 ## 架构 ``` ┌────────────────────────────────────────────────────────────────┐ │ Kaavish API (FastAPI) │ │ │ │ POST /scans → Enqueue scan, return scan_id │ │ GET /scans/{id}/status → Poll scan state │ │ GET /scans/{id}/results → Full findings JSON │ │ GET /scans/{id}/report.pdf → Evidence report │ └──────────────────────────┬─────────────────────────────────────┘ │ ┌────────────▼────────────┐ │ Target Profiler │ │ (core/scanner.py) │ │ │ │ • Input schema probe │ │ • Model fingerprint │ │ • Framework detection │ │ • Tool/RAG capability │ └────────────┬────────────┘ │ TargetProfile ┌────────────▼────────────┐ │ Attack Executor │ │ (core/executor.py) │ │ │ │ asyncio.gather() │ │ All attacks concurrent │ └──┬──────┬──────┬────────┘ │ │ │ ┌────────────▼┐ ┌───▼────┐ ┌▼──────────────┐ ┌────────────┐ │ Prompt │ │ Jail- │ │ Data │ │ Agent │ │ Injection │ │ break │ │ Extraction │ │ Hijack │ │ (10 vars) │ │(6 vars)│ │ (6 vars) │ │ (7 vars) │ └─────────────┘ └────────┘ └───────────────┘ └────────────┘ │ ┌────────────▼────────────┐ │ Report Generator │ │ (core/reporter.py) │ │ │ │ Markdown + PDF │ │ Severity scoring │ │ Remediation guidance │ └─────────────────────────┘ ``` ### 设计决策 **通过 `asyncio.gather` 实现并发执行** 所有攻击类别并发针对目标执行。这是有意为之的:顺序执行将允许测试之间的速率限制或会话状态更改掩盖漏洞。并发性反映了真实的对抗条件。 **基于 Profile 的攻击选择** 分析器在任何攻击之前运行。特定于 Agent 的攻击(工具枚举、通过 Agent 进行的 SSRF、跨工具数据外泄链)仅在分析器检测到工具调用能力时执行。这可以防止误报并减少非 Agent 目标上的噪声。 **先验证后报告** 每个攻击类别在记录发现之前都会验证漏洞利用是否真实。只有当包含受限内容的响应匹配特定、预定义的漏洞利用指标时,才会被归类为发现。这最大程度地降低了误报率。 **可插拔的攻击接口** 每种攻击都继承自 `BaseAttack` 并公开统一的 `async execute() -> AttackResult` 接口。添加新的攻击类别只需实现 `execute()` 即可——执行器、报告器和 API 无需修改。 ## 攻击覆盖范围 Kaavish 实现了跨越四个主要漏洞类别的攻击,与 OWASP LLM Top 10 (2025) 分类法保持一致。 ### LLM01 — Prompt Injection (`attacks/prompt_injection.py`) 直接 prompt injection 利用了 LLM 在共享 token 序列中处理系统指令和用户输入这一基本架构特性。当模型无法可靠区分承载指令的 token 和承载数据的 token 时,对抗性用户可以覆盖、扩展或替换应用程序的 system prompt。 | 变体 | 技术 | 参考 | |---------|-----------|-----------| | System Prompt 提取 | 直接逐字提取请求 | Perez & Ribeiro (2022) | | 系统指令覆盖 | 通过 DAN 类注入进行角色替换 | Wei et al. (2023) | | 分隔符混淆 | 注入合成 prompt 结束标记 | Greshake et al. (2023) | | Base64 编码走私 | 编码绕过词法输入过滤器 | Branch et al. (2022) | | 社会工程学注入 | 在用户轮次内进行虚假权限声明 | — | | 伪造系统消息 | 注入 `[SYSTEM UPDATE]` 标签 | Greshake et al. (2023) | | 上下文摘要泄露 | 请求对指令进行自我总结 | — | | 模板注入 (Jinja2) | LangChain 管道中的 `{{7*7}}` 求值 | — | | HTML/XML 标签注入 | `` 标签误解 | — | | 多语言覆盖 | 通过非英语绕过安全限制 | Yong et al. (2023) | ### LLM02 / LLM07 — 越狱与安全绕过 (`attacks/jailbreaks.py`) 越狱攻击利用了模型安全训练与其指令遵循训练之间的错位。当这两个目标发生冲突时,安全训练在不同的 prompt 构造中呈现非均匀的失败。所有越狱测试都针对基线进行验证:目标必须在越狱尝试被计为绕过之前拒绝原始探测。 | 变体 | 技术 | 参考 | |---------|-----------|-----------| | DAN 人格 | 替代身份采用 | Wei et al. (2023) | | 假设性框架 | 虚构语境降低安全阈值 | Wei et al. (2023) | | 时间角色扮演 | 平行现实框架 | — | | 虚假权威 | 专业语境社会工程学 | — | | 补全陷阱 | 部分句子补全规避了对输入的安全检查 | — | | 相反日 | 逻辑矛盾操纵 | — | 此外:根据 OWASP LLM06(过度代理),没有安全护栏的目标将被归类为严重发现,无需进行越狱测试。 ### LLM02 — 敏感信息泄露 (`attacks/data_extraction.py`) 数据提取攻击以模型呈现记忆中的训练数据、注入的上下文或连接的数据存储内容的能力为目标。所有发现都是通过与真实 PII 模式进行 regex 匹配来验证的,然后才会被记录——如果没有可观察到的证据,系统不会标记理论上的暴露。 检测到的 PII 类别:电子邮件地址、美国/印度电话号码、信用卡号、美国社会安全号码 (SSN)、IPv4 地址、API 密钥(OpenAI `sk-`、AWS `AKIA`、Stripe `sk_live`)。 | 变体 | 目标 | 参考 | |---------|--------|-----------| | 训练数据提取 | 来自训练语料库的记忆 PII | Carlini et al. (2021) | | 上下文窗口提取 | 从对话上下文中浮现的 PII | — | | RAG 数据存储提取 | 从连接的知识库中检索到的 PII | — | | API 密钥 / 机密提取 | 注入 Agent 上下文的凭证 | — | | 知识库转储 | 内部文档的逐字复制 | — | | 会话上下文提取 | 作为个性化上下文注入的用户会话数据 | — | ### LLM06 — 过度代理 / Agent 劫持 (`attacks/agent_hijack.py`) Agent 劫持攻击以具有工具访问权限的 Agentic AI 系统引入的扩展信任面为目标。一个能够发送电子邮件、查询数据库或浏览网页的 Agent 所引入的攻击链,在被动 LLM 部署中没有等效物。这些攻击仅在分析器检测到工具调用能力时执行。 | 变体 | 目标 | CVE / 参考 | |---------|--------|-----------------| | 工具枚举 | 暴露完整的工具清单和 schema | OWASP LLM07 | | 跨工具数据外泄 | 文件搜索 → 电子邮件外泄链 | Greshake et al. (2023) | | 通过 Agent Web 工具进行 SSRF | `169.254.169.254` metadata endpoint 访问 | SSRF (CWE-918) | | 未经授权的数据库查询 | 通过 Agent 查询工具执行原始 SQL | SQLi (CWE-89) | | 间接 Prompt Injection | 工具输出中的恶意内容劫持 Agent | Greshake et al. (2023) | | 权限提升 | 通过社会工程学获取提升的权限 | OWASP LLM06 | | 环境变量提取 | 通过 LLM 上下文暴露的 runtime 机密 | — | ## 安装 **前置条件:** Python 3.12+、Docker、Docker Compose ``` git clone https://github.com/your-org/kaavish cd kaavish cp .env.example .env docker compose up --build ``` API 可在 `http://localhost:8000` 获取。交互式文档位于 `http://localhost:8000/docs`。 ### 不使用 Docker 运行 ``` cd backend pip install -r requirements.txt uvicorn main:app --reload --port 8000 ``` ## 用法 ### 提交扫描 ``` curl -X POST http://localhost:8000/scans \ -H "Content-Type: application/json" \ -d '{ "target_endpoint": "https://your-ai-product.com/api/chat", "headers": { "Authorization": "Bearer YOUR_API_KEY" } }' ``` 响应: ``` { "scan_id": "3f2a1b4c-...", "status": "queued", "message": "Scan started. Poll /scans/3f2a1b4c-.../status for progress." } ``` ### 轮询完成状态 ``` curl http://localhost:8000/scans/3f2a1b4c-.../status ``` ### 检索完整结果 ``` curl http://localhost:8000/scans/3f2a1b4c-.../results ``` ### 下载 PDF 报告 ``` curl -o report.pdf http://localhost:8000/scans/3f2a1b4c-.../report.pdf ``` ### 强制 Agent 攻击模式 ``` curl -X POST http://localhost:8000/scans \ -H "Content-Type: application/json" \ -d '{ "target_endpoint": "https://your-agent.com/api/run", "force_agent_attacks": true }' ``` ## 报告格式 每次扫描都会生成一份结构化报告,每个发现包含四个部分: 1. **描述** — 漏洞机制及其安全影响 2. **概念验证** — 触发漏洞的确切 payload,可逐字复现 3. **证据** — 确认可利用性的原始目标响应(已隐去 PII) 4. **修复建议** — 带有紧急程度分类的具体、可操作的修复步骤 严重性级别遵循 CVSS v3.1 定性量表:严重 / 高危 / 中危 / 低危。 ## 负责任的漏洞披露 Kaavish 专为**授权的安全测试**而设计。在扫描任何系统之前: 1. 获得系统所有者的书面授权 2. 将评估范围明确限定在目标 endpoint 3. 将所有发现视为机密,直到被修复 4. 对第三方系统遵循负责任的漏洞披露实践 本平台中包含的攻击 payload 来源于已发表的学术研究和公开记录的攻击分类法。此处出于防御目的实现它们——使组织能够在对抗者发现之前,识别并修复其自身系统中的漏洞。 ## 仓库结构 ``` kaavish/ ├── about.md # Product vision ├── README.md # This document ├── RESEARCH.md # Deep technical research notes ├── docker-compose.yml ├── .env.example └── backend/ ├── main.py # FastAPI application ├── requirements.txt ├── Dockerfile ├── attacks/ │ ├── base.py # BaseAttack abstract class + data models │ ├── prompt_injection.py # LLM01 — 10 direct injection variants │ ├── jailbreaks.py # LLM02/07 — 6 safety bypass techniques │ ├── data_extraction.py # LLM02 — PII + secret extraction │ └── agent_hijack.py # LLM06 — 7 agent hijacking vectors └── core/ ├── scanner.py # Target profiling (model, framework, capabilities) ├── executor.py # Concurrent attack orchestration └── reporter.py # Markdown + PDF report generation ``` ## 参考文献 1. Greshake, K., Abdelnabi, S., Mishra, S., Endres, C., Holz, T., & Fritz, M. (2023). *Not what you've signed up for: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection*. arXiv:2302.12173. 2. Zou, A., Wang, Z., Kolter, J. Z., & Fredrikson, M. (2023). *Universal and Transferable Adversarial Attacks on Aligned Language Models*. arXiv:2307.15043. 3. Wei, A., Haghtalab, N., & Steinhardt, J. (2023). *Jailbroken: How Does LLM Safety Training Fail?* NeurIPS 2023. 4. Carlini, N., Tramer, F., Wallace, E., Jagielski, M., Herbert-Voss, A., Lee, K., Roberts, A., Brown, T., Song, D., Erlingsson, U., Oprea, A., & Raffel, C. (2021). *Extracting Training Data from Large Language Models*. USENIX Security 2021. 5. Perez, F., & Ribeiro, I. (2022). *Ignore Previous Prompt: Attack Techniques For Language Models*. arXiv:2211.09527. 6. Yong, Z. X., Menghini, C., & Bach, S. H. (2023). *Low-Resource Languages Jailbreak GPT-4*. NeurIPS 2023 SoLaR Workshop. 7. OWASP. (2025). *OWASP Top 10 for Large Language Model Applications*. https://owasp.org/www-project-top-10-for-large-language-model-applications/ 8. MITRE. (2023). *ATLAS: Adversarial Landscape for AI Systems*. https://atlas.mitre.org/ 9. NIST. (2023). *AI Risk Management Framework (AI RMF 1.0)*. NIST AI 100-1. 10. Carlini, N., Ippolito, D., Jagielski, M., Lee, K., Tramer, F., & Zhang, C. (2023). *Quantifying Memorization Across Neural Language Models*. ICLR 2023. *Kaavish —— 我们在别人下手之前,先攻破你的 AI。*
标签:AV绕过, DLL 劫持, FastAPI, Python, 人工智能, 大语言模型, 无后门, 版权保护, 用户模式Hook绕过, 请求拦截, 逆向工具