1.5 信息系统安全策略
在考虑如何确保信息系统的安全性之前,首先必须清楚什么样的信息系统可以称得上是安全的。从某种意义上说,符合安全策略要求的信息系统就是安全的信息系统。那么,如何定义安全策略呢?这是本节需要解答的问题。安全策略与安全威胁密切相关,所以,本节的介绍就从安全威胁开始。
1.5.1 信息安全威胁
威胁是对安全的潜在破坏,这种破坏不一定要实际发生。破坏可能发生的这个事实意味着必须防止(或预防)那些可能导致破坏发生的行为,这些行为称为攻击,行为的完成者或导致行为完成的人称为攻击者。
有三种安全服务——机密性、完整性和可用性——能减少系统安全的威胁。Shirey将威胁分为四大类:泄露,即对信息的非授权访问;欺骗,即接受虚假数据;破坏,即中断或妨碍正常操作;篡夺,即对系统某些部分的非授权控制。这四大类威胁涵盖了很多种常见的威胁。因为威胁是普遍存在的,所以,这些问题将反复出现在信息系统安全的整个学习过程中。以下将对每种威胁进行简单介绍。
嗅探,即对信息的非法拦截,是某种形式的信息泄露。嗅探一般是被动的,即某些实体仅仅是窃听(即读取)消息,或者仅仅浏览文件或系统信息。搭线窃听即被动搭线窃听是一种监视网络的嗅探形式(称它为搭线窃听,是因为线路构成了网络,在不涉及物理线路时也使用这个术语)。机密性服务可以对抗这种威胁。
篡夺或更改是对信息的非授权改变。篡改的目的可能是欺骗,在欺骗过程中,一些实体要根据修改后的数据来决定采取什么样的动作,或者不正确的信息会被当做正确的信息而接收和发布。如果被修改的数据控制了系统操作,就会产生破坏和篡夺的威胁。与嗅探不同的是,篡改是主动性的,其起因是某实体对信息做出变更。主动搭线窃听是篡改的一种形式,在窃听过程中,传输于网络中的数据会被更改,“主动”使得主动搭线窃听有别于嗅探(被动搭线窃听)。中间人攻击就是一种主动搭线攻击的例子:入侵者从发送者那里读取消息,再将(可能修改过的)不同版本的消息发往接收者,并希望接收者和发送者不会发现中间人的存在。完整性服务能对抗这种威胁。
伪装或电子欺骗,即一个实体被另一个实体假冒,是兼有欺骗和篡夺的一种手段。这种攻击引诱受害者相信与之通信的是另一个实体。例如,如果某用户试图通过Internet登录一台计算机,但实际却进入了另一台自称是前者的机器,这样,用户就被欺骗了。类似的情况还包括:如果某用户尝试去读取一个文件,但是攻击者却给他准备了一份不同的文件,这也是一种欺骗。伪装可以是被动攻击(用户并不想认证接收者的身份,而直接访问它),但通常是主动攻击(冒充者发出响应来误导用户,以隐瞒身份)。尽管伪装的主要目的是欺骗,但攻击者也常常通过伪装来冒充被授权的管理员或控制者,以篡夺系统的控制权。完整性服务(在此称为“认证服务”)能对抗这种威胁。
某些形式的伪装是允许的,如委托行为,即一个实体授权另一个实体代表自己来行使职责。伪装与委托之间存在重大的差别。如果Susan委托Thomas,让他代表自己,即Susan赋予Thomas执行特别操作的许可,就像是他自己在执行这些操作一样。各方都知道这种委托关系。Thomas不会假装成Susan;相反,他会说:“我是Thomas,并且我有权代表Susan来做这件事。”如果有人询问Susan,他也会证实Thomas说的是真的。然而,如果是伪装攻击,则Thomas会假冒成Susan,没有任何一方(包括Susan)会发现这种伪装,Thomas会说:“我是Susan。”如果任何人发现与之交易的是Thomas,并就此事询问Susan的话,Susan会否认他曾授权Thomas来代表自己。就安全而言,伪装是一种破坏安全的行为,而委托不是。
信源否认,即某实体欺骗性地否认曾发送(或创建)过某些信息,是某种形式的欺骗。例如,假设一个顾客给某供货商写信,说同意支付一大笔钱来购买某件产品。供货商将此产品送过去并索取费用。这个顾客却否认曾经订购过该产品,并且根据法律,他有权不支付任何费用而可扣留这件主动送上门的产品。即顾客否认了信件的来源。如果供货商不能证明信件来自于这位顾客,那么攻击就成功了。这种攻击的一种变形是:用户否认曾创建过特定的信息或实体,如文件等。完整性机制能应付这种威胁。
信宿否认,即某实体欺骗性地否认曾接收过某些信息或消息,这也是一种欺骗。假设一个顾客预定了一件昂贵的商品,但供货商要求在送货前付费。该顾客付了钱,然后供货商送来商品,接着顾客再一次询问供货商何时可以送货。如果顾客以前已经接收过货物,那么这次询问就构成一次信宿否认攻击。为了免于攻击,供货商必须证明顾客确实接收过货物,尽管顾客在否认。完整性机制和可用性机制都能防止这种攻击。
拖延,即暂时性地阻止某种服务,这是一种篡夺攻击,尽管它能对欺骗起到支持的作用。通常消息的发送服务需要一定的时间,如果攻击者能够迫使消息发送所花的时间多于前面所需的时间,那么攻击者就成功地拖延了消息发送。这要求对系统控制结构的操控,如对网络部件或服务器部件的操控,因此它是一种篡夺。如果某实体等待的认证信息被拖延了,它可能会请求辅服务器提供认证。即使攻击者可能无法伪装成主服务器,但是他可能伪装为辅服务器以提供错误的信息。可用性机制能缓解这种威胁。
拒绝服务,即长时间地阻止服务,这也是一种篡夺攻击,尽管它常与其他机制一起被用于欺骗。攻击者采用的方法是阻止服务器提供某种服务。拒绝可能发生在服务的源端(即通过阻止服务器取得完成任务所需的资源),也可能发生在服务的目的端(即阻断来自服务器的信息),还可能发生在中间路径(即通过丢弃从客户端或服务器端传来的信息,或者同时丢弃这两端传来的信息)。拒绝服务产生的威胁类似于无限的拖延。可用性机制能对抗这种威胁。
拒绝服务或拖延可能是直接攻击引起的,也可能是由与安全无关的问题导致的。从我们的观点来看,原因与结果是重要的,而隐藏于原因与结果下的目的却并不重要。如果拖延或拒绝服务破坏了系统安全,或者是导致系统遭到破坏的一系列事件中的一部分,那么可将它视为破坏系统安全的一种企图。这种企图可能并非蓄意的破坏,事实上,它可能是环境特征的产物,而非攻击者的特定行为。
1.5.2 策略与机制
策略与机制之间的差别对于安全的研究非常关键。
定义1.1 安全策略是对允许什么、禁止什么的规定。
定义1.2 安全机制是实施安全策略的方法、工具或规程。
机制可以是非技术性的,如在修改口令前总要求进行身份认证。实际上,策略经常需要一些技术无法实施的过程性机制。
举个例子,假如某所大学的计算机科学实验室有一项策略:禁止任何学生复制其他学生的作业文件。计算机系统提供防止其他人阅读用户文件的机制。Anna没有使用这些机制来保护她的作业文件,并且被Bill复制了作业。这就发生了安全破坏,因为Bill违反了安全策略。Anna未能保护好她的文件,但她并未授权Bill复制她的作业。
在这个例子中,Anna本可以容易地保护好她的文件。在其他环境中,这样的保护就不容易了。例如,Internet只提供最基本的安全机制,这不足以保护传送于网络中的信息。然而,像记录口令和其他敏感信息这样的行为违反了大多数站点隐含的一条安全策略(特别地,口令是用户的保密特性,任何人都不能记录)。
可以用数学方法表达策略,将其表示为允许(安全)或不允许(不安全)的状态列表。为达到这个目的,可假设任何给定的策略都对安全状态和非安全状态做了公理化描述。实践中,策略极少会如此精确,通常策略使用文本语言描述什么是用户或工作人员允许做的事情。这种描述的内在歧义性导致某些状态既不能归于“允许”类,也不能归于“不允许”类。例如,考虑上面讨论过的作业策略。如果某人查看另一用户的目录,但不复制作业文件,这破坏安全了吗?问题的答案取决于特定单位的习惯、规则、规章和法律,这些都不是我们关注的焦点,而且它们也会随时间而改变。
当两个不同的单位进行通信或合作时,它们组成的实体会使用一种新的安全策略,并且这种策略要建立在这两个单位的安全策略之上。如果这两个单位的策略不一致,则必须由这两个单位之一或这两个单位共同决定复合单位的安全策略。这种不一致性经常表现为对安全的破坏。例如,如果把专利文件发给学校,公司的保密策略将会与大多数学校的更开放的策略相冲突。学校和公司必须开发共同的安全策略以满足双方的需求,这才能产生相容策略。当两个单位通过独立的第三方(如Internet服务提供商)进行通信时,这种情形下的复杂度就会陡然增加。
1.5.3 安全的目的
如果给定描述“安全”和“非安全”行为的安全策略规范,安全机制就能够阻止攻击、检测攻击或在遭到攻击后恢复工作。可以组合使用安全机制,也可以单独使用安全机制。
阻止意味着攻击的失败。例如,如果有人企图通过Internet闯入某台主机,但那台主机并没有连入Internet,这就阻止了攻击。一般地,阻止涉及对机制的实现,要求所实现的机制是使用者无法逾越的,同时也必然是通过正确的、不能滥改的方法实现的,使得攻击者不能用改变机制的方法来攻破机制。阻止机制往往非常笨重,它会干扰系统的使用,甚至达到阻碍系统正常使用的程度。但一些简单的阻止机制,如口令等机制已被广泛接受(设置口令的目的是要防止非授权用户访问系统)。阻止机制能防止系统的不同部分遭受攻击。一旦阻止机制被合理实现,该机制所保护的资源就无须因为安全问题而受到监控,至少从理论上说是这样的。
当不能阻止攻击时,检测是最有用的,同时它也体现出防范措施的有效性。检测机制通常基于这样的理念:攻击总会发生,检测的目的就是要判定攻击是正在进行中还是已经发生。检测机制会基于结果给出报告。尽管有可能无法阻止攻击,但可监视攻击,从而能采集有关攻击的性质、严重性和结果的数据。典型的检测机制要监视系统的各个方面,寻找预示攻击的行为或信息。这种机制的一个很好的例子是:当用户输入三次错误的口令后就发出警告。登录程序还可继续,但是系统日志中的一条报错信息将报告这次不寻常的多次输入错误口令的事件。检测机制不能阻止对系统的攻击,这是一种严重的缺陷。受检测机制保护的资源会因安全问题而被持续不断地或周期性地监控。
恢复有两种形式。第一种是阻断攻击,并且评估、修复由攻击造成的任何损害。例如,若攻击者删除了一份文件,那么某恢复机制应能从备份介质中恢复该文件。实践中,恢复要远远复杂得多,因为每种攻击都有其独特的性质。因此,很难完整地刻画出任何一种损害的类型和程度。此外,攻击可能会再次发生,所以恢复的功能应包括辨识和消除攻击者赖以闯入系统的系统脆弱性。在某些情况下,报复(通过攻击攻击者的系统或通过合法渠道让攻击者对其行为负责)也是恢复的一部分。在所有这些情况下,系统的机能都因攻击而受到压制。依据定义,恢复还应具备还原正确操作的功能。
第二种恢复方式要求在攻击发生后系统仍能继续工作。由于计算机系统的复杂性,这类恢复难以实现。这类恢复机制同时利用容错技术和安全技术,一般用于可靠性非常关键的系统。与第一种方法不同,在任何时候这种系统都不会在功能上出错,而只会将系统不重要的功能禁用,当然,这类恢复常常会以一种较弱的方式出现。借助这种方法,系统可自动检测错误的功能,并改正(或试图改正)该错误。
1.5.4 安全策略的意义
安全策略为系统或系统集定义“安全”。安全策略在本质上可以是非形式化的,也可以是高度数学化的。
如果将计算机系统看成一种有限状态自动机,该自动机有一套完成状态改变的转换函数,那么我们有以下的定义。
定义1.3 安全策略是一种声明,它将系统的状态分成两个集合:已授权的(即安全的)状态集合和未授权的(即不安全的)状态集合。
安全策略设置了可以定义安全系统的环境。在某种策略下安全的系统不一定在另一种策略下也安全。更确切的意义可由以下定义表示。
定义1.4 安全系统是一种始于已授权状态但不能进入未授权状态的系统。
考虑如图1.3所示的有限状态自动机,它由4个状态和5个转换组成。安全策略将这些状态分成两个集合,一个是已授权的状态集合A={s1, s2},另一个是未授权的状态集合UA={s3, s4}。这个系统是不安全的,原因在于无论它开始于哪个授权状态,它都可以进入一个未授权的状态。当然,如果删除从s1到s3的边,那么系统就是安全的了,因为从已授权的状态不能进入未授权的状态。
图1.3 一个简单的有限状态自动机
定义1.5 如果系统进入一个未授权状态,则称发生了一次安全破坏。
前面非形式化地讨论了与安全相关的三个基本属性(机密性、完整性和可用性)。下面给出确切的定义。
定义1.6 设 X 是实体的集合,并设 I 是某种信息。如果集合 X 中的成员不能获取信息I,那么称I关于X具有机密性。
机密性意味着信息不能透露给某些实体,但它可以透露给另外的一些实体。集合 X的成员关系是隐式定义的。例如,当我们说一个文档是保密的时,是指某些实体可以访问该文档,而没有授权访问该文档的实体就组成了集合X。
定义1.7 设 X 是实体的集合,并设 I 是某些信息或某种资源。如果集合 X 中的所有成员都信任I,那么称I关于X具有完整性。
这个定义并非表面上的这么简单。X 的成员不仅信任信息本身,而且相信信息 I 的传输和保存没有引起信息本身及其可信性的改变(这种情况通常称为数据完整性)。如果 I 是关于某物的来源或某身份标识的信息,那么 X 的成员信任信息是正确的且未经改变的(这种情况通常称为来源完整性或可认证性)。另外,I 也可能是资源而不是信息,这时,完整性就指资源工作正常(符合规范)。如同机密性的定义,X的成员关系也通常是隐式定义的。
定义1.8 设 X 是实体的集合,并设 I 是某种资源。如果集合 X 中的所有成员都可以访问I,那么称I关于X具有可用性。
根据集合 X 中的成员需求、资源性质或资源使用地点的不同,定义1.8 中“访问”的确切定义也会有所不同。如果一台售书服务器要花1 小时来完成一项购书请求的服务,这也许可以满足客户的“可用性”的需求。但是,如果一台医疗信息服务器要花费超过1 小时的时间来响应请求,以便确认某种麻醉剂会产生哪些过敏反应,那么这将不能满足急诊室“可用性”的需求。
安全策略涉及机密性、完整性和可用性等问题的所有相关方面。关于机密性,安全策略要确定这样的状态:在这些状态下信息泄露到未授权接收该信息的实体中。这不仅包括权限的泄露,而且包括没有权限泄露的非法信息传输,后者称为信息流。而且,安全策略必须处理授权的动态变化,因此它应包含一个时态元素。例如,公司的合同工可以在保密协议有效期间访问某些专利信息,一旦保密协议过期,该合同工将不能再访问这些信息。这种类型的安全策略通常称为保密策略。
关于完整性,安全策略既要指定可以改变信息的已授权方法,也要指定能够改变信息的已授权实体。授权可能由多种关系衍生,而且可能受到外部影响的约束。例如,在许多事务中,“职责分离”原则禁止一个实体单独完成一项事务。安全策略中描述可改变数据的条件和方式的部分称为完整性策略。
关于可用性,安全策略描述了必须提供的服务。它可以给出服务的参数,指定服务可被访问的范围。例如,规定浏览器可以下载Web页面,但不能下载Java小程序。这种策略也可能需要用到服务等级,如服务器必须在请求提出1 分钟之内提供认证数据。可用性与服务质量(QoS)直接相关。
安全策略的声明可以形式化地描述系统所要求的属性。如果要求某个系统为可证明是安全的,那么设计者和实施者必须能够使用形式化声明来证明系统满足所要求的属性。如果形式化声明是不必要的或不可行的,则分析者可以测试所要求属性对某些输入的集合是否成立。
在实践中,有一类不太形式化的安全策略,它首先定义了已授权状态的集合。通常,这种安全策略假设读者明白策略颁布的环境——尤其是法律、组织性策略和其他环境因素。然后此安全策略描述用于定义“已授权用户”和“已授权使用”的行为、操作和授权。
例1.4 某大学不允许作弊,作弊的定义包括抄袭他人的作业(经过许可或未经许可)。有一门计算机科学课程要求学生在系里的计算机上完成作业。有个学生发现另一个学生没有对她的作业文件进行读保护,并抄袭了该作业。那么哪个学生破坏了安全?
第二个学生并没有破坏安全,尽管她没有保护好她的作业。此安全策略没有要求使用任何操作来防止文件被读。虽然她过于相信别人,但安全策略没有对此禁止。所以,第二个学生没有破坏安全。
第一个学生破坏了安全。此安全策略不允许抄袭作业,但这个学生恰恰这么做了。无论安全策略是明确地规定“包含作业的文件是不能被复制的”,还是仅仅规定“用户必须受校规的约束”,这都不会影响该结论的判定。对于后者,规则中有一条是禁止作弊。如果安全策略没有说明这种情况,最合理的解释就是因为计算机科学系是学校的一部分,所以该策略也应遵守校规。
如果有人反驳说第一个用户有复制文件的权力,因此他的行为是允许的,那么这就混淆了机制和策略的区别,这两者的区别是明显的。
定义1.9 安全机制是实施安全策略的某些部分的组件或规程。
例1.5 在前面的例子中,策略声明任何学生不得抄袭他人的作业。实施这种策略的一种安全机制就是文件访问控制:如果第二个学生设置权限来防止第一个学生读她的作业文件,则第一个学生就不能复制该文件。
例1.6 一家公司的安全策略规定:与某种特定产品相关的信息是专利信息,且不能脱离公司的控制。公司将备份磁带保存在城市银行的保险库里(这样做通常是为了防止计算机设备遭到完全破坏)。公司必须确保只有被授权的员工才能访问备份磁带,即便磁带是离线存储的。这样,银行对保险库的访问控制、对用于从银行中输入/输出磁带的过程的控制就是安全机制。需要注意的是:这些机制不是建立在计算机之上的技术控制。规程控制或运行控制也同样是安全机制。
安全策略有时是隐含定义而不是明确定义的。这往往会带来混乱,尤其是当策略由多种机制定义时。这样的定义可能模棱两可。例如,如果某些机制禁止特定行为,而其他机制却允许这些行为。这样的策略就会带来混乱,须避免。
例1.7 UNIX操作系统最初是为规模较小的研究团体开发的,它采用了充分的机制来防止用户意外地破坏他人的文件。例如,用户ken不能删除用户dmr的文件(除非dmr恰当地设置了该文件和包含该文件的文件夹)。在这样一个友好的环境下,其隐含的安全策略是“不要删除或破坏他人的文件,未加保护的任何文件都是可读文件”。
一旦UNIX操作系统用于科研、商业机构或政府部门,那么上述安全策略就不充分了。例如,有些文件对于个别用户(而不是用户组)是不可访问的。毫无疑问,这时上述安全机制也是不充分的。
出于分析的目的,区分策略与策略的抽象描述是很重要的。
定义1.10 安全模型是表达特定安全策略或安全策略集合的模型。
模型抽象出与分析相关的多种细节。很少有分析讨论专门的策略,因为许多策略体现出多种细节特征,所以通常分析都侧重于策略的这些特征。而且具有这些特征的策略越多,策略的分析就越有效。根据HRU结果,没有单一的能够涵盖所有策略的非平凡分析,但是约束安全策略的分类可以有效地对多种类型的策略进行分析。
1.5.5 安全策略的类型
不同的场合有不同的机密性、完整性和可用性的需求级别,不同场合下的策略描述了该特定场合的需求。
定义1.11 军事安全策略(又称政府安全策略)是以提供机密性为主要目的的安全策略。
该名称源于军事上保密信息的需求,如一艘军舰的出航日期。虽然完整性和可用性也是重要的,使用这类策略能够减少这两者的损失(如不使用通过计算机网络发送的命令),但是如果机密性受到危害,那么后果将是灾难性的,因为敌方可能会制订对抗计划(而己方却没有察觉机密性已受到危害)。
机密性是隐私的一部分,而隐私权是得到许多政府实体的法律认可的(如美国的隐私法和瑞典的相关法律)。除了限制政府实体可以合法地获取何种个人信息外,这些法律也限制了这些信息的泄露与滥用。未经授权的隐私泄露可能会导致监禁或罚款,而且这样的泄露也会破坏公众对政府的信任和尊重,进而使公众不再向这些泄密机构提供类似的信息。
定义1.12 商业安全策略是以提供完整性为主要目的的安全策略。
该名称源于商业机构防止数据被篡改的需求,因为它们承受不起这样的危害。例如,如果银行计算机的机密性受到了危害,可能会导致客户账户资金的泄露。这必然会使银行陷入尴尬的境地,客户也可能因此而将其业务转移到其他银行。如果存有账户信息的计算机的完整性受到危害,那么客户账户资金可能会被改变,从而导致财务上的毁灭性后果。
一些完整性策略使用“事务”这个概念,正如数据库规范一样,它们要求使用可以保持数据库状态的一致性的操作。这些策略称为面向事务的完整性策略,它们对于需要数据库一致性的机构而言是非常重要的。
例1.8 为了实现客户将钱从一个账户转移到另一账户的功能,银行使用了一种良定义的事务,该事务包含两个不同的部分:钱先从前面的账户借出,再存入后一个账户。如果两个事务不是一同完成的,客户就会损失金钱。如果使用良定义的事务处理,即便事务中断(不管是发生在事务开始前还是事务完成前),数据库的状态仍然是一致的。因此,银行安全策略的一部分就是所有的事务必须是良定义的。
以上策略的信任角色凸显出这些策略间的差异。机密性策略没有对客体设置信任。就所关注的策略而言,客体可以是内容正确的报告,也可以是从伊索寓言里摘录的故事。策略描述规定了客体是否可以被泄露,但它并没有指出是否应该信任客体。
与机密性策略相反,完整性策略表明可在多大程度上信任客体。假设某种信任级别是正确的,完整性策略规定了主体可以怎样处理客体。但棘手的问题是如何指派信任级别。例如,如果站点获取了某程序的一个新版本,那么这个程序的完整性应该是高(表示站点信任程序的新版本)还是低(表示该站点还不信任这个新程序)?还是应该介于两者之间(由于程序是供应商提供的,并没有像老版本程序一样在本地站点经历了完全的测试)呢?这就使得完整性策略比机密性策略模糊得多。机密性级别的指派基于划分者希望其他人知道什么,而完整性级别的指派基于划分者对信息可信度的主观评判。
有两个描述策略的术语与安全需求相关,因为它们会在其他地方出现,现在就对其进行定义。
定义1.13 机密性策略是仅处理机密性的安全策略。
定义1.14 完整性策略是仅处理完整性的安全策略。
虽然机密性策略和军事策略都是处理机密性的,但机密性策略并不处理完整性,而军事策略却要处理完整性。完整性策略和商业策略的区别与此相似。