入侵容忍体系架构:概念与设计
摘要
在差错容忍和安全领域内,对分布式计算体系架构,方法学及算法有着重要的研究部分。虽然过去它们都有不同的研究方法,但是要解决的问题有着相似性。在传统的可靠性研究中,差错容忍已成为许多解决方案的重要部分。而在传统安全相关的研究工作中,几乎毫无例外的都是以入侵检测为重点。在过去的十几年里,入侵容忍 (IT) 是一种慢慢形成的新方法,并在最近有了突破性的进展。允许入侵,但容忍这种入侵,而不是千方百计的阻止每一次入侵:系统触发了一系列机制,这些机制预防了入侵所产生的系统安全失败。本文描述了入侵容忍的基本概念,考察它们和传统错误容忍以及安全的联系。我们讨论了构建入侵容忍系统的主要策略和机制,并且对分布式入侵容忍系统最新研究进展有所介绍。
翻译:程晓松 华东理工大学计算机应用技术
目录
1 简介…………………………………………………………………………………………………..……3
2 入侵容忍案例 3
2.1 传统差错容忍和安全概要…………………………………………………………….. . . . . . . . . . . . . 4
2.2 作为通用框架的可靠性……………………………………………………….... . . . . . . . . . . . . . . . . . 4
2.3 待解决问题…………………………………………………….. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3 入侵容忍的概念 7
3.1 AVI复合差错模型…………………………………………………….... . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 信任和可信任性…………………………………………………….. . . . . . . . . . . . . . . . . . . . . . . . . ... 8
3.3 关注点的覆盖范围和分离………………………………………………… . . . . . . . . . . . . . . . . . . . . 10
4 IT框架和机制 11
4.1 安全和错误容忍通讯. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 11
4.2 基于软件的入侵容忍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ……….. . . . . . . . . . . . . . . . . . . . . 11
4.3 基于硬件的入侵容忍……………………………………………………….. . . . . . . . . . . . . . . . . . . . 12
4.4 审计与入侵检测………………………………………………………… . . . . . . . . . . . . . . . . . . . . . . 12
4.5 入侵容忍的观点下的一些安全框架………...…………………………………. . . . . . . . . . . . . . . . . 13
4.6 处理源于入侵的误差…………………………………………………………….. . . . . . . . . . . . . . . . 15
4.7 入侵检测机制…………………………………………………………… . . . . . . . . . . . . . . . . . . . . . . 15
5 入侵容忍策略 16
5.1 差错避免和差错容忍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 16
5.2 机密操作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 17
5.3 完善非停顿操作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 17
5.4 可重新配置操作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 17
5.5 可恢复性操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 18
5.6 故障安全. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ……….. . . . . . . . . . 18
6 对恶意错误建模 18
6.1 任意故障假设. . . . . . . . . . . . . . . . . . . . . . ………………………………………………………….. . 19
6.2 考虑为有用的混合故障假设. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ………….. . . . . . . . . 19
7 构建入侵容忍系统 20
7.1 (几乎)没有假设. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . …. . . . . . . . . . . . . . . . . . . . . . . . . . . 20
7.2 未经证明的假设,或者信念的力量. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ………. . . . . . . . . . . . . . 21
7.3 架构混合体. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . 22
7.4 预防,容忍,有一些刺激. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . 22
7.5 使用信任组件. . . . . . . . . . . . . . . . ……. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 23
8 系统实例 24
8.1 OASIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
8.2 MAFTIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
8.2.1 实践中的混合架构体系. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
8.2.2 虫孔感知协议. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . .. 27
9 结论 29
1 简介
在可靠性及差错容忍,安全及信息保障领域内,对分布式计算体系架构,方法学及算法有着重要的研究部分。在大多数情况下,这些研究部分通常在许多领域得到应用,例如:信息基础架构;基于web的商业站点,嵌入式系统。它们的操作已经成为了需要考虑的因素,目前也就是检测设备的使用,压缩的设计周期和开放性。虽然它们有着不同的研究方法,直到最近这种情况才有所改变,但是要解决的问题都有相似属性:尽管我们通常所谓的错误(意外或者恶意攻击)等发生,仍然要保持系统正确运转;确保当系统失败时(原因依然是意外或者恶意错误),它们并不产生危害。传统的可靠性,主要在分布式设置中,差错相容在很多年前就已经成为许多已知解决方案的重要部分。传统的安全相关的工作则少有例外的有着另一方面的侧重点,即不包含处理入侵征兆的系统性形式的入侵预防或入侵检测。
在过去的十年里,一种新的研究方法慢慢形成,并且在最近获得了令人瞩目的发展势头:入侵容忍(IT)即对包括有意图的和恶意错误在内的一系列错误的集合 (我们可以统称它们为入侵)- 反应, 阻碍, 恢复, 掩饰-的处理概念,如果不对这些入侵对系统状态的影响加以考虑,那么它们将有可能导致系统安全属性方面出现问题。简而言之,我们不是设法阻止每一次入侵,取而代之的是在允许这些入侵的基础上对其容忍:系统有特殊方法触发一种机制来防止入侵导致的系统故障。
分布和错误容忍有着密切关系:一方面用来实现对通用模式错误的适应,且/或一方面在分布式系统中嵌入错误容忍来减少由分布所产生的更大的错误概率。与一些错误的概念相反,安全和分布同样也有着密切关系:一个将信息和处理过程在地理上分离和分隔,使得攻击者更难得逞。这暗示着(分布式)恶意错误容忍,a.k.a(分布式)入侵容忍对于实现安全处理是一个显而易见的方法。如果这是如此显而易见,为什么它不早点发生呢?
事实上,“入侵容忍”这个词在论文[19]中第一次被使用,随后在DELTA-4项目中开发了一个特殊的系统。随后的几年中,在IT这个概念下,主要是在协议方面,进行了许多独立的研究工作[10, 34, 23, 2, 27, 4, 22],但是直到最近, 这个领域才取得了爆发式的进展。在大西洋两岸,两个主要的项目,OASIS和MAFTLA在概念,机制,和架构上对IT进行了研究。一个主要的原因就是恶意错误的出现使得分布式系统出现了基本性的问题。另一方面,传统的差错容忍遵循着一个构架,这种构架并不能完全适用于有意图的和恶意的错误这个方面。下文将讨论这些问题。
本文的目的在于尝试着系统化这些新概念和设计原理。论文阐述了入侵容忍(IT)的基本概念,考察它们和传统错误容忍以及安全的联系,并在指出了IT发展过程中的主要问题。我们讨论构建IT系统的主要策略和机制,并介绍分布式IT系统架构的最新进展。为了不引起混淆,我们假定一个“体系架构”是通过组件的组合来具体化。组件有功能性和非功能性的属性,以及一个接口,这些属性就是通过这个接口来表现。组件位于一个给定的体系架构的拓扑结构中,并通过算法进行交互(一般而言),全局系统属性从而在这些交互作用中产生。
2 入侵容忍案例
可靠性已经定义为一台计算机系统的特性,因此可以很有理由的将信任设置在系统所提供的服务中。正如系统对于它的用户是可见的一样,系统所提供的服务就是它的行为;用户则是另一个系统(人类的或者物理上的),它和前者进行交互。
可靠性是研究的主要部分,它包括一系列范例,在这些范例中错误被容忍,并且它少有例外的都是在偶然错误这一框架下产生的[19,17],但是我们将以连贯的方式揭示可以应用于恶意错误的本质概念。
2.1 传统错误容忍及安全概要
Gray解释道:“为什么计算机出错,我们能做些什么?”;尽管事实上所有的工作可能出错,但是人们似乎趋向于过高估计他们所依赖的计算系统的质量。对于分布式系统亦是如此。如同Lamport所说的“分布式系统一种有碍你工作的系统,因为这种系统的故障你可能从来没有听说过”。假设机器独立的出现故障,作为初始状态,假设一个系统的可靠性(<1)是每个组件的可靠性的积,则在分布式系统中一些组件出现故障的机会就比单一的系统大很多。如果组件在出现故障时会影响其他组件,那么情况就更糟糕。
恶性破坏使得分布式系统的可靠性问题更加棘手:因为攻击者很可能制造“普通-模式”症状,我们不再能够像对待一个意外的错误那样,独立的考虑所出现的故障;组件间可能通过分布式协议实现串连;由于在错误的时刻,包含伪造的身份或内容的矛盾的输出这种情况的发生,不再能被考虑成“低概率”,因此故障本身就变得更严峻;此外,受高智商对手的意志控制,它们有可能在系统最不适的时刻或位置发生。
这影响了传统错误容忍里被长期坚信的理论:传统错误容忍认为错误类型和分布遵循统计学上可定义的模式。环境可以用随机意义上的术语定义。本质上,你可以依赖:预定义的和静态错误模型及环境假设。
从恶意错误观点来谈论错误容忍(FT)时,第一个问题就是:如何对一个攻击者的思维进行建模?
现在让我们用传统的安全观点来审视一下这个问题。典型的安全属性是:机密性,用此方法保护一个服务或一段信息不被非授权访问;真实性,用此方法保护一个服务或者一段信息是真实的,不是伪造的;完整性,用此方式保护一个服务或一段信息不被私自或者未被侦测到的修改;可用性,用此方法保证一个服务或一段信息不拒绝那些通过验证的访问。一个理想的系统的设计目的在于保证所有或者这些属性当中的一部分。
传统上,安全已经逐渐成为阻止某些确定的攻击,去除初始不健壮软件的易受攻击性,阻止攻击演变为入侵这三个方面的结合。例如,为了保护机密性,让入侵者读取任何机密的数据是不可思议的。那就是说,安全是以阻止预防这种模式为基础的。但是,让我们假设想象一下在安全上的容忍模式[1]。
? 假定(且认可)系统在某种程度上依然易受攻击;
? 假定(且认可)对于组件/子系统的攻击可能发生,且有一部分会成功;
? 确保整个系统依然是可靠的,运转的。
那么可以提出另一个问题:我们怎么使得入侵者读取修改数据的前提下,依然确保机密性和完整性?
2.2 作为一个通用框架的可靠性
我们观察图1中著名的fault-error-failure序列。可靠性的目的在防止系统的故障。这种故障由远程引起,有可能是一个错误(例如程序中的漏洞,或配置错误),如果它被激活(例如程序执行到错误的代码位置),那么在系统状态中将导致一个错误的发生。如果什么都不做,那么在系统运行过程中,我们就会发现这个故障。
因此,实现可靠性意味着各种技术的综合使用,这些技术包括错误阻止,即如何预防错误的发生和引入;错误去除,即如何减少错误的出现(数量,严重程度);错误预报,即如何评估错误的出现,产生以及结果;最后就是错误容忍,即如何确保在出现错误的情况下继续提供正确的服务。因而,在面对恶意错误(入侵和攻击)时,实现可靠性意味着含有容忍技术的传统预防和去除错误技术的综合使用。
图 1: Fault–> Error–> Failure 序列
接下来我们分析一下标准和分布式错误容忍的基础,来看一下它们在这种新情景下是如何适用的:
? 拓扑分离,目的在于实现错误的独立及降解。
? 复制,无论软件或者硬件,作为冗余的形式之一,有着粗或细的力度之分。
? 可配置性,通过大量的假设错误,大量的复件,复件控制的类型(活动,半活动,被动,联合声明,投票规则)
? 资源最优化,通过软件到硬件的组件映射及逐渐增加的F/T类别(疏忽的,断定的,任意的)。
从攻击效力来讲,拓扑分离使得入侵者的侵入行为更加困难。例如,可以通过若干个站点机密内容,得到部分机密并不会泄漏整个机密内容。从完整性和可用性来说,复制使得组件对于损害来说有更强的复原性,但是(虽然有违于直觉)也能有益于机密性及真实性,如果我们思考一下经复制的决定的执行(例如,要不要提交一段数据,或者要不要执行验证。举例来说,一个单一的受侵袭的站点将不能决定对一段数据进行访问的验证。对于不同强度和不同种类的入侵的恢复能力,可配置性是实现这种恢复能力的关键(f+1复制来抵挡拒绝服务的攻击,3f+1可以对Byzantine错误进行恢复,以此类推),同时也是实现不同恢复类型(不仅是最迅速的激活,也包括半活动和被动)的关键。资源最优化降低了实现入侵容忍的代价。
这个方法看起来是令人信服的,但是在具体的条件下,如何将容忍应用于攻击,缺陷,入侵这样的情景之中呢?
2.3 待解决问题
让我们分析一下一些待解决的问题,这些问题是在一个安全或者错误容忍的背景下对入侵容忍分析时所产生的。
首先,是什么导致了入侵的风险?风险对存在的入侵的概率及它们的严重程度的一种综合的测量方法。换句话说,就是这些入侵引起的错误的影响。前者受两个作用在组合中的因素的影响:对于那些计算或通信已经暴露的系统的威胁级别;它所处理的易受攻击性的程度。对于一个系统潜在的不安全性的程度(换句话说,保证其安全的难度)的测量依赖于:系统缺陷的数量和种类(易受攻击性);以及这些存在的对于系统的攻击的可能性(威胁)。通俗来说,入侵的概率是由对于系统缺陷敏感的攻击的概率所决定的。后者,错误的影响力,是通过在系统运转中的入侵代价来测量的。这种代价可以用若干形式来换算(经济的,政治的,等等)。
考虑一下下列的两个例子系统:
Vault系统的易受攻击度vvault =0.1,既然它有如此之高的适应力,它的设计者用它来服务Internet上的匿名请求,对访问它的人不进行任何控制,那就是说,它将面临着的威胁级别非常之高,tvault=100。
Sieve系统,正好相反,它是一个易受攻击的系统,vsieve =10,因此它的设计者对它进行了保护处理,将它置于防火墙下,并控制对它的访问,转化成威胁级别的表示就是tsieve=1。
哪一个系统的运行风险更低呢?考虑一下在我们理论例子中威胁度与易受攻击度的乘积:用我们赋予每个系统的假设值进行计算,虽然Sieve系统的易受攻击性是Vault系统的一百倍,但是两个系统却得到了同样的结果(10)。
我们应该竭尽全力将风险降到零嘛?那是否真的可行?这就是传统的对系统所面临的攻击及易受攻击性的数量,能力及严重性进行阻止/去除。问题是没有办法将这些降到任意的低点,因为以下几个原因:花费的代价太大并且/或者过于复杂(例如,过于长的代码,硬件约束);某些攻击来自于正在被部署的服务的种类(例如,Internet上的公共匿名服务器);某些易受攻击性是属于系统设计的恰当性(例如,在某些操作系统中机制所导致的竞争)。
就算我们能够将风险降到零,这样做是否值得呢?谈论一下可接受的风险应该是有可能的:所谓可接受的风险就是在给定我们所要保护的服务或者数据的值的前提下,对于我们所能接受的故障概率的值。因为它对于防止/去除错误及容忍系统内的残余错误所应尽的努力,建立了一个标准,因此当我们构建入侵容忍系统时,这将培养我们的推理。如果我们考虑一下黑客或者入侵者他们也有入侵代价,这种代价可以用时间,精力,金钱或者它们的综合来衡量。通过在入侵代价和资产价值方面建立关系,可以很明确的把它看作“可接受的风险”,那么我们可以用更进一步的向导对系统进行假设。
据报道,安全端口层(SSL)可以保证浏览器和WWW服务器之间的安全客户端-服务器交互过程。SSL真的安全吗?用户在并没有量化到底有多安全的情况下,趋向于认可交互是安全的(假设易受攻击度较低)。一些公司已经用SSL建立了他们的商业服务器,有些服务器完成Internet上(高级别的威胁)重要的金融交易。Netscape的SSL被破解,就是因为其中的一个bug允许复制会话密钥,这将破解任何通讯。经过对40位的密钥(根据美国对于加密材料的出口限制,那是所能达到的密码长度)进行暴力法破解,使得修正过的版本至少又被破解了两次。这种初始情形导致了一个高度的风险。
SSL足够安全吗?Netscape发布了一个SSL的修正版本,并报道说要在计算期间破解一个Internet会话需要至少花费10,000美金。相对于系统提供服务的价值,入侵一个系统的代价使得架构师可以做一个风险评估。某人花了10000欧元来破解系统,最终得到100欧元的奖金,是做了一次赔本买卖。这就给可接受的风险下了定义。不幸的是,这些评估可能会失败:在Netscape宣布后不久,一个学生用了一台高性能的桌面图形工作站,仅仅花费了600美元就破解了系统。然而,并不是Netscape的原则和态度出现了问题,而是他们做的过于理想化的风险评估有问题。
窜改-防止是如何‘窜改-防止’的呢? 传统来说, ‘窜改-防止’意味着组件被屏蔽,例如,它不能被穿透。但是,为了处理发现一些组件并不是“完美的”防窜改的尴尬情况,这个领域的专家引入了一个经过改变的名称,“抗窜改”来表达那个事实。然而,后者的不严密是令人忧虑的,导致了我们所说的“手表制造商综合症”:
? “这块手表是防水吗?”
? “不,它是抗水的。”
? “总之,我假设我可以带着它游泳!”
? “是的,你可以!但是…我并不十分有把握…”
在不引入另一个含糊的术语的情况下,将可以计量的“有缺点的”概念赋予防止窜改需要进行定义。某种事务如何被信任同时又是不可信任的?传统来说,在安全方面, 目的在于建立组件间的信任,但是我们所信任的对象的价值通常没有得到分析。这导致了我们所谓的“未证明的信任症状”:
? “我信任Alice!”
? “好吧Bob,你不应该这样,她不是值得信任的。”
问题出在哪里?Bob通过一些在高层次上(例如,Alice出示了一些签名的证书)正确的手段对Alice建立了信任。但是应该对一个他所遗忘的事实有所警惕(例如,Alice能够伪造证书)。在组件需要什么和组件能提供什么之间建立区分关系是必要的。
我们如何对黑客的思维进行建模?既然黑客是对系统攻击的作恶者,错误模型应该是他/她可进行的行为的描述。那么,传统的建模方法将导致“行为端正的黑客综合症”:
? “你好,我今天要成为你的黑客,这是我承诺不会做的事情的列表。”
? “谢谢,这是一些额外的攻击,我们希望你不要尝试这些攻击。”
因此,能够精练可能发生的错误类型的恶意错误建模方法论是迫切需要的,这个方法论不应该对黑客如何行动作天真的假设。出现在这一节的这个至关重要的问题在论文的剩余章节也会提及。
3 入侵容忍的概念
什么是入侵容忍?就像上面说的,在安全方面的容忍的范例:假设系统仍然有一定的易受攻击性,假设对于组件或者子系统的攻击仍然可能发生,且一些攻击会成功;以定量的概率确保系统整体依然是安全和可运转的,换句话说:
? 错误-恶意及其他的-发生;
? 它们产生了差错,例如,组件级的安全危害;
? 差错处理机制保证安全性的故障被预防
显而易见,一个完全的方法将阻止,去除,预测,传统可靠性领域的方法和容忍结合起来。
3.1 AVI复合错误模型
系统或部件发生故障的机制,安全方针,和许多原因密切相关,这些原因范围广泛,从内部错误(例如,内部缺陷),到外部,交互错误(例如,攻击),它们的组合所产生的错误可以直接导致部件故障(例如,入侵)。入侵有以下两条原因:
缺陷–计算或者通讯系统中的错误,这些错误可以被恶意的企图利用。
攻击– 对计算或通讯系统的恶意的有意图的错误,带有寻找系统内的缺陷的意图,它们将导致:
入侵– 有对系统缺陷成功入侵所导致的恶意的操作性错误
分辨对安全故障有影响的不同类型的错误是十分必要的。图2a表明了这三类错误的基本序列:攻击→缺陷→入侵→故障。在攻击/缺陷/入侵这三者之间的定义关系就是我们所谓的AVI复合错误模型。AVI序列可以在由入侵者所产生的事件链中递归的发生,也被称作入侵活动。例如,一个由前一次成功的攻击产生的特定的缺陷可能已经在入侵中被引入。
缺陷是存在于部件中的原始错误,本质需求,说明,设计或构造错误(例如,代码错误允许程序堆栈溢出,Unix系统中带有根setuid,简单的密码,未保护的TCP/IP端口)。这些都是正常的意外但有可能是由有意图的行为所引起的,就如同上段所指出的那样。攻击是交互性错误,它的恶意性企图在于激活这些缺陷中的一个或更多。(例如,端口扫描,邮件病毒,恶意Java小应用程序,或者ActiveX控件)。
激活了缺陷的成功的攻击事件就被称作入侵。这通向故障的更进一步通常的特点是系统中不正确的状态,这种状态可能有许多形式(例如,以telnet方式访问的未授权的特权帐户,黑客对系统文件有非正常的访问许可)入侵容忍意味着这些错误可以被入侵检测所发现,并且它们可以被恢复或者隐藏起来。但是,如果对这些由入侵所引起的错误无动于衷的话,一些或者若干安全属性故障就有可能发生。
图 2: (a) AVI复合错误模型;(b) 阻止安全故障
为什么是一个复合模型?AVI模型是这些普通的fault→error→failure序列的特例,它有许多优点。首先,它精确的描述了入侵的机制:没有相应的攻击时,一个特定的缺陷是无害的;没有目标的缺陷时,入侵是不相关的。其次,通过一些技术的综合介绍,它提供了建设性的向导来建立可靠性来抵御恶意错误。首先,我们我们可以阻止一些攻击的发生,降低危险级别,如图2b所示。攻击阻止可以被执行,例如,通过隐藏UNIX系统中的密码文件,使它不能被未经授权的用户访问,或者分离出对系统部分的范文(例如,部件处在防火墙下且不能被Internet访问,来自于Internet的攻击是被阻止的)。我们也可以实现攻击消除,它是由设法停止正在进行的攻击所组成。但是,阻止所有攻击是不可能的,因此降低威胁级别应该和减少缺陷程度相结合,通过缺陷预防,例如在设计和构建系统时采用最佳实践,或者通过缺陷消除(例如,调试,补丁,终止模块等)例如阻止对一个特定的缺点的攻击时不可能的。上面所述的技术预示这我们所说的入侵阻止,例如,阻止入侵错误的发生。
图2b说明,如同我们早先讨论的那样,确保理想的阻止是不可能也是不可行的。理由是显而易见的:对所有攻击的处理是不可能的,或是因为不是所有的攻击都是已知的或者新的攻击可能会出现;对于去除或者阻止新缺陷的出现也是不可能的。因为这些入侵依然可以避开阻止的过程,为了阻止系统故障,如图所示,就需要入侵容忍这种形式。如同后文将要解释的那样,这些可以假设若干形式:对于(例如,侵入的帐号活动,特洛伊木马的活动)的检测;恢复(例如,监听和中和入侵者行为);或者伪装(例如,若干部件间的表决,包括少数被入侵的部件)。
3.2 信任和可信任的
形容词“受信任”和“可信的”是许多关于系统的可靠性的争论的重要部分。到目前为止,它们经常在关于安全的上下文中被不一致并且独有的使用。但是,“信任”和“可信认的”的概念可以通用的指向一般的属性并不仅仅是安全;它们之间有一个定义明确的关系――就某种意义上说,它们和“信任”及“可信任”这两个词密切相关。
信任- 指一个部件对于另一个部件,子系统或者系统的一组属性(功能的或者非功能的)认可的信任。
结果,一个受信任的部件有一组被另一个部件(或一些部件)依赖的属性。如果A信任B,则A得接受,在B的这些属性中的侵害可能会对A的正确操作造成危害。注意到,信任不湿绝对的:A对B的信任程度由A对B中所信任的功能的和非功能的属性集所表达(例如,智能卡:P1-对于每个输入给出一个正确的签名;P2-10小时的平均无故障时间(对于一个特定的威胁级别..))。
由A所信任的B的属性可能并不定量或定性地对应B的实际属性。但是,为了使由信任的定义所暗示的关系具体化,信任应该置于部件的可信认的范围之内。换句话说,信任,B是可靠的,应该置于B的可靠性的度量中。
可信任性 – 部件,子系统,或者系统用以满足属性集(功能的或者非功能的)的度量。
部件的可信任性,毫无疑问,是通过它如何保护源于它的体系结构,构造和环境的功能和非功能属性集的安全来定义的,并且恰当的作出评估。被用来实现上述例子的智能卡在正规的操作条件下,实际上应该满足或者超过P1和P2。
上面的定义对于设计入侵容忍系统有着显而易见(合乎需要的)重要地位:信任不湿绝对的,从数量或质量上来说,它可能有若干个度数;它不仅仅和涉及到安全的属性相关,事实上它和任意的属性相关联(例如,时间轴);信任和可信任性通向了设计和确认过程的互补的方面。换句话说,当A信任B时,A对B有一些假设。B的可信任性度量了假设的覆盖范围。
事实上,关于信任和可信任性可以分开来推理。可以定义信任链或层,对它们作出正式的表述,并且验证这个过程。作为补充,应该保证上述过程中有关的部件被赋予必要的可信任性。这个改变的过程参与了部件的设计和验证,或者现存的部件的确认/认证(例如,检测设备)。这两个术语建立了对于故障模式关注的分离:更高层次的算法或者断言(例如,验证/授权逻辑);运行它们的基础架构(例如,进城/服务器/通讯)的分离。
入侵容忍策略应该依靠这些概念。断言“信任一个受信任的部件”揭示了下面的对于在复杂系统组件式错误容忍的构造的指导方针:部件根据它们可信任性的程度受到信任;对于如何处理放置在部件上的信任(例如,建立错误容忍算法),及如何实现或者表示它的可信任性(例如,构建部件)是有区别的。对于这些指导方针的实际运用将在后续部分中例示。
让我们从这些概念的角度,再回顾一下防止窜改的装置,防止窜改性是被保护的系统/部件的属性,例如它的攻击模型是那些仅能再常规接口进行的攻击。部件也许并不是完美的,我们把它和部件的相关可信任性等同,可信任性由防止窜改假设的覆盖范围的概念所度量,而不是使用“抵抗窜改”。
作为一个例子,假设授权服务的实现使用JavaCards来存储密钥。我们假设JavaCards是防止窜改的,因此,我们声明它们是可信任的而不比把这些密钥给未授权的一方。因此我们基于信任JavaCards而建立了授权服务,仅仅是在它们的可信任的一定程度之内,那就是说,JavaCards防止窜改所给定的覆盖范围。例如,应该对JavaCards在特定的环境下(攻击模型)时的适应能力作出大概的估计,例如,时间和计算能力。
3.3 关系的覆盖和分离
让我们分析一下如何在AVI模型下建立正确的信任。假设部件C已经断言P有一个覆盖范围Pr, 这就定义了部件的可信任性,<P, Pr>。因此另一个部件B应该在C以概率Pr控制P这样的程度上信任C 。因此,故障就和C有限的可信任性一致了(例如,Pr < 1);这些都是“正常的”,并且无论任何依赖C的,如同B,都应该意识并预期这个事实(也许以一个更大的系统角度,采取防备来容忍这个事实)。
但是,也可能发生B在比它所应该的更大的程度上信任C:放置在C上的信任程度比它的可信任性要高,也许时因为对后者错误或疏忽的感知。任何使用这个部件的所犯的错误,它可以导致意外错误。
图 3: 建立信任
最后,还可能发生的对C的可信任性作出的声明是错误的(关于断言P,或者它的覆盖Pr ,或者两者)。部件是以一种比关于它的适应性的声明中所陈述的更加糟糕,更加早,或者更加频繁的方式失效。在这种情况下,即使B在程度<P, Pr>上信任C,依然可能存在意外的故障发生。但是,这一次,是由于构建建立部件的人的错误。
既然允许“OEM”或者“COTS”方法,利害关系的这种分离在构建可靠系统基于部件的方法中是十分重要的;如果“购买”了一个带有某种规格的部件,“制造商”(即使只有另一个项目设计团队)最终为部件满足规格所负责。
最后,部件B信任部件C意味着什么?这意味着部件B对C进行一些假设。归纳的说,假设一个集合B有元素(B1 ~ Bn), 这个集合运行特定的算法产生了属性集合A,并且在运行时环境中由一个含有元素(C1 ~ Cn)的集合C来构成它自己。这个模块想法对于分布式系统已经足够了但又不只限于分布式系统I设想环境如图3a所示: 构建C来提供一组属性,称之为H。这就作为B操作所在的支持环境,如图3b中的阴影部分所示。
观察到B信任C来提供H::B依赖环境的属性H来实现保证属性A安全的算法。同样地,B的用户信任后者来提供A。如果没有进一步讨论,这条受信链将成为:如果C 被信任来提供H ,那么B 被信任来提供A 。
现在让我们观察一下可信任性这一方面。H赞同概率Pre,环境的假设覆盖范围:
Pre = Pr(H|f) , f – 任意错误
Pre 得出了C的可信任性(来保护属性H).。给定H, A就有一个确定的被满足的概率(如果算法是确定性的及正确的,可以是1 ,如果是随即的或者有设计错误的,可以小于1),覆盖范围Pro 或者操作假设覆盖范围:
Pro = Pr(A|H)
Pro 计算了B保护属性A的信心(给定H作为环境)。于是,个别的部件B的可信任性(给定H,保护属性A)将有Pro给出。
如同我们的建议,这些等式应该在信任关系的程度上加上限制。B应该在H带有信心Pre<1的程度上信任C。但是,既然用户对B的信任是由B对C的信任所蕴含的,但是受C的可信任性的约束,那么用户应该在为A提供信心的程度上信任B不是孤立的:
Pra = Pro × Pre = Pr(A|H) × Pr(H|f) = Pr(A|f), f – 任意错误
结果链可以递归的进行。Pra是由B和C构成系统的一个用户对属性A满意的概率,换句话说,它计算了它的可信任性。
4 IT框架与机制
在介绍了入侵容忍的概念之后,这一节中,我们简要的分析一下IT的主要框架,系统架构师就可以用这个框架来构建入侵容忍系统:可靠的错误容忍通讯;基于软件的入侵容忍;基于硬件的入侵容忍;审计和入侵检测。我们同时也将从入侵容忍的角度分析一下著名的安全框架。随后为了从入侵中恢复,我们会回顾一下错误处理机制。
4.1 安全且容错的通讯
这是一个框架,它是关于确保入侵容忍通讯协议的主要部分。实质上,和这个框架相关的是安全通道,安全套装和传统错误容忍通讯。
通常设置安全信道是为了在主要节点之间进行常规通讯或是那些对于会话或连接的概念来讲,持续时间够长的有意义通讯。例如,文件传输或者远程会话。它们处于适应性(resilience)/速度平衡之中。因为它们是在线操作,所以有可能同时结合使用物理或虚拟加密。安全信道对每一个会话采取安全保证,且通常使用对称通讯封装,签名或者基于加密效验和(MAC)的信道验证。安全套装主要用于偶发性的传输,例如email.,它们对每个消息进行安全保证且可能综合使用对称和非对称加密(也叫混合加密)作为提高性能的形式,尤其是对于哪些大量消息的通讯。
一些技术有助于错误容忍通讯协议的设计。如何选择主要是有赖于以下问题的答案:通讯网络组件的故障类别是什么?
对于架构师来讲,这在安全和错误容忍之间建立了一个基本联系。在传统的错误容忍通讯中,遗漏型的错误模型(崩溃,疏忽等等)很常见。在IT中,故障模式假设应该以AVI错误模型为导向,另外特殊组件的属性可能限制应该是初始假设的部分:任意故障(省略和断言行为的组合)。实际上,这就是表示恶意智能的最适当的基线模型。
4.2 基于软件的入侵容忍
基于软件的错误容忍主要目的在于用软件的技术容忍硬件错误。另一个重要方面是软件错误容忍的目的在于通过设计多样性来容忍软件设计错误。最后,早就众所周知的是通过复制的基于软件的错误容忍在处理瞬时的和间断的软件错误的是非常高效的。
基于软件的错误容忍是FT的基本模块,这个基本模块是分布式错误容忍的主要范例。主要的参与者是软件模块,模块在系统的多个站点中的数量和位置有赖于要达到的可靠性的目标。
从IT角度,我们分析一下可以做些什么。在设计或者配置错误的案例中,简单的复制并不能起到明显的作用:错误将会系统性的在所有的复制品中出现。从可攻击性的观点来看,这是千真万确的:它一定会存在与所有的复件中。但是AVI模型下的通用模式症状涉及到入侵,或者攻击-缺陷对而不是单一的缺陷。
这就给了架构师一些机会。考虑到通用模式缺陷的问题及通用模式攻击,例如,可以定向自动且同步的对所有(同样的)复件进行攻击的克隆。此时就应该应用设计的多样性,例如通过使用不用的操作系统,不仅可以降低通用模式缺陷(传统方法)的概率同时也可以降低通用模式攻击(通过迫使攻击者掌握对不只一种架构的攻击)的概率。进而降低了通用模式入侵的概率,如同希望的那样。
这就可以采取进一步的措施:使用不同系统的体系架构,测试执行结果而不是对预期的结果进行断言。例如,特定部件的每一个复件都有不同的程序员团队设计和开发。软件设计多样性是相当昂贵的(即使只有一个团队进行开发,大多数软件产品的开发费用仍然很大),除非有充足的费用,要不然很少采用软件设计多样性这种方法。
但是,即使同类的部件进行单纯复制可以产生重要的结果,那是如何产生的呢?当部件有足够高的可信任性,对完成一次成功的对部件其中之一进行攻击-缺陷(例如,“攻破”它)的难度可以作出断言。在这种情况下,我们应该应用实现复件集的可靠性这样的传统原理,复件集的可靠性比单一复件的可靠性要高的多。例如,简单复制可以通过使攻击者成功对所有复件发动同步攻击难度加大且时间延长来容忍攻击。
警告将用来得出精确的公式。循规蹈矩的公式假设的是独立故障模式。在IT中,我们的观点是两者之间的:它们既不是独立的,也不是通用模式。实际上到底是什么仍然是一个研究课题。要跟上这个方法的思路,我们不能忘记前面章节中对于遵循恶意行为的错误模型的需要考虑之处。那就是复制管理(例如,选举)标准通常应该包含断定的(值域)行为及微小的类型(例如,不一致或者Byzantine)
最后,既然同一部件的复件可以位于不同硬件或者不同操作系统体系架构中,并且在不同时刻不同环境中执行,这种内在的“多样性”已经足够容忍很多错误了,特别是那些会导致间歇行为的错误。由此得出结论,短暂的间歇的错误甚至是某些恶意错误例如低强度零星攻击也可以用此方式容忍。
作为入侵活动的第一步,对缺陷的介绍(被后续攻击所进一步利用)也可以从攻击者能力的观点出发进行讨论。但是,它可以以一种秘密的方式系统的介绍,不像那些需要同步的攻击,并且这致使这种攻击潜在的难以估计,因而比原始的被独立分析出来的缺陷更具危险性。
4.3 基于硬件的入侵容忍
基于软件和基于硬件的错误容忍并不是不相容的设计架构。在模块化和分布式系统的环境中,今天的错误容忍硬件本应该被看作一种构筑故障控制部件的一种方法,换句话说,部件可以防止产生这类故障。这有助于建立改良的可信任的级别,同时也有助于使用相应的改良的信任来实现更加有效的错误容忍系统。
能容忍任意错误的分布式算法在资源及时间上都是耗费巨大的。为了更有效率,带有增强受控错误模式的硬件部件的使用通常是可取的,作为一种提供基础架构的方法是可以使用的,协议在这个基础架构中对于良性错误有恢复性,但这并不意味着系统对恶意错误的恢复性有所降级。
4.4 审计和入侵检测
记录系统活动和时间是一个良好的管理程序,在许多操作系统中都有日常的记录。通过分析日志,就可以对问题及它们的原因有一个随后的诊断。审计追踪在安全领域中是一个至关重要的框架。
不仅是技术原因,也是责任原因,在一个给定的时间段,主题,对象,服务,或资源内,能够追踪事件和活动是十分重要的。此外,所有的行为,而不是仅仅少数的资源,都可以被审计是至关重要的。最后审计的粒度应该和对系统可能攻击的粒度关联起来。既然入侵者可能为了删除他们的踪迹而窜改日志,那么日志就应该是防止篡改的,但在大多数操作系统中却没有做到。.
入侵检测(ID)在安全领域理是一个传统的架构,它包含了各种方法来检测入侵的出现或者可能性。ID可以在运行时或者离线执行。所以,入侵检测系统(IDS)是一个可以监视记录系统活动的一个监管系统,它的目的就在于检测,反抗(更适合在实时)任何或者所有:攻击(例如端口扫描探测),缺陷(例如,扫描),以及入侵(例如,相关引擎)。
NSA对ID的定义(1998):指试图通过对行为,安全日志,或者审计数据的观察来检测对计算机或者网络的入侵的技术。对非法进入者或者企图的检测要么是通过手动要么是通过软件专家系统,这种专家系统对日志或网上可获得的其他信息进行操作。
以IT的观点来说一个需要提及的方面就是误差检测和错误诊断的二分法,通常隐藏在现在的ID系统中。为什么会发生,为什么如此重要?之所以会发生是因为IDS的根本目的在于完善预防以及触发手动恢复。之所以重要是因为如果期待自动恢复(错误容忍),那就没有必要明确的区分:按照安全方针说明什么是误差,按照系统错误模型什么是错误。错误(例如,攻击,缺陷,入侵)要被诊断,以至于可以对它们采取措施(例如,使之钝化,去除)。误差要被检测,以至于它们在实时(恢复,隐藏)可以被自动处理。
为了更好的理解问题,考虑一下下列的情况,在一个组织中有一个Intranet通过Extranet连入公共互联网,并且有一个IDS:(a)IDS检测到一个来自互联网的针对Extranet主机的端口扫描;(b)IDS检测到一个来自互联网的针对内部主机的端口扫描;(c)IDS检测到一个来自Intranet的针对内部主机的端口扫描。(a),(b),(c)之间有什么区别?实际上,(a)现在必须考虑为“正常的”互联网行为,至多成为一次攻击,并不是入侵,如果包括了错误模型,例如,对外部行为给定一个阀值或模式。另一方面,如果安全方针(如预期…)不允许来自互联网的针对内部端口的扫描,那么(b)暗示着一个误差(在保护机制的外部)。最后,(c)同样预示着一个误差,因为我们依然期待安全方针禁止来自内部的端口扫描。
作为误差检测的ID在后文详述。它提出了对系统计算中源于恶意行为的错误状态的检测,例如对文件或消息的修改,通过缓存溢出对系统突破。作为错误诊断的ID有其他目标,同样的,双方行为都应混合。忽略误差处理机制(恢复或隐藏),管理子系统有一个极为重要的行为w.r.t.错误诊断。作为传统的ID的一个方面,它适用于错误处理。它也可以用于发出早期可能发生误差(缺陷诊断,攻击预报)的警告,同时根据部件或子系统瘫痪(入侵诊断),用来评估入侵者的成功程度。
在误差发生之前,可以预先给出诊断。例如,通过激活错误(例如,缺陷扫描)以及后处理(预测它们的影响),我们就可以得到适应力的量度(受方法覆盖影响的…)。换句话说,通过分析外部行为,我们可以试图预测攻击(例如外部端口扫描分析)。
4.5 IT角度下的一些安全架构
属于安全领域著名的架构的一些机制(安全信道和封装,验证,保护,加密通信)可以从IT角度从新审视,因而对于构筑IT系统形成了有用的概念上的工具。
图 4: 隧道,安全信道和封装
安全隧道,例如,那些在互联网上带有安全IP-over-IP信道的,是入侵阻止设备(图4):尽管有入侵企图,它们在访问点之间加强了机密性,完整性(有时是真实性)。覆盖范围的给定是通过:隧道方法以及访问点网关的恢复性(弹性)。
图 5: 防火墙
防火墙是入侵阻止设备(图5):它们阻止对内部机器的攻击,这些攻击可能利用缺陷导致入侵。它们的覆盖范围:由防火墙功能语义上的能力,以及堡垒的恢复性(弹性)给定。
为两个或多个实体之间提供身份验证的机制和协议(签名,消息验证代码(MAC))同样也是入侵阻止设备(图6a):它们加强了可靠性,防止参与者或者数据来源被伪造。覆盖范围通过:签名/验证方法的恢复性给定。
最后,一些密码协议是十分重要的可递归使用的入侵容忍构造块。看起来像积木块,自我加强协议例如Byzantine协议或者原子多播(图6b),是入侵容忍设备:它们执行误差处理
图 6: (a) 身份验证; (b) 通信和协定
或者屏蔽(3f+1,2f+1,f+1,根据错误模型)并在实际入侵时保证消息投递。覆盖范围由:协议功能的语义,本质模型假设所决定的。受信的第三方(TTP)协议也是入侵容忍设备,它们实现了误差处理/屏蔽,但是它们是有赖于TTP来实现正确的操作(图7a)。覆盖范围由:协议功能的语义,本质模型假设,TTP的恢复力所决定。最后,阀值密码协议也是入侵容忍设备(图7b):它们在n个入侵中不超过f+1这样的阀值假设的前提下,执行误差处理/屏蔽。它们的覆盖范围是由:加密功能的语义,密码的暴力破解恢复力,本质模型假设决定的。
图 7: (a) 受信第三方协议; (b) 阀值加密
4.6 处理源于入侵的误差
下面我们回顾一下处理源于入侵的误差机制的分类。本质上,我们讨论错误容忍所使用的典型误差处理机制,以IT的观点来看:误差检测;误差恢复;和误差屏蔽。
误差检测在入侵激活后参与误差的检测。它的目的是:约束它来避免蔓延;触发误差恢复机制;触发错误处理机制。典型误差的例子是:伪造或者矛盾的(Byzantine)消息;改变文件或者内存变量;虚假OS帐号;运行中的嗅探,蠕虫,病毒。
一旦误差被检测到,误差恢复就参与从误差中进行恢复。它的目的是:即使出现错误时,也要提供正确的服务;从入侵的影响中恢复。逆向恢复的例子是:系统回退到前面的一个已知的正确状态然后在继续运行;遭遇DoS(拒绝服务)攻击的系统,重新执行受影响的操作;检测到被破坏文件的系统,暂停,重新安装这些文件,回退到最后一个正确点。正向恢复也被使用:系统进入一个保证提供正确服务的状态;系统检测入侵,考虑被破坏的操作,增加安全级别(增加阀值/定额;更新钥匙);系统检测入侵,降级运行但是确实更安全的操作模式。
如同经常发生的那样,当误差并不可靠或者有很大的延迟,那么误差屏蔽将是首选的机制。系统性的使用冗余来提供正确的服务且感觉不到故障的存在。举个例子:系统的操作选举;Byzantine协定以及交互的连接;分裂-冗余-散射;传感相关(对不精确的值达成一致)。
4.7 入侵检测机制
根据方法学,传统的ID系统属于两类中的一个(或一个混合):基于行为(或者异常)的检测系统;基于知识(或者误用)的检测系统。
基于行为(异常)的检测系统的特点是不需要对特殊的攻击有专门的知识。它们拥有关于受监视系统正常行为的知识,例如,这些知识是通过在正确的运行中系统的广泛训练而获得的。作为它们的优点:它们不需要那种需及时更新的攻击特征的数据库。它们的缺点:很有可能误报,也就是如果使用不是可预言的,那么它们对入侵的类型不提供信息(诊断),仅仅发出有些异常情况发生这样的信号。
基于知识(误用)系统依赖于已知的攻击特征库。当一个行为和一个特征匹配是,就产生一个警告。优点是:警告对于起因有诊断信息。主要的缺点是存在遗漏警告的可能性。例如,未知攻击(不完全的数据库)或者新的攻击(对旧的或新的缺陷)。
从IT的角度来看,每一类错误检测机制可以并且应该结合起来。将ID和自动恢复机制结合起来是在紧密进行中的研究课题。
将其系统化通用化如图8所示。系统活动模式遵循并和参考模式进行比较:正常和异常。一旦和任何异常模式匹配,就会报告一个误差(这和误用类型检测类似)。同样的,一旦系统行为超出正常模式,也会报告一个误差(这就属于不规则类别)。注意到两种方法都是无缝连接的。
图 8: 入侵检测方法论
现代入侵检测应该指出误差是否源于恶意行为。事实上,对恶意错误导致的误差的探测器应该检测由非恶意错误导致的误差。这将重点放在结果上――一些要提供正确服务的部件可观察的故障――而不是在起因上。当设计错误模型时(AVI-攻击,缺陷,入侵),可能的起因必须在之前已经被定义。例如:在分布式系统中的Byzantine故障检测器,检测到部件的一个异常行为,例如给不同的参与者发送不一致的数据。无论它是否是由恶意实体引起的,都是不相关的。这种检测器的质量应该有参数所测定:错误报警率;遗漏报警率;检测延迟。
5 入侵容忍策略
入侵容忍策略由来于传统的错误容忍和安全策略的汇合。策略以若干因素为条件,例如:操作类型,故障类别(例如,入侵者能力);故障的代价(例如,限于可接受的风险);性能;代价;可用的技术。技术上,除了一些基本的权衡之外,基本上在任何设计中都要作出这样的权衡,对于一个入侵容忍系统的设计来说重大的策略选择发展出了一些主线,这也是我们这部分将要讨论的内容。我们用毫无遗漏的列表形式描述了我们所认为的IT系统架构师所需考虑的策略主线。一旦定义了策略,设计就应伴随方针一起进行,这些方针就是刚才介绍的若干入侵容忍架构所建议的。
5.1 错误避免vs. 错误容忍
鉴于剩余部分和操作目的相关,我们所考虑的第一个问题就是系统结构。这涉及到错误避免(阻止或者去除)和错误容忍之间的平衡。
另一方面,这涉及到许多传统安全设计中的黄金目标“零-缺陷”。当假设存在计算核子,它不受黑客的影响,受信任的计算基范例有赖于这种假设。几年后,在普通的系统设计中遵循这样的策略是不可能的这种观点已经是显而易见的:对于要掌握的整个设计和构造来说,系统实在太复杂。另一方面,这种平衡也涉及到攻击预防。通过降低入侵的风险,降低威胁级别增强了系统的恢复性。但是,因为显而易见的原因,这也是非常有限的解决方案。举个例子,防火墙一味的阻止对内部网的攻击同时也必然使得许多通道被关闭(为了外部的连通性)。
不过,我们也应避免落入范围相反的极端――对系统部件做最糟糕的假设且攻击严重――除非操作的威胁程度证明“最小假设”意见是正确的。这是因为随机故障协议在性能和复杂性方面通常花费巨大。
使用一些受到信任的部件这样的策略选项――例如在系统及其的运转关键部分――可能产生性能更好的协议。如果以一个容忍(而不是阻止)的观点来选择的话,可以实现更高级别的可靠性。但是,情况是这些部件被制造成可信任的(等于对它们赋予信任,就像前面我们所讨论的那样),那就是说,它们的错误行为确实被限定在可能出现错误的子集中。我们可以将阻止或去除被预防的错误,缺陷,攻击,入侵或者其他错误(例如,遗漏,时限,等等)这样技术应用于它们的结构中来实现这个目的。
当架构一个系统,错误容忍和错误预防/消除中递归(通过抽象的级别)和模块化(基于组件)的使用是一个基本的策略权衡,但是在IT系统中却十分有效。在以前建筑学的著作中采取了这种方法,给定相关错误的性质,这种方法就对IT却有着非常重要的作用。
5.2 机密操作
当策略目标是机密性时,系统更适合构建成误差屏蔽,采取方案,这种方案尽管允许未经授权的读取数据片段,但不暴露任何有用信息或者。或者另一种方案,通过对于一个给定的允许访问信息的阀值需要一个定额来实现这种方案。依赖于误差检测/恢复的方案也是可能的。但是,给定了机密性的特征(读取一次,永久读取...),它们通常意味着一些正向恢复的形式,而不是逆向恢复,例如提出在以后不正当的读取不相关数据。它们的检测等待时间也很少, 这样就可以减少误差传播及万一系统故障(实际上,就是信息暴露的时间)的风险。
5.3 理想式非停顿操作
当小故障也是不可接受时,系统就必须被构建成像传统的错误容忍中那样的误差屏障,给定故障假设的集合,就需要提供足够的空间来实现这个目标。另一方面,也必须使用在期望错误模型下实现系统性误差屏蔽的适当的协议(例如,Byzantine-恢复性,基于TTP,等等)。但是,非停顿式可用性来抵御拒绝服务的攻击在开放系统中依然是一个不太正确的目标。
5.4 可重配置的操作
非停顿式操作花费巨大因此许多服务采取比较便宜的冗余管理方案,基于误差恢复而不是误差屏蔽。这些可供选择的方法的特点是明显的小故障的存在。本质策略,就是我们所说的可重配置操作,在面向可用性或者完整性的服务中提出,例如事务数据库,web服务器,等等。
这个策略式基于入侵检测。在这种情况下(更高的威胁级别),误差症状触发了一个重新配置的过程,这个过程自动将一个正确的部件替换一个失败的部件,或者讲一个适当的正确的配置替代不适当的不正确的配置。例如,如果一个数据库复件受到攻击并处于瘫痪,那么另一个备份将替代它。在重新配置的过程中,服务有可能会暂时停止或者性能降级,这个持续时间依赖于恢复机制。如果AVI序列可以重复(例如,当攻击持续时),服务有可能采取降级QoS的配置来获得恢复性,这有赖于采用的政策(例如,暂时终止一个包含不能被去除的缺陷的服务,或者切换成更具有恢复力但速度较慢的协议)。
5.5 可恢复操作
中断避免并不总是强制性的,因此可以有较便宜较简单的系统。此外,在开放系统中(互联网)大多数拒绝服务的情形,一般都很难实现中断避免。
假设一个部件在攻击下崩溃。如果对部件有一组预处理,那么仍然可以获得一个入侵容忍设计:(a)失败需要花费一个下限时间Tc; (b) 花费上限时间Tr 来恢复; (c) 中断的持续时间对于程序的需要是足够短暂的。
不像对于传统FT可恢复操作所发生的那样,传统FT可恢复操作中(c)仅依赖(b),这里系统的有效性以一个更详细的方式定义,根据攻击的严重性和持续时间,它和威胁级别成比例。首先,对于一个给定的攻击严重性,(a)决定了在攻击的情况下系统的可靠性。如果攻击持续时间小于Tc,,那么系统甚至不会崩溃。其次,(a)和(b)决定了服务恢复的时间。对于一个给定的攻击持续时间Ta,,系统要么在Tr (Ta < Tc + Tr)后完全恢复,要么以Tc=(Tc + Tr)为周期,循环的中断(较长时间的攻击)。
此外,恶意引起的崩溃必须不能引起不正确的计算。可以通过若干技术实现它,在这些技术中我们提出安全检查点和日志记录。可恢复操作可i用入侵容忍原子事务来实现。在分布式设置中,这些机制也许需要安全协定协议。这个涉及到以显而易见的暂时的服务中断为代价的应用程序,使用最小量的冗余。这个策略同样也使用于长期运行的程序,例如数据挖掘或者科学计算,在这里面不像交互式程序那样需要有效性,但是完整性却是主要的考虑之处。
5.6 故障安全
在特定的情况下,一旦系统不再能容忍错误的发生,为一个要执行的紧急行动做准备是必须的,例如,不能抵挡当前的威胁级别。就采取这种策略来防止系统发展到一个潜在的不正确的情形,遭遇困难,或者产生意外的损害。在这种情况下,最好立刻关掉系统,就是所谓的故障安全。这个策略,通常在安全和任务重的系统中,它在入侵容忍中也同样重要。它是对上面描述的其他策略的补充。
6 对恶意错误建模
所有的错误容忍体系架构至关重要的一个方面就是错误模型,系统的体系架构就是根据错误模型来构思的,组件交互作用也是在错我模型上定义的。不论在值域或者时间域,错我模型都是以正确性分析为前提条件,并且支配着系统配置中至关重要的方面,例如布局,部件选择,冗余级别,算法类型,等等。一个系统的错误模型是建立在对系统部件失败方式的假设基础之上。
恶意错误是什么?这个问题的答案就在关于“足够”入侵错误模型的争论的要点之中。 “恶意”这个术语本身就有很强的暗示性,意味着对造成破坏有特殊的企图。但是我们如何对攻击者的思维和能力进行建模?实际上,很多工作都集中在“意图”上,然而从IT的观点来说,我们更应该把注意力集中在“结果”上。那就是说,对于应该从“恶意”这个概念中抽取出什么就是它的目标在技术上的一个定义:尝试在入侵者能力范围之内,用任何可能的方式对于一个给定的服务的若干或者全部属性的破坏。
传统上说,故障假设本质上分成两种类型:受约束的故障假设,和任意故障假设。
受约束的故障假设对于部件故障给出了定量及定性的边界。例如,故障假设可能指出部件仅仅有时限故障,在一个参考间隔内不会超过f 个部件会发生故障。作为选择,它们可以允许值故障,但是不允许部件自发产生或者伪造消息,也不允许对其他部件模仿,共谋,或者发送矛盾的信息。因为它们对在大多数情况下以良性的方式出现故障时,通常系统如何工作描绘的非常好,所以在意外错误面前,这种方法是现实的。然而,根据上面对 恶意的定义,它几乎不能直接推断出恶意错误。
任意故障假设理想的指出非定性及定量的部件故障边界。在这种情况下,一个任意的故障意味着可以在任何时刻于系统的任何地方和任何语法及语义(形式和含义)产生交互作用。任意故障假设理想的适合恶意的概念,但是它们在性能和复杂性方面运用起来异常昂贵, 因此并不适应.现今大多数在线应用程序的用户需求。
显然, 应该在部件相关操作模式“可能”出现故障的领域这样一个环境中进行理解。例如分布式系统部件间交互作用可能的故障模式很可能限于时间轴,形式,含义及这些交互作用的对向(我们称之为消息)的组合。另一方面,基于任意故障假设的实际系统必须对于失败部件的数目给出定量及定性的边界,或者至少使解决方案的适应力和意外产生故障数目的权衡相等。
注意到问题在于我们的假设和现实中所发生的情况相比,到底有多大代表性。那就是我们假设的覆盖范围问题。因此,如何继续进行呢?
6.1 任意故障假设
考虑到高昂价值或者关键的操作,例如:金融交易;合同签订;提供长期证书;国家机密。不应该招致由于对假设破坏而产生故障的风险。尽管性能有可能降低,但是考虑任意故障 假设,根据任意故障适应力构造块(例如,Byzantine协定协议)构建系统被证明是正确的。
结果,对于受信任部件的存在并没有作出任何假设,例如安全内核或者其他失败-控制部件。同样地,必须遵循时间无关或者异步的方法,例如,对于时间轴不做任何假设,因为时限假设对于攻击很敏感。这就限制了在这些假设下可以被提出的应用程序的分类:异步模型不能解决同步问题。
在实践中,我们现今所看见的许多逐步形成的应用程序,特别是互联网上的应用程序,都有交互性或者关键任务的需求。时间轴是所需特征的一部分,既是因为用户支配服务质量的需求(例如网络事务处理服务器,多媒体绘制,同步群件,证券交易事务服务器),也是因为强制安全性(例如,空中交通管制)。因此我们应该寻找可供选择的错误模型框架来满足恶意错误下的需求。
6.2 考虑为有用的混合故障假设
结合若干种错误模式的混合假设是我们所希望的。有一个研究的主体,以混合故障模型为开始。这个混合故障模型对不同结点假设不同故障类型分布。例如,一些节点被假设为行为任意而其他的被假设成只有通过崩溃才出现故障。 这种分布的概率基础在出现恶意智能时就难以为继了,除非它们的行为限制在一些方式下。考虑一个部件或者子系统,对它们作出特定的受约束故障假设。给定攻击的不可预测性及弱点的隐蔽性,对于假设的行为,我们如何加强部件的可信任性,就是说,这种假设的覆盖范围?
具有混合故障假设的复合(AVI)错误模型就是一例,在其中,缺陷的出现及其程度的严重,攻击和入侵随部件变化而变化。系统的一些部分将无可非议的展示受约束的故障行为,同时系统的其他部分将仍旧允许任意的行为。在一些著作中,这可以最好的描述为体系架构的混合,在这种混合架构中,通过系统部件的体系架构和构建,故障假设确实被加强了,因此也进行了实例化。那就是(见第三章)部件被做成足够的可信任来和受约束的故障假设所隐含的信任相匹配。
既然于恶意错误相对,一些部件受约束故障模式限定了部件可产生的系统错误,那么架构师的任务就变得更简单了。事实上一种错误预防的形式在系统层次执行:一些系统错误类型甚至完全不出现。现在入侵容忍机制使用任意故障的混合体(受约束故障或者非信任)及受约束故障(或者受信)部件来设计。
混合故障假设也是安全定时操作的关键。关于时间轴和时限故障,混合结构产生局部同步的形式:(i) 一些子系统展现受约束的故障模式因而可以以安全的方式提供时控服务; (ii) 后者辅助系统满足时间轴要求; (iii) 这些要求中的受约束故障的到承认,但是时控故障检测可以在受信部件的协助下实现。
7 构建入侵容忍系统
在这一章中,我们将要讨论关于构建入侵容忍系统的一些概念。
7.1 (几乎)没有假设
不受约束的故障或者任意的故障方法来实现IT体系架构是基于几乎不对环境的行为(错误,同步)的可能性做任何假设,这是为了将覆盖范围最大化。它提供了一个概念上的简单的架构来对算法的正确性,在任何条件下满足安全性,在特定条件下通常以概率的形式,提供活性,进行开发和论证。
随机Byzantine协定协议就是用这种方法的一个典型的协议例子。它们不可能以非零概率终止,但是这种概率可以是忽略不计的。事实上,使用密码的协议通常都有残余故障的可能性,这种可能性是由钥匙长度所决定的。当然,对于作为提供有用服务的一个整体系统,至少一些部件是正确的是十分必要的。这个方法本质上是参数化的:对于任意假设出现错误的参与者数f.,如果有足够数量的正确的参与者存在,那么它仍将是正确的。或者换句话说,在几乎没有假设的前提下,仍旧可以达到相当恢复力协议。
对于安全分布式系统的设计这有一些有利条件,这也是继续研究这种方法的原因。事实上,为了恢复力牺牲性能或者时间是必要的也是值得的,例如对于非常关键的操作(钥匙分发,合同签署,等等)。
图9用简单的术语说明了这种原理。从现在开始使用的隐喻:灰色代表敌意的,恶意的,白色代表良性的,正确的。图9a表示参与者正限于一个敌意的异步的环境。和体主机以及通信环境都是不可信的。参与者也许是恶意的,通常唯一假设的约束就是非正常行为参与者数。图9b说明应对环境缺陷的这种协议保证参与者共同提供正确服务(白色阴影)。
对于一个能提供正确服务的协议来说,它必须应对任意部件及环境的故障。例如,部件Ck是恶意的,但是这也许是因为部件自身或者主机C被调和,或者因为在通信系统中的入侵者模仿了那样的行为。
图 9: 任意故障方法
7.2 未经证明的假设,或者信念的力量
作为选择,IT体系架构可能选择故障-控制的方法。有时,也许在并为证实的情况下,就简单假设环境是良性的。当环境是相当清楚明白时,例如,从统计上的测量,通常在意外错误容忍时就这么做。对于恶意错我这是否是个合理的方法呢?
图10: 不合理假设
图10a说明参与者正处于一个适度被假设的良性环境中(根据我们的隐喻,那些本质上白色的区域,带有少许阴暗的部分)。例如,通常考虑个体主机(局部环境)被信任,虽然不受信任的通信环境,有一个假设限度的攻击模型。一些用户参与者也许是恶意的。
执行一定要工作大多数周期。但是,对于统计证据之外的假设行为(或者更糟糕,在信任之外的…)并且,并不通过强制行为,就可以通过入侵者攻击运行时环境来对其欺骗,对于这种情况,我们并不应该感到吃惊。因而,在某种意义上,后者的行为比假设的更糟糕(例如,主机并不是那么的可信任,或者通信支持受到比假设模型更激烈的攻击),就如图10b所示,对于一次攻击,所示的环境实际上比在图10a中的初始想法更具有侵略性。
结果,作出没有被严格证明的假设在许多情况下,也许会导致对于部件或者子系统(在我们例子中所示,通过暗色阴影所覆盖的参与者及协议)的属性缺乏可信任性(覆盖范围)。这也许示有疑问的,因为涉及到没有被假设的故障,换句话说,协议并没有准备好,也有可能被恶意智能所利用。结果将是不可预知的。我们下面将讨论一个正确的方法。
7.3 体系架构的混合
对于构建错误-控制IT系统,体系架构的混合是可靠的指导原则。我们都希望在并不引起缺乏覆盖范围的风险情况下,避免对任意假设极端化。假设一些方法是可信的,就像我们在上文中看到的,通过使受信部件变得足够可信,体系架构的混合能够实现使用受信部件的方法。
本质上,架构师设法构成带有良性行为有用的黑盒,并且是省略或者弱点故障-无声类别。这些可以具有不同的能力(例如,同步或者异步,局部或者分布),可以存在于不同抽象级别之中。和对于一个非受信环境的调用相比,一个好的方法就是将它们伪装成运行时环境部件,可以由系统调用访问,并且提供可信结果。当然,故障-受约束设计可以产生错误-容忍协议,这种协议比真实任意假设协议的效率更高,但是比非强迫受约束故障协议有更好的健壮性。
在设计混合IT系统时,容忍态度的特点在于几个方面:
? 从环境到其他部件尽可能少的进行假设;
? 只要确实需要,对行为正常(受信)部件或者部分环境作出假设;
? 通过构造,加强对于受信部件的假设;
? 和传统基于预防的方法不同,受信部件并不参与所有的操作,它们仅仅辅助执行的关键步骤;
? 协议在非受信的环境中允许,单一部件可以崩溃,错我(入侵)可以发生;
? 正确的服务是构建在分布式错误容忍机制的基础之上,例如,在若干主机上的参与者的协定和复制。
7.4 阻止,容忍,一点趣味
在实现可信任部件时,架构师应该记住我们早先讨论的一些方法:阻止和容忍之间的平衡。让我们分析一下受信第三方协议(TTP)的操作原理,如图11a所示,参与者Alice,Paul和Bob在他们之间允许一个IT协议,并且信任TTP部件Trent,Trent提供一些服务来辅助处于入侵容忍之中的协议。图中所没有显示的也是很少被问到的:TTP是可信任的嘛?
F图11: (a) TTP 协议;(b) 加强TTP可信任性
事实上,TTP是一个非常好的例子来说明对于受信部件的信任有时(通常?)超过它的可信任性。
图 11b 我们揭开TTP的“盖子”并且例证了阻止和容忍的良好结合是如何体现它的可信任性的。首先,我们需要基于证书的身份验证,用来防止在参与者和TTP进行的点对点交互时(例如,假扮,伪造),发生某些故障。然后,如果复制TTP,在冗余足够的情况下,使它对于系统性事故,对于TTP服务器复件的一定的攻击程度有恢复力。此外,如果恶意错误发生在服务器复件的子网中,复件应该通过具有Byzantine恢复力类型的自我加强协议来通信。
用户不必意识到错误容忍中常见的额外复杂性及TTP分配。事实上,我们应该“盖上盖子”,以至于参与者看到的是一个它们所信任的逻辑实体(如图11a所示)。但是,通过在组建级别(TTP)的研究,我们实现了被看作更高级别的部件(系统)的可信行为。注意到事实上,我们已经预防了一些系统错误的发生。这种阻止/容忍的二元性可以在不止一个实例中递归的应用。最近,对于制造可信TTP进行了广泛的研究,例如通过递归使用入侵容忍机制。
7.5 使用受信部件
如同我们在上节所看到的那样,在构建一个IT系统时,可以广泛的应用信任/可信任之间的关系。但是,有必要在这里提一下特殊的受信部件的例子。
如果得到本地可访问受信部件的支持,IT协议可以将非常高的效率和高恢复力结合起来。例如,IT中安全核心的概念相应于在剩余环境遭遇恶意错误正确的执行一些安全相关的功能的受信故障-控制本地子系统。
图12: 使用受信部件:(a) 本地; (b) 分布式
这可以推广到许多功能,例如时间保持,或者故障检测。从那个意义上说,本地受信部件将在一个受信的方式下封装和提供一组功能,为必须在敌意环境中执行的协议和服务所考虑的关键处。受信硬件的使用(例如,智能卡,器具板)可以用来增强这些特殊部件的可信任性。在图12a中,我们看到一个有LTC(本地受信部件)特点的体系架构的例子。内部部件通信应该确保在恶意错我发生时,正确的部件可以信任LTC的属性。另一方面,LTC的实现应该确保恶意部件,例如图12a中的右边那个,不破坏LTC的操作,使它工作出错。
图12b 是一个分布式受信部件(DTC)。因为它不仅假设了本地受信执行,同时也假设了LTC之间的受信信道,因此它增强了LTC的能力。这使得为低级别操作实现分布式信任变成可能(例如消息验证代码MACS的分发)。它可以用具有私有控制信道的,例如主机中的第二个网络复件,应用程序板来构造。
DTC可以用许多方法辅助协议,我们将在本文的后面章节中予以论述,但是基本原理如下:
? 协议参与者必须在危险的环境中交换消息,有些甚至是恶意的以及欺骗的(正常网络);
? 有一条正确的参与者信任的信道,甚至对于特殊的及很短的瞬间,它们都可以用这条信道来互相联系;
? 它们可以用这条信道对于简单但是协议执行的关键因素进行同步,散步,以及达成一致,这限制了来自恶意参与者Byzantine行动的能力。
8 系统实例
“入侵容忍”这个术语最初出现在Fraga和Powell的论文中。随后在在DELTA-4中使用他们的设计-片断-冗余-分散-来开发一个由一组不安全的站点所组成的入侵容忍分布式服务器。
在随后的几年中,逐渐出现了一些独立的IT协议和系统。BFT是一个高效的状态-机器复制算法。可以用它来实现入侵容忍NFS服务器。Rampart提供工具来构建IT分布式服务:可靠多播,原子多播以及成员协议。SecureRing是一个视图-同步组通信系统,它是基于标志单环协议。可以用Rampart和SecureRing来实现状态-机器复制方法。Fleet使用Byzantine定额系统分别对数据抽象例如变量和锁,Java对象构建IT数据存储。CLIQUES协议包对动态进程组提供组密钥一致操作。就在最近,OASIS和MAFTLA这两个项目都在研究入侵容忍,并有了一些成果,我们将在后文中详述。
8.1 OASIS
Organically Assured and Survivable Information System (OASIS)是一个美国DARPA的一个科研计划,它的目的是提供“针对精巧敌手的防御能力,在已知或未来对信息系统的网络攻击面前保持关键任务功能的持续服务”。这个计划对入侵容忍非常关注。它的目标是:
? 基于潜在缺陷部件来构建入侵容忍系统
? 表现容忍机制的成本效益的特征
? 开发评估验证方法来评估入侵容忍机制。
OASIS资助了大概30个左右的项目。对所有的这些项目进行说明是不现实的,因此我们综述几个我们发现有趣的有代表性的项目。
Intrusion Tolerance by Unpredictable Adaptation (ITUA) 目的在于开发一个中间件来协助设计应用程序对确定的攻击类型进行容忍。ITUA体系架构由安全域所组成,安全域抽象出了边界的概念,攻击者要想跨越边界是困难的。(例如受防火墙保护的局域网)。当出现攻击时,入侵容忍应用程序通常要使之适应。ITUA提出非可预测性适应作为一种方法来容忍试图预测和利用那种适应的攻击。ITUA中的自适应由QuO中间件管理,组通信在整体工具包中作为入侵容忍层来实现。
为了构建入侵容忍系统,入侵容忍体系架构有开发基于体系架构概念方法的目标。为了支持不安全网络中(例如Internet)安全组应用程序,这个项目开发了一个中间件IT Enlaves。 IT-Enclaves有若干个领导者,在n>= 3f +1中最多允许f 个受到安全威胁。领导者提供了所有的组管理服务:用户身份验证,成员加入离开,组钥匙产生,分发以及更新。组中的每个成员和2f + 1个领导者有联系。
COCA是一个对局域网或广域网的在线认证授权系统。COCA使用服务器复件来实现可用性及入侵容忍。它所产生的证书用一个门限加密算法进行签名。COCA假设一个攻击者花了一定的时间破坏了一些服务器,因此要是不时的变更(前捏的安全)。复制是基于Byzantine定额系统。
Integrity Through Mediated Interfaces项目的目的是提供数据完整性。这个方法使用一个完整性管理器来监视操作数据的程序,并且记录所有数据变换。所产生的记录有若干用途,包括重构受破坏的数据。项目为COTS应用程序设计了护封,它可以被用作上面提到的目的,也可以保护环境免于恶意代码(邮件附件,宏,等)的破坏。
ITDBMS正在设计一种实验性的入侵容忍数据库系统,这种数据库系统使用COTS不见来提供全面的,集成的,高效的IT数据库管理系统解决方案。这种方法采取综合了多种机制的多层防御策略:事务层入侵检测,入侵隔离,入侵屏蔽,故障定位和紧闭,以及自稳定。
敏捷对象是一个用来构建基于位置,接口和动态逃避概念的入侵容忍应用程序的架构。位置逃避是指应用程序组件为了躲避攻击和受破坏节点而在不同主机间跨越的能力。接口逃避允许中间件自动改变组件的借口。动态逃避指得是管理位置和借口逃避维数的能力。
8.2 MAFTIA
Malicious- and Accidental-Fault Tolerance for Internet Applications (MAFTIA)是最近完成的EU IST项目,它的目的是为了构建大规模可靠的分布式应用程序,系统性地研究“容忍范例”。这个项目有包括意外和恶意错误的全面研究方法。MAFTIA遵循三个主要的行动路线:
? 体系架构框架和概念模型的定义;
? 机制和协议的设计;
? 形式验证和评估;
第一条路线目的在于开发针对可以容忍恶意错误的体系架构的一系列连贯的概念。针对入侵容忍概念核心集合的定义已经展开。这个核心集明确的和传统的可靠性概念相对应。上文提到的AVI复合错误模型在这里也被定义。其他相关的工作包括同步性和拓扑定义,入侵检测的概念的建立,MAFTIA节点体系架构的定义。体系架构包括组件例如受信和非受信硬件,本地和分布式受信组件,操作系统以及运行时环境,软件,等等。
大多数MAFTIA研究工作都在第二条线路上,IT机制和协议的设计。部分研究工作时对于MAFTIA中间件:体系架构和协议的定义。只要通过采取基于概率执行的解决方案的Byzantine适应力,异步协议包,包括可靠,原子以及因果多播都被定义。对于基于时控模型的协议也进行了研究工作,这个时控模型主要依赖于一个创新的概念,即虫孔概念,它加强了子系统,这些子系统给组件提供了一个方法来获得一些简单的特权功能或者和其他组件的信道,同时也提供“良好”的属性,否则不能被“正常的”弱环境所保证。例如,在MAFTIA中开发的可信及时计算基(见下两节)就是基于虫孔概念,它在异步及Byzantine发生故障的环境下提供了及时安全的功能。早先讨论的体系架构混合被用来实现TTCB。在MAFTIA中间件环境中,也设计了支持多方事务的IT事务处理服务。
作为一个针对入侵容忍的机制,同时也是作为一个具有入侵容忍的服务,对入侵检测进行了假设。类似处理高误报率以及结合若干IDS的问题都进行了研究。
受信第三方(TTPs) 例如认证权限,在当今的互联网上都是重要的构建块。MAFIA设计了一个通用的分布式认证授权,为了能达到入侵容忍,这个认证授权使用了门限秘密术以及IT协议。同时也开发了另一个TTP,分布式优化合理交换服务。
MAFTIA定义了一个基于细粒度保护,例如基于对对象方法调用级别的保护,的授权服务。授权服务是一个分布式的TTP,它可以用来对结合若干方法调用的复杂操作授权或拒绝授权。服务依赖于本地安全核心。
第三条工作路线是关于形式化MAFTIA的核心概念以及验证评估可靠中间件的工作。已经开发了针对相关系统安全的新的严格模型,并且协议也采用CSP和FDR进行模型化。
在下一节中,我们更详细的阐述了我们自己的一些研究工作:应用体系架构混体原理的及时可信计算基的构建,以及使用TTCB虫孔的协议。
8.2.1 实践中的体系架构混合
可信及时计算基(TTCB)是一个实时安全虫孔。TTCB是一个提供有限服务集的简单组件。它的体系架构如图13所示。它的目标是对IT协议的执行以及使用前面所介绍的体系架构混合方法提供支持。
图 13: 具有TTCB的系统体系架构
实验性TTCB的实现是基于COTS组件。主机是带有实时核心,RT-Linux 或者RTAI的普通奔腾计算机。主机通过两个高速以太局域网进行互连。一个相当于图13中的有效负载网络,另一个是TTCB控制信道。因此针对本地环境,例如站点,校园,等等就有一个配置。广域网配置也是可能的,如同[39]中所讨论的那样。
系统的设计有功能性和非功性这两个方面。接下来我们描述一下TTCB的功能-它的服务-随后讨论安全和及时(实时)在基于TTCB的COTS中是如何加强的。TTCB提供了一个有限的服务集。从程序设计角度来看,它们是在库中的一组功能,进程可以用通常的方式对其进行调用。 我们用“进程”这个词来描述任何使用TTCB服务的行为:一个普通的进程,线程,或者另一个软件组件。
TTCB提供了三个安全相关的服务。本地身份验证服务允许进程和TTCB安全通信。服务在进程之前对本地TTCB进行验证并且应用一个简单的验证密钥建立协议在两者之间建立一个共享的对称钥匙。对称钥匙是用来保证所有它们进一步通信的安全。每一个本地TTCB都有一组非对称钥匙对,我们假设进程设法得到一个本地TTCB公钥的正确副本。受信块协定服务是IT协议的主要构造块。服务提供了一个值,它是从一组进程提出的值协定所获得的。服务并打算替代负载系统重的协定协议:它对“小”数据块(现在是160位)一起合作,TTCB拥有有限的资源来执行它。服务提供了一组可以用来计算结果的功能。例如,它可以选择由更多进程所提出的值。服务的一个参数是一个时间戳,这个时间戳显示服务开始执行的最后时刻。这预防了恶意进程无限的对服务执行耽搁。最后一个安全相关的服务是随机数产生服务,这个服务提供均匀分布的随机数。这些数可以用来作为密码原语的钥匙例如验证协议。
TTCB同时也提供了四种时间服务。受信绝对时间戳服务提供了全局有意义时间戳。用这个特征来获取时间戳是可能的因为本地TTCB时钟是同步的。受信持续时间测量服务测量了操作的执行时间。受信定时故障检测服务检验本地或者分布式操作是否在一个时间间隔内执行。受信及时执行服务在TTCB内的时间间隔执行安全的执行特殊的操作。
受信块协定服务以及受信定时故障检测服务都是分布式的,因此它们运用运行在TTCB控制信道上的通信协议来实现。在此我们就不对这些协议螯述。
RT-Linux以及RTAI是两个相似的Linux工程。Linux被修改以至于实时执行者可以控制硬件来加强一些实时任务的实时行为。RT任务被定义为特殊Linux可装入核心模块,因此在核心内运行。调度程序被改变以优先的方式处理这些任务以及被改变成可配置性以适应不同调度方法。Linux作为低优先级任务运行,它的中断方案被改变成由RT-Linux/RTAI所中断。 基于COTS的TTCB的本地部分主要是一个(非实时)本地核心模块,这个核心模块处理服务请求,还有就是两个或者更多RT任务的集合,这个集合执行所有时间限制操作。
通过保护核心的方法来保护本地TTCB。从安全的观点来看,RT-Linux/RTAI和Linux非常相似。它们的主要缺陷是超级用户拥有的对系统内任何资源进行控制的能力。这种缺陷通常很容易被利用,例如,使用竟态条件。Linux的能力是和进程相关的特权或者访问控制列表这些控制列表允许对它们如何使用某些对象进行细粒度控制。但是,通常使用这种机制的实际方法却是相当基本的。有一个系统范围内的能力限定集合来限定可以被任何系统进程保持的能力。从那个集合中去除一个能力意味着禁止使用一个对象的能力直到下一次重启虽然是基本的,但是这种机制足可以保护本地TTCB。从能力限定集合中去处CAP SYS MODULE使我们组织任何进程在核心内插入代码。去除CAP SYS RAWIO我们可以组织任何进程对核心内存的读取和修改。
对于基于COTS的TTCB我们假设控制信道不能被物理访问。因此,在它的访问点上,安全必须得到保证。更精确的说,我们必须预防入侵者对控制信道访问点的读取或者修改。这可以通过从核心中去除控制网络装置来实现。因此只有通过核心内的代码才能对它进行访问,例如通过本地TTCB。
在基于COTS的TTCB中,控制信道是一个交换快速以太局域网。网络数据包的时间性在预防包冲突方面得到保证,包冲突可能引起不可预知的延迟。这就需要:(1)只有一个主机可以连接到每一个交换端口(不能使用hub);(2) 通信负载必须受到控制。第一个需求是显而易见的。第二个可以通过一个访问控制机制来解决,考虑资源能力的情况下(缓存和带宽),来接受或者拒绝服务的执行。
这是对基于COTS的TTCB设计的实现简要的陈述。进一步的细节,包括TTCB属性的加强以及其他网络或者本地体系架构上实现的讨论可以在[13]中找到。
8.2.2 一个虫孔感知协议
这一节将介绍一个基于TTCB虫孔的IT协议。这个协议说明了基于混合故障假设的方法:假设大多数系统以任意方式发生故障,同时假设虫孔是安全的,例如只通过崩溃引发故障。系统也被假设为异步的,除了TTCB是同步的。
协议是个可靠多播,在分布式系统中的经典问题。多播的每一次执行都有一个发送进程喝若干接受进程。在这节的剩余部分,我们对从网络接受消息喝传递消息进行经典区分-协议执行的结果。
可靠的多播协议加强了以下两个属性:(1)所有正确的进程递送相同的消息;(2)如果一个正确的发送者发送了一个消息则所有正确的进程递送这个消息。这些规则并没有暗示可以对恶意发送者的情况下,对递送进行保证。但是,两件事中的一件将会发生,要么正确的进程决不完成协议的执行且不传递任何消息,要么就是如果它们被中止,则它们都会递送相同的消息。对恶意(接收)进程的行为没有做任何假设。它们可以决定递送正确的消息,一个清楚的消息,或者不递送任何消息。
协议–BRM (Byzantine可靠多播)–被一组分布式进程执行。这些进程可以发生任意故障,例如,它们可以崩溃,延迟或者不发送一些消息,产生和协议不一致的消息,或者和其他带有恶意企图的进程勾结。它们的通信也可以被任意攻击:消息可以受破坏,去除,引入,以及重放。
让我们更详细的观察一下进程故障模式。一个进程基本上事正确地,如果它遵守协议直到协议中止。因此,一个进程发生故障如果它在协议内崩溃或者偏离协议。也有些额外的情况,在这些情况下,我们也可考虑进程发生故障。在TTCB之前,每一个进程都有一个和共享钥匙相关的标识符。如果那个对(id 钥匙)被攻击者取得,进程可以在TTCB之前被伪装,因此必须考虑这种故障情况。
另一种情况下我们考虑进程发生故障是当一个攻击者中断该进程和其他进程间的通信。异步系统的协议一般假设消息被重复转发并最终被收到(可靠信道)。在实践中,通常一个延迟太久的服务是无价值的。因此,
BRM以一定限度次数转发消息,于是我们假设“隔离”的进程发生故障。在信道内,只倾向于以外错误,通常认为在一个基准的时间间隔内,不超过Od 条消息会破坏/丢失。Od是遗漏程度,可以在具体的网络中进行测试来决定具有预期概率的Od 。对于恶意错误来说,如果一个进程在发送者重发Od + 1次后仍然没有接受到消息,则有理由假设要么进程崩溃了,要么就是受到攻击。无论如何,我们认为接受进程出现故障,但是,读者应该注意到Od只是协议的一个参数。如果将Od设置为一个
图 14:
BRM协议
较高的值,则
BRM就开始表现的像假设可靠信道的协议。
形式上,一个可靠的多播协议有以下属性。谓词发送者(M)提供消息域给发送者,同时组(M)给出相关进程“组”,例如,发送者和接受者(注意到我们认为发送者也是递送者)。
? 正确性:如果一个正确的进程多播了一则消息M,则组(M)中一些正确的进程最终递送M。
? 协定:如果一个正确的进程递送了一则消息M,则组(M)中所有的进程最终递送M。
? 完整性:对于任何消息M,每一个正确的进程p最多递送消息一次,且只有当p在组(M)中,同时发送者(M)也是正确时,则M有发送者(M)预先多播。
BRM的执行如图14所示。通过TTCB协定,发送者安全的传递一个消息的哈希值给接收者。接着服务多播消息Od+1次。哈希代码由接收者使用来确保消息的完整性和真实性。当它们得到一个正确的消息副本,就多播Od+1次。伪代码相当的直接因此我们不加以详述,推荐读者参考[12]。
图15说明了协议的行为。水平线表示进程的执行时间。粗线总体上表示TTCB,即使如此,每一个进程在它的主机上调用一个分离的本地TTCB(为了简便而使用这种表示方式)。发送者调用TTCB协定,随后多播消息两次(Od = 1)。这些消息以下面的方式被接收:P2接
图15: 协议执行
受了两份消息的副本,P3接收的第一个副本是受破坏的,第二份是好的,P4没有收到第一份副本,延迟收到第二个。例子假设发送到P3的第一个消息只是在数据部分受到破坏,鉴于这个原因,它依然可以决定这个协议实例。当消息到达时,接收者调用TTCB协定来得到带有可靠H(M )值的结果。进程P2和P3在协定结束后几乎立刻得到这个值。它们用哈希来选择它们收到的哪则消息是正确的,随后它们就多播消息给所有其他的接受者。当P4收到来自于协议的第一条消息时,它在随后请求协定的结果。接着,多播这则消息。
Bracha 和Toueg已经说明,假设任意错误,如果在一个有n个进程的系统中,超过f=(n-1)/3个是错误进程,那么想要发送可靠的多播是不可能的。类似于意外错误容忍协议,
BRM对进程故障的数目做出限制:对于f 个错误,
BRM需要n>= f + 2个进程,而不是n>=3f + 1。实际上,
BRM并没有引入正确进程的最小数目,如果少于两个正确的进程,我们说进程的数目必须是n>= f + 2就是毫无意义的了。n>= f + 2同时也是在同步系统中对于带有任意错误的可靠多播的约束。
BRM使用TTCB虫孔的事实使得它也不必使用非对称密码,非对称密码是IT协议中的一个难关。
BRM使用基于COTS的TTCB进行测试。5个进程的等待时间(一个主机一个进程)范围在8到10毫秒之间。这比文献中的异步协议要快上数倍。现在,TTCB的初步实现,协定服务被看成协议的主要开销,一个更快的设计正在进行中。当我们增加相关的进程数时,使用非对称加密的协议同样显著的降级了性能,而基于TTCB的协议却只有轻微的性能降级。
9 结论
我们已经介绍了与入侵容忍体系架构有关的主要概念和设计原理的概述。我们的观点是,作为知识的主要研究部分的入侵容忍是,仍旧将暂时成为可靠性领域发展中的主要推动力.。“恶意智能”观点下对错误的审视所提出的挑战已经引起了许多困难的问题例如,不确定性,自适应性,非完备知识,干扰,等等。在这样的强力推进下,科研工作者已在寻找解答,有时是以一种新的名称或者和可靠性有些细微差别,例如可信赖性或者耐久力。我们相信,错误容忍讲目睹一个翻天覆地的发展,并将在所有领域不止在安全相关领域都有其适用性。我们知道当我们不在谈论意外错误,攻击或者入侵的时候,我们就达到目的了,但是仅仅(再一次)…是错误。
参考文献
[1] Adelsbach, A., Alessandri, D., Cachin, C., Creese, S., Deswarte, Y., Kursawe,
K., Laprie, J.C., Powell, D., Randell, B., Riordan, J., Ryan, P., Simmonds, W.,
Stroud, R., Ver´?ssimo, P., Waidner, M., Wespi, A.: Conceptual Model and Architecture
of MAFTIA. Project MAFTIA IST-1999-11583 deliverable D21. (2002)
http://www.research.ec.org/maftia/deliverables/D21.pdf.
[2] Alvisi, L., Malkhi, D., Pierce, E., Reiter, M.K., Wright, R.N.: Dynamic Byzantine
quorum systems. In: Proceedings of the IEEE International Conference on Dependable
Systems and Networks. (2000) 283–292
[3] Amir, Y., Kim, Y., Nita-Rotaru, C., Schultz, J., Stanton, J., Tsudik, G.: Exploring
robustness in group key agreement. In: Proceedings of the 21th IEEE International
Conference on Distributed Computing Systems. (2001) 399–408
[4] Ateniese, G., Steiner, M., Tsudik, G.: New multi-party authentication services and
key agreement protocols. IEEE J. of Selected Areas on Communications 18 (2000)
42
[5] Avizienis, A., Laprie, J.C., Randell, B.: Fundamental concepts of dependability.
Technical Report 01145, LAAS-CNRS, Toulouse, France (2001)
[6] Bracha, G., Toueg, S.: Asynchronous consensus and broadcast protocols. Journal of
the ACM 32 (1985) 824–840
[7] Cachin, C., Correia, M., McCutcheon, T., Neves, N., Pfitzmann, B., Randell,
B., Schunter, M., Simmonds, W., Stroud, R., Ver´?ssimo, P., Waidner,
M., Welch, I.: Service and Protocol Architecture for the MAFTIA
Middleware. Project MAFTIA IST-1999-11583 deliverable D23. (2001)
http://www.research.ec.org/maftia/deliverables/D23final.pdf.
[8] Cachin, C., Poritz, J.A.: Hydra: Secure replication on the internet. In: Proceedings
of the International Conference on Dependable Systems and Networks. (2002)
[9] Canetti, R., Gennaro, R., Herzberg, A., Naor, D.: Proactive security: Long-term
protection against break-ins. RSA CryptoBytes 3 (1997) 1–8
[10] Castro, M., Liskov, B.: Practical Byzantine fault tolerance. In: Proceedings of the
Third Symposium on Operating Systems Design and Implementation. (1999)
[11] Connelly, K., Chien, A.A.: Breaking the barriers: High performance security for
high performance computing. In: Proc. New Security Paradigms Workshop. (2002)
[12] Correia, M., Lung, L.C., Neves, N.F., Ver´?ssimo, P.: Efficient Byzantine-resilient
reliable multicast on a hybrid failure model. In: Proceedings of the 21st IEEE Symposium
on Reliable Distributed Systems. (2002) 2–11
[13] Correia, M., Ver´?ssimo, P., Neves, N.F.: The design of a COTS real-time distributed
security kernel. In: Proceedings of the Fourth European Dependable Computing
Conference. (2002) 234–252
[14] Cukier, M., Lyons, J., Pandey, P., Ramasamy, H.V., Sanders, W.H., Pal, P., Webber,
F., Schantz, R., Loyall, J., Watro, R., Atighetchi, M., Gossett, J.: Intrusion tolerance
approaches in ITUA (fast abstract). In: Supplement of the 2001 International
Conference on Dependable Systems and Networks. (2001) 64–65
[15] Debar, H., Wespi, A.: Aggregation and correlation of intrusion detection alerts. In:
4th Workshop on Recent Advances in Intrusion Detection. Volume 2212 of Lecture
Notes in Computer Science. Springer-Verlag (2001) 85–103
[16] Deswarte, Y., Blain, L., Fabre, J.C.: Intrusion tolerance in distributed computing
systems. In: Proceedings of the 1991 IEEE Symposium on Research in Security and
Privacy. (1991) 110–121
[17] Dobson, J., Randell, B.: Building reliable secure computing systems out of unreliable
insecure components. In: Proceedings of the International Symposium on Security
and Privacy, IEEE (1986) 187–193
[18] Dutertre, B., Crettaz, V., Stavridou, V.: Intrusion-tolerant Enclaves. In: Proceedings
of the IEEE International Symposium on Security and Privacy. (2002)
[19] Fraga, J.S., Powell, D.: A fault- and intrusion-tolerant file system. In: Proceedings
of the 3rd International Conference on Computer Security. (1985) 203–218
[20] Gray, J.: Why do computers stop and what can be done about it? In: Proceedings of
the 5th IEEE Symposium on Reability in Distributed Software and Database Systems.
(1986) 3–12
43
[21] Hadzilacos, V., Toueg, S.: A modular approach to fault-tolerant broadcasts and related
problems. Technical Report TR94-1425, Cornell University, Department of
Computer Science (1994)
[22] Hiltunen, M., Schlichting, R., Ugarte, C.A.: Enhancing survivability of security
services using redundancy. In: Proceedings of the IEEE International Conference on
Dependable Systems and Networks. (2001) 173–182
[23] Kihlstrom, K.P., Moser, L.E., Melliar-Smith, P.M.: The SecureRing group communication
system. ACM Transactions on Information and System Security 4 (2001)
371–406
[24] Knight, J., Heimbigner, D., Wolf, A., Carzaniga, A., Hill, J., Devanbu, P.: The Willow
survivability architecture. In: Proceedings of the 4th Information Survivability
Workshop. (2001)
[25] Lamport, L., Shostak, R., Pease, M.: The Byzantine generals problem. ACM Transactions
on Programming Languages and Systems 4 (1982) 382–401
[26] Lui, P.: General design of ItDBMS. Technical report, UMBC (2000)
[27] Malkhi, D., Reiter, M.K., Tulone, D., Ziskind, E.: Persistent objects in the Fleet
system. In: Proceedings of the 2nd DARPA Information Survivability Conference
and Exposition (DISCEX II). (2001)
[28] Meyer, F., Pradhan, D.: Consensus with dual failure modes. In: Proc. of the 17th
IEEE International Symposium on Fault-Tolerant Computing. (1987) 214–222
[29] Nicomette, V., Deswarte, Y.: An Authorization Scheme for Distributed Object Systems.
In: IEEE Symposium on Research in Privacy and Security. (1996) 31–40
[30] Pfitzmann, B., Waidner, M.: A model for asynchronous reactive systems and its
application to secure message transmission. In: Proceedings of the IEEE Symposium
on Research in Security and Privacy. (2001) 184–200
[31] Powell, D., Seaton, D., Bonn, G., Ver´?ssimo, P.,Waeselynk, F.: The Delta-4 approach
to dependability in open distributed computing systems. In: Proceedings of the 18th
IEEE International Symposium on Fault-Tolerant Computing. (1988)
[32] Powell, D., ed.: Delta-4: A Generic Architecture for Dependable Distributed Processing.
Springer-Verlag (1991) Research Reports ESPRIT.
[33] Powell, D.: Fault assumptions and assumption coverage. In: Proceedings of the 22nd
IEEE International Symposium of Fault-Tolerant Computing. (1992)
[34] Reiter, M.K.: The Rampart toolkit for building high-integrity services. In: Theory
and Practice in Distributed Systems. Volume 938 of Lecture Notes in Computer
Science. Springer-Verlag (1995) 99–110
[35] Schneider, F.B.: The state machine approach: A tutorial. Technical Report TR86-
800, Cornell University, Computer Science Department (1986)
[36] Tallis, M., Balzer, R.: Document integrity through mediated interfaces. In: Proceedings
of the 2nd DARPA Information Survivability Conference and Exposition
(DISCEX II). (2001)
[37] Ver´?ssimo, P., Rodrigues, L.: Distributed Systems for System Architects. Kluwer
Academic Publishers (2001)
44
[38] Ver´?ssimo, P., Rodrigues, L., Casimiro, A.: Cesiumspray: a precise and accurate
global clock service for large-scale systems. Journal of Real-Time Systems 12 (1997)
243–294
[39] Ver´?ssimo, P.: Uncertainty and predictability: Can they be reconciled? In: Future
Directions in Distributed Computing. Springer-Verlag LNCS 2584 (2003) –
[40] Ver´?ssimo, P., Casimiro, A., Fetzer, C.: The Timely Computing Base: Timely actions
in the presence of uncertain timeliness. In: Proceedings of the International
Conference on Dependable Systems and Networks. (2000) 533–542
[41] Xu, J., Randell, B., Romanovsky, A., Rubira, C., Stroud, R.J.,Wu, Z.: Fault tolerance
in concurrent object-oriented software through coordinated error recovery. In: Proceedings
of the 25th IEEE International Symposium on Fault-Tolerant Computing.
(1995) 499–508
[42] Zhou, L., Schneider, F., van Renesse, R.: COCA: A secure distributed on-line certi-
fication authority. ACM Trans. on Computer Systems 20 (2002) 329–368
45