yjeanrenaud/yj_promptInjectionPDF

GitHub: yjeanrenaud/yj_promptInjectionPDF

该项目演示了如何通过白底白字、零号字体、页外渲染和篡改 cmap 字体等技术,将隐藏的提示注入指令嵌入 PDF 文件,以测试生成式 AI 对间接提示注入攻击的防御能力。

Stars: 0 | Forks: 0

# yj_promtInjectionPDF 一个演示针对 PDF 文件的不同 prompt injection 技术的项目。 ## 是什么? Prompt injection 描述了这样一种机制:genAI Chatbot 的用户被诱骗,向其提交能够改变其 prompt 的服务文件或文本,例如使用臭名昭著的 *"ignore all previous instructions.."*(忽略之前所有指令)短语。 这些内容应当被隐藏。因此,为了在 [奥斯纳布吕克应用技术大学](https://www.hs-sonabrueck.de) 的一门关于 LLM 和安全的课程中演示,我尝试了各种实现方法。 1. **白底白字**。你看不到它,但机器能看到。 2. **零号字体**。同理,甚至更加隐形,因为当你选中包含此文本的部分时,它也不会显示出来。 3. **页面外渲染**。因为它位于页边距之外,所以无法被看到。 4. **cmap 重新映射字体注入**。它嵌入了一个被篡改的字体文件,其中的字形与它们实际的编码不同。你在屏幕(和打印输出)上看到的渲染文本与其实际内容是不同的。这是目前我最喜欢的方法。 我从 Yi et al. 2023 和 Murray 2005 的研究中获得了这些灵感,请参阅[文献](Literature)。 ## 怎么做?! 嗯,1-3 非常简单。你可以在 TeX 中看到它们是如何声明的。这方面没什么可多说的。4 是这里最高级的尝试。 ## 它真的有效吗? 效果不一。许多 chatbot,例如 Claude,能够识别出在待处理数据中注入 prompt 的企图,并因此警告用户或忽略这些指令。但其他一些,比如 *Qwen3 30B A3B Instrcut 2507*,则会照做不误。安全防护一如既往,只是一种错觉。你只需稍微调整这些指令,它们就不会被机器检测到了。关于这方面有很多论文。 第四种方法则相当有效。如果你将文本复制到剪贴板,许多 chatbot 会在没有警告的情况下执行注入。我仍在对此进行一些测试。 ### 篡改字体? 是的!我写了一个小型的 Python 脚本,它接收一个常规字体文件,并通过 ROT13 替换字形对其进行篡改。这是现代字体文件为了实现不同字形(例如具有区域依赖性的字形)而提供的一项功能。然后,我使用这种字体在 PDF 文件中显示文本,并将该篡改后的字体嵌入其中。 ## 为什么? 这是我为教学做的一个实验。 ## 文献 Yi, Jingwei et al. (2023): Benchmarking and Defending Against Indirect Prompt Injection Attacks on Large Language Models. KDD '25: Proceedings of the 31st ACM SIGKDD Conference on Knowledge Discovery and Data Mining V.1. P. 1809 - 1820 DOI: [10.1145/3690624.3709179](https://doi.org/10.1145/3690624.3709179) Murray, Toby (2025) PhantomLint: Principled Detection of Hidden LLM Prompts in Structured Documents. DOI: [10.48550/arXiv.2508.17884](https://doi.org/10.48550/arXiv.2508.17884) ## 许可证 采用 [AGPL-3.0](LICENSE) 许可证
标签:AI安全, Chat Copilot, DLL 劫持, DNS 反向解析, LaTeX, PDF生成, 大语言模型, 字体篡改, 攻防演示, 逆向工具