vikasudasi/exfil-scan

GitHub: vikasudasi/exfil-scan

exfil-scan 是一款专门扫描 LLM 输出和 AI 生成内容中数据窃取信号的安全工具,用于在内容到达用户或下游系统前拦截隐藏的渗透风险。

Stars: 0 | Forks: 0

# exfil-scan 在 LLM 输出和 AI 生成的内容到达用户、日志或下游系统之前,扫描其中的数据 exfiltration 信号。 ## 1) 为什么创建 exfil-scan 现代 LLM 应用程序会定期处理敏感的 prompt、内部文档、API 响应和用户数据。 这产生了一个新的安全边界:**输出层**。 EchoLeak 系列攻击(包括 CVE-2025-32711)证明了如何将隐藏或混淆的 payload 嵌入到生成的文本中,并通过工具、链接或解析链来 exfiltration 数据。 传统的扫描器专注于文件、依赖项和运行时流量。 它们并没有以专门构建的方式来检查生成的模型输出。 `exfil-scan` 提供了一个“针对 LLM 响应的病毒扫描器”: - 检查纯文本、JSON、markdown 和日志 - 识别六大类可疑的 exfiltration 模式 - 报告发现的严重程度和位置 - 顺畅集成到 CI/CD 和本地开发者工作流中 ## 2) 它能检测什么 | 类别 | 严重程度 | 检测内容 | |---|---|---| | 隐藏文本 | 高 | 用于隐藏 payload 的零宽度和不可见的 Unicode 序列 | | 编码数据 | 高 | 可能包含编码内容的 Base64/十六进制/八进制/unicode 转义序列 | | URL 中的数据 | 中 | 可疑的超长查询字符串和编码的 URL 参数 payload | | 元数据泄露 | 高 | 结构化/非结构化输出中类似于凭据的密钥和 token 格式 | | Unicode 隐写术 | 中 | 双向控制字符和混合字符的同形异义词风格的单词 | | 结构异常 | 低 | 极端的换行/制表符序列和替换字符编码伪影 | ## 3) 主要功能亮点 - 三种敏感度配置:`low`、`medium`、`high` - 支持 YAML 配置覆盖 - 支持来自 `stdin`、单个文件或目录的输入 - 以 `text`、`json`、`markdown` 或 `html` 格式输出 - 稳定的 exit code,便于自动化 - 简洁的 Python API,可嵌入其他工具 ## 4) 安装说明 ### 从源码安装 ``` git clone https://github.com/your-org/exfil-scan.git cd exfil-scan pip install -e . ``` ### 标准 pip 安装(发布后) ``` pip install exfil-scan ``` ### 开发者安装 ``` pip install -e ".[dev]" pytest ``` ## 5) 快速开始 ### 扫描通过管道传输的 LLM 输出 ``` echo 'api_key: sk-ABCDEFGHIJKLMNOPQRSTUVWXYZ123456' | exfil-scan ``` ### 扫描单个文件 ``` exfil-scan --input output.txt ``` ### 递归扫描目录 ``` exfil-scan --directory ./model-logs --recursive ``` ## 6) CLI 选项参考 | 选项 | 类型 | 默认值 | 描述 | |---|---|---|---| | `-i`, `--input` | 路径 | 无 | 扫描一个输入文件 | | `-d`, `--directory` | 路径 | 无 | 扫描目录中所有受支持的文件 | | `-r`, `--recursive` | 标志 | false | 使用 `--directory` 递归遍历嵌套目录 | | `-c`, `--config` | 路径 | 无 | YAML 配置文件路径 | | `-s`, `--sensitivity` | `low\|medium\|high` | 配置/默认 | 覆盖敏感度配置 | | `-f`, `--format` | `text\|json\|html\|markdown` | `text` | 渲染报告格式 | | `-o`, `--output` | 路径 | stdout | 将渲染后的报告写入文件 | | `--version` | 标志 | 无 | 打印 CLI 版本 | | `-h`, `--help` | 标志 | 无 | 显示用法和参数 | 注意: - 使用 `--input` 或 `--directory`,不能同时使用。 - 如果未提供路径,工具将从 `stdin` 读取。 - 如果发现任何问题,进程将以 exit code `1` 退出。 ## 7) 按输出格式的使用示例 ### 纯文本输出 ``` exfil-scan --input suspicious.txt --format text ``` 预期样式: ``` exfil-scan report ================= Scanned targets: 1 Total findings: 2 1. [HIGH] metadata_leaks/known_token_format:openai_key Location: suspicious.txt:1:10 Description: Matched known credential/token format (openai_key). ``` ### JSON 输出 ``` exfil-scan --input suspicious.txt --format json ``` 预期结构: ``` { "finding_count": 2, "scanned_targets": ["suspicious.txt"], "findings": [ { "category": "metadata_leaks", "rule": "known_token_format:openai_key", "severity": "HIGH", "description": "Matched known credential/token format (openai_key).", "location": "suspicious.txt:1:10", "snippet": "..." } ] } ``` ### HTML 输出 ``` exfil-scan --directory ./outputs --recursive --format html --output report.html ``` 预期行为: - 生成包含扫描结果表格的独立 HTML 页面 - 对内容进行转义以实现安全渲染 - 包含严重程度、类别、规则、位置、描述 ### Markdown 输出 ``` exfil-scan --input suspicious.txt --format markdown --output report.md ``` 预期样式: ``` # exfil-scan 报告 - Scanned targets: 1 - Total findings: 2 ``` ## 8) 配置和敏感度 该代码库附带了 `default-config.yaml`。 你可以使用 `--config` 传入你自己的文件。 敏感度调整: - `low`:较少的误报,更大的阈值 - `medium`:平衡的默认值 - `high`:捕获更多细微的模式 CLI 敏感度覆盖: ``` exfil-scan --input out.txt --sensitivity high ``` ## 9) 自定义模式和策略调整 你可以添加自己的 token 格式和元数据密钥: ``` sensitivity: medium rules: metadata_keys: - api_key - db_password - internal_token token_patterns: custom_jwt: "\\beyJ[A-Za-z0-9_\\-]{10,}\\.[A-Za-z0-9_\\-]{10,}\\.[A-Za-z0-9_\\-]{10,}\\b" corp_secret: "\\bcorp_[A-Za-z0-9]{24,}\\b" ``` 然后运行: ``` exfil-scan --input response.log --config ./my-config.yaml ``` ## 10) 架构概述 模块职责: - `exfil_scan/cli.py`:参数解析、输入选择、输出渲染、退出处理 - `exfil_scan/config.py`:默认值、YAML 加载、递归合并、配置归一化 - `exfil_scan/scanner.py`:六个检测引擎、发现 dataclass、报告格式化 - `tests/test_scan.py`:检测和输出格式的回归测试 执行流程: 1. CLI 解析参数。 2. 配置加载默认值 + 可选的覆盖。 3. 扫描器从 stdin/文件/目录读取文本。 4. 每个启用的类别独立运行。 5. 对发现的结果按严重程度进行排序并渲染。 6. exit code 向自动化传递通过/失败/错误信号。 ## 11) Exit code | 代码 | 含义 | |---|---| | `0` | 未发现异常(正常) | | `1` | 检测到问题 | | `2` | 运行时或参数错误 | 这使得 CI 集成变得非常直接: ``` exfil-scan --directory ./artifacts --recursive --format json --output exfil-report.json ``` 如果发现任何检测内容,你的作业可以根据 exit code `1` 快速失败。 ## 12) 测试 运行测试: ``` pytest ``` 覆盖范围包括: - 所有六个检测类别 - 所有四种输出模式下的报告格式化 - 用于确保行为稳定的规则级别断言 ## 13) 安全说明 `exfil-scan` 是一个启发式扫描器。 它的旨在降低风险并暴露可疑输出,而不是证明内容的安全性。 推荐的部署模式: 1. 在 CI 中针对测试 prompt 和固定输出运行扫描器 2. 在生产环境的防护机制中针对生成的响应运行扫描器 3. 将检测结果路由到分析师分类和遥测系统 4. 基于误报审查持续调整配置阈值 ## 14) 许可证 本项目基于 MIT 许可证授权。 有关完整条款,请参阅 `LICENSE`。 ## 15) 贡献 欢迎贡献。 在提交 PR 时,请包含: - 清晰的复现步骤 - 预期和实际的行为 - 针对新检测逻辑的测试 - 引入新规则时的文档更新
标签:DNS 反向解析, Python, 内容检测, 安全规则引擎, 文档结构分析, 无后门, 逆向工具