tdiprima/image_security_scanner
GitHub: tdiprima/image_security_scanner
一款针对 AI 管道输入图像的安全扫描工具,可检测图片中的提示注入文本、恶意元数据和隐写 payload。
Stars: 0 | Forks: 0
# 图像安全扫描器 🖼️ 🔍
输入到 AI 管道的图像可能携带隐藏威胁 —— 融入像素中的提示注入文本、掩埋在元数据中的恶意指令,或肉眼不可见的隐写 payload。标准的内容过滤器无法捕捉这些。
**解决方案:** 一个 Python 扫描器,对每张图像运行三项独立检查:
- **OCR + 提示注入** —— 通过 Tesseract 提取可见文本,并将其与指令覆盖、角色劫持、LLM 控制令牌、同形字替换、不可见的零宽字符和 base64 编码的 payload 等模式进行匹配。
- **元数据分析** —— 检查 EXIF 字段、PNG 文本块和 JPEG 注释段,以查找嵌入的脚本、外部 URL 和注入文本。
- **像素启发式** —— 标记用于走私文本条带的高 Shannon 熵、低对比度不可见文本区域以及极端纵横比。
每项发现被评为 **CRITICAL / HIGH / MEDIUM / LOW**,并且在发现问题时扫描器会以非零状态退出,这使其对 CI 非常友好。
## 示例输出
```
============================================================
Image Security Scan Report
File : suspicious.png
Status : FLAGGED
============================================================
[CRITICAL] prompt_injection
Description : Instruction override attempt
Evidence : ignore all previous instructions
[MEDIUM] suspicious_metadata
Description : External URL embedded in metadata field 'Comment'
Evidence : https://evil.example.com/payload
Total findings: 2
============================================================
```
## 安装说明
需要 Python 3.11+ 和 [uv](https://docs.astral.sh/uv/)。
您的系统上还需要安装 [Tesseract OCR](https://github.com/tesseract-ocr/tesseract):
```
# macOS
brew install tesseract
# Debian / Ubuntu
sudo apt install tesseract-ocr
```
然后安装 Python 依赖项:
```
uv sync
```
## 用法
```
# 扫描单个图像(文本输出)
uv run image-scanner photo.png
# 同时扫描多个文件
uv run image-scanner *.jpg
# 扫描目录中的所有图像
uv run image-scanner /path/to/images/
# 递归扫描子目录
uv run image-scanner /path/to/images/ --recursive
# 混合文件和目录
uv run image-scanner photo.png /path/to/images/ --recursive
# JSON 输出 — 管道传输至 jq、保存到文件等。
uv run image-scanner /path/to/images/ --format json
# 通过环境变量调整行为
SCANNER_LOG_LEVEL=DEBUG \
SCANNER_ENTROPY_THRESHOLD=7.2 \
SCANNER_MAX_IMAGE_BYTES=10485760 \
uv run image-scanner suspicious.png
```
| 环境变量 | 默认值 | 描述 |
|---|---|---|
| `SCANNER_LOG_LEVEL` | `INFO` | Python 日志级别 |
| `SCANNER_OCR_LANG` | `eng` | Tesseract 语言代码 |
| `SCANNER_ENTROPY_THRESHOLD` | `7.9` | 触发警告前的最大通道熵值 |
| `SCANNER_MAX_IMAGE_BYTES` | `52428800` | 最大文件大小 (50 MB) |
退出码 `0` = 干净。退出码 `1` = 发现问题或出错。退出码 `2` = 未找到图像文件。
标签:AI安全, Base64解码, Chat Copilot, CISA项目, DeepSeek, DevSecOps, DNS 反向解析, EXIF解析, GraphQL安全矩阵, OCR文字提取, Python, Tesseract OCR, 上游代理, 元数据分析, 动态分析, 同形字替换, 图像隐写, 图片安全, 大模型安全, 安全扫描器, 对抗性机器学习, 提示词注入检测, 无后门, 熵值分析, 逆向工具, 隐写术检测, 零宽字符检测