MS WORD加密及破解原理分析

pflk3672 8年前
   <h3>加密的WORD文档遭遇“秒破”,密码形同虚设,这在多年前是一件神奇而不可思议的事情,其真相和原理如何?如今高版本的WORD文件是否同样的不堪一击?这里对MS WORD加密及破解原理进行详细分析,以科学严谨的态度,全面深入探究WORD加密原理以及“秒破”真相!</h3>    <h2>一、调研对象</h2>    <p><strong>1、调研对象</strong></p>    <p>(1)针对Microsoft Office Word简体中文版;</p>    <p>(2)针对Word文档的打开密码;</p>    <p>(3)除个别语言版本外,调研结论理论上均适用;</p>    <p><strong>2、术语说明</strong></p>    <p>(1)密码:用户为Word文档设置的打开密码;</p>    <p>(2)密钥:加密算法所使用的Key,本文档所指的RC4 密钥由用户输入的密码经过特定的变换得到;</p>    <p>(3)字典破解:逐一使用指定字典中的密码进行破解;</p>    <p>(4)暴力破解:穷举所有可能的密码进行破解,在本文档中字典破解亦视为暴力破解;</p>    <p>(5)查表破解:枚举指定长度下所有可能的密钥,对特定的明文进行加密,保存所有的密文-密钥对构成一个表,直接在该表中查找密文即可得到可能的密钥;</p>    <p><strong>3、Word密码破解方式对比</strong></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/3a3c8eb37afc7047c503d07cbf9fb372.jpg"></p>    <h2>二、调研结论</h2>    <p>1 、没有直接或间接证据,证明 Word 存在 “ 保存用户密码 ” 等明显后门;</p>    <p>2 、使用 Office Password Recovery Toolbox ( <strong>推测</strong> 基于查表技术)等工具,可以快速得到 Word 2003 / 2007 / 2010 生成的受保护的 doc 文件的加密密钥,通过解密恢复出对应的明文文件;</p>    <p>3 、使用基于暴力猜解的破解工具,如破解成功,可以得到用户设置的原始密码;</p>    <p>4 、快速破解工具原理猜测:利用 doc 文档加密强度低( RC4 加密算法、 40 位长度的密钥)的脆弱点,通过在密文 - 密钥对表中查找密文得到加密密钥,不涉及用户设置的原始密码;</p>    <p>5 、从存储和算力两个方面证明了查表破解的可行性;</p>    <h2>三、破解工具调研</h2>    <p><strong>1、可快速移除打开密码的情况</strong></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/7792585084f8c0f2068681942d8bacc0.jpg"></p>    <p><strong>2、Word 2007 / 2010快速破解场景说明</strong></p>    <p>(1)将已经设置打开密码保护的docx文档另存为97-2003格式的doc文档,会提示“是否要通过转换为Office Open XML格式来提高安全性?”;</p>    <p>(2)将新建的Word文档保存为97-2003格式的doc文档,对doc文档设置密码保护,也会给出同样的提示;</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/7d2b5fce3967b0e1d4c1018f8087775a.jpg"></p>    <p>(3)如果选择“是”,则会弹出另存为对话框,默认格式为docx;</p>    <p>(4)如果选择“否”,则直接保存,对应的doc文档可以被Office Password RecoveryToolbox / Word Password Recovery Master等工具所快速破解;</p>    <p><strong>3、现有破解工具及其适用范围</strong></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/dd57ccd7d718d01797aa33395ec91348.jpg"></p>    <p>Passware Password Recovery Kit上传的数据经过加密处理,根据WORD文档大小的不同上传不同大小的数据,实验测试发现: <strong>20KB</strong> 的文档上传了 <strong>15KB</strong> 的加密数据, <strong>100KB</strong> 的文档上传了 <strong>30KB</strong> 的加密数据。</p>    <h2>四、破解原理分析</h2>    <p><strong>1、Word加密原理简介</strong></p>    <p>密钥生成:随机生成16字节的Salt数据,连同用户输入的密码字符串,经过特定的变换后,得到40位长度(5字节)的RC4密钥;</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/e0b722fa734137fd119a4852b8e56887.jpg"></p>    <p><strong>2、Word加密相关字段</strong></p>    <p>(1) <strong>Salt</strong> <strong>:</strong> 随机生成的16字节数据,结合用户输入的密码经过特定变换后生成RC4密钥;</p>    <p>(2) <strong>FreshNumber</strong> <strong>:</strong> 随机生成的16字节数据;</p>    <p>(3) <strong>FreshNumberMD5</strong> <strong>:</strong> FreshNumber经过变换后,对其计算得到的MD5哈希值(16字节数据);</p>    <p><strong>当文档被加密时,各字段的存储方式</strong></p>    <p>(1)Salt字段明文存储;</p>    <p>(2)FreshNumber字段经过RC4 <em>单独加密</em> 后存储;</p>    <p>(3)FreshNumberMD5字段经过RC4 <em>单独加密</em> 后存储;</p>    <p><strong>说明:</strong> 对RC4加密算法而言,同样的明文位于不同的位置,加密后的密文是不一样的。</p>    <p><strong>3、打开受保护的Word文档时,如何验证密码是否正确?</strong></p>    <p>(1)将用户输入的密码和Salt经过变换后计算得到RC4密钥;</p>    <p>(2)解密得到FreshNumber明文,计算出FreshNumber的MD5哈希值;</p>    <p>(3)解密得到FreshNumberMD5明文,如果与计算出来的MD5相同,则认为密码正确,否则认为密码错误;</p>    <p><strong>4、密码验证过程</strong></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/1aa8f2c505c7a815d36c13ff58b10c32.jpg"></p>    <p>5、针对Office Password Recovery Toolbox工具进行了原理分析,推测其使用“查表”技术联网破解;</p>    <p><strong>工具特点为:</strong></p>    <p>(1)脱机无法使用,需要联网;</p>    <p>(2)客户端向服务器发送用于破解的数据;</p>    <p>(3)服务器返回解密所需的密钥,客户端执行解密操作;</p>    <p>(4)破解速度极快,但无法得到用户设置的原始密码;</p>    <p><strong>6、Office Password Recovery Toolbox原理推测</strong></p>    <p>(1)枚举所有的40位长度(个数为240)的RC4密钥,对DOC文档特定数据块进行加密,并提取其中特定位置的5字节密文(该5字节数据明文均为0×00);</p>    <p>(2)服务器端存储的表项保存了所有的密文-密钥对;</p>    <p>(3)客户端从受保护的DOC文件读取特定位置的5字节密文,向服务器查询后得到对应的RC4密钥;</p>    <p>(4)客户端接收服务器返回的RC4密钥对DOC文件进行解密;</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/0030b4ed971b2cc2fc916760096d4088.jpg"></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/58b4d931f0e9d605cfe4753c4a9ba76e.jpg"></p>    <p><strong>上传数据分析</strong> :协议版本、程序名称等无关数据;</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/4edd36bd8de2f36c7c43a9e79dc6f566.jpg"></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/12fdca804c669cedeff8b28c606299e0.jpg"></p>    <p>Engine_data数据分析:</p>    <p>用于验证密钥是否正确 <strong>:</strong> Salt明文占用16字节;FreshNumber密文占用16字节;FreshNumberMD5密文占用16字节;</p>    <p>用于在表中查找密钥:特定位置的密文占用5字节</p>    <p>作用暂不明确:GUID以及sevdo_num_old字段占用68字节;</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/fae118a283b8229903a218ef3a966740.jpg"></p>    <p><strong>返回数据分析:</strong> result=2,表示处理的结果类型;key为解密需要的密钥(5字节);</p>    <p><strong>7、密钥冲突处理</strong></p>    <p>(1)给定密文,查表得到的RC4密钥可能不止一个;</p>    <p>(2)实际测试时在224空间内找到123对碰撞(两个不同的Key对同一段明文进行加密,特定位置上的密文是一样的);</p>    <p>(3)使用Salt / FreshNumber /FreshNumberMD5验证密钥的正确性;</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/40d58d6891d30a144e10b4bd9cbd4f6e.jpg"></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/779d72f751e4c7d5133fe62ba2f42fb1.jpg"></p>    <p><strong>8、特定位置的5字节密文数据选取</strong></p>    <p>(1)5个字节位于WordDocument数据块中,为其中的FibRgFcLcb97结构体成员;</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/4e2ca704a05a20dc799f40f295c5b825.jpg"></p>    <p>(2)这5个结构体成员类型均为unsigned int,表示相对于Table数据块的偏移值;</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/4f93c8392e56fa5c7fcab823503a8440.jpg"></p>    <p>(3)3字节最大可表示0x00FFFFFF,Table数据块不存储Word正文,3字节足够表示大小,所以对4字节而言最高字节为0×00;</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/b96369221c0c16cda7b98255ef4cc380.jpg"></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/9b1f98d7af870cf79098630a5ebdda8d.jpg"></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/40346f5eb6f558da133c660fe2958fe7.jpg"></p>    <h2>五、破解成本分析</h2>    <p><strong>1、成本估算</strong></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/a41865bd5b0c0293abbe1055886d1a5a.jpg"></p>    <p>(1) <strong>时间估算</strong> :采用Intel Core i7-3770 3.4GHz处理器(四核八线程)全负荷计算,需要100小时;</p>    <p>(2) <strong>空间估算</strong> :密码一共有240=1T个,存储5字节(40位)RC4密钥、5字节密文数据,需要10TB存储空间;</p>    <p>(3) <strong>实验结论</strong> :完全可行</p>    <p><strong>2、DOC格式正被逐渐取代</strong></p>    <p>(1)查表破解仅对Word 2003/2007/2010保存的doc文件有效;</p>    <p>(2)Word 2007开始默认新建文档格式为docx;</p>    <p>(3)无法破解最新版本的Word 2013保存的doc文件;</p>    <p><strong>3、价值估算</strong></p>    <p>(1)当前这些收费软件仍然存在,说明有一定的市场;</p>    <p>(2) 未来使用doc加密文件破解服务的用户数量肯定会越来越少 。</p>    <p>DOC文档的加解密原理,多年前已有详细技术分析,本文在前辈们研究的基础上,进行了归纳总结和进一步的分析验证。本文最初的目的是内部学习交流,现在分享出来,供有兴趣的同学研究。</p>    <p>在此,ArkTeam向以下参考文章的作者们表示感谢和敬意!</p>    <p>参考资料:</p>    <p>【1】   复合文档文件格式研究,</p>    <p><a href="/misc/goto?guid=4959674417840617429" rel="nofollow,noindex">http://club.excelhome.net/thread-227502-1-1.html</a></p>    <p>【2】   doc文件word格式,</p>    <p><a href="/misc/goto?guid=4959674417932145335" rel="nofollow,noindex">http://blog.chinaunix.net/uid-21323988-id-1827840.html</a></p>    <p>【3】   Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析,</p>    <p><a href="/misc/goto?guid=4959674418024173121" rel="nofollow,noindex">http://www.cnblogs.com/mayswind/archive/2013/03/17/2962205.html</a></p>    <p>【4】  微软OFFice复合文档,</p>    <p><a href="/misc/goto?guid=4959674418102239514" rel="nofollow,noindex">http://blog.csdn.net/zhulinfeiba/article/details/5870408</a></p>    <p>【5】   规划 Office 2013 的加密技术和加密设置(MS官方文档),</p>    <p><a href="/misc/goto?guid=4959674418191403601" rel="nofollow,noindex">http://technet.microsoft.com/zh-cn/library/cc179125.aspx</a></p>    <p>【6】   OpenOffice.org’sDocumentation of the Microsoft Compound Document File Format,</p>    <p><a href="/misc/goto?guid=4959674418274610979" rel="nofollow,noindex">http://www.openoffice.org/sc/compdocfileformat.pdf</a></p>    <p>【7】   RC4流密码与微软Office文档安全分析,</p>    <p><a href="http://www.ecice06.com/CN/article/downloadArticleFile.do?attachType=PDF&id=11111" rel="nofollow,noindex">http://www.ecice06.com/CN/article/downloadArticleFile.do?attachType=PDF&id=11111</a></p>    <p>【8】   MSWord加密算法弱点利用</p>    <p><a href="/misc/goto?guid=4959674418448935199" rel="nofollow,noindex">http://wenku.baidu.com/link?url=zFmMuLwkTq9yqpei47QDm4_n67bKM1JGBMH6Qa9ZWuJkywpPi_Hjk7Uxt_JVfuqmPhbfDA0HncaU7rq5ZDe8mS10jjy5w03rqtX8i4uLvL7</a></p>    <p> </p>    <p>来自: <a href="/misc/goto?guid=4959674418533818177" rel="nofollow">http://www.tuicool.com//articles/bMNnaqm</a></p>    <p> </p>