G.O.S.S.I.P 阅读推荐 2023-06-07 大破Office签名保护!

admin 2023年6月7日14:08:46评论11 views字数 3952阅读13分10秒阅读模式

G.O.S.S.I.P 阅读推荐 2023-06-07 大破Office签名保护!

盗一张图,祝今天走进考场的每一位考生都能有更美好的未来!高考不是终点,而是起点,要相信你听过的所有道理,最后都比不过自己的一生精彩!


尽管USENIX Security 2023会议还没有召开,但是编辑部已经有了自己的杰出论文奖候选者,那就是今天我要推荐的这篇关于Microsoft Office的OOXML格式签名伪造攻击的研究论文 Every Signature is Broken: On the Insecurity of Microsoft Office’s OOXML Signatures (如果8月会议召开之后这篇论文确实拿奖了,请读者给我们捐款买咖啡如何?)

G.O.S.S.I.P 阅读推荐 2023-06-07 大破Office签名保护!

想要了解OOXML格式(也就是目前微软office套件里面的标准官方格式)的签名问题,首先要了解一下基础知识。OOXML格式实际上是一个压缩包,里面包含了很多不同的文件(支持交叉引用),其中一个最重要的主文件是word/documents.xml,然后还有一个word/_rels/document.xml.rels文件,定义了文档在加载和渲染(rendering)时期需要的各种其他文件。为了保护文件内容,OOXML格式引入了一个单独的XML文件来存储相关的签名信息。如下图所示,这个XML文件中主要包含了Package InfoOffice InfoSignature PropertiesSigned InfoSignature Value 和 Key Info 六部分内容,除了 Key Info 包含的公钥信息可以更改以外,其余部分都被密码学签名算法保护起来。由于document.xml本身和所有在document.xml.rels中引用到的文件的hash值都存储在 Package Info 中,同时 Signed Info 中包含了对这些信息的签名,因而可以通过 Key Info 的公钥信息来验证签名。

G.O.S.S.I.P 阅读推荐 2023-06-07 大破Office签名保护!

大家一般都是在打开office文档的时候才会去检查文档的完整性。一个有签名保护的OOXML格式文档在实际中会有三种不同的状态:

  1. 签名完全合法
  2. “可恢复”的签名
  3. 签名不合法

而这三种情况会在Office套件的界面上显示不同的信息(如下图所示)。当然你一定会在心里面嘀咕,这个“可恢复”的签名(recoverable signature)是什么鬼。在网上查了一下,大家讨论的结果是,这种“可恢复”的签名在密码学运算上没啥问题,可能是因为网络连接等原因,对公钥和证书的验证出现了错误导致的,而不合法的签名就是签名的值出错了。

G.O.S.S.I.P 阅读推荐 2023-06-07 大破Office签名保护!

OOXML格式这个设计看上去就很复杂,而对于它的签名验证流程就更复杂了,这种复杂性最终成了一颗炸弹,让整个密码学机制的安全性全部被破坏掉。本文给出了5种针对OOXML格式签名的攻击:

  1. Content Injection Attack:让一些本来不会被渲染的文件(也就是document.xml.rels没有引用到、从而没有签名)被软件加载显示;
  2. Content Masking Attack:操控OOXML格式中的样式表、字体等元数据信息,使得显示效果被篡改;
  3. Legacy Wrapping Attack:把一些包含古早签名格式的文件(比如我们都知道的.doc兼容格式哈哈哈)嵌入到OOXML格式中,用来绕过签名校验;
  4. Universal Signature Forgery:利用一些奇技淫巧(也就是说利用了Office软件的实现错误),从其他格式的office文档(例如ODF格式文档)借来一些数据,帮助构造一个可以正常显示的“合法签名”文档;
  5. Malicious Repair Attack:利用Office软件提供的“文档修复”功能,把一些合法的显示内容用恶意信息替换掉(注意到这种攻击需要用户交互,也就是用户要点一下“确认修复”)。

上述这五种攻击看上去很神秘,不过背后都有一些符合逻辑的根本缺陷,我们来解密一下。这里面一共有三个根本问题:

  1. OOXML格式的文档支持“部分签名”(partial signature),也就是在文档打包的内容里面,允许只有部分文件有签名的情况(听起来就很傻对不对);
  2. 文档显示(即读取不同的文件人,然后渲染出显示效果)的流程非常之复杂,而且会把签名和未签名的内容混合显示(页面上总不可能把那些没签名的内容给高亮出来吧?);
  3. 整个签名验证的流程复杂到反人类。

有了这三个根本问题,攻击者想不成功都困难。我们看看这个部分签名的特性(后门?)会带来的灾难性后果。首先说一下Content Injection Attack,由于标准里面允许document.xml.rels里面所有引用的文件中,可以有不签名的存在,那么攻击者就可以往一个有合法签名的文档的document.xml.rels里面插入新的item,指向某一个新添加的xml文件,然后把这个新的xml也重打包到文档的zip里面,同时往[Content_Types].xml这个文件(注意到这个文件也是没有签名保护的!)加入对新xml的引用,最后就可以利用这个新加入的xml显示的内容去覆盖(或者说遮挡)原来的内容(如下图所示)

G.O.S.S.I.P 阅读推荐 2023-06-07 大破Office签名保护!

第二种针对部分签名的攻击Content Masking Attack,需要攻击者首先去制作一个畸形的OOXML格式文档(如下图所示,手工去掉了对fontTable.xmlstyle.xml的引用),然后送给一个能够签名的oracle(嗯,这个地方稍微有点要求)去生成保护好的文档。然后,攻击者再把这个保护过的文档修改一下,加入恶意的fontTable.xmlstyle.xml以及对它们的引用。正是由于部分签名特性的支持,

G.O.S.S.I.P 阅读推荐 2023-06-07 大破Office签名保护!

第三种攻击——Legacy Wrapping Attack——利用了能够签名的oracle既支持OOXML格式又支持古早的Compound File Binary format(也就是我们熟知的.doc)这个特性。攻击者首先拿一个.doc文件来让oracle签名,之后提取签名信息。注意到这时候得到的签名信息里面记录了5部分信息:1Table[0x01]CompObjDataWordDocument,除了这个单字节信息[0x01]是新的文档不认可的(必须要是ASCII字符)以外,其余的都是可以直接重新塞到一个新的OOXML格式文档里面去。作者发现,其实只需要随便把[0x01]这个地方改成一个可读字符(比如0x41也就是大写的’A’就好了),然后再把其余的恶意内容塞进来形成一个混合文档,依然可以欺骗Office软件让它觉得这是个合法的签名后文档。

看到这里,你一定会说oh my god!为了兼容性,Office这个签名保护机制怎么设计得如此的稀烂,还没完,继续读下去,还有更多惊喜……

G.O.S.S.I.P 阅读推荐 2023-06-07 大破Office签名保护!

上图展示了令人发狂的OOXML格式的签名校验流程,这个流程既啰嗦又不严谨,各部分之间缺乏关联,会导致可怕的安全漏洞。

首先说说Universal Signature Forgery攻击,如果你熟悉OOXML格式,还可以构造一个如下图所示的OOXML格式文档,注意到它和标准的签名保护后OOXML格式文档的本质区别是什么了吗?对,在这个格式中,Signed Info并不是指向Package Info,而是指向一个Signed XML Content,这个内容据说只要随便从一个其他的签过名的OpenDocument Format 也就是ODF文档中去弄过来就好了,这里甚至都不需要攻击者去伪造Key Info——在Office套件检查签名的过程中,它首先检查Package Info里面的hash值和各个文件是否匹配(随便伪造),然后检查(畸形的)Signed Info部分指向的内容和签名是否一致(通过检查),最后就率性地根据Key Info显示出来签发者信息,你惊喜不惊喜,意外不意外?

G.O.S.S.I.P 阅读推荐 2023-06-07 大破Office签名保护!

最后一个Malicious Repair Attack中,作者展示了一种很令人称奇的攻击技巧:首先找一个合法签名过的Excel或者PowerPoint文件,然后把它解压缩之后,修改里面的[Content_Types].xml。怎么修改法?先生成一个恶意的word文档,把word文档压缩包里面各个子文件改名,不要和原来的Excel或者PowerPoint文件中的子文件名撞车,然后把word这些子文件全部塞到原来那个压缩包里面,并且在[Content_Types].xml里面加入相关索引,然后改个扩展名,用Word打开试试看?!

作者对各个版本的Office套件(包括微软自家和一些第三方套件)进行了测试,结果如下,是不是祖国山河一片红?

G.O.S.S.I.P 阅读推荐 2023-06-07 大破Office签名保护!

如果你是一个macOS用户,想嘲笑一下微软,恐怕高兴得太早了。微软早就识破了高贵的苹果用户只看外表的特点——在macOS版本的Office中,只要包含了一个signature file(sig1.xml),哪怕这个文件的内容是空的,都会展示如下的提示信息。也就是说,攻击者并不需要利用针对Windows版本的Office用户的任何复杂攻击技巧,因为macOS版本的Office只会显示这个信息,无它~

G.O.S.S.I.P 阅读推荐 2023-06-07 大破Office签名保护!

好了,让我们期待下8月的USENIX Security会议上这篇论文会不会中奖~ 再透露一个小秘密,黑产团队感兴趣的研究人员可以去下面的repo去找找看有没有自己喜欢的内容:

研究样本: https://github.com/RUB-NDS/OOXML_Signature_Security


论文:https://www.usenix.org/system/files/sec23summer_235-rohlmann-prepub.pdf

 

原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2023-06-07 大破Office签名保护!

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月7日14:08:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   G.O.S.S.I.P 阅读推荐 2023-06-07 大破Office签名保护!http://cn-sec.com/archives/1789205.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息