bigblue-r4/deobfuscate-vision

GitHub: bigblue-r4/deobfuscate-vision

一款 Rust 多模态安全检测库,从图像中提取隐藏的机器可读文本通道并评分,防御针对视觉大模型的提示词注入攻击。

Stars: 0 | Forks: 0

# deobfuscate-vision 图像携带的提示词注入检测—— [`deobfuscate`](https://crates.io/crates/deobfuscate) 的多模态伴侣。 针对多模态 LLM pipeline 的攻击将指令隐藏在**人类感知**与**机器解析**之间的 缝隙中:白底白字、4 像素字体、Alpha 通道叠加层、EXIF 注释、QR 码。此 crate 从图像中提取每一个机器可读的文本通道,并使用你已经在 prompt 上运行的 精确引擎对每一个通道进行评分——因此,渲染在图像*内部*的同形字或 Base64 payload 将被与在文本中捕获它时相同的处理流程所捕获。 ``` [dependencies] deobfuscate-vision = "0.1" ``` ``` use deobfuscate_vision::analyze_image; let bytes = std::fs::read("upload.png")?; let report = analyze_image(&bytes)?; if report.should_block() { eprintln!("blocked: {}", report.summary()); } for ch in &report.channels { // Hand extracted text to your Stage-1 injection classifier. println!("{:?}: {}", ch.source, ch.extracted); } ``` ## 检测内容 | 通道 | 提取器 | 默认 | |---|---|---| | Metadata 注入 | EXIF/TIFF 注释字段(`UserComment`、`ImageDescription`、`Artist` 等) | ✅ | | QR / 编码的 payload | `rqrr` QR 解码 → 文本引擎 | ✅ | | 混淆渲染的文本 | OCR 输出 → 全部 19 个 `deobfuscate` 处理流程 | 需要 OCR | | **隐藏文本** | 像素变换间的可见性差异 | 需要 OCR | ## 范围 与 `deobfuscate` 一样,此 crate 报告的是**提取**、**混淆**和 **隐藏性**——而非语义注入。从图像中提取出的“忽略之前的指令” 是否确实带有恶意,这是 Stage-1 模型的工作;此 crate 的职责是 确保文本能够到达分类器。每一个提取出的字符串都会被原封不动地 展示在 `report.channels` 上。 ## 可见性差异 `deobfuscate` 正向/反向干扰分数的图像原生模拟。 以**人类**的视角对图像进行 OCR,然后对一系列**对抗性** 渲染图像进行 OCR——对比度拉伸、反色、各通道平面(包含 alpha)、 2 倍放大。*仅*出现在对抗性渲染中的文本,是发送方故意隐藏的文本。 这种差异比文本本身的内容是一个强得多的信号,并且它使用相同的 0–1 / flag-0.25 / block-0.60 量表进行评分。 ## OCR 是可插拔的,而非内置的 OCR 引擎体积庞大,且通常需要模型文件或系统库。 与其将这强加给每一个依赖项,不如将识别器实现为一个 trait: ``` use deobfuscate_vision::{analyze_image_with, TextRecognizer}; use deobfuscate::Config; use image::GrayImage; struct MyOcr(/* ocrs / tesseract / cloud handle */); impl TextRecognizer for MyOcr { fn recognize(&self, image: &GrayImage) -> Vec { // return recognized lines # vec![] } } let report = analyze_image_with(&bytes, &Config::default(), Some(&MyOcr(/* … */)))?; ``` 在**没有**识别器的情况下,metadata 和 QR 通道仍然有效,且隐藏文本的 差异分析会报告 `VisibilityScore::Skipped`。接入 [`ocrs`](https://crates.io/crates/ocrs) (纯 Rust 实现,无系统依赖)以获得完全自包含的 pipeline, 或者通过 `leptess` 接入 Tesseract 以获得最高的准确性。 ## 卫生处理(缓解) `hygiene::sanitize` 会对不受信任的图像进行重新编码,以剥离攻击通道, 此过程不需要进行任何检测——在图像到达视觉模型之前运行它: ``` use deobfuscate_vision::hygiene::{sanitize, HygieneOptions}; let clean_png = sanitize(&untrusted_bytes, &HygieneOptions::default())?; ``` 干净的解码 → 可选的下采样 → 无 metadata 的 PNG 往返转换,会丢弃 EXIF/XMP,量化消除 LSB 隐写术,并破坏基于梯度精心构造的 对抗性扰动的连贯性。 ## Pipeline 位置 ``` image bytes │ ├─ hygiene::sanitize (optional, mutating) ──► clean image ──► vision model │ └─ analyze_image ──► VisionReport ──► your Stage-1 injection classifier (split-brain-harness, kiss-protocol, …) ``` `analyze_image` 是只读的,从不修改输入;`sanitize` 是 用于修改的缓解路径。两者请配合使用。 ## License MIT © bigblue-r4. SGAIL / Harborlight 安全技术栈的伴侣项目。
标签:DNS 反向解析, OCR, Rust, 可视化界面, 图像处理, 多模态AI, 大语言模型安全, 提示词注入检测, 机密管理, 网络流量审计, 通知系统