翻译:中国科学技术大学信息安全专业老师 一个安全机制在人-机标尺上的位置常常同它的复杂性密切相关,在中心你看到简单的通用机制,而应用通常 要求功能丰富的安全机制。因此,你还必须作出第三个决定 第3个设计决定(决策, decision)你偏爱简单性和更高的保险性( assurance,确信(保证,信心)),还是更 希望一个功能丰富的( feature-rich)安全环境? 这个决定和计算机安全的两难处境相关联,一个简单的通用机制无法满足特殊的保护需要,但是要在一个功能 丰富的安全环境中选择一个合适的选项,用户必须是安全专家,无疑地安全知识缺乏的用户就被置于了一个不利的 位置 为了获得高度的保险性,安全系统必须经过尽可能彻底的详细检查,因此在复杂性和保险性之间显然有一个折 衷。你想要的保险程度越高,你的系统就应该越简单。因此,你将会立即注意到以下原则: 功能丰富的安全系统和高保险性(保证, assurance)是很难相互匹配的 不难理解,高保险性要求遵从系统化的设计原则( practice,惯例:常规:准则)。事实上,计算机安全是较 早利用形式化方法为工具来寻求最高程度保险性的领域之一。 144集中式控制还是分布式控制 在一个安全策略域内,应该执行相同的控制。如果有一个唯一的中央实体负责安全,那么很容易获得一致性, 但是这个中央实体可能成为性能瓶颈。反过来,一个分布式的解决方案可能更有效,但我们必须格外小心,保证不 同的成员执行一致的策略 第4个设计决定(决策, decision)定义和执行安全的任务是应该交给一个中央实体,还是应该托付给系统中 的各个成员? 这个问题出现在分布式系统安全中是很自然的,你将会看到这两种方法的例子。但是,正象 Bell-LaPadula模 型(见4.2)中必选和任选的安全策略所论证的那样,这个问题在大型机系统的环境下也是很有意义的 15下面的层次 到目前为止,我们已经简要地谈到了保险性,但是我们主要研究了为表达最恰当的安全策略所要做的选择。现 在我们该来考虑一下试图绕过我们的保护机制的攻击者了。每一个保护机制定义了一个安全周界(边界,那些失 效后也不会损害保护机制的系统部分位于周界的外部,那些可被用来使保护机制失效的系统部分位于周界的里面 这个观察导致了对142中提出的第二个设计原则的一个直接和重要的扩展 第5个设计决定(决策, decision)你如何防止攻击者访问位于保护机制下面的层次? 可以访问“下面层次”的攻击者处于一个能够摧毁保护机制的位置。比如,如果你在操作系统中获得了系统特 权,通常你就能够改变那些包含有服务层和应用层安全机制控制数据的程序或文件。操作系统的逻辑访问控制可以 通过对物理存储设备的直接访问而绕过去。下面我们将进一步给出5个例子来说明这一点。安全机制有易于攻击的 软肋,并易于遭受来自下面层次的攻击,这些事实表明我们必须关注这些问题,但没有必要为此而悲观失望。当你 达到了一个无法运用计算机安全机制的阶段,或不想使用计算机安全机制时,你仍然能够采取适当的物理的或机构 的安全措施(图1.5) 恢复工具 如果内存的逻辑组织由于某些物理的内存故障而损坏,那文件就无法访问了,即使这些文件的物理表示仍然是 完整的。恢复工具,象诺顿实用程序( Norton Utilities),可通过直接读(物理)内存来帮助恢复数据,进而恢复文件 结构。这样的工具当然也可以用来绕过逻辑访问控制,因为它不关心逻辑存储结构。 Unix设备 Unⅸx将IO设备和物理内存设备作为文件来管理,因此同样的访问控制机制也可用于这些设备,就象用于文件 样。如果访问许可定义得不好,比如将读访问授予一个包含读保护文件的磁盘,那么攻击者就可以读磁盘内容, 然后重建文件。读者可以在第6章Unix安全中找到更多的信息 客体重用(内存释放) 在一个单处理器多道程序设计系统中,几个进程可以被同时执行,但是任何时刻只有一个进程能够“占有”处 理器。任何时候当操作系统挂起一个运行着的进程而去激活下一个进程时,必须执行一个上下文切换,被挂起的进 程以后要继续执行时所需的全部信息必须保存下来,而与新进程相关的信息必须建立起来。出于安全的考虑,必须 避免存储残留,即在分配给新进程的内存区域中遗留数据。这可以通过用一个固定的位模式重写所有被释放的存储 位置或者只允许新进程对它已经写入的存储位置进行读访问来解决。 第6页共36 创建日期:2003-11
翻译:中国科学技术大学信息安全专业老师 第 6 页 共 36 页 创建日期:2003-11 一个安全机制在人-机标尺上的位置常常同它的复杂性密切相关,在中心你看到简单的通用机制,而应用通常 要求功能丰富的安全机制。因此,你还必须作出第三个决定。 第 3 个设计决定(决策,decision) 你偏爱简单性和更高的保险性(assurance,确信(保证,信心)),还是更 希望一个功能丰富的(feature-rich)安全环境? 这个决定和计算机安全的两难处境相关联,一个简单的通用机制无法满足特殊的保护需要,但是要在一个功能 丰富的安全环境中选择一个合适的选项,用户必须是安全专家,无疑地安全知识缺乏的用户就被置于了一个不利的 位置。 为了获得高度的保险性,安全系统必须经过尽可能彻底的详细检查,因此在复杂性和保险性之间显然有一个折 衷。你想要的保险程度越高,你的系统就应该越简单。因此,你将会立即注意到以下原则: 功能丰富的安全系统和高保险性(保证,assurance)是很难相互匹配的。 不难理解,高保险性要求遵从系统化的设计原则(practice,惯例;常规;准则)。事实上,计算机安全是较 早利用形式化方法为工具来寻求最高程度保险性的领域之一。 1.4.4 集中式控制还是分布式控制 在一个安全策略域内,应该执行相同的控制。如果有一个唯一的中央实体负责安全,那么很容易获得一致性, 但是这个中央实体可能成为性能瓶颈。反过来,一个分布式的解决方案可能更有效,但我们必须格外小心,保证不 同的成员执行一致的策略。 第 4 个设计决定(决策,decision) 定义和执行安全的任务是应该交给一个中央实体,还是应该托付给系统中 的各个成员? 这个问题出现在分布式系统安全中是很自然的,你将会看到这两种方法的例子。但是,正象 Bell-LaPadula 模 型(见 4.2)中必选和任选的安全策略所论证的那样,这个问题在大型机系统的环境下也是很有意义的。 1.5 下面的层次 到目前为止,我们已经简要地谈到了保险性,但是我们主要研究了为表达最恰当的安全策略所要做的选择。现 在我们该来考虑一下试图绕过我们的保护机制的攻击者了。每一个保护机制定义了一个安全周界(边界),那些失 效后也不会损害保护机制的系统部分位于周界的外部,那些可被用来使保护机制失效的系统部分位于周界的里面。 这个观察导致了对 1.4.2 中提出的第二个设计原则的一个直接和重要的扩展。 第 5 个设计决定(决策,decision) 你如何防止攻击者访问位于保护机制下面的层次? 可以访问“下面层次”的攻击者处于一个能够摧毁保护机制的位置。比如,如果你在操作系统中获得了系统特 权,通常你就能够改变那些包含有服务层和应用层安全机制控制数据的程序或文件。操作系统的逻辑访问控制可以 通过对物理存储设备的直接访问而绕过去。下面我们将进一步给出 5 个例子来说明这一点。安全机制有易于攻击的 软肋,并易于遭受来自下面层次的攻击,这些事实表明我们必须关注这些问题,但没有必要为此而悲观失望。当你 达到了一个无法运用计算机安全机制的阶段,或不想使用计算机安全机制时,你仍然能够采取适当的物理的或机构 的安全措施(图 1.5)。 恢复工具 如果内存的逻辑组织由于某些物理的内存故障而损坏,那文件就无法访问了,即使这些文件的物理表示仍然是 完整的。恢复工具,象诺顿实用程序(Norton Utilities),可通过直接读(物理)内存来帮助恢复数据,进而恢复文件 结构。这样的工具当然也可以用来绕过逻辑访问控制,因为它不关心逻辑存储结构。 Unix 设备 Unix 将 I/O 设备和物理内存设备作为文件来管理,因此同样的访问控制机制也可用于这些设备,就象用于文件 一样。如果访问许可定义得不好,比如将读访问授予一个包含读保护文件的磁盘,那么攻击者就可以读磁盘内容, 然后重建文件。读者可以在第 6 章 Unix 安全中找到更多的信息。 客体重用(内存释放) 在一个单处理器多道程序设计系统中,几个进程可以被同时执行,但是任何时刻只有一个进程能够“占有”处 理器。任何时候当操作系统挂起一个运行着的进程而去激活下一个进程时,必须执行一个上下文切换,被挂起的进 程以后要继续执行时所需的全部信息必须保存下来,而与新进程相关的信息必须建立起来。出于安全的考虑,必须 避免存储残留,即在分配给新进程的内存区域中遗留数据。这可以通过用一个固定的位模式重写所有被释放的存储 位置或者只允许新进程对它已经写入的存储位置进行读访问来解决
翻译:中国科学技术大学信息安全专业老师 备份 个尽责的系统管理员会定期地进行备份。谁能够得到备份磁带,谁就能够访问磁带上的所有数据。逻辑访问 控制在此毫无帮助,备份磁带必须被安全地锁藏起来以保护数据。 内核转储 当系统崩溃时,它会创建一个其内部状态的内核转储,这样可便于确定崩溃的原因。如果内部状态包含敏感信 息,如密钥,而内核转储存放在一个任何人都可以访问的文件中,那么一个警觉的攻击者可以毫无困难地破坏系统 的安全。 进一步的阅读 如果你想更多地了解计算机安全,你有许多书可以作参考。文献[130提供了对该学科的一个非常通俗易懂的介 绍。如果你想一般性地了解计算机安全,特别是你想更多地了解安全管理,文献[145是一本不错的书。在本领域的 另一个方面,文献[]介绍了计算机安全的理论基础。文献[56详细讨论了设计安全操作系统的技术细节,综述了 Gasser在上世纪80年代建立安全的操作系统的经验。文献[125]对信息安全进行了综合性的介绍,并为进一步阅读 提供了许多有价值的指导。 为进一步阅读与本介绍性章节相关的内容,文献[163]中对访问路径的讨论是特别相关的。这本书还对财务部门 中常用的操作系统的安全特性作了有趣而实用的描述。介绍专用操作系统安全特性的书一般比较昂贵,而且大多关 注与管理这类系统有关的问题,如要调用的窗口及可选择的选项等,对安全实现的方法没有作太多深入的介绍。Park 关于AS/400[12]的书是一个例外,这本书深入讨论了操作系统的技术细节,并且说明了较低层的代码怎样损害由 操作系统提供的安全。关于Umx安全较好的书是[36,50,55162],对于 Windows Nt你可以参考63,13949,象上 面所说的那样,这些书也都有自己相应的读者群。对于更专门的话题,你可以在相关章节的后面找到更多资源的指 为了正确认识一个研究领域的现状,你还应该了解它的历史。文献[156]和口2]是两篇很有影响力的报告,它们 引发了计算机安全中的许多研究。如果你无法得到这些报告,文献[93]提供了对计算机安全早期历史的一个概要 练习题 练习11收集安全概念的定义。可以从美国 TCSEC计划、英国 ITSEC计划和加拿大 CTCPEC网站开始: http://www.radium.ncscmil/tpep/process/fag.html http://ftp.cse-cst.gc.ca/pub/criteria/ctcpec 许多大的IT公司在他们自己的网站上也有关于安全的网页 练习12写一篇短文讨论数据与信息之间的区别,并用你自己的例子证明控制对数据的访问并不一定意味着就是 控制对信息的访问 练习1.3医疗记录引起独特的安全问题。假定你的医疗记录可以被在线访问到,一方面这个信息是敏感的,应该 保护不让泄漏:另一方面在危急情况下,救治你的医生必须能够访问到你的医疗记录。你如何使用预防、发现和恢 复措施来保护你的记录? 练习L.4设计一个安全策略用于保护存放在计算机系统中的考试成绩,你的策略至少应该考虑学生、主讲老师和 管理人员的访问需求。 练习15在你正在使用的计算系统上,找出可能包含安全机制的软件组件。 练习1.6讨论:一个好的图形用户界面是购买安全产品的恰当的判断标准吗? 练习1.7再找出一些例子,说明某一层的安全机制可以被能够访问较低层次的攻击者绕过。 练习L.8确定在分析个人计算机(PC)安全时可能适用的安全周界。在你的分析中,考虑什么时候我们可以正确 地假设放置PC的屋子、PC本身或者PC中的某些安全模块位于安全周界之内。 第二章身份识别与认证 安全系统有时必须检查请求服务的用户的身份,认证就是验证用户身份的过程。用户认证有如下两个理由 ■用户身份是访问控制决策的一个参数 ■在将安全相关事件记入审计日志时,用户身份要被记录下来。 第7页共36 创建日期:2003-11
翻译:中国科学技术大学信息安全专业老师 第 7 页 共 36 页 创建日期:2003-11 备份 一个尽责的系统管理员会定期地进行备份。谁能够得到备份磁带,谁就能够访问磁带上的所有数据。逻辑访问 控制在此毫无帮助,备份磁带必须被安全地锁藏起来以保护数据。 内核转储 当系统崩溃时,它会创建一个其内部状态的内核转储,这样可便于确定崩溃的原因。如果内部状态包含敏感信 息,如密钥,而内核转储存放在一个任何人都可以访问的文件中,那么一个警觉的攻击者可以毫无困难地破坏系统 的安全。 进一步的阅读 如果你想更多地了解计算机安全,你有许多书可以作参考。文献[130]提供了对该学科的一个非常通俗易懂的介 绍。如果你想一般性地了解计算机安全,特别是你想更多地了解安全管理,文献[145]是一本不错的书。在本领域的 另一个方面,文献[1]介绍了计算机安全的理论基础。文献[56]详细讨论了设计安全操作系统的技术细节,综述了 Gasser 在上世纪 80 年代建立安全的操作系统的经验。文献[125]对信息安全进行了综合性的介绍,并为进一步阅读 提供了许多有价值的指导。 为进一步阅读与本介绍性章节相关的内容,文献[163]中对访问路径的讨论是特别相关的。这本书还对财务部门 中常用的操作系统的安全特性作了有趣而实用的描述。介绍专用操作系统安全特性的书一般比较昂贵,而且大多关 注与管理这类系统有关的问题,如要调用的窗口及可选择的选项等,对安全实现的方法没有作太多深入的介绍。Park 关于 AS/400[122]的书是一个例外,这本书深入讨论了操作系统的技术细节,并且说明了较低层的代码怎样损害由 操作系统提供的安全。关于 Unix 安全较好的书是[36,50,55,162],对于 Windows NT 你可以参考[63,139,149],象上 面所说的那样,这些书也都有自己相应的读者群。对于更专门的话题,你可以在相关章节的后面找到更多资源的指 导。 为了正确认识一个研究领域的现状,你还应该了解它的历史。文献[156]和[2]是两篇很有影响力的报告,它们 引发了计算机安全中的许多研究。如果你无法得到这些报告,文献[93]提供了对计算机安全早期历史的一个概要。 练习题 练习 1.1 收集安全概念的定义。可以从美国 TCSEC 计划、英国 ITSEC 计划和加拿大 CTCPEC 网站开始: http://www.radium.ncsc.mil/tpep/process/faq.html http://www.itsec.gov.uk http://ftp.cse-cst.gc.ca/pub/criteria/CTCPEC 许多大的 IT 公司在他们自己的网站上也有关于安全的网页。 练习 1.2 写一篇短文讨论数据与信息之间的区别,并用你自己的例子证明控制对数据的访问并不一定意味着就是 控制对信息的访问。 练习 1.3 医疗记录引起独特的安全问题。假定你的医疗记录可以被在线访问到,一方面这个信息是敏感的,应该 保护不让泄漏;另一方面在危急情况下,救治你的医生必须能够访问到你的医疗记录。你如何使用预防、发现和恢 复措施来保护你的记录? 练习 1.4 设计一个安全策略用于保护存放在计算机系统中的考试成绩,你的策略至少应该考虑学生、主讲老师和 管理人员的访问需求。 练习 1.5 在你正在使用的计算系统上,找出可能包含安全机制的软件组件。 练习 1.6 讨论:一个好的图形用户界面是购买安全产品的恰当的判断标准吗? 练习 1.7 再找出一些例子,说明某一层的安全机制可以被能够访问较低层次的攻击者绕过。 练习 1.8 确定在分析个人计算机(PC)安全时可能适用的安全周界。在你的分析中,考虑什么时候我们可以正确 地假设放置 PC 的屋子、PC 本身或者 PC 中的某些安全模块位于安全周界之内。 第二章 身份识别与认证 安全系统有时必须检查请求服务的用户的身份,认证就是验证用户身份的过程。用户认证有如下两个理由: ■用户身份是访问控制决策的一个参数; ■在将安全相关事件记入审计日志时,用户身份要被记录下来
翻译:中国科学技术大学信息安全专业老师 将访问控制建立在用户身份的基础上并不总是必需的或是合适的,然而在审计日志中使用身份却有非常充分的 理由。本章研究身份识别和认证,因为它是目前计算机系统的标准。分布式系统中的认证是第十章的内容。 目标 ■重温一种相当熟悉的机制,以此来了解一些一般性的经验, ■获得口令保护的入门知识。 ■懂得安全机制有赖于管理措施才能有效实施。 ■理解在计算机安全中使用抽象的危险性。 21用户名和口令 确切地说,你接触计算机安全是从你注册到一台计算机上并被要求输入你的用户名和口令开始的。第一步称为 识别,声明你是谁;第二步称为认证,你证明你就是你所声称的那个人。为了将“认证”这个词的用法与其他解释 区分开来,我们特别指: 实体认证验证一个被声称的身份的过程 旦你输入了用户名和口令,计算机就把你的输入和存在口令文件中的相应条目进行比较。当你输入了一个有 效的用户名和相应的口令后,注册就成功了。如果用户名或口令不正确,注册失败。通常注册画面会再次显示出来 你可以重试一次。有些系统记录失败的注册次数,并当次数达到某门限值时锁住用户帐号。为了减少攻击者使用已 有用户注册但无人看管的计算机的可能性,可以不仅在会话开始时要求认证,也可以在会话期间定期要求认证(重 复认证)。你也可以选择锁住屏幕,或当某个用户空闲太久时自动关闭其会话。 重复认证解决了计算机安全中一个熟悉的问题,称为 TOCTTOU( time of check to time of use),即操作系统在 会话开始时检査用户的身份,而随后在会话过程中使用身份作访问控制决策。 以前,你可能会在一个包含友好欢迎词和你将要使用的某些系统信息的屏幕上输入用户名和口令。如今,警惕 的系统管理员不会让外界获得太多的信息,并且将欢迎词换成了警告非授权用户不要进入。比如, Windows nr提 供有一个显示法律公告的选项,用户必须接受这些警告信息,注册才能进行下去 今天,大多数计算机系统使用基于用户名和口令的身份识别和认证作为它们的第一道防线。对于大多数用户来 说,这个机制己经成为在计算机上启动一个会话过程所不可缺少的组成部分。这样,我们就有了一个广泛接受而又 不难实现的机制:然而另一方面,获取有效的口令又是获得对计算机系统未授权访问的一种极其普通的方法。因此, 让我们来分析一下作为认证机制的口令的实际安全性。我们将考虑以下三种威胁: 口令猜测 口令欺骗 口令文件泄漏 不要忘了用户在口令保护中起着重要的作用。当你泄漏了口令,比如告诉了同事,或者写在便笺上并贴在计算 机上,都会危及到认证的安全。 22选择口令 口令选择是一个重要的安全问题。尽管你无法完全避免攻击者意外地猜测出有效的口令,但你可以努力使这种 事件的发生率尽可能的低。为说明如何做,你必须知道攻击者基本上遵循以下两种猜测策略: 穷尽搜索(强力):尝试有效符号所有可能的组合,直到一定的长度 智能搜索:通过一个受限的名字空间进行搜索,比如,尝试那些与用户有联系的口令,像名字、朋友和亲戚的 名字、汽车商标、车牌号、电话号码等,或者尝试那些较常流行的口令。这种方法的一个典型例子是字典政击,它 尝试来自于一个在线字典的所有口令。 那么,你的防卫措施是什么? ■设置口令:如果系统管理员或者用户忘了为用户帐户设置口令,攻击者甚至免除了猜测口令的麻烦 ■改变缺省口令:当系统被交付使用时,它们通常带有缺省的帐户,像具有缺省口令 manager(“管理员”)的 缺省帐户 system(“系统”)。这有助于现场工程师安装系统,但是如果口令不改,攻击者可以很容易地进入 系统。在刚才举的例子中,攻击者甚至可以获得一个非常有特权的帐户 ■口令长度:为了挫败穷尽搜索,必须规定一个最小口令长度。不幸的是,许多Unⅸx系统的最大口令长度只 设到8个字符而已。 ■口令格式:在你的口令中混合使用大、小写字母,并且包含数字和其他非字母符号 第8页共36 创建日期:2003-11
翻译:中国科学技术大学信息安全专业老师 第 8 页 共 36 页 创建日期:2003-11 将访问控制建立在用户身份的基础上并不总是必需的或是合适的,然而在审计日志中使用身份却有非常充分的 理由。本章研究身份识别和认证,因为它是目前计算机系统的标准。分布式系统中的认证是第十章的内容。 目标 ■重温一种相当熟悉的机制,以此来了解一些一般性的经验。 ■获得口令保护的入门知识。 ■懂得安全机制有赖于管理措施才能有效实施。 ■理解在计算机安全中使用抽象的危险性。 2.1 用户名和口令 确切地说,你接触计算机安全是从你注册到一台计算机上并被要求输入你的用户名和口令开始的。第一步称为 识别,声明你是谁;第二步称为认证,你证明你就是你所声称的那个人。为了将“认证”这个词的用法与其他解释 区分开来,我们特别指: 实体认证 验证一个被声称的身份的过程。 一旦你输入了用户名和口令,计算机就把你的输入和存在口令文件中的相应条目进行比较。当你输入了一个有 效的用户名和相应的口令后,注册就成功了。如果用户名或口令不正确,注册失败。通常注册画面会再次显示出来, 你可以重试一次。有些系统记录失败的注册次数,并当次数达到某门限值时锁住用户帐号。为了减少攻击者使用已 有用户注册但无人看管的计算机的可能性,可以不仅在会话开始时要求认证,也可以在会话期间定期要求认证(重 复认证)。你也可以选择锁住屏幕,或当某个用户空闲太久时自动关闭其会话。 重复认证解决了计算机安全中一个熟悉的问题,称为 TOCTTOU(time of check to time of use),即操作系统在 会话开始时检查用户的身份,而随后在会话过程中使用身份作访问控制决策。 以前,你可能会在一个包含友好欢迎词和你将要使用的某些系统信息的屏幕上输入用户名和口令。如今,警惕 的系统管理员不会让外界获得太多的信息,并且将欢迎词换成了警告非授权用户不要进入。比如,Windows NT 提 供有一个显示法律公告的选项,用户必须接受这些警告信息,注册才能进行下去。 今天,大多数计算机系统使用基于用户名和口令的身份识别和认证作为它们的第一道防线。对于大多数用户来 说,这个机制已经成为在计算机上启动一个会话过程所不可缺少的组成部分。这样,我们就有了一个广泛接受而又 不难实现的机制;然而另一方面,获取有效的口令又是获得对计算机系统未授权访问的一种极其普通的方法。因此, 让我们来分析一下作为认证机制的口令的实际安全性。我们将考虑以下三种威胁: ■口令猜测 ■口令欺骗 ■口令文件泄漏 不要忘了用户在口令保护中起着重要的作用。当你泄漏了口令,比如告诉了同事,或者写在便笺上并贴在计算 机上,都会危及到认证的安全。 2.2 选择口令 口令选择是一个重要的安全问题。尽管你无法完全避免攻击者意外地猜测出有效的口令,但你可以努力使这种 事件的发生率尽可能的低。为说明如何做,你必须知道攻击者基本上遵循以下两种猜测策略: 穷尽搜索(强力):尝试有效符号所有可能的组合,直到一定的长度。 智能搜索:通过一个受限的名字空间进行搜索,比如,尝试那些与用户有联系的口令,像名字、朋友和亲戚的 名字、汽车商标、车牌号、电话号码等,或者尝试那些较常流行的口令。这种方法的一个典型例子是字典攻击,它 尝试来自于一个在线字典的所有口令。 那么,你的防卫措施是什么? ■设置口令:如果系统管理员或者用户忘了为用户帐户设置口令,攻击者甚至免除了猜测口令的麻烦。 ■改变缺省口令:当系统被交付使用时,它们通常带有缺省的帐户,像具有缺省口令 manager(“管理员”)的 缺省帐户 system(“系统”)。这有助于现场工程师安装系统,但是如果口令不改,攻击者可以很容易地进入 系统。在刚才举的例子中,攻击者甚至可以获得一个非常有特权的帐户。 ■口令长度:为了挫败穷尽搜索,必须规定一个最小口令长度。不幸的是,许多 Unix 系统的最大口令长度只 设到 8 个字符而已。 ■口令格式:在你的口令中混合使用大、小写字母,并且包含数字和其他非字母符号
翻译:中国科学技术大学信息安全专业老师 ■避免易于猜测的口令:当你发现攻击者配备有流行口令的清单,并且字典攻击已经大大扩展了“易于猜测” 的范围时,你不要觉得吃惊。今天,几乎针对每一种语言你都可以找到一本在线字典。 系统怎样进一步地帮助改善口令的安全性呢? ■口令检査器:作为一个系统管理员,你可以使用针对某些“脆弱”口令字典的口令检查工具来检查口令。这 样可以模仿并先发制人地对付针对系统的字典攻击。 ■口令生成:某些操作系统包含有口令发生器,能够生成随机的和可发音的口令。用户不允许选择自己的口令 而必须采用系统建议的口令 ■口令老化:许多系统可以设置口令到期的日期,迫使用户定期改变口令。可以有附加机制防止用户回复到老 的口令,比如,使用一个保存有最近用过的10个口令的列表。当然,通过足够多次的改变直至老的口令又 被接受,坚定的用户还是能够回复到他们喜爱的口令的 ■限制注册尝试:系统可以监视不成功的注册企图并作出反应,完全锁住用户帐户,或至少锁住一段时间,以 防止或阻止进一步的尝试 ■通知用户:在成功注册之后,系统可以显示上一次注册的时间以及从那以后失败的注册企图次数,从而提醒 用户有关最近的攻击企图。 依照刚才所说的,似乎只要用户使用由系统产生的长口令、口令中混合使用大小写字母和数字符号、并定期改 变口令,我们就可以获得最高的安全性。这种方法真的奏效吗?在实际中我们获得希望的安全性了吗? 用户不太可能记住长而复杂的口令,因而,这样的口令将被记在纸上,并放在靠近计算机的地方,而这对合法 用户和潜在的入侵者都是最有用的,因此留心贴在计算机终端上的口令是安全管理员的本职工作。当口令频繁改变 时也有类似需要考虑的问题。发现难以按照这种严格的口令管理方案去做的用户,可能试探着去使用更易于记忆从 而也更易于被猜测的口令。他们可能很快回复到他们喜爱的口令,或对口令作一些简单的和易于推断的改变。比如 如果你必须每个月改变口令,将月份(两个数字,从1到12,或三个字母,从JAN到DEC,依你的选择)加到你 所选择的口令上,就提供了你可以记住的口令。当然,攻击者只要发现了其中的一个口令,他就很容易猜测下一个。 还有另外一个方面的问题你必须考虑。假定你的用户非常认真地采取了所有的安全预防措施,避免使用易于猜 测的脆弱口令,不把口令写下来,但是不可避免地经常忘记口令,这会影响用户的工作。为了获得一个新的口令, 用户必须同系统管理员联系,这又会影响系统管理员的工作,并为新的攻击开辟途径。如果用户和系统管理员不能 亲自见面,他们可能需要通过电话协商新的口令。系统管理员能够正确地认证用户吗?威逼操作员发布口令被证明 是一种可靠的侵入系统的方法。成功的攻击更多地依赖于社交能力而不是技术的精巧 你一定不能孤立地考虑安全机制。事实上,在一种安全机制上强调太多可能会削弱系统,因为至少用户会找出 绕过安全机制的途径去做他们的工作。通过口令,你已经注意到口令的复杂性和人的记忆本领之间的折衷。 23欺骗攻击 通过用户名和口令的身份识别和认证提供了单向认证( unilateral,一方的(单向的)。用户输入口令,计算机验 证用户的身份。但是,用户知道谁接收了这个口令吗?到目前为止,这个答案是否定的。用户不能保证线路另一端 当事人的身份 这是一个现实的问题,它导致了第二种类型的口令泄漏。在欺骗攻击中,攻击者(他可能是一个合法用户)运行 一个程序,在某些终端或工作站上给出一个假的注册画面。一个毫无戒备的用户来到这个终端试图注册。这个受害 者通过标准注册菜单的引导被要求输入用户名和口令,这些信息被攻击者保存下来。然后执行可能被移交给用户 或者用一个(假的)出错消息中止注册,欺骗程序终止运行。控制被返回到操作系统,操作系统用一个真的注册请 求提示用户,用户重试,第二次注册成功,并可能完全不知道口令已经泄漏的事实。针对这样的欺骗攻击该怎么办 呢? ■显示失败的注册次数可以暗示用户已经发生过这样的攻击。如果你的第一次注册失败了,但在你进行第二次 注册时,你被告知自上一次会话以来没有不成功的注册,那么你就应该有所怀疑了。 ■可信任路径:保证用户是与操作系统通信而不是与一个欺骗程序在通信。比如, Windows nt有一个安全注 意序列CIRL+ALT+DEL,它调用 Windows nt的操作系统注册画面。你应该按这样的安全注意键开始一个 会话,即使这时屏幕上已经显示了注册画面 ■相互认证:如果用户要求更有力地确信与之通信的系统的身份,如在一个分布式系统中,那么可以要求系统 向用户认证自己。 除了欺骗攻击,入侵者还可以有其他“找到”口令的方法。上面我们对于注册的描述是相当抽象的,口令直接 第9页共36 创建日期:2003-11
翻译:中国科学技术大学信息安全专业老师 第 9 页 共 36 页 创建日期:2003-11 ■避免易于猜测的口令:当你发现攻击者配备有流行口令的清单,并且字典攻击已经大大扩展了“易于猜测” 的范围时,你不要觉得吃惊。今天,几乎针对每一种语言你都可以找到一本在线字典。 系统怎样进一步地帮助改善口令的安全性呢? ■口令检查器:作为一个系统管理员,你可以使用针对某些“脆弱”口令字典的口令检查工具来检查口令。这 样可以模仿并先发制人地对付针对系统的字典攻击。 ■口令生成:某些操作系统包含有口令发生器,能够生成随机的和可发音的口令。用户不允许选择自己的口令, 而必须采用系统建议的口令。 ■口令老化:许多系统可以设置口令到期的日期,迫使用户定期改变口令。可以有附加机制防止用户回复到老 的口令,比如,使用一个保存有最近用过的 10 个口令的列表。当然,通过足够多次的改变直至老的口令又 被接受,坚定的用户还是能够回复到他们喜爱的口令的。 ■限制注册尝试:系统可以监视不成功的注册企图并作出反应,完全锁住用户帐户,或至少锁住一段时间,以 防止或阻止进一步的尝试。 ■通知用户:在成功注册之后,系统可以显示上一次注册的时间以及从那以后失败的注册企图次数,从而提醒 用户有关最近的攻击企图。 依照刚才所说的,似乎只要用户使用由系统产生的长口令、口令中混合使用大小写字母和数字符号、并定期改 变口令,我们就可以获得最高的安全性。这种方法真的奏效吗?在实际中我们获得希望的安全性了吗? 用户不太可能记住长而复杂的口令,因而,这样的口令将被记在纸上,并放在靠近计算机的地方,而这对合法 用户和潜在的入侵者都是最有用的,因此留心贴在计算机终端上的口令是安全管理员的本职工作。当口令频繁改变 时也有类似需要考虑的问题。发现难以按照这种严格的口令管理方案去做的用户,可能试探着去使用更易于记忆从 而也更易于被猜测的口令。他们可能很快回复到他们喜爱的口令,或对口令作一些简单的和易于推断的改变。比如, 如果你必须每个月改变口令,将月份(两个数字,从 1 到 12,或三个字母,从 JAN 到 DEC,依你的选择)加到你 所选择的口令上,就提供了你可以记住的口令。当然,攻击者只要发现了其中的一个口令,他就很容易猜测下一个。 还有另外一个方面的问题你必须考虑。假定你的用户非常认真地采取了所有的安全预防措施,避免使用易于猜 测的脆弱口令,不把口令写下来,但是不可避免地经常忘记口令,这会影响用户的工作。为了获得一个新的口令, 用户必须同系统管理员联系,这又会影响系统管理员的工作,并为新的攻击开辟途径。如果用户和系统管理员不能 亲自见面,他们可能需要通过电话协商新的口令。系统管理员能够正确地认证用户吗?威逼操作员发布口令被证明 是一种可靠的侵入系统的方法。成功的攻击更多地依赖于社交能力而不是技术的精巧。 你一定不能孤立地考虑安全机制。事实上,在一种安全机制上强调太多可能会削弱系统,因为至少用户会找出 绕过安全机制的途径去做他们的工作。通过口令,你已经注意到口令的复杂性和人的记忆本领之间的折衷。 2.3 欺骗攻击 通过用户名和口令的身份识别和认证提供了单向认证(unilateral,一方的(单向的))。用户输入口令,计算机验 证用户的身份。但是,用户知道谁接收了这个口令吗?到目前为止,这个答案是否定的。用户不能保证线路另一端 当事人的身份。 这是一个现实的问题,它导致了第二种类型的口令泄漏。在欺骗攻击中,攻击者(他可能是一个合法用户)运行 一个程序,在某些终端或工作站上给出一个假的注册画面。一个毫无戒备的用户来到这个终端试图注册。这个受害 者通过标准注册菜单的引导被要求输入用户名和口令,这些信息被攻击者保存下来。然后执行可能被移交给用户, 或者用一个(假的)出错消息中止注册,欺骗程序终止运行。控制被返回到操作系统,操作系统用一个真的注册请 求提示用户,用户重试,第二次注册成功,并可能完全不知道口令已经泄漏的事实。针对这样的欺骗攻击该怎么办 呢? ■显示失败的注册次数可以暗示用户已经发生过这样的攻击。如果你的第一次注册失败了,但在你进行第二次 注册时,你被告知自上一次会话以来没有不成功的注册,那么你就应该有所怀疑了。 ■可信任路径:保证用户是与操作系统通信而不是与一个欺骗程序在通信。比如,Windows NT 有一个安全注 意序列 CTRL+ALT+DEL,它调用 Windows NT 的操作系统注册画面。你应该按这样的安全注意键开始一个 会话,即使这时屏幕上已经显示了注册画面。 ■相互认证:如果用户要求更有力地确信与之通信的系统的身份,如在一个分布式系统中,那么可以要求系统 向用户认证自己。 除了欺骗攻击,入侵者还可以有其他“找到”口令的方法。上面我们对于注册的描述是相当抽象的,口令直接
翻译:中国科学技术大学信息安全专业老师 从用户传递给口令检查例程。实际上,口令会被临时存放在中间存储位置,如缓冲器、高速缓存,或者甚至是一个 网页。这些存储位置的管理通常超出用户的可控范围,而口令在这些位置的存放时间可能会比用户预料的要长 在开发基于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 的口令安全已被突破了。听上去很严重,是吗?实际情况是发布了一个程序,能将加密的口令从二进 制格式转换成另一种易于阅读的表示形式。激动之余发现根本不是什么大事情。 如果你担心字典攻击,但又不能隐藏口令文件,你可以考虑口令加盐。当一个口令需要加密保存时,加密前将 一些附加信息(盐)附加到口令上,盐同加密的口令保存在一起。如果两个用户有相同的口令,它们在加密口令的 文件中将有不同的表项。加盐减慢了字典攻击的速度,因为不可能同时搜索几个用户的口令。 你已经看到了三个安全设计的问题: