翻译:中国科学技术大学信息安全专业老师 第一部分基础知识 第一章准备 在对计算机安全进行有针对性的讨论之前,我们必须先定义这个研究领域,必须有一些通用的准则来帮助我们 将今天可能遇到的大量概念和安全机制进行分类整理。因此,我们的第一项任务就是要寻找“计算机安全”的定义。 为避免孤立地讨论一个个单独的安全系统,我们将提出一组通用的工程性原则,这组原则可用于指导安全的信息处 理系统的设计。我们鼓励大家在阅读本书时,时刻留心书中所介绍的各类安全系统中的这些原则 「标 ■提出计算机安全的一种定义,介绍机密性、完整性和可用性 解释计算机安全最根本的一个两难处境。 简述在构造安全系统时通常必须做出的一些设计决定 ■指出计算机安全机制必须依赖于有效的物理或机构保护措施。 1.1定义 按照一种良好的学术传统,我们将通过定义我们的研究目标来开始我们的研究,至少我们会努力这么做。计算 机安全研究在计算机系统中维护安全所使用的技术。我们不打算去区分计算机系统(不确切地说,内有处理器和存 储器的装置)和信息技术(IT)系统(不确切地说,紧密耦合的计算机系统网络),因为随着技术的不断飞速发展 现代的计算机已经是一种由各部件紧密耦合而成的网络了,曾经是应用程序的软件也可能成为操作系统的一部分。 web浏览器就是当前这种趋势的一个鲜明例子,在你机器上运行的软件不需要存储在你的机器上,它可以来自于 个本地服务器,或者甚至来自于 Internet上的一个web服务器。因此,你可以将“计算机安全”和“IT安全”作为 同义词来使用,而不会引起太多的误解 乍一看,计算机安全好象是一个相当显而易见的概念。然而不幸的是,安全属于这样一类概念,当你试图讲清 楚它的确切含义的时候,它似乎离显而易见越来越远了。在起草计算机安全的定义以及随后对这些定义进行修正方 面已经做了大量的努力。但是这些文档的编写者几乎无一例外地都被批评为眼光过于狭窄,或过多地介入了从严格 意义上来说不属于计算机安全的一些计算机科学领域 111安全 安全是关于财产的保护。这个定义意味着你必须知道你的财产和它们的价值。这种带有普遍性的看法当然也适 用于计算机安全,因此风险分析也是综合性的信息安全策略的一部分。但是,这个话题不在本书的范围之内,本书 的重点在于保护措施。对保护措施的一种大致的分类如下 ■预防:采取措施防止你的财产遭到破坏。 ■发现:采取措施使你能够发觉什么时候财产被破坏了,它是怎么被破坏的,以及是谁造成的破坏。 ■反应:采取措施使你能够重新获得财产,或者使财产从破坏中恢复。 为了说明这一点,考虑你家中贵重物品的保护 ■预防:门窗上的锁,使盗贼难以闯入你家:保护家产的墙,或者在中世纪可以増加另一层保护,就是城堡的 护城河。 ■发现:当某样东西不在那儿了,你将会发现它被偷了;当入室事件发生时报警器响了(希望如此);闭路电 视提供的信息可以确定入侵者。 ■反应:你可以打电话报警:你可能决定替换被偷的物品:警察可能追回被偷的物品并送还给你 来自物理世界的例子有助于解释计算机安全的原则,然而,将物理安全与计算机安全进行类比并不总是可能的 或是可取的,事实上,有些术语应用于信息技术环境时很容易引起误解。举一个与我们讨论的领域有密切关系的例 子,考虑使用信用卡号码在 Internet上购物。一个骗子可能使用你的信用卡号码购物,而费用从你卡上扣除。你怎 么来保护你自己呢? ■预防:下订单时使用密码;依靠贸易商行在接受信用卡购物订单前对购物者进行某些检査;不要在 Internet 上使用你的卡号。 ■发现: 项你没有授权的交易出现在你的信用卡帐单上。 第1页共36页创建日期:2003-11
翻译:中国科学技术大学信息安全专业老师 第 1 页 共 36 页 创建日期:2003-11 第一部分 基础知识 第一章 准 备 在对计算机安全进行有针对性的讨论之前,我们必须先定义这个研究领域,必须有一些通用的准则来帮助我们 将今天可能遇到的大量概念和安全机制进行分类整理。因此,我们的第一项任务就是要寻找“计算机安全”的定义。 为避免孤立地讨论一个个单独的安全系统,我们将提出一组通用的工程性原则,这组原则可用于指导安全的信息处 理系统的设计。我们鼓励大家在阅读本书时,时刻留心书中所介绍的各类安全系统中的这些原则。 目标 ■提出计算机安全的一种定义,介绍机密性、完整性和可用性。 ■解释计算机安全最根本的一个两难处境。 ■简述在构造安全系统时通常必须做出的一些设计决定。 ■指出计算机安全机制必须依赖于有效的物理或机构保护措施。 1.1 定义 按照一种良好的学术传统,我们将通过定义我们的研究目标来开始我们的研究,至少我们会努力这么做。计算 机安全研究在计算机系统中维护安全所使用的技术。我们不打算去区分计算机系统(不确切地说,内有处理器和存 储器的装置)和信息技术(IT)系统(不确切地说,紧密耦合的计算机系统网络),因为随着技术的不断飞速发展, 现代的计算机已经是一种由各部件紧密耦合而成的网络了,曾经是应用程序的软件也可能成为操作系统的一部分。 Web 浏览器就是当前这种趋势的一个鲜明例子,在你机器上运行的软件不需要存储在你的机器上,它可以来自于一 个本地服务器,或者甚至来自于 Internet 上的一个 web 服务器。因此,你可以将“计算机安全”和“IT 安全”作为 同义词来使用,而不会引起太多的误解。 乍一看,计算机安全好象是一个相当显而易见的概念。然而不幸的是,安全属于这样一类概念,当你试图讲清 楚它的确切含义的时候,它似乎离显而易见越来越远了。在起草计算机安全的定义以及随后对这些定义进行修正方 面已经做了大量的努力。但是这些文档的编写者几乎无一例外地都被批评为眼光过于狭窄,或过多地介入了从严格 意义上来说不属于计算机安全的一些计算机科学领域。 1.1.1 安全 安全是关于财产的保护。这个定义意味着你必须知道你的财产和它们的价值。这种带有普遍性的看法当然也适 用于计算机安全,因此风险分析也是综合性的信息安全策略的一部分。但是,这个话题不在本书的范围之内,本书 的重点在于保护措施。对保护措施的一种大致的分类如下: ■预防:采取措施防止你的财产遭到破坏。 ■发现:采取措施使你能够发觉什么时候财产被破坏了,它是怎么被破坏的,以及是谁造成的破坏。 ■反应:采取措施使你能够重新获得财产,或者使财产从破坏中恢复。 为了说明这一点,考虑你家中贵重物品的保护。 ■预防:门窗上的锁,使盗贼难以闯入你家;保护家产的墙,或者在中世纪可以增加另一层保护,就是城堡的 护城河。 ■发现:当某样东西不在那儿了,你将会发现它被偷了;当入室事件发生时报警器响了(希望如此);闭路电 视提供的信息可以确定入侵者。 ■反应:你可以打电话报警;你可能决定替换被偷的物品;警察可能追回被偷的物品并送还给你。 来自物理世界的例子有助于解释计算机安全的原则,然而,将物理安全与计算机安全进行类比并不总是可能的 或是可取的,事实上,有些术语应用于信息技术环境时很容易引起误解。举一个与我们讨论的领域有密切关系的例 子,考虑使用信用卡号码在 Internet 上购物。一个骗子可能使用你的信用卡号码购物,而费用从你卡上扣除。你怎 么来保护你自己呢? ■预防:下订单时使用密码;依靠贸易商行在接受信用卡购物订单前对购物者进行某些检查;不要在 Internet 上使用你的卡号。 ■发现: 一项你没有授权的交易出现在你的信用卡帐单上
翻译:中国科学技术大学信息安全专业老师 ■反应:你可以申请一个新的卡号:欺诈交易的损失可以由持卡人、骗子购物的商行或者信用卡的发行商承担。 在这个例子中,骗子“窃取”了你的卡号,但你依然持有这张卡,这和你的卡被盗的情况是不同的。因此在某 些法律框架下,比如在英国,骗子不能被起诉为盗窃你的信用卡卡号。必须制定新的律法来解决这个新的问题。 考虑保护机密信息的选择,我们继续关于保护问题的讨论。有可能仅当秘密被揭露时你才发现已经泄密了,而 在某些情况下,损失是无法挽回的。你的竞争对手可能已经得到了你耗费数年功夫完成的产品设计,在你之前占领 了市场,并获取了全部的利润,而你却歇业了。在这种情形下,预防是唯一的选择。这也解释了为什么历来计算机 安全相当重视对机密信息泄露的预防。 12计算机安全 为了首先获得计算机安全的概念,我们分析一下信息财富是如何受到损害的。最常给出的定义包括以下三个方 ■机密性( confidentiality):防止未经授权的信息透露 完整性( ntegrity):防止未经授权的信息修改 ■可用性( Availability):防止未经授权的信息或资源截留。 读者可以立即就这些话题的优先顺序展开讨论,并且给出一个重新排序的例子。或者读者可以论证说这个列表 不完整——因为列表永远不会完整——并再增加一些内容,比如读者关心通信,可以增加真实性(可靠性 authenticity),若感兴趣电子商务类应用,则可以增加可审计性 accountability) 即使在这样一般的层次上,你仍会发现对于某些安全方面的精确定义有不同意见。因此,我们通常会给出定义 的出处,这样定义的背景就比较清楚了。象美国可信赖计算机系统评价标准(橙皮书12])、欧洲信息技术安全评 价标准( ITSEC[1])和加拿大可信赖计算机产品评价标准( CTCPEC[l50)等,就是安全评价标准(第9章)的 主要来源。上面的定义就出自 ITSEC 113机密性 历史上,安全和保密是紧密联系在一起的。即使在今天,许多人仍然觉得计算机安全的主要目的是阻止未授权 的用户阅读敏感信息。更一般地说,未授权的用户不应该获悉敏感信息。机密性(隐私,机密)即要解决计算机安 全的这个方面的问题。术语“隐私”@ privacy)和“机密”( (secrecy)有时候用来区分个人数据的保护(隐私)和机构 数据的保护(机密)。机密性概念已经被很好地定义了,并且计算机安全中的研究通常集中在这个题目上,因为最 起码它提出了与物理安全不相类似的新问题。有时候安全性( security)和机密性( confidentiality)甚至被用作同义词 在一个纸质文档的世界中,控制对一个文档的访问是很简单的,你只要列出那些允许阅读这个文档的人就可以 了。然而稍微有些不同的是,计算机安全为实现机密性还必须控制写操作。读者将在42节看到更多有关这方面的 内容。 1.14完整性 很难给出一个简洁的完整性定义。一般来说,完整性是要确保每个事物保持它该有的状态。(很抱歉给出这样 个毫无帮助的但却反映了现实的定义。)在计算机安全的范围内,我们可能会满足于这样一个定义,即完整性研 究如何防范未授权的写操作。按照这种解释,完整性是双重机密性,而我们可以指望用类似的技术来同时达到两个 目的。 然而,更进一步的问题象“被授权做某人做的事”和“遵循正确的程序”也已经被包含进完整性术语中。 Clark 和Wlon在他们的颇有影响力的论文32]中采用了这个方法,该论文声称完整性就是这样一种特性: 完整性系统中的任何用户,即使被授权,也不允许以一种会使得公司的资产或帐目记录丢失或被讹误的方式 来修改数据项 如果将完整性与防止所有未授权的行为等同起来,则机密性就成为了完整性的一部分。 迄今为止,我们是通过指出必须控制的用户行为来确定安全性问题。从系统的观点来看,在定义完整性时最好 把注意力集中在系统状态上。橙皮书中关于数据完整性的定义正好就是这种类型的: 数据完整性当被计算机处理的数据与源文件中的数据一样,且没有受到意外的或恶意的修改或破坏时所呈现 的状态 在这里,完整性是外部一致性的同义词。存储在计算机系统中的数据应当正确地反映计算机系统外的某些事实 非常理想的当然是存储在任何计算机系统中的信息都正确地反映事实,然而,仅靠计算机系统内部的机制来保证这 个特性是不可能的。 第2页共36 创建日期:2003-11
翻译:中国科学技术大学信息安全专业老师 第 2 页 共 36 页 创建日期:2003-11 ■反应:你可以申请一个新的卡号;欺诈交易的损失可以由持卡人、骗子购物的商行或者信用卡的发行商承担。 在这个例子中,骗子“窃取”了你的卡号,但你依然持有这张卡,这和你的卡被盗的情况是不同的。因此在某 些法律框架下,比如在英国,骗子不能被起诉为盗窃你的信用卡卡号。必须制定新的律法来解决这个新的问题。 考虑保护机密信息的选择,我们继续关于保护问题的讨论。有可能仅当秘密被揭露时你才发现已经泄密了,而 在某些情况下,损失是无法挽回的。你的竞争对手可能已经得到了你耗费数年功夫完成的产品设计,在你之前占领 了市场,并获取了全部的利润,而你却歇业了。在这种情形下,预防是唯一的选择。这也解释了为什么历来计算机 安全相当重视对机密信息泄露的预防。 1.1.2 计算机安全 为了首先获得计算机安全的概念,我们分析一下信息财富是如何受到损害的。最常给出的定义包括以下三个方 面: ■机密性(Confidentiality):防止未经授权的信息透露。 ■完整性(Integrity):防止未经授权的信息修改。 ■可用性(Availability):防止未经授权的信息或资源截留。 读者可以立即就这些话题的优先顺序展开讨论,并且给出一个重新排序的例子。或者读者可以论证说这个列表 不完整——因为列表永远不会完整——并再增加一些内容,比如读者关心通信,可以增加真实性(可靠性, authenticity),若感兴趣电子商务类应用,则可以增加可审计性(accountability)。 即使在这样一般的层次上,你仍会发现对于某些安全方面的精确定义有不同意见。因此,我们通常会给出定义 的出处,这样定义的背景就比较清楚了。象美国可信赖计算机系统评价标准(橙皮书[112])、欧洲信息技术安全评 价标准(ITSEC[117])和加拿大可信赖计算机产品评价标准(CTCPEC[150])等,就是安全评价标准(第 9 章)的 主要来源。上面的定义就出自 ITSEC。 1.1.3 机密性 历史上,安全和保密是紧密联系在一起的。即使在今天,许多人仍然觉得计算机安全的主要目的是阻止未授权 的用户阅读敏感信息。更一般地说,未授权的用户不应该获悉敏感信息。机密性(隐私,机密)即要解决计算机安 全的这个方面的问题。术语“隐私”(privacy)和“机密”(secrecy)有时候用来区分个人数据的保护(隐私)和机构 数据的保护(机密)。机密性概念已经被很好地定义了,并且计算机安全中的研究通常集中在这个题目上,因为最 起码它提出了与物理安全不相类似的新问题。有时候安全性(security)和机密性(confidentiality)甚至被用作同义词。 在一个纸质文档的世界中,控制对一个文档的访问是很简单的,你只要列出那些允许阅读这个文档的人就可以 了。然而稍微有些不同的是,计算机安全为实现机密性还必须控制写操作。读者将在 4.2 节看到更多有关这方面的 内容。 1.1.4 完整性 很难给出一个简洁的完整性定义。一般来说,完整性是要确保每个事物保持它该有的状态。(很抱歉给出这样 一个毫无帮助的但却反映了现实的定义。)在计算机安全的范围内,我们可能会满足于这样一个定义,即完整性研 究如何防范未授权的写操作。按照这种解释,完整性是双重机密性,而我们可以指望用类似的技术来同时达到两个 目的。 然而,更进一步的问题象“被授权做某人做的事”和“遵循正确的程序”也已经被包含进完整性术语中。Clark 和 Wilson 在他们的颇有影响力的论文[32]中采用了这个方法,该论文声称完整性就是这样一种特性: 完整性 系统中的任何用户,即使被授权,也不允许以一种会使得公司的资产或帐目记录丢失或被讹误的方式 来修改数据项。 如果将完整性与防止所有未授权的行为等同起来,则机密性就成为了完整性的一部分。 迄今为止,我们是通过指出必须控制的用户行为来确定安全性问题。从系统的观点来看,在定义完整性时最好 把注意力集中在系统状态上。橙皮书中关于数据完整性的定义正好就是这种类型的: 数据完整性 当被计算机处理的数据与源文件中的数据一样,且没有受到意外的或恶意的修改或破坏时所呈现 的状态。 在这里,完整性是外部一致性的同义词。存储在计算机系统中的数据应当正确地反映计算机系统外的某些事实。 非常理想的当然是存储在任何计算机系统中的信息都正确地反映事实,然而,仅靠计算机系统内部的机制来保证这 个特性是不可能的
翻译:中国科学技术大学信息安全专业老师 更为混乱的是,信息安全的其他领域有它们自己关于完整性的概念。比如,在通信安全中,完整性是指: 对因蓄意操作或随机的传输错误而引起的传输数据的修改、插入、删除或重放而进行 的检测和纠正 当没有人被授权进行修改时,你可以把有意的修改看作是未授权修改的一种特殊情形。但是,采取这种观点并 没有多大帮助,因为授权体系的有或无对于需要解决的问题的本质以及相应的安全机制都有影响。 完整性通常是其他安全特性的先决条件。比如,攻击者可能试图通过修改操作系统或操作系统引用的访问控制 列表来挫败机密性控制。因此,我们必须保护操作系统的完整性或者访问控制列表的完整性来实现机密性。 最后,我们应当注意的是还有更一般的完整性定义,它把安全性和可用性都当作是完整性的一部分 15可用性 我们采用 CTCPEC中给出的定义: 可用性产品的服务在需要时不经太多延迟即可使用的特性。 国际标准ISO7498-2[51],通信安全的 ISO/OSI安全体系结构,给出了几乎相同的定义: 可用性需要时可被一个授权实体访问和使用的特性 可用性是超出传统的计算机安全范围的一个非常令人关注的问题。用于改善可用性的工程技术来自于其他领 域,象容错计算。在安全领域,我们想要保证的是,恶意的攻击者不能阻止合法用户合法访问他们的系统。也就是 说,我们希望防止拒绝服务( denial of service)。对此,我们引用ISO7498-2的定义: 拒绝服务 阻止对资源的授权访问或者延误时间关键性的操作 近来,因特网上已经出现了洪泛攻击 flooding attacks)的事件,攻击者用大量的连接请求淹没服务器,从而有效 地使服务器瘫痪。在许多情形下,可用性可能是计算机安全最重要的特性,但处理这类问题的安全机制却是特别缺 乏。事实上,限制太多的安全机制本身就可能导致拒绝服务。 116可审计性 现在我们已经讨论了计算机安全的三个传统领域。回想一下,你可以看到它们都研究了访问控制的不同方面 并且把重点放在了预防令人讨厌的事件上面。我们必须接受这样的事实,即我们几乎从来都无法防止所有不正确的 行为。首先,我们可能会发现授权行为可以导致安全违背:其次,我们可能会在我们的安全系统中发现一个缺陷, 使得攻击者可以找到绕过我们的控制的办法。因此,你可能需要在你的安全列表中加入新的安全要求。用户应当为 他们的行为负责,这个要求在正在出现的电子商务世界中尤为重要,而你已经能在象橙皮书这样历史性的文档中找 到它了 可审计性审计信息必须有选择地保存和保护,以便影响安全的行为可以被追溯到责任方 为了做到这一点,系统必须识别和认证用户,必须保存一份安全相关事件的审计记录。如果发生了安全违背事 件,审计记录中的信息可以帮助确认作恶者,以及作恶者损害系统所采取的步骤。 17可靠性和安全性( Safety)(安全(保险),安全,安全措施 在进行安全性( security)讨论时,还必须提及计算的其他领域,象可靠性,它涉及(意外)故障,和安全性( safety 它涉及系统故障对环境的影响,也涉及到系统在不利条件下必须正确运行的情形。 提及这些领域的原因之一是概念上有重叠。依你首选的观点而定,安全性( security)可以是可靠性的一个方面, 或者反之亦然。 IFIP WG104试图避免这种两难的处境,它引入可信任性( dependability)作为一个统一的概念 并将安全性( securIty)、可靠性、完整性和可用性当作可信任性的各个方面。 可信任性( Dependability,可靠性(强度,坚固度),相依性,依赖性)指计算机系统的这样一种性质,它使得系统 提供的服务有理由被信任。这里,系统提供的服务就是它的用户所能感知到的它的行为:用户是与系统相互作用的 另一个系统(物质,人)。 原因之二是有些应用必须同时解决多个问题。比如,考虑安全紧要( safety-critical)应用中的一个计算机系统 有时系统用户必须对紧急事件作出反应,安全( security)控制应当防止入侵者恶意造成意外事故。入侵检测系统试 图通过寻找陌生的行为模式来识别攻击,对紧急事件的反应有时候看上去也是陌生的—但愿紧急事件很少发生 -因此入侵检测可能会将紧急情况下的合法行为误解为攻击,并启动安全( securIty)机制,这可能会把问题搞糟, 因为安全( security)机制会干扰应急人员的行动。一般来说,你不能孤立地解决安全性( security)的问题,而不 考虑你想要保护的应用的其他要求 最后,应用于这两个领域的工程方法是类似的。比如,评价安全( security)软件的标准和评价安全紧要 第3页共36页创建日期:2003-11
翻译:中国科学技术大学信息安全专业老师 第 3 页 共 36 页 创建日期:2003-11 更为混乱的是,信息安全的其他领域有它们自己关于完整性的概念。比如,在通信安全中,完整性是指: 对因蓄意操作或随机的传输错误而引起的传输数据的修改、插入、删除或重放而进行 的检测和纠正。 当没有人被授权进行修改时,你可以把有意的修改看作是未授权修改的一种特殊情形。但是,采取这种观点并 没有多大帮助,因为授权体系的有或无对于需要解决的问题的本质以及相应的安全机制都有影响。 完整性通常是其他安全特性的先决条件。比如,攻击者可能试图通过修改操作系统或操作系统引用的访问控制 列表来挫败机密性控制。因此,我们必须保护操作系统的完整性或者访问控制列表的完整性来实现机密性。 最后,我们应当注意的是还有更一般的完整性定义,它把安全性和可用性都当作是完整性的一部分。 1.1.5 可用性 我们采用 CTCPEC 中给出的定义: 可用性 产品的服务在需要时不经太多延迟即可使用的特性。 国际标准 ISO 7498-2[51],通信安全的 ISO/OSI 安全体系结构,给出了几乎相同的定义: 可用性 需要时可被一个授权实体访问和使用的特性。 可用性是超出传统的计算机安全范围的一个非常令人关注的问题。用于改善可用性的工程技术来自于其他领 域,象容错计算。在安全领域,我们想要保证的是,恶意的攻击者不能阻止合法用户合法访问他们的系统。也就是 说,我们希望防止拒绝服务(denial of service)。对此,我们引用 ISO 7498-2 的定义: 拒绝服务 阻止对资源的授权访问或者延误时间关键性的操作。 近来,因特网上已经出现了洪泛攻击(flooding attacks)的事件,攻击者用大量的连接请求淹没服务器,从而有效 地使服务器瘫痪。在许多情形下,可用性可能是计算机安全最重要的特性,但处理这类问题的安全机制却是特别缺 乏。事实上,限制太多的安全机制本身就可能导致拒绝服务。 1.1.6 可审计性 现在我们已经讨论了计算机安全的三个传统领域。回想一下,你可以看到它们都研究了访问控制的不同方面, 并且把重点放在了预防令人讨厌的事件上面。我们必须接受这样的事实,即我们几乎从来都无法防止所有不正确的 行为。首先,我们可能会发现授权行为可以导致安全违背;其次,我们可能会在我们的安全系统中发现一个缺陷, 使得攻击者可以找到绕过我们的控制的办法。因此,你可能需要在你的安全列表中加入新的安全要求。用户应当为 他们的行为负责,这个要求在正在出现的电子商务世界中尤为重要,而你已经能在象橙皮书这样历史性的文档中找 到它了: 可审计性 审计信息必须有选择地保存和保护,以便影响安全的行为可以被追溯到责任方。 为了做到这一点,系统必须识别和认证用户,必须保存一份安全相关事件的审计记录。如果发生了安全违背事 件,审计记录中的信息可以帮助确认作恶者,以及作恶者损害系统所采取的步骤。 1.1.7 可靠性和安全性(Safety)(安全(保险),安全,安全措施) 在进行安全性(security)讨论时,还必须提及计算的其他领域,象可靠性,它涉及(意外)故障,和安全性(safety), 它涉及系统故障对环境的影响,也涉及到系统在不利条件下必须正确运行的情形。 提及这些领域的原因之一是概念上有重叠。依你首选的观点而定,安全性(security)可以是可靠性的一个方面, 或者反之亦然。IFIP WG 10.4 试图避免这种两难的处境,它引入可信任性(dependability)作为一个统一的概念, 并将安全性(security)、可靠性、完整性和可用性当作可信任性的各个方面。 可信任性(Dependability,可靠性(强度,坚固度),相依性,依赖性) 指计算机系统的这样一种性质,它使得系统 提供的服务有理由被信任。这里,系统提供的服务就是它的用户所能感知到的它的行为;用户是与系统相互作用的 另一个系统(物质,人)。 原因之二是有些应用必须同时解决多个问题。比如,考虑安全紧要(safety-critical)应用中的一个计算机系统。 有时系统用户必须对紧急事件作出反应,安全(security)控制应当防止入侵者恶意造成意外事故。入侵检测系统试 图通过寻找陌生的行为模式来识别攻击,对紧急事件的反应有时候看上去也是陌生的——但愿紧急事件很少发生 ——因此入侵检测可能会将紧急情况下的合法行为误解为攻击,并启动安全(security)机制,这可能会把问题搞糟, 因为安全(security)机制会干扰应急人员的行动。一般来说,你不能孤立地解决安全性(security)的问题,而不 考虑你想要保护的应用的其他要求。 最后,应用于这两个领域的工程方法是类似的。比如,评价安全(security)软件的标准和评价安全紧要
翻译:中国科学技术大学信息安全专业老师 ( safety-critical)软件的标准有许多相似之处,有些安全专家希望最终将只有一个标准 118我们的计算机安全定义 在本书中,我们将采用以下的计算机安全定义: 计算机安全计算机安全研究如何预防和检测计算机系统用户的非授权行为 正确授和访问控制这两个概念对于本定义是至关重要的。正确授权假设存在一个安全策略,即一组声明什么 行为是允许的和什么行为是禁止的规则。安全策略域即是由策略所控制的用户、数据客体、机器等实体组成的集合。 你可以将纠正不正确行为的影响包括到安全定义中,但这个方面对于我们进一步的讨论作用不大 从对术语的初步讨论得出的主要结论是: 1.不存在单一的安全定义 2.当你阅读文档时,注意不要将你自己的安全概念与文档中使用的概念相混淆: 3.大量的时间正被花费(和浪费)在试图定义明确的安全概念上 12计算机安全最根本的两难处境 随着依赖计算机安全的用户数量从处理机密数据的少数公司发展到与因特网相连的每个人,人们对计算机安全 的需求已经发生了巨大的变化。最起码,这种变化已经导致了一种根本性的两难处境的出现: 不懂安全的用户有特殊的安全需求,却常常不具备安全的专门知识。 这种两难处境在当前的安全评估策略中是显而易见的。通俗地说,安全评估检查产品是否提供了它所承诺的安 全服务。因此,必须规定安全系统的功能,我们需要确保安全控制是有效的,并且能够抵抗滲透的企图 橙皮书是第一本评估安全产品(操作系统)的指南,在计算机安全的发展中有着巨大的影响力。在橙皮书中 功能性和κ诺( assurance,(质量)保证,担保)被捆绑成预定义的类,用户只能从这个固定的菜单中选择。许多提 供商还通过给出产品的橙皮书分类来说明产品的安全等级。但是橙皮书相当刻板,并且在解决计算机网络和数据库 管理系统的安全评估上还不是非常成功。因此,迫切要求有一套更灵活的标准集。 ITSEC适应了这种需要,它将功能性和承诺分开,以便规定特定的评估目标( targets of evaluation,TOE)。不懂 安全的用户现在只要搞清楚特定的TOEs,并且针对不同的TOEs去比较被评估的产品 计算机安全的这个两难处境会以不同的形式出现,解决它是目前计算机安全中最为紧迫的挑战。不足为怪的是 这个难题不存在简单的答案 同这个根本性的两难处境相比较,安全与易于使用之间的冲突采用了简单的工程上的折衷。安全对性能的影响 是多方面的 ■安全机制需要额外的计算资源,这个代价容易被量化 ■安全干扰用户熟悉的工作模式,繁琐或不合适的安全限制导致生产力的浪费。 ■必须花费精力去管理安全,因此安全系统的购买者经常选择具有最好的图形用户界面的产品。 安全是一种需要论证的代价。评估没有安全的代价属于风险分析的范围,风险分析是安全管理的一个重要方面, 但它不在本书讨论的范围内 13数据对信息 计算机安全是关于控制对信息和资源的访问。然而,控制对信息的访问有时是很难描述的,因此常常用更加直 截了当的目标,即控制对数据的访问来代替。数据和信息之间的区别是很微妙的,但它也是计算机安全中某些更加 困难的问题的根源。数括代表了信息,信息是数据的(主观)解释 数据依照约定所选择的用来表现我们概念上和真实世界中某些方面的物理现象。我们赋予数据的含意称 为信息。数据用来传输和存储信息,以及依照形式化规则处理数据之后获取新的信息[24]。 当信息和相应的数据之间存在紧密联系时,这两种方法可能会产生非常相似的结果。但事情并不总是这样的。 将信息通过一个隐蔽信道(见4,24)传输是可能的,在这里,数据是对访问请求的“是”或“否”的回答,而收 到的信息却是一个敏感文件的内容。另一个例子是统计数据库的推理( inference)问题(见144)。我们来扼要地 看一下这个问题,考虑一个纳税申报单的国内税收数据库,这个数据库不仅被税务稽查员使用(他们访问个人记录), 也被财政部官员使用以便进行总体规划。财政部官员必须能够访问纳税申报单的统计概要,但是没有权利访问个人 记录。假定数据库管理系统仅允许对足够大的数据集进行统计查询以保护个人数据,但是仍然可能对两个仅相差一 条记录的足够大的数据集进行统计査询,并将查询结果结合起来。这样,即使没有对数据进行直接访问,仍然可以 第4页共36 创建日期:2003-11
翻译:中国科学技术大学信息安全专业老师 第 4 页 共 36 页 创建日期:2003-11 (safety-critical)软件的标准有许多相似之处,有些安全专家希望最终将只有一个标准。 1.1.8 我们的计算机安全定义 在本书中,我们将采用以下的计算机安全定义: 计算机安全 计算机安全研究如何预防和检测计算机系统用户的非授权行为。 正确授权和访问控制这两个概念对于本定义是至关重要的。正确授权假设存在一个安全策略,即一组声明什么 行为是允许的和什么行为是禁止的规则。安全策略域即是由策略所控制的用户、数据客体、机器等实体组成的集合。 你可以将纠正不正确行为的影响包括到安全定义中,但这个方面对于我们进一步的讨论作用不大。 从对术语的初步讨论得出的主要结论是: 1. 不存在单一的安全定义; 2. 当你阅读文档时,注意不要将你自己的安全概念与文档中使用的概念相混淆; 3. 大量的时间正被花费(和浪费)在试图定义明确的安全概念上。 1.2 计算机安全最根本的两难处境 随着依赖计算机安全的用户数量从处理机密数据的少数公司发展到与因特网相连的每个人,人们对计算机安全 的需求已经发生了巨大的变化。最起码,这种变化已经导致了一种根本性的两难处境的出现: 不懂安全的用户有特殊的安全需求,却常常不具备安全的专门知识。 这种两难处境在当前的安全评估策略中是显而易见的。通俗地说,安全评估检查产品是否提供了它所承诺的安 全服务。因此,必须规定安全系统的功能,我们需要确保安全控制是有效的,并且能够抵抗渗透的企图。 橙皮书是第一本评估安全产品(操作系统)的指南,在计算机安全的发展中有着巨大的影响力。在橙皮书中, 功能性和承诺(assurance,(质量)保证,担保)被捆绑成预定义的类,用户只能从这个固定的菜单中选择。许多提 供商还通过给出产品的橙皮书分类来说明产品的安全等级。但是橙皮书相当刻板,并且在解决计算机网络和数据库 管理系统的安全评估上还不是非常成功。因此,迫切要求有一套更灵活的标准集。 ITSEC 适应了这种需要,它将功能性和承诺分开,以便规定特定的评估目标(targets of evaluation, TOE)。不懂 安全的用户现在只要搞清楚特定的 TOEs,并且针对不同的 TOEs 去比较被评估的产品。 计算机安全的这个两难处境会以不同的形式出现,解决它是目前计算机安全中最为紧迫的挑战。不足为怪的是, 这个难题不存在简单的答案。 同这个根本性的两难处境相比较,安全与易于使用之间的冲突采用了简单的工程上的折衷。安全对性能的影响 是多方面的。 ■安全机制需要额外的计算资源,这个代价容易被量化。 ■安全干扰用户熟悉的工作模式,繁琐或不合适的安全限制导致生产力的浪费。 ■必须花费精力去管理安全,因此安全系统的购买者经常选择具有最好的图形用户界面的产品。 安全是一种需要论证的代价。评估没有安全的代价属于风险分析的范围,风险分析是安全管理的一个重要方面, 但它不在本书讨论的范围内。 1.3 数据对信息 计算机安全是关于控制对信息和资源的访问。然而,控制对信息的访问有时是很难描述的,因此常常用更加直 截了当的目标,即控制对数据的访问来代替。数据和信息之间的区别是很微妙的,但它也是计算机安全中某些更加 困难的问题的根源。数据代表了信息,信息是数据的(主观)解释。 数据 依照约定所选择的用来表现我们概念上和真实世界中某些方面的物理现象。我们赋予数据的含意称 为信息。数据用来传输和存储信息,以及依照形式化规则处理数据之后获取新的信息[24]。 当信息和相应的数据之间存在紧密联系时,这两种方法可能会产生非常相似的结果。但事情并不总是这样的。 将信息通过一个隐蔽信道(见 4.2.4)传输是可能的,在这里,数据是对访问请求的“是”或“否”的回答,而收 到的信息却是一个敏感文件的内容。另一个例子是统计数据库的推理(inference)问题(见 14.4)。我们来扼要地 看一下这个问题,考虑一个纳税申报单的国内税收数据库,这个数据库不仅被税务稽查员使用(他们访问个人记录), 也被财政部官员使用以便进行总体规划。财政部官员必须能够访问纳税申报单的统计概要,但是没有权利访问个人 记录。假定数据库管理系统仅允许对足够大的数据集进行统计查询以保护个人数据,但是仍然可能对两个仅相差一 条记录的足够大的数据集进行统计查询,并将查询结果结合起来。这样,即使没有对数据进行直接访问,仍然可以
翻译:中国科学技术大学信息安全专业老师 获得关于某条个人记录的信息。 14计算机安全的原则 你可能会听到这样一些话,说计算机安全是一个非常复杂的问题,“象火箭科学”。你千万不要让这样的看法把 你吓倒。如果你有机会用系统化的方法去实现一个计算机系统的安全特性,那么一套行之有效的软件(系统)开发 方法以及对一些基本的安全原则的良好理解,将会使你省力不少。然而,如果你事后才想起来要在一个已经非常复 杂的系统上再加上安全特性,那么当你被该系统已经采取的各种并未考虑安全要求的设计决定所限制时,你就非常 艰难了。不幸的是,后者的情形是经常发生的。 现在我们要提出一些基本的计算机安全设计要素( design parameters),这些设计决定提供了编排本书内容的框 架。图1.1说明了计算机安全设计空间中的主要维度,横轴代表安全策略的重点(见14.1),纵轴代表一种保护机 制被实现的计算机系统层次(见142) 1.41控制重点 让我们重新描述1.14中给出的完整性定义。我们可以说完整性与服从( compliance,一致(符合,顺从)一组给 定的规则有关。我们可以在以下方面定出规则: ■数据项的格式和内容(内部一致性):比如,一条规则可以规定帐目数据库中的余额域必须包含一个整数 这个规则不依赖于访问数据项的用户或者作用在数据项上的操作 ■可能作用在一个数据项上的操作;比如,一条规则可以规定只有“开户”、“査余额”、“取款”和“存款”操 作可以访问帐目数据库中的余额项,并且只有银行工作人员允许执行“开户”操作:这样的规则可能依赖于 用户和数据项 ■允许访问一个数据项的用户;比如,一条规则可以规定只有帐户的持有者和银行工作人员可以访问帐目数据 库中的余额项。 我们刚才已经进行了一项重要的和一般性的观察,得出了我们的第一个设计原则 第1个设计决定(决策, decision)在一个给定的应用中,一个计算机系统中的保护机制应该集中在数据、操 作还是用户上? 在实施安全控制时,这个选择是一个基本的设计决定。操作系统传统上集中在保护数据(资源)方面,而在现 代应用中则更多地与控制用户的行为有关。 142人-机标尺 图1.2给出了一个计算机系统的简单的分层模型。这个模型只准备用作一个一般性的指导,你不应该指望在你 分析的每一个计算机系统中发现所有这些层次,而当你发现一个系统有多于我们模型中给出的五个层次时也不要觉 得吃惊 ■用户运行应用程序,这些应用程序被定制成满足非常明确的应用需求。 ■应用程序可以使用像数据库管理系统(DBMS)或客体访问经纪人(ORB, object reference broker)这样的通 用软件包提供的服务。 ■这些软件包运行在操作系统之上,操作系统执行文件和内存管理,并控制对打印机和I/O设备等资源的访问 ■操作系统可能有一个协调对处理器和内存访问的内核。 ■硬件,即处理器和内存,物理上存储和处理计算机系统拥有的数据 安全控制可以被合理地放置于任何一个层次上。我们现在已经解释了我们的第二个基本安全原则的各个方面 第2个设计决定(决策, decision)一个安全机制应该被放置在计算机系统的哪一个层次上? 当你研究已有的安全产品时,你将观察到从硬件到应用软件每一层上的安全机制。设计者的任务就是为每一个 机制寻找合适的层次,以及为每一个层次寻找合适的机制 再来看一下我们的新的安全原则,将一个计算机系统的安全机制想象成一些同心的保护环,其中硬件机制位于 中心,应用机制位于外围(图1.3)。靠近中心的机制趋向于更通用、更面向计算机和更关心控制对数据的访问,外 围的机制则更适合解决个别的用户需求。结合我们的前两个安全原则,我们将用人-机标尺来指放置安全机制,图 143复杂性对保险性 第5页共36 创建日期:2003-11
翻译:中国科学技术大学信息安全专业老师 第 5 页 共 36 页 创建日期:2003-11 获得关于某条个人记录的信息。 1.4 计算机安全的原则 你可能会听到这样一些话,说计算机安全是一个非常复杂的问题,“象火箭科学”。你千万不要让这样的看法把 你吓倒。如果你有机会用系统化的方法去实现一个计算机系统的安全特性,那么一套行之有效的软件(系统)开发 方法以及对一些基本的安全原则的良好理解,将会使你省力不少。然而,如果你事后才想起来要在一个已经非常复 杂的系统上再加上安全特性,那么当你被该系统已经采取的各种并未考虑安全要求的设计决定所限制时,你就非常 艰难了。不幸的是,后者的情形是经常发生的。 现在我们要提出一些基本的计算机安全设计要素(design parameters),这些设计决定提供了编排本书内容的框 架。图 1.1 说明了计算机安全设计空间中的主要维度,横轴代表安全策略的重点(见 1.4.1),纵轴代表一种保护机 制被实现的计算机系统层次(见 1.4.2)。 1.4.1 控制重点 让我们重新描述 1.1.4 中给出的完整性定义。我们可以说完整性与服从(compliance,一致(符合,顺从))一组给 定的规则有关。我们可以在以下方面定出规则: ■数据项的格式和内容(内部一致性);比如,一条规则可以规定帐目数据库中的余额域必须包含一个整数; 这个规则不依赖于访问数据项的用户或者作用在数据项上的操作。 ■可能作用在一个数据项上的操作;比如,一条规则可以规定只有“开户”、“查余额”、“取款”和“存款”操 作可以访问帐目数据库中的余额项,并且只有银行工作人员允许执行“开户”操作;这样的规则可能依赖于 用户和数据项。 ■允许访问一个数据项的用户;比如,一条规则可以规定只有帐户的持有者和银行工作人员可以访问帐目数据 库中的余额项。 我们刚才已经进行了一项重要的和一般性的观察,得出了我们的第一个设计原则。 第 1 个设计决定(决策,decision) 在一个给定的应用中,一个计算机系统中的保护机制应该集中在数据、操 作还是用户上? 在实施安全控制时,这个选择是一个基本的设计决定。操作系统传统上集中在保护数据(资源)方面,而在现 代应用中则更多地与控制用户的行为有关。 1.4.2 人-机标尺 图 1.2 给出了一个计算机系统的简单的分层模型。这个模型只准备用作一个一般性的指导,你不应该指望在你 分析的每一个计算机系统中发现所有这些层次,而当你发现一个系统有多于我们模型中给出的五个层次时也不要觉 得吃惊。 ■用户运行应用程序,这些应用程序被定制成满足非常明确的应用需求。 ■应用程序可以使用像数据库管理系统(DBMS)或客体访问经纪人(ORB,object reference broker)这样的通 用软件包提供的服务。 ■这些软件包运行在操作系统之上,操作系统执行文件和内存管理,并控制对打印机和 I/O 设备等资源的访问。 ■操作系统可能有一个协调对处理器和内存访问的内核。 ■硬件,即处理器和内存,物理上存储和处理计算机系统拥有的数据。 安全控制可以被合理地放置于任何一个层次上。我们现在已经解释了我们的第二个基本安全原则的各个方面。 第 2 个设计决定(决策,decision) 一个安全机制应该被放置在计算机系统的哪一个层次上? 当你研究已有的安全产品时,你将观察到从硬件到应用软件每一层上的安全机制。设计者的任务就是为每一个 机制寻找合适的层次,以及为每一个层次寻找合适的机制。 再来看一下我们的新的安全原则,将一个计算机系统的安全机制想象成一些同心的保护环,其中硬件机制位于 中心,应用机制位于外围(图 1.3)。靠近中心的机制趋向于更通用、更面向计算机和更关心控制对数据的访问,外 围的机制则更适合解决个别的用户需求。结合我们的前两个安全原则,我们将用人-机标尺来指放置安全机制,图 1.4。 1.4.3 复杂性对保险性
翻译:中国科学技术大学信息安全专业老师 一个安全机制在人-机标尺上的位置常常同它的复杂性密切相关,在中心你看到简单的通用机制,而应用通常 要求功能丰富的安全机制。因此,你还必须作出第三个决定 第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 的口令安全已被突破了。听上去很严重,是吗?实际情况是发布了一个程序,能将加密的口令从二进 制格式转换成另一种易于阅读的表示形式。激动之余发现根本不是什么大事情。 如果你担心字典攻击,但又不能隐藏口令文件,你可以考虑口令加盐。当一个口令需要加密保存时,加密前将 一些附加信息(盐)附加到口令上,盐同加密的口令保存在一起。如果两个用户有相同的口令,它们在加密口令的 文件中将有不同的表项。加盐减慢了字典攻击的速度,因为不可能同时搜索几个用户的口令。 你已经看到了三个安全设计的问题: