Others

您能判断 PDF 是否包含隐藏的跟踪代码吗

PDF 可以包含比您在页面上看到的更多内容。嵌入式 JavaScript、隐藏表单字段、远程资源调用和自定义元数据都可以用于跟踪文档何时打开、从何处打开以及读者如何使用它。 PDF 安全 跟踪机制扫描正在成为业务尽职调查的标准步骤,特别是在从未知或不可信来源接收 PDF 时。问题不仅在于跟踪代码是否存在,还在于您是否拥有在打开敏感文档之前检测它的工具。

PDF 中的跟踪代码分为两类:故意的和良性的。有意跟踪使用 JavaScript 在文档打开时打电话回家,将打开者的 IP 地址、大致位置和阅读持续时间发送到跟踪服务器。良性跟踪包括嵌入 PDF 发票中的已读收据或在显示内容之前验证许可证的数字版权管理等功能。两种类型都使用相似的技术机制,并且此处描述的检测方法适用于这两种类型。

WukongPDF 的PDF 隐私 功能包括安全检查工具,可在处理前扫描文档中的嵌入脚本。在打开来自陌生发件人的 PDF 之前运行快速检查会增加一层防止跟踪的保护,而大多数 PDF 阅读器默认情况下并不提供这种保护。

Can You Tell If a PDF Contains Hidden Tracking Code

PDF 跟踪代码的技术工作原理

PDF 文件通过 Acrobat JavaScript API 支持 JavaScript,Acrobat JavaScript API 是在 PDF 阅读器的脚本引擎中运行的 JavaScript 子集。当打开 PDF、查看页面、打印文档或关闭文档时,文档级脚本会自动执行。跟踪脚本通常在 DocOpen 事件上运行,通过 HTTP 请求收集通过 JavaScript API 提供的信息(例如读者的 IP 地址),并使用 app.launchURL 或 Net.HTTP.request 方法将该数据发送到远程服务器。

与浏览器 JavaScript 相比,PDF JavaScript 可以收集的数据有限。它无法访问用户计算机上的文件、读取浏览器 cookie 或与其他打开的文档交互。然而,它可以发出网络请求,这是实现跟踪的核心功能。在启用 JavaScript 的 Adobe Acrobat Reader 中打开的 PDF 将静默执行跟踪脚本。在不支持 Acrobat JavaScript API 的基于浏览器的查看器中打开的 PDF 将不会执行该脚本,并且跟踪尝试会自动失败。

WukongPDF

尝试保护 PDF

无需安装。直接在您的浏览器中工作。

立即开始 →

方法 1:在 Adobe Acrobat Pro 中检查 JavaScript

检查跟踪代码的最直接方法是检查 PDF 的 JavaScript 内容。在 Adobe Acrobat Pro 中,打开 PDF,转到“编辑”菜单,选择“首选项”,然后单击“JavaScript”类别。取消选中启用 Acrobat JavaScript 可全局禁用阅读器中的所有 JavaScript 执行。这可以防止在您打开文件时运行任何跟踪脚本。在禁用 JavaScript 之前,您可以检查存在哪些脚本而不执行它们。

要检查脚本,请在 Acrobat Pro 中打开 PDF,然后转到“工具”,然后转到“JavaScript”,然后从下拉列表中选择“文档 JavaScript”。该对话框按名称列出每个文档级脚本。选择脚本名称并单击“编辑”以查看其源代码。查找指示跟踪的模式:指向外部域的 URL、app.launchURL 调用、Net.HTTP.request 调用或对 this.docOpened 或 this.docClosed 事件的引用。如果脚本发出网络请求,并且您不希望文档需要网络访问,请将其视为潜在的跟踪代码。

您可以从“文档 JavaScript”对话框中删除单个脚本。选择脚本名称并单击删除。删除所有可疑脚本后,以新文件名保存 PDF,以保留原始文件作为证据。清理后的 PDF 保留所有可见内容和表单功能,但不再执行已删除的脚本。

方法 2:使用文本编辑器检查 PDF 内部

要进行不需要 Acrobat Pro 的更深入检查,请检查 PDF 的原始内部结构。 PDF 文件使用基于文本的对象格式,人类可读的字符串和关键字与二进制数据交织。在能够处理大文件的文本编辑器中打开 PDF,例如 VS Code、Notepad++ 或 Sublime Text。搜索字符串 /JavaScript 或 /JS。这些关键字标记 JavaScript 代码对象的开始。脚本源代码位于关键字之后,通常位于括号之间或流标记与结束流标记之间。

