当前位置: 首页 > 知识库问答 >
问题:

如何在Apache PDFBox中防止通用签名伪造(USF)、增量保存攻击(ISA)、签名包装(SWA)

颜英博
2023-03-14

目前,Iam正在使用apache PDFBox创建一个数字和电子签名。最近,我了解到了数字签名和电子签名中的一些漏洞,如通用签名伪造(USF)、增量保存攻击(ISA)和签名包装(SWA)。PDFBox是否会自动处理这个问题,或者我们是否需要在代码中执行额外的操作来处理这个问题

共有1个答案

施恩
2023-03-14

首先,上述攻击是在2019年2月公开的一篇硕士论文(波鸿鲁尔大学Karsten Meyer zu Selhausen的“PDF签名的安全性”)中提出的。已于2018年11月与多个信息安全相关组织共享并讨论了派生的“漏洞报告”的预发布,因此在论文中同时测试的多个PDF签名验证器已被修复,以正确显示签名有效性违规或限制。您可以在PDF不安全网站上找到一个概述。

阅读这篇论文并检查示例,我得到的印象是,作者和他的顾问已经很久没有处理PDF了,至少没有深入处理。造成这种印象的两个例子:

>

  • 本论文明确地基于2006年发布的PDF参考文献1.7,意识到PDF已于2008年成为ISO标准(ISO 32000-1),并于2017年进行了更新(ISO 32000-2)。

    结果是它的某些方面已经过时了。例如。

    • 它将“对对象摘要的攻击”描述为未来工作的主题,但2008年的ISO 32000-1标准中还没有包含对象摘要,在本论文发表时,它们已经过时超过10年了。
    • 此外,从论文中得到的“漏洞报告”包含了一个改进验证的建议,但是提到了一个缺点,即它需要修改PDF规范,该规范将ByteRange定义为可选参数...但从2008年开始,ISO 32000-1中就要求这样做了(至少对于这里所涉及的签名)!

    这些操作(在美国空军攻击的背景下最为突出)是在没有充分尊重结果PDF的有效性的情况下进行的。

    对于某些攻击场景,无效PDF是可以的,甚至可能是有效的,但在许多场景中,它们是不必要的,应该避免。

    尽管如此,这些攻击还是很有趣的,特别是它们让我想知道那些对PDF有更深入了解的攻击者可能会设计出什么攻击。

    OP是“使用apache PDFBox创建一个数字和电子签名”,关于上面的攻击,他想知道作为一个签名创建者可以做些什么来防止攻击。

    不过,在一个方面,他可以提供帮助:签名包装攻击的某些变体在签名内容中使用了00字节的尾随字符串区域;所以他可以通过保持短的字符串来帮助防止一些攻击。不幸的是,在许多签名设置中,很难预测要在这里嵌入的签名容器的大小,因此很难避免一定数量的尾随00字节。

    此外,您还可以使您的签名成为“不允许更改”的认证签名--以这种方式尊重认证级别的验证器可以更容易地识别并报告任何不允许的更改。但是,如果在长期验证扩展的上下文中使用,这可能会有点阻碍。

    首先,PDFBox没有提供一个随时可用的实用工具来检查增量更新中所做的更改的种类。因此,除非您自己实现这一点,否则验证器只能对覆盖整个文档的签名说,他们对文件显示的内容进行签名。对于以前的签名,它只能说有关的签名签署了文件以前的一些修订,但不能说该修订是否与当前的修订一致。

    对来自PDF安全站点(此处)的示例攻击文件运行PDFBox签名验证示例showsignature,会得到以下结果:

    • 通常(大多数ISA,所有SWA文件)会看到“签名已验证”和“签名不覆盖整个文档”的输出。
    • 在一个ISA案例中,存在NosuchAlgorithmException
    • 通常(大多数USF文件)有NullPointerException
    • 在一个USF案例中,存在ClassCastException
    • 在一个USF案例中,存在CMSException

    (SecurityThesisValidation测试的结果)

    但是,请注意:如上所述,本文和示例文件显示了一些不足之处。因此,PDFBox有可能受到改进版本的攻击。特别是,签名包装方法看起来很有前途,因为PDFBox仅使用内容字符串,而不将其与字节范围间隙的内容进行比较。

  •  类似资料:
    • 我在这里读到了关于saveIncremental是如何工作的,我的最终结果需要类似于这里,我已经成功地基于签名字段本身创建了具有多重可视化的可见签名(与响应中的情况不同,但响应对我帮助很大)。为了详细说明标题,我目前的基本任务是在已经签名的文档上创建一个空签名字段,而不中断现有签名。但是,这里的示例不适用于saveIncremental。我在主函数的末尾添加了以下片段(改编),但没有结果: 生成的

    • 本文向大家介绍如何防止XSS攻击?相关面试题,主要包含被问及如何防止XSS攻击?时的应答技巧和注意事项,需要的朋友参考一下 (1) 将前端输出数据都进行转义 (2) 将输出的字符串中的\反斜杠进行转义 (3) 从url中获取的信息,防止方法是由后端获取,在前端转义后再行输出 (4) 使用cookie的HttpOnly属性,保护好cookie 详细参见:http://blog.csdn.net/fe

    • 我们对代码进行了安全审计,它提到我们的代码容易受到XML外部实体(XXE)攻击。 XML外部实体攻击利用XML功能在处理时动态构建文档。XML实体允许动态包含来自给定资源的数据。外部实体允许XML文档包含来自外部URI的数据。除非配置为其他方式,否则外部实体会强制XML解析器访问URI指定的资源,例如本地计算机或远程系统上的文件。此行为会使应用程序遭受XML外部实体(XXE)攻击,这些攻击可用于执

    • 我正在开发Web应用程序,并要求在发布之前对其运行。 然后我下载了Vega并快速扫描了我的webapp,发现了一个VAPT问题,如下所示: Vega检测到资源设置了不安全的跨源资源共享(CORS)访问控制。CORS提供了允许服务器将跨站点请求的资源访问限制到某些受信任域的机制。通过将“Access Control Allow origin”响应头的值设置为通配符值,所讨论的服务器已允许来自任何源的

    • 我读过关于CSRF和不可预测的同步令牌模式是如何用来防止它的。我不太明白它是如何工作的。 让我们以这个场景为例: 用户使用以下表单登录到站点: 服务器还将令牌存储在会话中。发送请求时,它将表单数据中的令牌与会话中的令牌进行比较。 当黑客可以编写JavaScript代码时,如何防止CSRF: 发送GET请求到站点 接收包含请求表单的html文本。 在html文本中搜索CSRF令牌。 使用该令牌发出恶

    • 本文向大家介绍Django如何实现防止XSS攻击,包括了Django如何实现防止XSS攻击的使用技巧和注意事项,需要的朋友参考一下 一、什么是XSS攻击 xss攻击:----->web注入   xss跨站脚本攻击(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”。   我们常常听到“注入”(Injection),如SQL