ArkView 2016 003 期 MS WORD 加密及破解原理分析 2016 年 6 月 1 日
目录 MS WORD 加密及破解原理分析... 1 一 结论... 1 二 MS WORD 加密算法及可破解情况... 1 三 破解工具及适用范围... 2 四 工具破解原理... 2 五 构建密钥表的可行性... 3 附件... 4 附件一 MS WORD(DOC 文件 ) 加解密原理... 4 附件二 Office Password Recovery Toolbox 协议分析及相关实验. 10 附件三破解工具上传内容调研... 19 附件四 WORD 2007/2010 生成的 doc 文档破解实验... 21
MS WORD 加密及破解原理分析 一 结论 1 MS WORD 对用户密码进行了多轮 MD5 和加盐运算, 运算结果保存在 DOC 文档中 ; 2 部分版本 MS WORD, 对 DOC 文档采用的默认加密算法是 RC4, 且密钥强度只有 40 位, 此举造成了加密的 WORD 文档可被破解 ; 3 通过技术手段 ( 非暴力手段 ), 在极短时间 ( 秒级 ) 内, 可以 移除 Word 2003 Word 2007 或 Word2010 生成的 DOC 加密文件的打开密码, 还原密文得到相应的明文文件, 但是不能得到真正的用户密码 ; 4 对于采用其它高强度加密算法的 WORD 文档, 尚未找到公开的技术破解手段 ; 5 上述结论针对 WORD Windows 简体中文版, 其它个别版本可能不适用 二 MS WORD 加密算法及可破解情况 1 WORD 文档打开密码的加密密钥生成 : 用户输入密码 加盐 & 哈希变换 RC4/AES 密钥 2 可 移除 打开密码的情况 版本 文件格式 加密算法及强度 加密说明 可移除 Word 2003 DOC RC4,40 位 默认 40 位强度 RC4, 还有其它强度可选 Word 2007 DOC RC4,40 位 加密强度不可选 Word 2007 DOCX AES,128 位 加密强度不可选 Word 2010 DOC RC4,40 位 加密强度不可选 Word 2010 DOCX AES,128 位 加密强度不可选 Word 2013 DOC RC4,128 位 加密强度不可选 Word 2013 DOCX AES,128 位 加密强度不可选 1
三 破解工具及适用范围 名称 软件 破解特点 返回密码 国家 上传内容 Office Password Recovery Toolbox 客户端 秒破 否 俄罗斯 极少字节 安全 Word Password Recovery Master 客户端 秒破 否 俄罗斯 极少字节 安全 www.password-find.com 网页版 秒破 否 美国 全文上传 证据确凿 Word Password Unlocker 客户端 字典 是 中国 不上传 暴力 安全 Advanced Office Password Recovery 客户端 字典 是 俄罗斯 不上传 暴力 安全 Passware Password Recovery Kit 客户端 字典 是 美国 大量上传 暴力 形迹可疑 适用范围 Word 2003 2010 DOC 格式,40 位 RC4 Word 2003 2010 DOC 格式,40 位 RC4 Word 2003 2010 DOC 格式,40 位 RC4 Word 2003 2013 DOC/DOCX 格式 Word 2003 2013 DOC/DOCX 格式 Word 2003 2013 DOC/DOCX 格式 四 工具破解原理 针对 Office Password Recovery Toolbox (OPRT) 工具进行了原理分析 使用 密钥表, 联网破解 1 破解者预先找到特定 5 字节明文, 特点是任意 DOC 文档中, 明文内容都是 0x00, 位置固定, 且会被加密 ; 2 破解者预先构造密钥表 : 穷举 2 40 种 RC4 密钥, 依次加密 5 字节 0x00, 得到密钥与密文的对应关系, 存储得到密钥表 ; 3 客户端工具从加密 DOC 读出特定 5 字节密文, 向服务器查密钥表得对应 RC4 密钥, 并解密生成明文 DOC 文件 特点 : 1 一次构造密钥表, 无限使用, 不必每次使用字典暴力计算, 破解时间控制在秒级 ; 2 无法得到真正的用户密码, 只能 移除 打开密码, 生成新的明文文件 2
1 读取特定 5 字节密文 0xABEF0123FF 破解工具 5 使用密钥解密 密文 2 上传密文 0xABEF0123FF 4 返回 RC4 密钥 0xFFFFFFFFFD 明文 DOC 文件 40 位 RC4 加密 用户输入密码 服务器 3 查密钥表得密钥 加盐 & 哈希变换 特定 5 字节密文 0x0123456789 0x1122AA4455 0xABEF0123FF 0x3F4E5D6C5B 0xA11A2BB233 40 for(i=0; i<2 ; i++) 密文 = RC4(0x0000000000, i); 明文 =0x0000000000 Key=0 2 40 ~ RC4 加密 RC4( 明文, key) 密钥表 RC4 密钥 ( 低版本 ) AES 密钥 ( 高版本 ) RC4 密钥 0x0000000000 0x0000000001 40 空间 :2 =1T 0xFFFFFFFFFD 0xFFFFFFFFFE 0xFFFFFFFFFF 五 构建密钥表的可行性 构建密钥表完全可行, 其时空开销估计如下 : 指标 估计值 可行性 计算时间 100 小时 存储空间 10T 字节 说明 : 1 存储空间 : 密码空间是 2 40 =1T, 存储 5 字节 (40 位 )RC4 密码 5 字节 密文, 不优化存储 (5 字节 +5 字节 )* 1T = 10T 字节 ; 2 计算时间 : 采用普通的 Intel Core i7 3.4GHz 处理器, 全负荷计算, 用时 100 小时 3
附件 附件一 MS WORD(DOC 文件 ) 加解密原理 1.1 MS WORD(DOC 文件 ) 加解密部分数据结构 1 DOC 文件主要结构 查看工具 :VC6.0 自带 DOC 文件二进制分析工具 DocFile Viewer 数据结构 数据内容 1Table 一些数据表 CompObj 通用的对象 WordDocument 实际的文字和格式化信息就存放在这里 SummaryInforamtion 摘要信息 DocumentSummaryInformation 其他的摘要信息 附图 1.1.1 DOC 文件主要结构 2 DOC 文件会被加密的部分是 1Table 和 WordDocumnet 这两部分, 即用户输入的信息部分 需要注意的是, 这两部分是分别独立加密的, 伪代码近似表示为 : PrepareRc4Key(Key); RC4(Key, 1Table); PrepareRc4Key(Key); RC4(Key, WordDocumnet); 3 与加解密相关的关键数据结构 (1) Salt( 盐 ):1Table 的 0x04~0x13, 共 16 字节, 随机产生, 用于和用户密码混淆, 生成加解密密钥 附图 1.1.2 红框部分 ; 使用方法见 1.2 (2) FreshNumber( 新鲜数 ):1Table 的 0x14~0x23, 共 16 字节, 随机产生, 用于和 FreshNumberMd5 一起校验用户密码正确性 ; 使用方法见 1.2 (3) FreshNumberMd5( 新鲜数特定变换后的 MD5 值 ):1Table 的 0x24~0x33, 共 16 字节, 用于和 FreshNumber 一起校验用户密码正确性 ; 使用方法见 1.2 4
(4) 上述三部分内容, 加密后向文件写入时, 写的必定是执行 RC4(Key, WordDocumnet) 这一步前, 未加密的内容 即等价于, 先写入 WordDocumnet 密文, 再以 RC4 加密前 Salt/FreshNumber/FreshNumberMd5 的内容, 覆盖 WordDocumnet 的 0x04~0x23 偏移 附图 1.1.2 加解密关键数据结构 5
1.2 MS WORD(DOC 文件 ) 加解密算法 1 MS WORD(DOC 文件 ) 加解密算法流程图 附图 1.2.1 1.2.3 1.2.4 中表示的 RC4 KEY 生成算法, 参见附图 1.2.2 附图 1.2.1 DOC 文档加密算法 6
2 RC4 KEY 生成算法, 由此可知采用的 RC4 密钥强度是 40 位 附图 1.2.2 RC4 KEY 生成算法 3 密码校验数据生成算法 : 将新鲜数 (fresh number) 和新鲜数 MD5 值, 分别 RC4 加密后, 保存在 DOC 文件的特定数据结构 1Table 中 7
附图 1.2.3: 密码校验数据生成算法 4 用户密码校验算法 附图 1.2.4 用户密码校验算法 8
参考资料 : 1 复合文档文件格式研究,http://club.excelhome.net/thread-227502-1-1.html 2 doc 文件 word 格式, http://blog.chinaunix.net/uid-21323988-id-1827840.html 3 Office 文件的奥秘.NET 平台下不借助 Office 实现 Word Powerpoint 等文件的解析, http://www.cnblogs.com/mayswind/archive/2013/03/17/2962205.html 4 微软 OFFice 复合文档, http://blog.csdn.net/zhulinfeiba/article/details/5870408 5 规划 Office 2013 的加密技术和加密设置 (MS 官方文档 ), http://technet.microsoft.com/zh-cn/library/cc179125.aspx 6 OpenOffice.org's Documentation of the Microsoft Compound Document File Format, http://www.openoffice.org/sc/compdocfileformat.pdf 7 RC4 流密码与微软 Office 文档安全分析, http://www.ecice06.com/cn/article/downloadarticlefile.do?attachtype=pdf &id=11111 8 MS Word 加密算法弱点利用 http://wenku.baidu.com/link?url=zfmmulwktq9yqpei47qdm4_n67bkm1jg BMH6Qa9ZWuJkywpPi_Hjk7Uxt_JVfuqmPhbfDA0HncaU7rq5ZDe8mS10jjy5w 03rqtX8i4uLvL7 9
附件二 Office Password Recovery Toolbox 协议分析及相 关实验 2.1 协议 1 正常数据包 红色数据 : 客户端 服务器蓝色数据 : 服务器 客户端 附图 2.1.1 正常数据包 2 关键字段 名称 方向 描述 加密 engine_data 客户端 服务器 用户破解的关键信息 ; 部分内容取 是 自文件, 部分内容疑似软件采集的注册信息 Key 服务器 客户端 RC4 的 40 位 KEY 是 3 关键字段加密方式 名称 基本加密方式 密文明文对应关系 举例 engine_data 密文 = 明文 +0x14 2 字节 1 BYTE 2 字节密文 0c 对应 1BYTE 明文 0xF8 Key 密文 = 明文 +0x14 4 字节 1 BYTE: 4 字节密文 7776 对应 10
高 2 字节 BYTE 高四位 低 2 字节 BYTE 低四位 1BYTE 明文 0xcb 字母 c 的 ASCII 值是 63, 对应密文 77 字母 c 的 ASCII 值是 62, 对应密文 76 4 engine_data 名称 明文长 密文长度 作用 FreshNumber 16 BYTE 32 字节 在服务器端校验找到的 KEY FreshNumberMd5 16 BYTE 32 字节 在服务器端校验找到的 KEY 特定密文点位提取值 5 BYTE 10 字节 用于寻找 KEY Salt 16 BYTE 32 字节 未知 guid 字段 41 ASCII 41 字节 未知 & 符 1 ASCII 1 字节 -- psevdo_num_old 字段 25 ASCII 25 字节 未知 & 符 1 ASCII 1 字节 -- guid 和 psevdo_num_old 字段明文如附图 2.1.2 所示, 作用不详 附图 2.1.1 guid 和 psevdo_num_old 明文 5 key 密文固定为 20 字节, 解密得到 5 BYTE(40 位 ) 的 RC4 KEY 附图 2.1.1 对应的 KEY 是 0xcb,0x68,0x9b,0x82,0x49 11
2.2 上传内容确定 1 实验 1:FreshNumber/FreshNumberMd5/Salt 上传确定 (1) 通过解析 DOC 文件格式, 可以确定 FreshNumber/FreshNumberMd5/Salt ( 密文 ) 的文件偏移 ; (2) 将 FreshNumber/FreshNumberMd5/Salt 处密文, 分别以全 0x00,0x11, 0x22 覆盖 ; 如附图 2.2.1 内容框颜色 FreshNumber 蓝 FreshNumberMd5 绿 Salt 红 附图 2.2.1 密文覆盖 (3) 使用 Office Password Recovery Toolbox 破解密文, 抓包如附图 2.2.2 内容 框颜色 说明 FreshNumber 蓝 OPRT 通信加密后,0x00 0x14 FreshNumberMd5 绿 OPRT 通信加密后,0x11 0x25 Salt 红 OPRT 通信加密后,0x22 0x36 附图 2.2.2 破解过程抓包 (4) 可以证明 FreshNumber/FreshNumberMd5/Salt( 密文 ), 三部分内容被上传, 并且可以确定这三部分内容在通信协议中的位置 2 实验 2: 特定密文点位确定 (1) 使用二分查找法, 以 0x33 分别覆盖 DOC 各加密部分 ; (2) 仅当覆盖 WordDocumnet 结构的 0xbd,0xc10,xc50,xc90,xcd 这五处时, 抓破解包, 恰可得到 10 字节的 0x47; 如附图 2.2.3 和附图 2.2.4 12
附图 2.2.3 以 0x33 覆盖特定偏移 附图 2.2.3 破解过程抓包 (3) 0x33 经 OPRT 通信协议加密后的值恰为 0x47 (4) 可以证明,WordDocumnet 结构的 0xbd,0xc1,xc5,xc9,xcd 五个点位, 被 OPRT 上传, 可能是寻找 RC4 KEY 的关键数据 点位 WordDocumnet 相对偏移文件绝对偏移 ( 一般情况 ) 1 0xbd 0x2bd 2 0xc1 0x2c1 3 0xc5 0x2c5 4 0xc9 0x2c9 5 0xcd 0x2cd 注 :(a) 一般情况下,DOC 格式中 WordDocumnet 结构起始偏移是 0x200; (b)worddocumnet 可以通过对解析 DOC 文件得到, 有官方文档 (c)worddocumnet 起始处标志 :0xEC,0xA5,0xC1,0x00 13
2.3 交叉破解实验 1 构造实验文档 A 和 B, 并破解成功, 如附图 2.3.1 和 2.3.2 DOC 文档 加密 明文密码 返回 KEY 解密成功 A 是 123 key=45454977767a78454c4b 是 B 是 abc key=444c484646494b4d7744 是 附图 2.3.1 正确破解文件 A 附图 2.3.2 正确破解文件 B 2 以文件 A 的 FreshNumber/FreshNumberMd5/Salt, 以及特定密文点位 (WordDocumnet 结构的 0xbd,0xc1,xc5,xc9,xcd), 覆盖文件 B 的相应位置, 得到文件 C; 破解文件 C 并抓包 3 步骤 2 抓包得到的服务器返回 KEY 与正常破解 A 得到的 KEY 相同, 但对 C 文件的破解失败 14
附图 2.3.3 C 破解抓包 附图 2.3.4 C 破解失败 4 证明 FreshNumber/FreshNumberMd5/Salt 和 5 BYTE 特定密文点位值, 可以唯一确定 KEY 15
2.4 实验 : 解密算法实现与验证 1 wv 库 wv, 即 WordView, 是一个可以解析 Word 2000,97,95 文件的开源库, 并可编译成软件 下载地址是 http://wvware.sourceforge.net/index.html 此部分实验, 抽取了 wv 中用于解密文件的代码, 形成了一个验证小程序, 小于验证 Office Password Recovery Toolbox 服务器返回的 KEY 是否为真正的可以解密 DOC 文件的 RC4 KEY, 并且还可以深入验证 理解附录一调研的 DOC 文件加解密算法正确性 2 实验过程 (1) 生成文件, 如下表,B 是 A 加密得到的文件 图附 2.4.2 可以看到文件的内容, 从 0xa00(WordDocumnet 数据结构 ) 开始 连续的字母 w 图附 2.4.3 可以看到文件内容已被加密 DOC 文档 加密 明文密码 文件内容 返回 KEY 解密成功 A 否 -- 多个字母 w -- -- B ( 由 A 加密 ) 是 复杂密码 多个字母 w key=77764a4c4d764c46484d 是 图附 2.4.1 WORD 打开明文文件 A 16
图附 2.4.2 二进制打开明文文件 A 图附 2.4.3 二进制打开密文文件 B (2) 计算 77764a4c4d764c46484d 对应的 5 BYTE RC4 KEY: 0xcb,0x68,0x9b,0x82,0x49 (3) 以 {0xcb,0x68,0x9b,0x82,0x49} 为 RC4 KEY, 代入基于 vw 开发的解密小程序, 仅对 B 文件加密的 WordDocumnet 数据结构解密, 正确得到明文 图附 2.4.4 17
图附 2.4.5 编程解密 B 文件 (4) 结论 :vw 的 DOC 解密算法适用 ;Office Password Recovery Toolbox 服务器返回的 KEY 正是可以解密 DOC 文件的 RC4 KEY 18
附件三破解工具上传内容调研 1 Office Password Recovery Toolbox( 安全 ) 上传几百字节的必要信息, 且上传协议已分析清楚, 不会文档泄密 2 Word Password Recovery Master( 安全 ) 上传几百字节的必要信息, 且上传协议已分析清楚, 不会文档泄密 同 Office Password Recovery Toolbox 工具工作原理一致 3 www.password-find.com( 危险, 已证明全文上传 ) 抓包分析, 确定其上传了全文内容 : (1) 在上传数据包中找到了 WORD 文件明文 ; (2) 将该部分数据内容转储为 WORD 文件后, 可以使用密码正常打开 19
4 Word Password Unlocker( 安全 ) 未发现网络行为 5 Advanced Office Password Recovery( 安全 ) 未发现网络行为 6 Passware Password Recovery Kit( 危险 ) 加密上传大量内容, 形迹可疑 ; 从上传数据量来看, 可能全文上传 WORD 文件 WORD 文件大小 ( 字节 ) 上传数据 ( 字节 ) 20992 15496 107008 31226 20
附件四 WORD 2007/2010 生成的 doc 文档破解实验 一 实验说明 本实验文档以 WORD 2007 为例,WORD 2010 下的情况相同 二 实验内容 实验一 : 先加密后转格式实验实验二 : 先转格式后加密实验 三 实验步骤 实验一 : 1. 在干净的 Windows XP SP2 系统中安装 office 2007 和 Office Password Recovery 软件 ; 2. 新建一个 word 文档, 写入内容 12345, 保存为 1.docx; 3. 将该文档进行加密保护, 密码设为 123, 保存 ; 4. 将该加密后的 docx 文档另存为一个 97-2003 Wrod 格式的文件, 文件名为 1.doc; 5. 用 Office Password Recovery 打开 1.doc, 进行密码的破解 ( 移除密码 ) 实验二 : 1. 在干净的 Windows XP SP2 系统中安装 office 2007 和 Office Password Recovery 软件 ; 2. 新建一个 word 文档, 写入内容 12345, 保存为 97-2003 Wrod 格式文件, 文件名为 2.doc; 3. 将该 doc 文档进行加密保护, 密码设为 123, 保存 ; 4. 用 Office Password Recovery 打开 2.doc, 进行密码的破解 ( 移除密码 ) 四 实验结果 实验一 : 在步奏 3 对已加密的 docx 文档进行另存为 97-2003 Wrod 格式时 ( 如图 1-1), Word 2007 会出现如下 是否通过转换为 Office Open XML 格式来提高安全性 的提示 ( 如图 1-2 所示 ): 21
1-1 已加密的 docx 文档另存为 97-2003 Wrod 格式 1-2 询问是否需要转换为 Office Open XML 根据实际实验发现无论是选择 是 或 否, 另存为的文件类型和大小均相同, 且均被正确的进行了加密 ( 如图 1-3 所示 ): 22
1-3 另存为的 doc 文档也同样被加密 被保存的 doc 均可以被 Office Password Recovery 移除加密密码, 该破解软件会生成一个内容完全相同, 但不包含密码的新文档, 证明了密码破解成功 ( 如图 1-4 1-5 所示 ): 1-4 使用 Office Password Recovery 对转换后的文档进行密码移除 23
1-5 破解后生成的新文档 实验二 : 类似的, 在实验二的步奏 4 中对 doc 文档进行加密后保存时同样出现了 是否通过转换为 Office Open XML 格式来提高安全性 的提示 ( 如图 2-1 所示 ): 2-1 询问是否需要转换为 Office Open XML 无论选择 是 还是 否, 保存后的加密文件均可以被 Office Password Recovery 所破解 ( 如图 2-2 和 2-3 所示 ): 24
2-2 Office Password Recovery 破解成功 2-3 破解后生成的新文档, 内容完全一致 25