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, 大语言模型安全, 提示词注入检测, 机密管理, 网络流量审计, 通知系统