正在加载图片...
翻译:中国科学技术大学信息安全专业老师 从用户传递给口令检查例程。实际上,口令会被临时存放在中间存储位置,如缓冲器、高速缓存,或者甚至是一个 网页。这些存储位置的管理通常超出用户的可控范围,而口令在这些位置的存放时间可能会比用户预料的要长 在开发基于web的在线银行服务{5]时,开发者遇到的一个问题很好地说明了这一点。Web浏览器会缓存信息 以便用户能够返回到他们最近访问过的页面。为使用在线银行服务,你在一个web页上输入你的口令。你处理完你 的事务,关闭银行应用,但是没有终止浏览器进程。该终端上的下一个用户能够回退到有你口令的那一页,并以你 的名义注册。 作为一种防范措施,建议在完成银行事务后退出浏览器。注意到现在用户被要求参与到内存管理活动中来,这 在其他地方是不会涉及到的。这是客体重用(见1.5)的又一个例子 抽象是有用的,同时又是危险的。用抽象的术语来讨论口令安全是有用的;你可以研究关于口令格式或口令老 化的策略,而不需要知道在你的IT系统中口令是怎么处理的。仅在这样抽象的层次上讨论口令安全是危险的,实 现方面的缺陷会损害最好的安全策略。 24保护口令文件 为了验证用户的身份,系统将用户输入的口令同保存在口令文件中的一个值进行比较。对于攻击者来说,这样 的口令文件当然是极具吸引力的一个目标。未加密的口令文件内容的泄漏或者对口令文件内容的修改,构成了口令 泄漏的第三种可能。你甚至可能还要关心加密口令的泄漏,那样字典攻击可以离线进行,而象(像)限制失败的注 册次数这样的保护措施将不会起作用。为保护口令文件,我们可以有以下选择: 密码保护, ■操作系统执行访问控制, ■密码保护和访问控制相结合,或者可能有更强的保护措施来减慢字典攻击的速度 对于密码保护,我们甚至不需要加密算法,有一个单向函数就行了。目前,你可以使用以下的初步定义 单向函数就是易于计算但很难逆推的函数,也就是说,给定x很容易计算f(x),但给定f(x)很难计算x。 第12章有关于单向函数的更详细的介绍。单向函数早就用于保护存储的口令了([158],p91f),口令文件中 保存的不是口令x而是f(x)。当用户注册并输入口令(设为x)时,系统调用单向函数f,并将f(x)与用户的fx) 相比较,如果两个值相同,用户就被成功认证。下面我们将使用“加密的”口令这个词,即使实际上我们只是对口 令使用了一个单向函数 如果不担心字典攻击的话,口令文件现在谁都可以看了。如果f是一个真正的单向函数,从x)重建口令x是 不可行的。在字典政击中,攻击者“加密”字典中的所有单词,并与口令文件中的各个加密表项进行比较,如果找 到匹配的表项,攻击者就知道了那个用户的口令。单向函数可以用来减慢字典攻击的速度,这种考虑指导了在Unx 系统中选择使用单向函数 crypt3),该函数使用略加修改的DES算法,用全零的数据块作为初始值,用口令作为密 钥,重复运行算法25次[104]。当然,这会给合法用户注册带来一点点性能损失,但是如果你优化了单向函数的速 度,你同时也提高了字典攻击的性能 操作系统中的访问控制机制只允许拥有适当权限的用户访问文件和其他资源。只有特权用户才能写口令文件, 否则的话,即使口令被加密保护了,攻击者也可以简单地通过修改用户的口令来访问这些用户的数据。如果只有特 权用户才能读口令文件,那么从理论上说口令可以不用加密保存。如果口令文件中包含了非特权用户也需要的信息 那么口令文件必须包含加密的口令。然而,这样的文件仍然可被用于字典攻击,一个典型的例子是Unx的 etc/ passwd。因此,最近的Unx版本将加密的口令保存在一个不可公开访问的文件中,这样的文件被称为影子口令 文件 (shadow password files)。比如,HPUX可以使用一个影子口令文件 secure/etc/passwd 专用存储格式提供了一种较弱的读保护形式,比如 Windows nt以专门的二进制格式保存加密的口令。一般用 户的攻击企图会被挫败,但是一个意志坚定的攻击者将能获得或推断出必要的信息,从而找到安全相关数据存储的 位置。“通过隐匿而获得的安全性”本身不是非常强壮,但可以把它加到其他机制上,如口令加密。 但是,存在着这样一种危险,就是对这种外围防线的成功突破会摧毁其他所有的部分。1997年初,有人声称 Windows nt的口令安全已被突破了。听上去很严重,是吗?实际情况是发布了一个程序,能将加密的口令从二进 制格式转换成另一种易于阅读的表示形式。激动之余发现根本不是什么大事情。 如果你担心字典攻击,但又不能隐藏口令文件,你可以考虑口令加盐。当一个口令需要加密保存时,加密前将 些附加信息(盐)附加到口令上,盐同加密的口令保存在一起。如果两个用户有相同的口令,它们在加密口令的 文件中将有不同的表项。加盐减慢了字典攻击的速度,因为不可能同时搜索几个用户的口令。 你已经看到了三个安全设计的问题: 第10页共36页创建日期:2003-11翻译:中国科学技术大学信息安全专业老师 第 10 页 共 36 页 创建日期:2003-11 从用户传递给口令检查例程。实际上,口令会被临时存放在中间存储位置,如缓冲器、高速缓存,或者甚至是一个 网页。这些存储位置的管理通常超出用户的可控范围,而口令在这些位置的存放时间可能会比用户预料的要长。 在开发基于 web 的在线银行服务[5]时,开发者遇到的一个问题很好地说明了这一点。Web 浏览器会缓存信息, 以便用户能够返回到他们最近访问过的页面。为使用在线银行服务,你在一个 web 页上输入你的口令。你处理完你 的事务,关闭银行应用,但是没有终止浏览器进程。该终端上的下一个用户能够回退到有你口令的那一页,并以你 的名义注册。 作为一种防范措施,建议在完成银行事务后退出浏览器。注意到现在用户被要求参与到内存管理活动中来,这 在其他地方是不会涉及到的。这是客体重用(见 1.5)的又一个例子。 抽象是有用的,同时又是危险的。用抽象的术语来讨论口令安全是有用的;你可以研究关于口令格式或口令老 化的策略,而不需要知道在你的 IT 系统中口令是怎么处理的。仅在这样抽象的层次上讨论口令安全是危险的,实 现方面的缺陷会损害最好的安全策略。 2.4 保护口令文件 为了验证用户的身份,系统将用户输入的口令同保存在口令文件中的一个值进行比较。对于攻击者来说,这样 的口令文件当然是极具吸引力的一个目标。未加密的口令文件内容的泄漏或者对口令文件内容的修改,构成了口令 泄漏的第三种可能。你甚至可能还要关心加密口令的泄漏,那样字典攻击可以离线进行,而象(像)限制失败的注 册次数这样的保护措施将不会起作用。为保护口令文件,我们可以有以下选择: ■密码保护, ■操作系统执行访问控制, ■密码保护和访问控制相结合,或者可能有更强的保护措施来减慢字典攻击的速度。 对于密码保护,我们甚至不需要加密算法,有一个单向函数就行了。目前,你可以使用以下的初步定义: 单向函数就是易于计算但很难逆推的函数,也就是说,给定 x 很容易计算 f(x),但给定 f(x)很难计算 x。 第 12 章有关于单向函数的更详细的介绍。单向函数早就用于保护存储的口令了([158],p.91ff),口令文件中 保存的不是口令 x 而是 f(x)。当用户注册并输入口令(设为 x')时,系统调用单向函数 f,并将 f(x')与用户的 f(x) 相比较,如果两个值相同,用户就被成功认证。下面我们将使用“加密的”口令这个词,即使实际上我们只是对口 令使用了一个单向函数。 如果不担心字典攻击的话,口令文件现在谁都可以看了。如果 f 是一个真正的单向函数,从 f(x)重建口令 x 是 不可行的。在字典攻击中,攻击者“加密”字典中的所有单词,并与口令文件中的各个加密表项进行比较,如果找 到匹配的表项,攻击者就知道了那个用户的口令。单向函数可以用来减慢字典攻击的速度,这种考虑指导了在 Unix 系统中选择使用单向函数 crypt(3),该函数使用略加修改的 DES 算法,用全零的数据块作为初始值,用口令作为密 钥,重复运行算法 25 次[104]。当然,这会给合法用户注册带来一点点性能损失,但是如果你优化了单向函数的速 度,你同时也提高了字典攻击的性能。 操作系统中的访问控制机制只允许拥有适当权限的用户访问文件和其他资源。只有特权用户才能写口令文件, 否则的话,即使口令被加密保护了,攻击者也可以简单地通过修改用户的口令来访问这些用户的数据。如果只有特 权用户才能读口令文件,那么从理论上说口令可以不用加密保存。如果口令文件中包含了非特权用户也需要的信息, 那么口令文件必须包含加密的口令。然而,这样的文件仍然可被用于字典攻击,一个典型的例子是 Unix 的 /etc/passwd。因此,最近的 Unix 版本将加密的口令保存在一个不可公开访问的文件中,这样的文件被称为影子口令 文件(shadow password files)。比如,HP-UX 可以使用一个影子口令文件/.secure/etc/passwd。 专用存储格式提供了一种较弱的读保护形式,比如 Windows NT 以专门的二进制格式保存加密的口令。一般用 户的攻击企图会被挫败,但是一个意志坚定的攻击者将能获得或推断出必要的信息,从而找到安全相关数据存储的 位置。“通过隐匿而获得的安全性”本身不是非常强壮,但可以把它加到其他机制上,如口令加密。 但是,存在着这样一种危险,就是对这种外围防线的成功突破会摧毁其他所有的部分。1997 年初,有人声称 Windows NT 的口令安全已被突破了。听上去很严重,是吗?实际情况是发布了一个程序,能将加密的口令从二进 制格式转换成另一种易于阅读的表示形式。激动之余发现根本不是什么大事情。 如果你担心字典攻击,但又不能隐藏口令文件,你可以考虑口令加盐。当一个口令需要加密保存时,加密前将 一些附加信息(盐)附加到口令上,盐同加密的口令保存在一起。如果两个用户有相同的口令,它们在加密口令的 文件中将有不同的表项。加盐减慢了字典攻击的速度,因为不可能同时搜索几个用户的口令。 你已经看到了三个安全设计的问题:
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有