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 (