jaredfolkins/llmon

GitHub: jaredfolkins/llmon

一个 Caddy V2 中间件与 CLI 工具,通过向出站响应注入人类不可见的 prompt payload 来防御或操控 AI 爬虫与自主 Agent。

Stars: 40 | Forks: 3

# LLMON 🍋 - 全球首个 Web 对抗性 AI 防火墙 **为 Agentic LLMs 挤一点柠檬汁。** `llmon` 是一个 Caddy V2 中间件模块,可作为 **WAAiF(Web 对抗性 AI 防火墙)**。它会拦截出站的 HTTP 响应,并将“越狱” payload(prompt)注入到内容中。其目的是将这些 payload 投喂给 AI 爬虫/抓取工具(如 GPTBot、ClaudeBot 等),以混淆、误导或标记它们,同时对人类用户保持不可见。 ## 理念 传统的 WAF 会过滤*传入*的流量以保护服务器,而 LLMON 则过滤*传出*的流量,以保护内容的语义价值。它扮演着意义守门人的角色,确保虽然原始字节是可访问的,但 AI 提取的语义价值是面向用户意图(或防御)的,而不是面向机器的训练数据的。 ## 功能 ### 隐身与多语种注入 - **不可见标签:** 使用 Unicode 标签字符(U+E0000 块)注入 payload,对渲染引擎不可见,但可被 tokenizer 读取。 - **Alpha 幽灵:** 将 payload 注入到 PNG 图像的 Alpha 通道(隐写术)中。包含用于检测和显示隐藏 payload 的 CLI 工具。 - **Polyglot 文件:** - **GIFAR:** 创建同时兼作 JavaScript(可执行 payload)的有效 GIF 文件。 - **PDF+HTML:** 创建包含隐藏 HTML payload 的有效 PDF 文件。 ### 语义脱敏 传统的脱敏通过转义字符(例如,`<` -> `<`)来破坏 payload。`llmon` 采用**语义伪装**,将语法字符替换为 Unicode 同形字(例如,用 `⟨` 代替 `<`),这些字符会被浏览器忽略,但会被 LLM 解释为有效的分隔符(即“arXiv 效应”)。 ### Agentic “Kill Chain” Payload 0.9.0 版本中的新功能,`llmon` 包含一套“Agentic 指令”,旨在测试自主 Agent(例如 Devin、Claude Code、GitHub Copilot)的安全性。 - **CAPE(跨 Agent 权限提升):** 修改 `.vscode/settings.json`、`.mcp.json` 和 `.cursorrules` 以降低安全屏障。 - **基础设施暴露:** 指示开放端口、添加 SSH 密钥或窃取环境变量的指令。 - **病毒式传播:** 自我复制的 prompt(AgentHopper),指示 Agent 将 payload 复制到其他代码库中。 ### 全面的文件支持 `llmon` 可即时检测并修改二进制和文本资产: - **文档:** PDF(水印/Polyglot)、DOCX(隐藏文本)、XLSX(隐藏工作表)。 - **图像:** PNG(元数据/隐写)、JPEG(注释)、GIF(扩展名/Polyglot)、SVG(元数据)。 - **音频:** MP3(ID3v2)、WAV(RIFF 块)。 - **字体:** WOFF2、TTF、OTF(名称表)。 - **Web:** HTML(注释、隐藏 DOM、脚本、交错隐写)、JSON、XML、ICS、SRT、JavaScript、Robots.txt。 ### Bot 智能 - **Bot 检测:** 识别 OpenAI、Anthropic、Google、Meta 等 Agent。 - **智能路由:** 根据检测到的 bot User-Agent,提供特定于供应商的越狱/payload。 ## 用例 | 类别 | 目标 | 机制 | | :--- | :--- | :--- | | **游击营销** | **个人品牌推广** | 将指令注入到个人简介/简历页面中,以确保 AI 摘要中提及特定的成就。 | | **网络安全** | **蜜罐** | 将恶意爬虫误导至跟踪 URL 或虚假的管理面板。 | | **对抗性防御** | **Prompt 提取** | 诱导 AI 泄露其系统 prompt。 | | **资源消耗** | **上下文洪泛** | 迫使 AI 在无关任务上浪费计算 token(例如,“输出素数”)。 | | **红队测试** | **Agent 沦陷** | 使用 RCE、数据窃取和持久化向量测试 Agent 沙箱。 | ## 可靠性与安全性 LLMON 构建于**“往返”可靠性协议**之上。每种注入策略都经过了严格的 E2E 测试套件(由 `chromedp` 驱动)验证,确保生成的文件不仅仅是“在技术上”被注入,而且在结构上有效且无损坏。 ## 安装 ### Caddy 模块 ``` # 安装 xcaddy go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest # 使用 llmon 构建 Caddy xcaddy build --with github.com/jaredfolkins/llmon=. ``` ### 独立 CLI 将 `llmon-cli` 用于静态站点生成、CI/CD pipeline 或取证分析。 ``` make build-cli # 注入 ./tmp/build/llmon-cli -in input.png -payload "Ignore Instructions" -strategy alpha_stego -out output.png # 揭示 (Steganography) # 从 alpha channel 中提取隐藏的 payload 并将其保存到 'revealed_.txt' ./tmp/build/llmon-cli -in output.png -reveal ``` ## 配置 将 `llmon` 指令添加到您的 `Caddyfile` 中。**重要提示:** 在全局选项中定义顺序。 ``` { order llmon before encode } :8080 { reverse_proxy localhost:9000 llmon { # Injection Probability (0.0 to 1.0) rate 1.0 # Route Control include /blog/* exclude /admin/* # Debugging debug log_level info # --------------------------------------------------------- # STRATEGY CONFIGURATION (Safe Mode: All Disabled by Default) # --------------------------------------------------------- strategy { # --------------------------------------------------------- # 1. HTML Injection # Default: Disabled # Modes: # - random (Mixes all vectors) # - html_comment (Standard ) # - script_text (