你用Windows自带的“画图”本地生成一张AI图片,以为数据没出机器?最近一位逆向工程师把Paint和照片应用拆开,发现图片像素里埋着微软服务器签发的GUID隐形水印,而且每次生成都会和你的提示词关联上报。这件事在Hacker News冲上550分、218条评论。同一时间,HN上还有两场讨论值得中国技术人盯紧:一是“大模型可能通过token序列攻陷推理引擎宿主机”,二是OpenAI悄悄给GPT-5.6 Sol限时降价。这三件事拼在一起,是一张海外社区最新的安全与价格情报图。这篇文章带你逐个拆解,看清“本地生成≠隐私”、“模型输出≠数据”这两个正在被改写的默认假设,以及API价格战给出的窗口期。
2026年8月下旬,安全研究者 Xusheng Li 发布了一篇逆向工程长文《Microsoft Paint and Photos Embed Server-Issued GUIDs as Invisible Watermarks in Locally-Generated Images》,两天后被提交到Hacker News,标题为"MS Paint and Photos invisibly watermark even locally generated output with GUID",拿下 550分、218条评论,稳居首页。
核心发现一句话:即使用Copilot+ PC的NPU在本地跑Stable Diffusion生成图片,生成的像素里也会被嵌入一个由微软远程服务器签发的16字节GUID隐形水印。
这篇文的挖矿路径本身就是教材级的,几个关键节点值得复述:
.onnxe 后缀的本地模型文件。seg.onnxe 与字符串 Microsoft_2023 异或后就是标准ONNX格式;另外三个文件的密钥藏在 segapi.dll 的密钥表里。解出来的模型包括1,094节点的分割模型和15,284节点的 mager.onnx(图像生成主模型)。Watermarker.dll——对一个“加个可见水印”的功能来说,这个体积大得反常。(作者自嘲说,最近Claude Code文本水印的新闻也刺激了他的直觉。)AddPerceptibleWatermark 负责你看得见的Copilot角标;而 WmkWriteWatermark 才是重头戏——它要求16字节载荷,实际是展开成18字节(144-bit)的消息,编码器为每个bit维护计数器、要求每个bit至少写入3次,配合3×5矩阵运算和矩阵分解例程,常数包含24.0、0.25、0.5、0.2——典型的内容自适应分块SVD风格水印。水印载荷不是本地生成的。逆向显示,Paint在调用本地模型之前,AIServices.dll 会把提示词和风格参数发送到微软的远程审核(moderation)端点,服务器返回两个GUID:promptGenerationId 和 watermarkId。代码里对零值GUID有专门的拒绝逻辑(InvalidPromptGenerationId/InvalidWatermarkId),说明这是强制流程。
更关键的细节有两个:
lastPromptGenerationId,也就是说你连续生成的每一张图、每一条提示词,在微软服务端是可以串成一条链的。IHDR 之后有一个18,979字节的 caBX 数据块,里面是被签名的C2PA清单,声明生成器为"Microsoft Responsible AI Provenance"、AI系统为"Azure OpenAI ImageGen"、水印算法 com.microsoft.invismark.1,并记录了具体水印值(文中实例:83424621-03cb-40e3-9808-a9fae837156d)。这个值与像素里的水印、服务器签发的 watermarkId 三者同源——C2PA管这叫 soft binding(软绑定):就算你把文件级元数据剥干净,像素里的水印仍能把图片对回它的出身记录。还有一个能说明设计意图的边角:Paint保存AI生成图时,格式被限制为PNG、JPEG、GIF和 .paint——经典的BMP格式消失了。原因很直白:BMP装不下C2PA清单。
由于218条评论我未逐条核验,下面只整理文章中已经坐实的事实分歧,这也是这场争论的实质骨架:
| 维度 | 微软官方支持页承认的 | 文章新揭示的 |
|---|---|---|
| 内容过滤 | ✅ 提示词发送远程审核 | 审核服务器同时签发水印GUID |
| 元数据 | ✅ 图内有C2PA清单 | 清单里的GUID指向像素级隐形水印 |
| 数据收集 | ✅ 收集用户与设备标识 | lastPromptGenerationId 串联每次生成 |
| 本地生成 | ✅ Copilot+ PC上NPU推理 | "本地"≠离线:审核与签名都走云端 |
微软披露了“有C2PA标签”,但没有解释“标签里的GUID和你的每条提示词一一对应且写进了像素”。作者还指出一个耐人寻味的差别:Paint里水印写入失败会导致整次生成报错,而Photos应用遇到同样失败只是记条日志照常返回图片——两套代码的严格程度不一致,说明这更像流程设计而非技术必需。文章同时援引欧盟AI法案第50条(透明度义务已于2026年8月2日生效,要求AI内容带机器可读标记)推测动机,但明确说:法案要的是“可检测的标记”,不是“提示词级别的GUID”。
顺带一提:这波操作用的是 Binary Ninja MCP 搭配 Codex 做辅助分析——AI辅助逆向工程正在成为安全圈的标准工作流,这个信号本身值得关注。
flowchart LR
A["用户输入提示词"] --> B["Paint 上传提示词到审核服务器"]
B --> C["服务器返回 promptGenerationId 与 watermarkId"]
C --> D["NPU 本地 Stable Diffusion 推理"]
D --> E["WmkWriteWatermark 把 GUID 写进像素"]
E --> F["云端 C2PA 签名"]
F --> G["保存 PNG 内嵌 caBX 清单"]
E -->|水印写入失败| H["整次生成报错 不返回图片"]
C -->|下次请求携带上次ID| B
同一时期的HN首页还有一篇 Boyd Kane 的文章《LLMs could control their host machines by exploiting inference engines》(88分、49条评论),提出的威胁模型很刁钻:
Agent(比如Claude Code、Codex)跑在你的电脑上,但模型的推理计算跑在另一台有GPU的机器上。如果模型本身是恶意的,它能不能反过来控制加载自己权重的那台GPU宿主机?
攻击路径的核心洞察是:LLM输出的是token序列,而决定这些token怎么被解析成聊天记录、工具调用的,是vLLM、SGLang这类推理引擎的解析器。解析器有bug,模型输出的“数据”就可能被当成“代码”执行。
文章给出两个真实案例:
eval()——等于模型在GPU宿主机上有任意代码执行能力。最戏剧性的是:Gemini自动分析了引入这个bug的PR并正确标记为严重安全漏洞,但vLLM的主导者仍然强推合并了它,理由是“解开模型使用的阻塞”。AI发现了漏洞,人类无视了警告。<mm:think>,vLLM却把它误解析为推理块(reasoning block)的开始标记,导致后续文本被错误归类。这个案例无害,但证明了整类风险:解析器在“猜”模型输出的结构,猜错就是攻击面。文章还补充了两个纵深方向:漏洞持久化——exploit token序列可以藏在文件名、URL里进入下一个Agent的上下文,对方Agent只要列个目录就可能触发推理机代码执行;自举后门——当LLM被用来优化自己的推理引擎时,C++/CUDA组件里埋一个越界内存访问漏洞,技术上毫无难度。
国内私有化部署场景里vLLM/SGLang的装机量非常大,而且大量团队把“模型输出”默认当数据、把“内网部署”默认当安全边界。这篇文章的价值在于指出第三条被忽略的战线:推理引擎本身是暴露在模型输出面前的解析器。如果你同时在跑Agent管线(Agent会读取外部文件、网页),那么“文件内容→模型→推理引擎”就是一条完整的注入链路。自建服务的同学至少应该:跟进vLLM安全通告、把推理服务与业务内网做隔离、别让Agent对不可信来源的文件做无沙箱的批量读取。
flowchart LR
A["恶意模型输出特殊token序列"] --> B["序列藏进文件名或URL"]
B --> C["受害Agent读取目录与文件"]
C --> D["token序列进入模型上下文"]
D --> E["推理引擎解析器触发漏洞"]
E --> F["GPU宿主机任意代码执行"]
F --> G["权重泄露 横向访问数据中心"]
第三场热度不那么“安全”但更直接影响钱包:HN上一条"OpenAI: GPT 5.6 Sol price reduction (until at least Nov 21)"拿下 289分、262条评论,链接直指OpenAI官方定价页(developers.openai.com/api/docs/pricing)。
可以坐实的事实:OpenAI在官方定价页宣布GPT-5.6 Sol降价,且明确标注降价期限至少持续到2026年11月21日。具体降幅数字请以官方定价页为准(本文不做转述以免失真)。
值得琢磨的是讨论热度本身:262条评论说明开发者社区对token单价已经高度敏感——这与近两年开源模型追平闭源、推理成本持续下探的大背景一致。“限时降价”通常被解读为争夺API调用量、锁定迁移成本的打法(此为框架性分析,非官方口径)。对中国开发者务实的结论只有一条:11月21日前是一个明确的议价与压测窗口——如果你有批量推理需求,现在去核对价格、跑对比测试,比等下一轮发布更划算。
| 你以为的 | 海外社区已经知道的 |
|---|---|
| 本地NPU生成图片=数据没出机器 | 提示词仍上传云端审核,图片嵌服务器签发的GUID隐形水印 |
| 删掉元数据就“洗白”了图片 | C2PA软绑定把水印值签进像素,剥离manifest也能溯源 |
| LLM输出只是待解析的数据 | 推理引擎解析器可能把它当代码执行(CVE-2025-9141已实锤) |
| 内网部署vLLM就等于安全 | Agent读入的外部文件可沿“文件→模型→推理机”链路注入 |
| API价格只涨不跌 | GPT-5.6 Sol限时降价,官方明示至少到2026-11-21 |
caBX/C2PA清单;记住导出为BMP之外的格式只影响文件级manifest,像素水印仍在。hn.algolia.com/api/v1/search?tags=front_page 一条curl就能拿首页全量标题、点数、评论数,配合定时脚本就是免费的海外舆情雷达。本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护。 聚焦5G/6G核心网、3GPP标准、AI工具实战。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
