是什么让 Adob​​e 格式如此脆弱?

信息安全 土坯 软件工程
2021-08-22 07:45:32

处理 SWF、PDF、OTF 的工具……似乎存在不成比例的漏洞。Adobe 创建的格式中的一个特征是否使它们更容易被破坏?

有关的:

为什么经常发现 Adob​​e Flash 漏洞?注意:我不是在问为什么,而是在问所有这些 Adob​​e 技术的共同点。

2015 年 Adob​​e Flash Player 漏洞/补丁激增的背后是什么?

2个回答

有很多因素,但这些是一些:

  1. 它们是非标准的二进制文件。不基于 XML/JSON/YML/等,这意味着每个 Adob​​e 产品开发人员都必须重新发明自己的解析器,这是程序员最困难和最繁琐的任务之一。

  2. 这些文件通常设计为具有高效处理能力,很少考虑易于编写安全实现。例如,PDF 包含一个外部参照表,其中包含程序必须通过 seek() 来查找节的字节偏移量。如果这还不够糟糕,这个外部参照表位于文件的末尾,需要 PDF 解析器从文件末尾向后读取文件。更复杂的是,单个文件中可以有多个这样的外部参照表,并且某些条目可能处于非活动状态或被以后的条目覆盖。

  3. 二进制格式可能包含冲突信息。例如,可以以不同方式指定 PDF 部分:每个部分包含以 ASCII 数字表示的部分长度、“endobj”标记以及根据外部参照表的条目。这些相互矛盾的信息意味着 Adob​​e 产品的不同部分和不同的实施可能依赖于不同的方式来解释同一部分。

  4. 这些文件格式可以包含图灵完备的可执行代码。PDF 文件可以包含 Javascript 代码,SWF 文件可以包含 ActionScript。与任何其他文档宏语言(例如 MS Office 文件中的 VBScript、HTML 中的 JavaScript)一样,这些图灵完备的语言本身就是错误的来源。

  5. PDF 将自己吹捧为一种在任何地方都应该看起来相同的格式,您可以打开古代 PDF 并期望它在现代读者中呈现相同的格式。一些古老的 PDF 生成器生成了错误的 PDF,这恰好依赖于旧 Reader/Acrobat 中的错误。Adobe 没有修复程序并将这些错误文件视为已损坏而拒绝,而是对这些黑客进行了编程以保持这些错误文件的可读性。不幸的是,这些黑客没有记录在案,因此其他实现很难跟上 Adob​​e 如何准确解析这些格式错误的文档。

  6. 这些格式具有大量与文档格式相关的功能。Adobe 喜欢以自己的格式规范实现所有内容,而不是使用单独的图层。例如,ODF、DOCX、JAR 等许多文档格式都是简单的 XML/Class 或常规 zip 文件中的其他元数据。PDF 将压缩格式混合到常规数据流中,您不能只使用常规 zlib 解压缩器来获得未压缩的 PDF。数字签名和版本控制也是如此。

尽管存在这些问题,Adobe 仍然赚了很多钱,这可能是他们并不真正觉得有必要改变他们的开发人员文化的最大原因。

因为 Shockwave/Flash 使用了从 ActionScript 生成的中间字节码,所以 flash_player 插件中的代码生成器和库的安全编码实践极差。

此外,flash_player 插件(连同 Firefox JS 引擎、Chrome JS 引擎和节点)在读取这些中间字节码时使用动态可执行代码生成,这将在不久的可预见的未来继续使其易受攻击。

我在使用 IDA Pro 时学到了所有这些。

而且它还有很多“机会”。