新技术可以检测PDF文档的篡改或偽造

比勒陀利亚大学的研究人员提出了一种通过分析文件的页面对象来检测PDF文档中篡改的新技术。该技术采用原型,可以检测对PDF文档的更改,例如对文本、图像或元数据所做的更改。

PDF篡改
原型流程

随着PDF格式在多个行业被用作正式的沟通手段,它已成为希望影响合同或协助错误信息的犯罪分子的良好目标。

随着技术的改进和易于访问Adobe Acrobat等工具和许多免费的在线编辑器,即使对格式了解不多,现在也可以轻松更改PDF文件。这使得检测和分析对PDF文档所做的任何更改变得很重要。

PDF的挑战

当前大多数检测PDF更改的技术都依赖于水印和散列。水印涉及在文档中嵌入隐藏标记,而哈西根据文件的内容生成唯一的代码。

尽管这些方法可以检测PDF中可见部分(如文本和图像)的更改,但它们通常不会分析元数据或背景数据等隐藏元素。

由于这些技术专注于可见内容,它们无法通过PDF脚本功能检测嵌入恶意软件的更改。同样,对PDF数字签名的更改经常被注意到,这带来了严重的风险。

虽然水印和散列可以指示文档是否被更改,但它们通常无法确切确定更改的位置或更改的内容。这是因为即使是小的编辑也会产生不同的哈希,这使得很难确定具体的修改。

新原型是如何运作的

新原型专门设计用于利用其文件页面对象来检测PDF文档中的篡改或造物。该原型使用Python开发,利用hashlibMerklyPDFRW库来生成哈希并访问复杂的PDF结构。

有意选择PDFRW库,因为它提供了对PDF结构的低级访问,这有利于自定义操作任务,并且可以为处理大型或复杂的PDF提供速度优势。

原型执行两个主要功能:保护PDF和评估PDF的偽造。

保护PDF文档

首先,为了能够在未来检测更改,PDF文档必须首先通过原型运行来“保护”。这个初始步骤涉及原型读取PDF文档,它使用PDFRW库将其转换为类似字典的对象。读取后,原型会隔离文档中每个页面的文件页面对象。

对于每个页面,系统然后从各种元素中计算独特的数字指纹,称为哈希。每个文件页面对象的内容流,描述页面的文本、图像和图形如何显示,在这里至关重要。

这个内容流被系统地分成256字节的小块。从这些作品中,构建了一个默克尔树,为每个小部分产生单独的“叶子”哈希,为整个页面的内容产生单个“根”哈希。

此外,为文件页面对象本身和文档的整体元数据计算哈希值。在此过程中,文件页面对象的一些子对象被排除在散列之外,以确保结果一致,因为不同的PDF编辑器可能无法统一创建和更新PDF文档。

一旦计算出这些哈希值,它们就会作为新的隐藏键秘密嵌入到相关文件页面对象中(使用“hashobject”、“hashroot”和“hashleafs”等键)和PDF的主要“根”对象(使用“hashroot”和“hashinfo”等键)。这种嵌入有效地创建了文档原始状态的隐藏、不可更的记录。

最后,原型使用PDFRW库保存包含这些隐藏安全标记的新PDF文档,然后成为未来检查的“受保护”原件。需要注意的是,这个“保护”过程本身会创建一个新文件,这是添加了这些安全功能的原始文件的副本。

检查有不是的有

其次,为了检查受保护的PDF文档是否有任何更改,使用相同的原型。系统首先读取PDF,并从根对象和所有文件页面对象中提取之前存储的隐藏哈希值。

提取后,这些存储的哈希值将暂时从各自的对象中删除,然后原型从PDF的当前内容中生成一组新的哈希。

检测的核心在于比较:然后将这些新计算的哈希值与原始存储的哈希值进行比较。如果在两组哈希之间发现任何差异,原型会立即发出检测到更改的信号。这种方法的一个重要优势是它能够精确定位变化。

系统不仅可以告知您更改了哪个页面,还可以告知您该页面内容中发生更改的确切256字节部分。它还可以具体指示文档的主要元数据是否已更改。

PDF篡改原型与Adobe Acrobat配合使用良好

当使用Adobe Acrobat进行更改时,原型主要经过测试并确认有效。虽然从理论上讲,无论编辑器如何,原型都应该检测到更改,因为受保护的PDF是由PDFRW库统一生成的,但这种特定的测试上下文很重要。

此外,值得注意的是,当前的原型尚未检测到所有可能的PDF更改,例如在不更改实际内容或添加JavaScript代码的情况下更改文档的字体。系统要求事先对PDF进行“保护”;它无法评估未受保护的PDF,因为它需要嵌入的哈希值进行比较。

文章来源:helpnetsecurity

© 版权声明
THE END
你的支持是我们在网空安全路上的驱动力!
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情快捷回复

    暂无评论内容