便携式文档格式(PDF)文件类型是当今最常用的文件格式之一。它的价值来自于这样一个事实:pdf总是以相同的方式打印,而且pdf应该是只读的(不像Word文档,它被设计为易于编辑)。这种不变性可以通过密码保护和数字签名来保证。

pdf文件广泛应用于法律、医疗和房地产行业,但也见于教育、小企业和其他部门。Adobe在2008年左右将其作为开放标准发布,并将其与公司的Acrobat软件分离开来,这种格式才真正开始流行起来。

PDF安全

PDF文件可以使用密码保护,只有有密码的人才可以阅读文件的内容。但是,对于任何知道密码的人来说,删除密码或创建一个不受密码保护的相同文件是很简单的。

认证的pdf文档

pdf文件可以进行数字签名,表示签名者认可其内容。PDF规范定义了两种不同类型的数字签名,以保证文档的真实性和完整性:

  • 批准签名证明PDF文件的一个特定状态。如果文档被更改,签名就会失效。
  • 认证签名允许在不使签名无效的情况下对已签名的文档进行特定更改。您可以指定允许文档保持认证的更改类型。例如,发送方可以指定指定字段中来自接收方的签名不会使证书无效。通过这种方式,发送方可以确保当他们收到签名副本时,该签名是文档中唯一的更改。认证签名可以是可见的或不可见的。

数字签名

您不能从PDF中删除数字签名,除非您是放置数字签名的人,并且您已经安装了用于签名的数字ID。每次使用证书对文档进行签名时,都会将当时签署的PDF版本与PDF一起保存。每个版本都保存为仅追加,原始版本不能修改。在文档签署后,您可以显示在上一个版本之后对文档所做的更改的列表。

秘密更改签署的文件

然而,德国波鸿鲁尔大学的研究人员已经做到了提出了两种可能的攻击在这种情况下,接收者可以更改PDF文档的内容,而这种更改在所有PDF应用程序或其中的一个子集中都是不可检测的。他们给这两起袭击起的名字是:

  • 邪恶注释攻击(EAA)
  • 秘密签名攻击(SSA)

这两个漏洞都允许攻击者通过在认证内容上显示未经授权的内容来更改PDF文档的可见内容。但是,认证仍然有效,并且应用程序没有显示关于进行未经授权的更改的警告。

这些攻击的成功取决于特定的PDF查看器。这些应用程序应该提醒读者任何未经授权的更改。研究人员评估了26位很受欢迎的PDF阅读者。他们通过监管局破解了其中15家公司的认证文件的安全性。有8个应用程序容易受到SSA的攻击。只有两个人没有被任何一次攻击骗过。研究人员负责地披露了这些问题,并支持供应商修复这些漏洞。

另一种代码注入攻击

增量更新引入了在文件末尾添加新信息来扩展PDF的可能性。原始文档保持不变,并保留所有文档更改的修订历史。增量更新的一个例子是在PDF中包含认证、签名、注释或填写表单。

在Adobe产品中,只有经过认证的文档才允许执行高级特权JavaScript代码,但研究表明,如果将这些代码添加为允许的增量更新,那么这些代码也会被执行。这使得攻击者可以直接将恶意代码嵌入到认证文档中.如果你想知道这有什么不好,那就想想我们现在已经进入了微软Office恶意宏的第四个十年。

认证文件的权限级别

认证机构可以选择三种不同的权限级别,以允许进行不同的修改:

  • P1:文件不允许修改。
  • P2:允许填写表格和数字签署文件。
  • P3:除了P2之外,还可以添加注释。

注释为用户输入引入了一种不同的方法,它允许用户在PDF文档中添加注释,比如文本高亮显示、划线或便签。注释不局限于PDF中预定义的位置,可以应用于文档中的任何地方。

邪恶注释攻击(EAA)破坏P3

研究人员发现了三种能够隐藏和添加文本和图像的注释。这三种方法都可以用来偷偷修改经过认证的文档,并注入恶意内容。为了执行攻击,攻击者通过在攻击者选择的位置包含带有恶意内容的注释来修改认证文档。根据研究人员的说法,受害者将不得不手动检查UI-Layer 3或点击注释来检测修改。攻击者甚至可以锁定注释以禁止点击它。

SSA (Sneaky Signature Attack)攻击P2

秘密签名攻击的思想是通过在P2级别认证的PDF文档中添加覆盖签名元素来操纵PDF中任意内容的外观。攻击者通过在攻击者选择的位置包含带有恶意内容的签名字段来修改认证文档。然后,攻击者需要对文档签名,但不需要拥有可信密钥。SSA的自签名证书就足够了。

漏洞

研究人员使用了额外的技术使他们的攻击更不容易被发现。这些攻击揭示了签名和注释可以:

  • 可自定义为出现在签名内容上方的正常文本/图像。
  • 使其与原始内容难以区分。
  • 它们的指示可以隐藏在UI层中。

使用EAA和SSA注入JavaScript

对于注释和签名字段,可以传递对包含JavaScript的对象的引用。打开页面时,可以触发代码执行。受害者无法阻止这种情况。攻击不仅限于调用网站,还可以执行任何高权限JavaScript代码。唯一的要求是受害者完全信任用于认证PDF文档的证书。

PDF格式的规范

通过设计,经过认证的文档支持复杂的和高度期望的用例,而这里的问题似乎在于规范细节,它长达994页!该规范需要更新,以解决这些研究人员发现的问题。它或许还需要简化,以避免进一步的意外后果。

更多的技术细节和研究方法,我们建议有兴趣的读者浏览原始论文(pdf).您还可以了解您最喜欢的应用程序是如何处理这些问题的。