没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
MS Word 加密算法弱点利用
MS Word 是微软公司出品的一款常用的文字编辑软件,是该公司 OFFICE 系
列软件的一种。该软件提供加密被编辑文档内容的功能。当前,Word97(包括
Word97)以后的各个版本的 Word 为了保持向下兼容,默认情况下均使用 97/2000
兼容的加密算法。但是该加密算法在实现时存在一些弱点,加密强度在最好的情
况下也仅相当于 40 位密钥的加密强度,存在安全隐患。
本文通过阅读开源软件 wvWare 的源代码,分析了 Word97/2000 加密算法的
细节,最后利用 wvWare 软 件 中提供的一些公用库,编写了一个对使用
Word97/2000 加密算法进行攻击并理论上可以保证 100%破解率的程序。
试验环境:
本文所涉及的所有运行环境是:一台安装 Redhat 9.0 的 VMware 虚拟机。当
前 wvWare 的最高版本为 1.2.1。但因为在 Redhat 9.0 中安装该版本的 wvWare
时要升级 gObject 在内的多个组件,所以试验中我取了较低版本的 wvWare。具
体是 wvWare 0.7.2(源码包可以从网上自由下载,或从本文附带的光盘中获得)
wvWare 简介及安装过程:
wvWare是一款可以转换MS Word中内容为其他格式的软件,该软件的主页地
址为:http://wvware.sourceforge.net/index.html
从 sourceforge.net 网站的 CVS 中下载 wvWare 0.7.2。执行 tar zfxv
wv-0.7.2.tar.tar 解包,之后 cd wv-0.7.2 进入 wvWare 的目录,依次执
行./configure、make、make install 三条命令安装 wvWare。安装完毕后就可以
使用 wvWare 了。
wvWare 可以通过用户输入的口令来读取并转换加密的 Word 的内容。口令的
参数是:--password=xxxx(其中 xxxx 代表真正的口令)。如我们可以用光盘中
的 123.doc 来做测试。(光盘中的 123.doc 文件的加密口令是 123,文档的内容
是 1234,是使用 Word 2003 创建的)键入命令 wvWare –password=123 123.doc
我们得到 123.doc 转换成 html 格式后的结果。
有关 wvWare 对 Word 文档进行解密的代码大部分在源码包中的 decrypt97.c
文件中,另外 wvWare.c 中有少部分预处理代码。所以我主要对 decrypt97.c 进
行了注释。详见附件光盘。
Word 文件二进制结构
office 系列软件所产生的文档是 Microsoft Compound Document(微软复合
文档)的一种,其文档格式与微软复合文档的文档格式一致。(注:微软复合文
档在 WINDOWS 操作系统中有着广泛的应用,比如 WIN_XP 操作系统中的 Thumbs.db
文件也是一种微软复合文档)。
作者: <Hannibal509@gmail.com>
而微软复合文档则是一种结构化的储存文件,这种文件由微软的 OLE
Structured Storage API 来创建和管理。
下面这张图就是复合文件的一个例子:每个文件都有且只有一个根目录,根
目录下可以有若干个 stream 和 storage,stream 中存放数据,而 storage 中存
放其他 stream 和 storage。
下面这张图是一个典型的带图片的 word 文档的结构,用的是链表式的数据
结构。(使用 VC 自带的 DocFile Viewer)
data stream中(在一个Word文档中只有带了图片才会有该stream)是图片
数据,WordDocument stream 中 是 文 本 数 据 , SummaryInformation 和
DocumentSummaryInformation stream中是摘要信息,等等。详见
《OpenOffice.org's Documentation of the Microsoft Compound Document File
Format》(下载地址:http://sc.openoffice.org/compdocfileformat.pdf)
wvWare 中通过 wvInit ()和 wvInitParser ()两个函数来初始化一个 word
文档并提取其中有关 stream。其中 1Table stream0 的首地址被放在 ps->tablefd
中;(ps 是一个 wvParseStruct 的指针)WordDocument stream 的首地址被放在
ps->mainfd 中。
Word 加密机制
当一个 word 文档被加密后,并不是文档中所有的数据都会被加密,只有
1Table、WordDocument 等带有文本、图片等数据的 stream 才会被加密。(仔细
分析附带光盘中带有注释的 decrypt97.c 的 172~244 行代码,你会发现 Word
加密各个 stream 时使用的是同一个密钥,这一做法也是违反密码学原则的。详
见 《 The Misuse of RC4 in Microsoft Word and Excel 》(下载地址:
http://eprint.iacr.org/2005/007.pdf))请注意 1Table stream,它是我分析
的重点:如果文档被加密了测试有关口令正确与否的信息就存放在该 stream 中。
如图 1 所示:
1Table 中一共有3个16字节的域,其中第一个域中存放的是 salt,用来与
用户输入的口令一起生成加/解密的密钥(计算过程如图 2 所示)。第二个域中存
放的是系统随机产生的一个 128 位的新鲜数被 RC4 加密后的结果。第二个域中的
新鲜数被加密前先将其扩展为一个 64 字节的字节串,然后对所得的 64 位字节串
计算 MD5 hash 的结果,这个 hash 值再被 RC4 加密后被存放在第三个域中。如图
3 所示。
注意,第二个域和第三个域中存放的数据是用来校验用户输入的口令是否正
确的,具体过程如下:当一个被加密的 word 文档被打开时,Word 程序结合用户
输入的口令和第一个域中的 salt 计算出 40 位的决定 RC4 初始化向量的数,再用
它产生 RC4 初始化向量,进而使用 RC4 解出第二个域和第三个域中存放的新鲜数
及其 hash 的明文,Word 将再次计算新鲜数的 MD5 hash,并将其结果与第三个域
中存放的结果相比对,如果二者相同,则说明用户输入了正确的口令;反之,则
说明用户输入了错误的口令。如图 4 所示。
在上述各个图中,为了便于描述和理解,我做了一些简化,即 decrypt97.c
中整个 makekey()函数我直接用一个 符号加以代替了,实际上该函数的处理
过程如图 5 所示。
需要说明的是:在 decrypt97.c 源码中 docid 起的是 salt 的作用,而 salt
和 hashedsalt 实际上是新鲜数及其 hash。命名上有点不规范。但是因为攻击软
件编写过程中援引了 decrypt97.c 中一些代码,所以就将错就错对新鲜数及其
hash 仍然使用了 salt 和 hashedsalt 的名字。
更多内容详见 decrypt97.c 中的注释。
剩余10页未读,继续阅读
资源评论
- zy_strive_20122013-09-09不错哦!很详细,很强大
- hujuanshaoyan2013-02-19还可以,值得一看
- bandit970012012-09-17不错哦!很详细,很强大
秦岭熊猫
- 粉丝: 223
- 资源: 144
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功