还可以搜索 /URI 或 /URL 以查找 PDF 中嵌入的任何硬编码网址。跟踪脚本可以包括跟踪服务器的URL。搜索 /AA 或 /OpenAction,它们是 PDF 字典键,用于指定打开文档时要执行的操作。指向 JavaScript 对象的 /OpenAction 条目是在文档打开时触发跟踪代码的最常见机制。

这种手动检查方法需要熟悉 PDF 语法,但可以捕获自动化工具可能错过的跟踪代码。安全研究人员在网络钓鱼调查中分析可疑 PDF 附件的技术与此相同。如果您发现跟踪结构并希望在不使用 Acrobat Pro 的情况下消除它们,则可以使用带有 --remove-restrictions 标志的 qpdf 等工具从原始 PDF 中删除相关对象,但这种方法需要小心避免损坏文件结构。

方法 3:自动 PDF 安全扫描仪

一些免费和商业工具可以自动检测 PDF 中的跟踪和恶意代码。 DID-SIEM 和类似的安全分析工具解析 PDF 结构并标记包含 JavaScript、外部 URL、启动操作和嵌入文件的对象。在线 PDF 安全检查器接受文件上传并返回列出所有潜在可跟踪元素的报告。对于从外部来源收到的 PDF 进行例行检查,自动扫描仪比手动检查更快、更彻底。

指示器含义如何检查
文档 JavaScriptPDF 打开、关闭或打印时执行的脚本Acrobat:编辑、首选项、JavaScript 面板
外部资源调用PDF 打开时从远程 URL 加载图像、字体或数据检查嵌入 URL 的文档属性
隐藏表单字段预填充跟踪 ID 或令牌的不可见字段打开“表单”面板并查找隐藏字段标志
元数据脚本包含自定义跟踪标识符的 XMP 元数据查看文档属性和原始 XMP 数据

如果发现跟踪代码该怎么办

在您收到的 PDF 中找到跟踪代码并不一定意味着发件人有恶意行为。 PDF 发票通常包含已读回执脚本,用于在发票打开时通知发件人。营销材料可能包括类似于电子邮件打开跟踪像素的参与跟踪。问题是跟踪是否公开且适合文档类型。发票中应有已读收据。谈判期间发送的合同中的隐藏跟踪器是有问题的。

如果您需要在没有跟踪代码的情况下与其他人共享文档,请按照方法 1 中所述删除 JavaScript 并保存干净的副本。如果跟踪代码是 DRM 或许可证执行系统的一部分,则删除它可能会违反文档的使用条款。对于法律敏感文档,请在剥离任何嵌入代码之前咨询您组织的法律或安全团队,因为跟踪机制可能是您根据合同有义务保留的合规性或审计跟踪系统的一部分。

使用正确的工具可以检测 PDF 跟踪代码。在打开来自陌生来源的 PDF 之前运行快速 JavaScript 检查只需不到一分钟的时间,并且可以捕获大多数跟踪机制。将此检查作为标准文档处理例程的一部分可以减少在不知不觉中与外部各方共享您的阅读活动的可能性。对于处理敏感文档的组织来说,默认情况下在 PDF 阅读器中禁用 JavaScript 并仅对可信文档启用 JavaScript 的策略提供了强大的基线防御,无需对每个文档进行持续检查。

在组织中的所有 PDF 阅读器中禁用 JavaScript

对每个 PDF 进行单独检查以跟踪代码对于偶尔使用很实用,但无法扩展到每天接收数百个外部 PDF 的组织。更系统的方法是在所有设备的读者级别禁用 JavaScript 执行。在 Adobe Acrobat Reader 中,该设置位于“编辑”、“首选项”、“JavaScript”下,其中取消选中“启用 Acrobat JavaScript”会阻止所有脚本执行。可以通过 Windows 上的组策略、Mac 上的配置文件以及 Acrobat Reader 企业部署上的托管首选项来部署此设置。

全局禁用 JavaScript 确实会对功能产生影响。某些 PDF 表单使用 JavaScript 进行字段验证、自动计算和动态表单行为。当 JavaScript 被禁用时,这些功能将停止工作。对于依赖交互式 PDF 表单的组织,方法应该是默认禁用 JavaScript,并仅对来自受信任内部源的表单启用 JavaScript,而不是接受在每个外部发件人的每个 PDF 上执行 JavaScript 的安全风险。用于跟踪代码的 PDF 安全检查是一项现代文档读写技能。在打开或共享来自陌生来源的 PDF 之前,花一分钟时间检查 JavaScript、外部 URL 和隐藏的表单字段,可以防止大多数 PDF 用户甚至不知道存在的微妙形式的信息泄漏。具有安全意识的 PDF 处理方法可以保护个人隐私和组织信息安全,而无需专门的软件或高级技术知识。

WukongPDF

尝试保护 PDF

无需安装。直接在您的浏览器中工作。

立即开始 →