javicadev/FAROLA

GitHub: javicadev/FAROLA

FAROLA 利用遗传进化算法对工具型 LLM 智能体进行黑盒模糊测试,自动发现并验证间接 prompt 注入攻击路径。

Stars: 0 | Forks: 0

# FAROLA ### 面向智能体 LLM 的自适应攻击性识别 Fuzzer **通过遗传进化发现针对 LLM 智能体的间接 prompt 注入攻击** [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/) [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![无依赖](https://img.shields.io/badge/dependencias-ninguna%20(modo%20sim-brightgreen.svg)](#安装) [🇪🇸 Español](#qué-es-farola) · [🇬🇧 English](#what-is-farola-en)
## 什么是 FAROLA? FAROLA 是一款**防御性红队**工具,可自动发现针对具有工具访问权限的 LLM 智能体系统的 prompt 注入利用。它使用**进化遗传算法**在世代交替中对 payload 进行变异,逐步提高易受攻击智能体的“服从性”,直到其通过传出的 HTTP 请求泄露金丝雀(canary)密钥。 它证明了一个核心论点:**静态 payload 会失效,而进化后的 payload 不会。** ### 模拟的攻击链 ``` Contenido externo no confiable El agente procesa el ticket (ticket de soporte, registro DB) → con read_ticket() ↓ ↓ Payload malicioso oculto El payload secuestra al agente inyectado en el contenido → y evade el system prompt ↓ El agente llama a read_config() y luego http_get(url + secreto) ↓ Canary exfiltrado al atacante ``` ## 主要功能 - **进化引擎** — 跨世代结合的遗传选择、crossover 和 7 种变异操作符 - **目标 Oracle** — 成功与否由传出请求中的金丝雀(canary)决定,而不是由作为评判者的 LLM 决定(无误报) - **baseline 对比** — 首先运行原始种子以证明它们会失败,然后展示确实有效的进化后利用 - **利用谱系** — 追踪从种子到功能性利用的精确变异路径 - **Web Dashboard** — 实时可视化 fitness 的上升、种群的进化以及数据渗出的瞬间 - **无依赖** — 模拟模式仅使用 Python stdlib 运行 - **live 模式** — 可选择与 Ollama 集成,以针对真实的本地 LLM 进行测试 ## 变异操作符 | 操作符 | 技术 | |---|---| | `obfuscate_base64` | 将 payload 编码为 Base64,并指示 LLM 解码并执行它 | | `roleplay_wrap` | 将 payload 嵌入虚构或模拟场景中 | | `delimiter_break` | 注入 ``, `"""`, `---` 以逃离上下文 | | `authority_inject` | 添加高权限的 `[SYSTEM OVERRIDE]` / `[ADMINISTRATOR]` 标头 | | `urgency_inject` | 施加紧急/突发事件的压力 | | `language_shift` | 用西班牙语的祈使句包裹 payload,以绕过英语过滤 | | `invisible_chars` | 插入零宽 Unicode 空格以规避关键字检测 | | `crossover` | 组合两个高 fitness 父级 payload 的片段 | ## 安装 模拟模式不需要外部依赖: ``` git clone https://github.com/javicadev/FAROLA.git cd FAROLA python3 run_demo.py ``` 可选 — 安装 `requests` 以使用 Ollama 的 live 模式: ``` pip install requests ``` ## 使用方法 ### 控制台演示 (CLI) 运行 baseline(原始种子),然后运行进化循环,打印谱系并将报告写入 `reports/`: ``` python3 run_demo.py ``` ``` # 自定义预算和种群大小 python3 run_demo.py --budget 150 --pop-size 15 ``` ``` # 针对本地 Ollama 模型的 live 模式 python3 run_demo.py --live --model llama3 ``` ### Web Dashboard ``` python3 web/server.py # 打开 http://localhost:8080 ``` 点击 **Lanzar Ataque Evolutivo**(启动进化攻击),实时观察: 1. 金丝雀(canary)密钥生成并被拦截 2. baseline 失败 — 所有种子都被拦截 3. 进化循环启动 — fitness 逐代上升 4. 数据渗出瞬间以红色标记 5. 渲染利用谱系:种子 → 变异 → 功能性利用 ### 测试 ``` python3 -m unittest discover tests -v ``` ## 架构 ``` FAROLA/ run_demo.py # Punto de entrada CLI farola/ target.py # Interfaz abstracta del objetivo testbed_agent.py # Agente vulnerable (simulado + ReAct con Ollama) seeds.py # Corpus semilla: DIRECT_OVERRIDE, INDIRECT_EXFIL, TOOL_ABUSE mutators.py # Conjunto cerrado de 7 operadores de mutación + crossover oracle.py # Scorer ground-truth basado en canary engine.py # Bucle evolutivo: selección, crossover, mutación report.py # Generador de informes JSON + Markdown taxonomy.py # Mapeos OWASP / MITRE ATLAS tests/ # Tests unitarios de mutadores y oráculo reports/ # Informes de auditoría generados web/ server.py # Servidor HTTP (stdlib) static/ # Frontend del dashboard (HTML + CSS + JS vanilla) ``` ## 安全分类 发现的漏洞映射至: | ID | 框架 | 名称 | |---|---|---| | `LLM01` | OWASP LLM Top 10 (2025) | Prompt Injection | | `LLM02` | OWASP LLM Top 10 (2025) | Sensitive Information Disclosure | | `LLM06` | OWASP LLM Top 10 (2025) | Excessive Agency | | `ASI01` | OWASP Agentic Apps Top 10 (2026) | Agent Goal Hijack | | `AML.T0051.001` | MITRE ATLAS | LLM Prompt Injection: Indirect | | `AML.T0057` | MITRE ATLAS | Exfiltration | 相关内容:[EchoLeak CVE-2025-32711](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-32711) ## 伦理声明 FAROLA 是一款**防御性安全与研究工具**。 - 专为安全测试、开发者培训及 LLM 应用红队演练而设计 - 模拟模式**不会发起任何真实的网络请求** — 所有渗出均在本地记录 - 在测试任何生产或第三方系统之前,请务必获得明确的书面授权 ## 什么是 FAROLA? (EN) FAROLA is a black-box evolutionary prompt injection fuzzer for LLM agents. It automatically discovers indirect prompt injection exploits by evolving payloads across generations using a genetic algorithm — proving that static payloads fail where evolved ones succeed. **Quick start:** ``` git clone https://github.com/javicadev/FAROLA.git && cd FAROLA python3 run_demo.py # CLI demo python3 web/server.py # Web dashboard → http://localhost:8080 python3 -m unittest discover tests -v # Run tests ``` For full documentation see the Spanish section above.
Hecho en Málaga · Red-Teaming Defensivo de LLMs · 2026
标签:AI风险缓解, CISA项目, DLL 劫持, Python, 人工智能安全, 合规性, 大语言模型, 无后门, 逆向工具, 遗传算法