第13章 网络安全
部署网络是为了使计算机对外部世界来说更容易使用。使计算机对外部更容易使用是好坏掺半之事。可能的相互作用越多,不受欢迎的相互作用也越多。因此,你可能希望控制自己系统上的用户怎样能够访问网络,网络上的用户怎样能访问你的系统,以及当你的数据在网络上传输时,怎样保护传输的数据等。因此,网络安全不仅是关于密码,而且对访问控制提出了新的要求。
目标
·获得针对网络的安全挑战的概观,理解网络安全怎样影响和依赖计算机安全。
·使用基本的Internet安全协议IPSEC和SSL/TLS作为范例,介绍网络安全协议的设计。
·了解网络边界可以怎样用作安全周界。
·理解各种防火墙技术的原理,它们能提供的服务,以及它们固有的限制。
13.1 简介我们在前面对安全协议的讨论保持在相当抽象的层次上。当数据(消息报文)在实体间传输时,我们完全没有关心数据交换的精确的性质。安全协议的一些特征能够在这样的模型中得到检验,但是一旦你开始实现安全协议的时候,你必须更密切注意你的计算机网络的技术细节。
计算机网络是分布式系统中结点之间传输数据的通信基础设施。一个结点上某个应用程序要发送的数据必须事先准备好,用一个序列的电信号或光信号来传输;接收端进行重组,并且传送给某个应用程序。网络协议必须找到一条从发送者到接收者的路径,它们必须处理数据的丢失和损坏,而且还要处理失去的连接,例如施工人员刺穿了电话线缆。一个好的工程实践是一次一个地解决这些令人关注的问题并使用一个应用层协议在顶端、物理地传输信息比特流的协议位于底端的分层体系结构。网络安全的主要任务之一就是为特殊的安全服务寻找一个最合适的网络层次。
网络管理协议提供了所需要的支持,使得由其他协议生成的数据可以有效地传送到指定的接收者。例如,管理协议可以检查在发送者和接收者之间的中间结点的可用性,找到最佳的连接,或者解决逻辑网络地址到物理地址的转换。其他协议用来远程地配置网络结点,在这些结点上运行的软件正在变得越来越复杂。因此,网络安全越来越依赖于网络管理协议的安全和网络中结点的安全。把网络结点安排在保护的场地内的做法已不再是对安全的保证。
13.1.1 分层模型开放系统互联(OSI)体系结构的七层模型,如图13.1所示,是分层网络协议的公共框架结构。在这本书里,我们不关心每一层的精确意义。相反,我们只对它的分层模型感兴趣,因为它们对讨论网络安全提供了相当有用的抽象。分层模型也让我们回到了在1.4.2节中的熟悉的主题。
·在顶部的安全服务可以用来满足某种特定应用的要求。然而,不同的应用每个都需要它们自身的安全协议。
·在底部的安全服务可以保护来自所有高层的通信(traffic),减轻了应用层协议设计者对安全的关心。然而,一些应用可能发现这种保护不能很好地满足它们的要求。
在一个分层模型中,N层的对等实体使用N层协议。N+1层的协议看到的是在N层上的一个虚拟连接,并且不必考虑任何底层的情况,如图13.2所示。
图13.1 ISO/OSI七层模型
图13.2 在N层的虚连接
自然,在实际的现实中,N层协议是建立在底层协议之上的。这里有一个用于传输数据到底层的通用模式。N层协议的消息(message)称为N层协议数据单元((N)-PDU)。N层协议通过调用N-1层的设施(facilities)来传输一个N层协议数据单元。在这个阶段,N层协议数据单元可能被分段或者经过其他的处理,结果经过头标和尾部包装,成为N-1层协议数据单元。这些N-1层协议数据单元的接收者使用头标和尾部中的信息来重组N层协议数据单元。图13.3给出了这个过程的一个简化视图。
现在我们可以简要地描绘安全服务能在这种分层模型中实现,使得对其他服务的影响保持最小。如果N层的协议要调用N-1层的安全服务,你可以重写一些已经存在的功能或者添加一些新的安全功能。在第一种情况下,N层协议根本不必改变。在第二种情况下,它必须改变调用,以便引用安全功能。在这两种情况下,N-1层协议数据单元的头标是存放与安全有关的数据的合适位置。
图13.3 处理一个(N)-PDU
13.1.2 嗅探(Sniffing)和欺骗(Spoofing)
网络安全的一部分和对消息传输特有的威胁有关。有些威胁,如数据的非授权泄露和修改,在前面的章节中已经详细讨论过。在计算机网络中搭线窃听并不困难,发送者和接收者之间的一个直接链路只是一种抽象而已,如图13.4所示。实际上,你应该料想到有任意多的中间结点在发送者和接收者之间转发了消息,如图13.5所示。根据它们的功能划分,这些中间结点称为网桥、网关、路由器等。每一个这样的设备读取输入的消息,然后决定下一步动作,例如,往哪里转发输入的消息。这些设备大多都包括软件组件。这样为运行功能强大的嗅探(sniffer)软件创造了机会,sniffer读入通信流,把敏感信息转发给攻击者。
图13.4 计算机网络通信的抽象视图
敏感信息包括管理数据,比如网络地址或者在一个结点上准备运行的协议指示。即使你通过加密来慎重保护你的应用数据,一个潜在的攻击者可以知道关于你的网络的内部结构,而且使用这些信息来发起攻击。类似的,从收集关于负荷和结点的可用性的网络管理协议中拣拾来的信息也可认为是敏感信息。同时,为了有效地使用网络,这些协议是需要的。如果保护太过严实,又可能很容易地降低网络提供的服务质量。
网络安全的其他威胁来自于伪装的源地址欺骗,来自于一些实体后来否认卷入它们曾经参与过的事务,或来自通信流量分析,其中攻击者仅仅从两个实体正在交换消息的事实获取信息。
13.1.3 ISO/OSI安全体系结构
ISO/OSI安全体系结构[51]定义了抗击上面列出的威胁的安全服务。这个安全体系结构频繁地被引证引用,也被批评引用。反对它的争论以及为什么实际上没有任何实现的原因属于关于网络安全方面的书中的内容。然而,你完全可能在某些形式或者其他形式上遇到这种体系结构,因此这里有一个服务列表:
·数据机密性(confidentiality):保护数据以免非授权泄露,包括通过通信流分析的信息泄露。
·数据完整性(integrity):保护数据以免非授权修改或者破坏。
·数据源认证(authentication):证实数据来源。
·对等实体认证(peer-entity authentication):验证对等实体(在同一协议层的实体)的身份;对等实体认证常常发生在一个连接建立的时候,包括关于密钥的协商,然后密钥在会话期间用来进行数据源认证。
·不可否认(Non-repudiation):创建数据被发送或者接收的证据,因此发送者(或者接收者)后来不能否认这个事实。ISO 7498-2 使用了术语初始源证据(proof of origin)和递送证据(proof of delivery)。在其他文献中,你也可能发现提交证据(proof of submission)和接收证据(proof of receipt)。这些术语的意义有时会有交叠。
为提供这些服务使用的机制大多来自密码术,即加密、数字签名、完整性检查功能等。密码保护有一个好的特性。当N层安全协议在其下层不安全协议的上面运行时,N层的安全协议不会受到危害。对这种规则有一个例外。当你的目标是匿名,而且你采取预防措施来隐藏在一层的参与者的身份时,则由较低层的协议添加的一些数据仍然可能泄露关于消息的来源和目的地的信息。
图13.5 在计算机网络中的消息传输
13.2 TCP/IP安全为了用实例说明网络安全在实际中如何工作,我们现在研究在Internet协议套范围内的安全,如图13.6所示。在Internet模型中,ISO/OSI模型协议已经瓦解了,只留下了四层。
·在应用层的协议有Telnet,FTP,HTTP,SMTP(Simple Mail Transfer Protocol,简单邮件传送协议),或者SET(Secure Electronic Transaction,安全电子事务处理)。
·在传输层的协议是TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。TCP和UDP根据端口号标识PDU(协议数据单元)所属的应用协议。公共端口号有21(FTP),23(Telnet),25(SMTP)和80(HTTP)等。
·在网络层,有IP协议(Internet Protocol,网际互连协议)。
·接口层的协议与具体的网络技术有关。
TCP和IP,连同UDP和管理协议ICMP一起,形成Internet的核心。最初,这些协议是为通过不可靠网络连接的友好和协同工作的用户设计的,因此根本就没有考虑安全问题。现在,TCP/IP被广泛地使用,便出现了对安全服务的强烈要求。Internet工程任务组(IETF)已经在网际互连层和传输层对安全协议提出了建议。这些协议将是后面两节讨论的主题。我们必须利用这个事实,这些提议中的许多至今还是草案,还没有深深的进入技术细节。在这一章结束的参考文献中指出了现行技术文档的出处。
图13.6 Internet分层结构
13.2.1 IPSEC
网际互连协议(IP)是无连接无状态的协议,它负责传输IP数据报,即网际互连层的PDU(协议数据单元)。因为IP协议是无连接无状态的,所以每一个数据报都作为独立的实体进行处理,与任何其他的数据报没有联系,而且不保证数据报的传递。IP的第四版本IPv4在1981年作为RFC 791发布。从那时起,Internet开始持续增长,因此,IP必须适应和满足新的要求。IP的第六版本IPv6在草案RFC 1883中说明,现在已相当成熟,在讨论IP的安全机制时,我们将参考这个版本。
IP数据报的头标包含了很多的域,其中包括源IP地址和校验和,通过校验和接收者可以检查数据报在传输过程中是否被损坏。然而,这个校验和只是循环冗余检验(CRC),不能提供对数据报的有意修改的防御。更糟的是,接收者不能真正知道数据报是从哪儿来的。在IP头标中的源地址并不一定是发送数据报的IP地址。这就像在8.7.1节中提到的,源路由攻击利用了这个事实。总之,IP协议没有对端到端数据的可靠性、数据报的排序、或者安全的特定机制。这样的安全机制在RFC 1825中进行介绍,即IP协议的安全体系结构(IPSEC)。IPSEC包括两个主要的安全机制:
·IP认证头标(AH),包含在RFC 1826中。
·IP封装安全有效载荷(ESP),包含在RFC 1827中。
IP安全体系结构并不包括阻止流量分析的机制。
IP认证头标保护IP数据报的完整性和认证,但是不保护机密性。顾名思义,认证数据被放在数据报内的头标中。图13.7显示了头标的语法和它在IPv6数据报中的位置。(目的选项也可以出现在认证头标的前面。)在认证头标中的每一行表示一个32位(bit)的字。
图13.7 认证头标的位置和格式
·下一个头标(Next Header):一个8位域,标识在认证头标后面的有效载荷的类型。
·有效载荷长度(Payload length):一个8位域,以32位字为单位,表示认证头标的长度减2。例如,对于一个96位的认证值,认证头标的实际长度是6,但是有效载荷长度是4。值2表示采用了IPv6中的空(null)认证算法。
·保留:一个16位域,保留给将来使用。
·序列号域(Sequence number field):包含一个计数值,这个值必须被发送者计入,而由接收者作判断处理。
·安全参数索引(SPI):一个32位域,它标识对数据报的安全关联。值0表示不存在任何安全关联。
·认证数据:以32位字为单位,长度可变,它包含了认证数据,例如MAC码(消息认证码)或者数字签名。
为了认证一个数据报,发送者首先必须确定一个安全关联(association),明确说明像完整性检验算法、密码密钥和认证数据的长度等参数。通常,用户身份、目的地址和SPI决定了使用哪种安全关联。
通常,一种MAC算法用于认证。采用MD5的HMAC和采用SHA-1的HMAC是缺省选项,所有的IPSEC实现都必须对其提供支持。然而,其他的完整性检验函数也可以使用。认证数据的计算认为在数据报中的域都能够出现在接收者一方。在传输期间,有的域会发生改变,像在IPv6头标中的中继限制(hop limit)。而有的域还是不知道的,像在认证头标中的认证数据。在计算MAC时,这些域用零值来填充。MAC然后被放在认证头标的认证数据域中。
数据报的接收者借助SPI和目的地址来确定相关的安全关联和验证认证数据。如果认证失败,故障必须被记录下来且数据报必须丢弃。
在这个算法中,IP头标中的某些域没有包括在保护机制中。对于进一步的保护,隧道模式增加了一个外部的(outer)IP头,外部IP头标包含了一些其他的IP地址,典型的是安全网关的地址。内部IP头标包含了初始的源地址和目的地址,并且完全被认证头标保护起来,如图13.8所示。
IP封装安全有效载荷保护了数据的机密性。依靠所使用的加密算法,它们也保护了完整性和认证。ESP头标通常放在加密数据的前面,如图13.9所示。ESP头标包含了SPI。不透明转换数据是一个保护域,它包含了对于加密算法处理有关的更多的参数。
在加密一个数据报以前,发送者又一次确定一个安全关联,以决定使用哪种加密算法和使用的密钥。(这里提到的安全关联不同于在认证头标中使用的安全关联。)发送者然后在两种ESP模式中选择一种模式。
·在传输模式(transport mode)中,一个上层协议帧,例如,来自TCP或者UDP的帧,被封装在ESP中,而IP头标并不被加密。传输模式提供在两个结点间交换的数据报的端到端的保护。
·在隧道模式(tunnel mode)中,一个完全的IP数据报被封装在ESP中。这个ESP在另外一个IP数据报中传输,该数据报的头标是以明文形式出现的。IP隧道因此可以描述为在IP中的IP。隧道模式可以用在网关机器(防火墙)之间来创建一个虚拟专用网(VPN),VPN在13.3节中描述。
数据报的接收者确定相关的安全关联,对加过密的有效载荷解密。如果解密失败,故障必须被记录下来,并且必须丢弃数据报。
到现在为止,我们已经适当地解释了在IPSEC中的密钥管理问题。安全关联放在我们需要提到它的地方。确实,IPSEC规定了独立于密钥管理协议的认证和加密服务,密钥管理协议用来建立安全关联和会话密钥。这样,IPSEC安全服务没有与任何特殊的密钥管理协议捆绑在一起。如果发现使用的密钥管理协议有缺陷,那么该协议可以被替换,不会更进一步地影响到IPSEC的实现。
图13.8 隧道模式认证头标小结
IPSEC为使用IP的每一个人提供了安全,它没有改变IP的接口,如图13.10所示。为了实现安全,上层协议不需要改变,甚至不需要知道在IP层保护它们的通信。然而,没有太多的范围来调整应用层要求的保护级别。我们需要关心的是IP作为通信协议的性能,不能在检查应用特定的数据方面花费太多的时间来选择一种安全关联。
图13.9 ESP头的位置和格式
图13.10 IP安全
由于发送者和接收者执行密码操作,IPSEC增加了协议处理开销和通信延迟时间。IPSEC可以为所有的上层协议提供安全,但是它也为此增加了系统开销。
IPSEC没有规定特殊的密钥管理协议。这样允许不同的结点选择它们最喜爱的方案,但是在不同的结点使用IPSEC来保护在它们之间的通信之前,它们必须就使用某种密钥管理方案达成一致。
13.2.2 SSL/TLS
TCP协议提供了在两个结点之间的可靠的字节流通信。TCP是一种有状态的面向连接的协议,它检测什么时候报文分组丢失和什么时候报文分组次序颠倒地到达,并且丢弃重复的数据。TCP在建立两个结点间的会话时,甚至实现基于地址的实体认证;但是,正如在8.7.1节中强调的,这是TCP协议的相当脆弱的实现。TCP缺乏强有力的密码实体认证、数据完整性和机密性。这些服务是在安全套接字层(SSL)协议中引入的,它由Netscape(网景公司)开发,主要保护WWW通信。关于传输层安全(TLS)的IETF草案,它基本上与SSL的第三版本一样,于是这个协议就变成了众所周知的SSL/TLS。
在Internet协议栈中,SSL位于应用层协议和TCP协议之间。因此,SSL能够依赖由TCP保证的性质,例如它自己就不必关心数据的可靠传递。像TCP一样,SSL也是有状态的和面向连接的。SSL会话状态包括为执行密码算法所要求的信息,例如,会话标识符、密码程序组的说明、共享的秘密密钥、证书、由协议(如Diffie-Hellan协议,见12.3.1节)使用的随机数等等。为了抑制由密钥管理引起的系统开销,一个SSL会话可以包括多个连接。有特色的实例是在客户和服务器之间的HTTP会话,其中为传输复合文档的每一个部分都要建立一个新的连接。对每一个连接,仅仅是状态信息中的一个子集发生变化。SSL由两部分组成,如图13.11所示:
·SSL记录层(SSL record layer),和
·SSL握手层(SSL handshake layer)。
SSL记录层从上层协议获得数据块,将这些数据块分段为SSL明文记录,然后应用在现行会话状态中的密码说明定义的密码变换。从本质上来说,SSL记录层提供一种类似于IPSEC的服务,在IPSEC安全关联和SSL状态之间的相似绝不是偶然的。
SSL握手协议建立会话状态的密码参数。在图13.12中,你可以发现在客户和服务器之间的消息交换,括号中的组件是可选的。为了举例说明这个协议,我们现在单步调试客户认证服务器的运行过程。
客户用ClientHello消息开始协议的运行,该消息包含一个随机数、一张建议的密码表(它是根据客户的偏爱定制的)和一个建议的压缩算法:
M1:ClientHello:ClientRandom[28]
建议的密码程序组(suite):
TLS_RSA_WITH_IDEA_CBC_SHA
TLS_RSA_WITH_DES_CBC_SHA
TLS_RSA_EXPORT_WITH_DES40_CBC_SHA
建议的压缩算法:无服务器从建议的程序组中选择TLS_RSA_WITH_DES_CBC_SHA。RSA将用于密钥交换,DES_CBC用作加密算法,SHA用作hash函数。服务器将用一个Server_Hello消息和一个证书链来响应:
图13.11 SSL层
图13.12 SSL握手协议
M2:ServerHello:ServerRandom[28]
使用密码程序组:
TLS_RSA_WITH_DES_CBC_SHA
会话ID:0xa00372d4XS
证书: Subject:DN=SuperStoreVirtualOutlet
PublicKey:0x521aa593…
Issuer:SuperStoreHQ
Subject:DN=SuperStoreHQ
PublicKey:0x9f400682…
Issuer:Verisign
Server Done:NONE
在我们的例子中,没有要求来自客户的证书。客户验证证书链,然后本地生成一个48字节的PreMasterSecret。MasterSecret是下面的前48字节:
PRF(PreMasterSecret,(master secret(,ClientRandom || ServerRandom)
这里的PRF是一个基于MD5(Message Digest 5)和SHA(Secure Hash Algorithm)的复杂函数的简写形式。MasterSecret用作构造如下形式的密钥块的输入:
PRF(MaserSecret,(key expansion(,ClientRandom || ServerRandom)
(符号“||”表示级联)。对于客户和服务器需要的所有的MAC和加密密钥都是从密钥块中得到的。保护从客户到服务器通信的密钥与保护从服务器到客户的通信的密钥是不同的。这样,参与者可以很容易的区分他们发送的消息和接收的消息,并且他们也不受反射(reflection attacks)攻击的影响,反射攻击就是将消息重新发送到它的发送方。
客户现在发送PreMasterSecret到服务器,它使用在选择的密码程序组中规定的密钥管理算法和服务器的认证公开密钥(客户然后应该立即销毁PreMasterSelect)。在我们的例子中,算法是RSA,公开密钥是0x521aa593…。客户通过不请求改变来指示它接收了选择的密码程序组,并且通过用MD5和SHA构造的散列值来捆绑第三个消息到前两个消息。
M3:A:ClientKeyExchang:RSA_Encrypt(ServerPublicKey,PreMasterSecret)
B:ChangeCipherSpec:NONE
C:Finished MD5(M1 || M2 || M3A)
SHA (M1 || M2 || M3A)
服务器解密PreMasterSelect,然后从它计算出MasterSelect、密钥块和对于与客户的这次会话有效的所有衍生出来的秘密密钥。服务器验证附加到客户消息上的散列值,通过不请求改变来表明它接受所选择的密码程序组,而且用下面的消息回答:
M4:A:ChangCipherSpec:NONE
B:Finished MD5(M1 || M2 || M3A || M3C)
SHA(M1 || M2 || M3A || M3C)
客户验证在服务器消息中的散列值。现在,参与者双方都建立了他们用来保护应用通信的共享秘密密钥。
小结目前,SSL是最广泛使用的Internet安全协议,且由所有重要的Web浏览器支持。SSL在应用协议和TCP之间加了一个安全层,所以应用层必须明确地要求安全。这样,应用层的代码必须修改,但是要求的改变并不是很多,例如,在使用套接字的TCP连接中,用SSL-connect调用代替在SSL以前的应用中的TCP connect调用。SSL-connect调用会初始化密码状态参数,然后再作原来的TCP connect调用。
不同于IPSEC,SSL规范定义了一个握手协议,客户和服务器利用它来商定密码程序组,确立必需的键控资料,进行相互认证。和IPSEC不同,SSL至今没有规定在符合SSL标准的所有实现中必须包含的密码算法的程序组。这一点目前是在使SSL/TLS成为Internet标准的途中的绊脚石。
在10.3节,我们提到这样一个问题,如何使没有意识到安全的应用变得安全。使用IPSEC和SSL,你遇到了与GSS-API类似的情形。为了使用一个密码服务调用,它进行数据的加密和认证,一个应用层的编程者在应用代码中必须改变一点点(SSL)或者一点都不改变(IPSEC)。安全上下文环境由SSL建立,而在IPSEC中则必须用其他独立的方式建立。客户和服务器必须保护好它们的安全上下文环境的参数,否则由IPSEC和SSL提供的安全就会受到威胁,于是我们再次返回到计算机安全方法。
密码保护不会受到来自在通信链路下面层的威胁,它很可能受到来自网络结点的下面层的威胁。
13.3 网络边界通过使用IPSEC和SSL,在一个计算机网络中安全周界(perimeters)与结点边界(boundaries)相一致。结点被认为是安全的,而网络是不安全的。这是一个关于外部世界的相当简单化的观点。网络是由很多嵌套的子网组成,子网的边界是一个相当安全的周界,这是完全有可能的情形。
考虑一个组织已经安装了一个局域网(LAN)的情况。报文分组可以借助于LAN中任何结点寻路,每个结点都有嗅探指定到其他结点的报文分组的潜力。该组织已经认为他们的前提是,与其他泄漏信息的方式相比,搭线窃听攻击不是主要的威胁;但雇员的数据不应该偶然地在人事部门外流动。为了实现这个目标,这个局域网被分成了两个用路由器连接起来的子网,如图13.13所示。人事部门的计算机通过子网subnet_1连接起来,该组织的所有其他的计算机则通过子网subnet_2连接。仅仅在报文分组明确地定址到另外一个子网的结点时,路由器才转发这个数据包。
当这两个子网不直接连接时,你可以创建一个虚拟专用网(VPN),VPN通过在每个子网的网关之间建立安全连接来实现,如图13.14所示。在两个子网间的所有通信必须经过这些网关,其中增加的密码保护扩展了安全边界。
你已经看到了两个例子,其中在网络边界的结点实现了安全机制。一般来说,在一个网络边界(boundary)的主机可以用来:
·控制对网络的访问
·对离开网络的数据进行密码保护
·隐藏网络的内部结构在下一节,将更密切地考虑可能在网络边界实现的安全机制的种类。
图13.13 分离的两个子网
图13.14 虚拟专用网
13.4 防火墙继续讨论我们的例子。在组织内部的LAN连接了个人计算机PC。在PC上的操作系统是用户友好的,但不是为安全设计的。只要LAN对组织来说是内部的,这就不一定是个问题。然而,当LAN被连接到Internet上的时候,威胁的环境改变了。同样地,组织可能决定扩展对雇员数据的安全策略,并且要求这样的数据从来不被送到在人事部门以外的结点。阻塞所有离开人事部门子网的通信不是一个选择方案,所以必须引入新的机制来实行这种安全策略。从安全的角度来说,对LAN内的所有结点进行升级保护也许是一个不错的主意,但这不是很实际的情况。
定义 我们用防火墙(firewall)作为代表保护内部网络边界的任何安全系统的通用名。堡垒主机(bastion host)是一个具有坚固安全性的计算机系统,因为它要暴露给外部世界。
防火墙与Internet安全密切联系在一起。当你考虑使用一种认证协议的时候,你必须知道你的用户是谁。当你想要向外延伸到Internet上的未知世界去见到不断增长的用户群时,这种必须知道你的用户是谁的假设就不适当了。如果你想对未知的用户提供受控制的访问,你能做什么呢?远程用户来自的地址或者请求的服务可能决定了你的访问控制决策。因此,防火墙的典型任务是:
·基于发送者或者接收者地址的访问控制;
·基于请求的服务的访问控制;
·隐藏内部网络,例如,拓扑结构、地址、来自外部的通信量;
·在接收的文件中进行病毒检测:这一点已经紧紧地和通过e-mail传播的宏病毒联系在了一起。
·基于通信源的认证;
·做Internet活动日志。
由防火墙使用的两种基本机制是报文分组过滤和代理服务器。
13.4.1 报文分组过滤网络协议把报文分组从源地址发送到目的地址。关于报文分组的有关信息包含在它的头标中。头标可以包含源地址、目的地址以及报文分组所属应用协议的一些指示信息。例如,TCP端口号23标识了一个Telnet报文分组。可以基于下述的信息进行报文分组过滤:
·源地址:源地址可以很容易被伪造,所以它的有效性是有限的;建议你阻止从Internet到达的、用内部IP地址作为源地址出现的报文分组。
·目的地址:一个典型的例子就是在图13.16中的筛选路由器(screening router),它仅仅发送报文分组到堡垒主机。
·协议:你可以使用TCP端口号和所属协议的基础上过滤报文分组。例如,你可以允许FTP,但阻塞Telnet。
·连接:网络层过滤(有状态检查)使报文分组与一个连接发生联系,这样可以辨别报文分组。例如,可以区分开内部FTP请求响应的FTP包和来自Internet连接的FTP包。
13.4.2 代理服务器让我们围绕着FTP例子来讨论。内部网络的一个客户想要访问在Internet上的FTP服务器。安全策略可能仅仅允许有限的一组用户使用FTP,而且可能禁止用户去下载被认为是有攻击行为的资料。报文分组过滤支持允许FTP而阻止Telnet连接的策略,但是在这里,报文分组过滤策略根本不起任何作用。另外,当允许对外部的FTP服务器访问时,客户的网络地址也暴露了。对于潜在的攻击者来说,这些信息可能是有用的。
为了实现基于用户身份的策略和隐藏关于内部网络的信息,可以使用代理服务器。代理服务器是另外一个受控调用(controlled invocation)的实例。代理服务器截获客户的请求,并且根据它的安全规则来决定这个请求是否允许。如果允许的话,这个请求才传给真正的服务。代理服务器是外部可以看见的唯一实体,它对内部的用户来说是透明的。代理服务器可以应用协议特定的访问规则,执行基于用户身份和报文分组内容的访问控制,如要执行的特殊指令。例如,代理可以允许通过FTP的get(下载)请求,但是阻止FTP的put(上传)请求。用户不必登录到防火墙,所以不必维护用户的帐户。与应用有关的事件可以记录下来。当然,对于每一个你需要保护的服务都需要一个代理服务器。随着Internet提供的Internet服务项目不断增加,这种方法不具有很好的可扩展性。
相同的原理可用于任何的协议层。如果你想要保护一个特殊的应用层协议,你可以重新装配在防火墙相应协议中交换的消息(和会话),使用应用特定的安全检测,然后与指定的服务通信。对于复杂协议来说,这样的策略仍可能产生不受欢迎的性能开销。
13.4.3 双宿主主机防火墙双宿主主机(dual-homed host)是一台具有两个网络接口的机器。这样的防火墙不只是简单地在Internet和内部网络之间路由报文分组,它还要根据它的安全规则处理这些报文分组。双宿主主机是“全内置”防火墙((all in one( firewall);它能够提供报文分组过滤和代理服务。在内部网络的客户可以通过使用防火墙上的代理服务器或者直接登录到防火墙来访问在Internet上的服务。
13.4.4 筛选主机防火墙双宿主主机常常通过改写Unix系统而建立。图13.15中的防火墙则是一个直接面对外部世界的相当复杂的系统。如果你不是太放心那样的情况,你可以分离防火墙所实现的一些功能,并且通过具有受限功能的更强壮的系统连接到Internet。
图13.15 双宿主主机防火墙
图13.16中的防火墙被称作筛选主机防火墙(screened host firewall)[28],它由实施报文分组过滤和提供与Internet接口的筛选路由器以及内部网络的堡垒主机组成。筛选路由器将所有允许进入的通信发送到堡垒主机,在这儿,在报文分组被转发到内部网络中的结点前,可以进行进一步的访问控制决策,并且只接收来自堡垒主机的内部报文分组。
把报文分组过滤从防火墙实现的其他任务分离开来可以产生不太复杂的路由器,这样,路由器和防火墙都有了更好的性能,因为硬件可以用来优化路由任务和更高程度的安全性保证。基于这种理解,筛选主机防火墙比双宿主主机[28]具有更高安全性的断言可以认为是有道理的。另一方面,你可能会抱怨它的高安全保证仅仅适用于有限的功能度(functionality),而且必须由代理服务器提供更多相关的可选软件(features)。
13.4.5 筛选子网防火墙筛选子网防火墙(screened subnet firewall)组合了前面两种方法的特性,如图13.17所示。一个周边网络(peripheral network),也称作非军事区(demilitarized zone,DMZ),被放置在内部网络和Internet之间。筛选路由器位于Internet和周边网络之间。在这里,高安全保证是所希望的,仅仅报文分组过滤对于应付外部用户来说是足够了。在外围网和内部网之间的双宿主主机防火墙可以提供较少的安全保障,但可以应用更复杂的策略来管理内部用户。
周边网络是用于非敏感主机的合适场所,非敏感主机应该能访问外部世界,像Web服务器。外部用户浏览你的Web网页根本不需要进入内部网络,并且如果你真正关心你的声誉,你可以把服务器中的数据存储在不可写的介质上,比如CD-ROM。
小结构建防火墙的挑战是双重的。从功能性来说,防火墙的保护机制必须与用户的安全策略相对应,它常常是基于地址的策略和基于身份的策略的混合。此外,你需要确保防火墙不被破坏和绕过。对于复杂的系统,为那些放在暴露位置的机器获得所要求的安全保证是不容易的,存在许多由于防火墙的错误配置而攻破防火墙的情况。
图13.16 筛选主机防火墙
图13.17 筛选子网防火墙允许攻击者绕过防火墙的常见漏洞是连到内部网络机器上的拨号线路。这里可能存在另外一种情况,过于严格的安全措施证明会产生相反的结果。如果防火墙过多地干涉对网络的访问,用户将从效率方面考虑要求管理部门提供拨号线路接入。最后,即使有配置适当的防火墙,如果你的内部主机有安全问题,你的境况也不见得好到哪里去。相当重要的是,防火墙对保护你免受内部人员的攻击是完全无能为力的。
进一步的阅读这一章仅仅能够对网络安全的问题和技术给出一个简要的梗概。网络安全在文献[53]中进行了全面的阐述,Internet安全在文献[8]中进行了详细的描述。
关于Internet安全的最好的资料来源当然是Internet了。Internet工程任务组的网址是:
http://www.ietf.org
根据IETF定义,IETF规范是在进行中的工作。对Internet安全研究来说,它完全是这种情况,所以当你阅读这本书的时候,如果IPSEC或者SSL/TLS的某些方面已经改变了,也不要失望。RFC文档和Internet草案也可以从Internet草案影像目录(Internet Drafts Shadow Directories)获得:
ds.internic.net (美国东岸)
nic.nordu.net (欧洲)
ftp.isi.edu (美国西岸)
munnari.oz.au (太平洋地区)
IPSEC在RFC 1825、RFC 1826和RFC 1827中定义。关于SSL的Netscape公司Web页面的网址是:
http://www.netscape.com/eng/ssl3
关于防火墙的有用书籍是[28,29]。在Web安全方面,对防火墙的功能广泛的讨论在文献[128]中描述。可信信息系统(Trusted Information System,TIS)免费提供防火墙工具包。TIS Web页面的地址是:
http://www.tis.com
推荐一个关于防火墙的Web搜索的出发站点:
http://www.clark.net/pub/mjr/pubs
厂商的Web站点是寻找关于当前的防火墙产品信息的位置。例如,关于Sidewinder防火墙的资料由下面站点提供:
http://www.sctc.com
练习题练习题13.1 ARP(地址解析协议)将IP地址与硬件地址联系起来[8]。这种联系可能随着时间改变。在网络中的每一个结点保存了对应IP地址和硬件地址的ARP高速缓存。高速缓存条目在几分钟后就过期了。结点设法发现它要寻找的IP地址的硬件地址在它的高速缓存中不存在时,则广播ARP请求,该请求也包含了它自己的IP地址和硬件地址。具有ARP所要求的IP地址的结点将用它的硬件地址来响应,所有其他的结点可以忽略这个请求。在ARP协议中,欺骗的范围是什么?哪种防御可以用来对抗这种欺骗?
练习题13.2 在IPSEC中,数据报可以通过认证头标来认证,但是,也可以通过ESP头标来认证,比较这两种方法,哪一种提供更好的保护?
练习题13.3 对于IPSEC和SSL来说,运行协议的结点被假设是安全的。为了使这种假设变成真的,在这些结点你需要采取哪些附加的安全措施?
练习题13.4 对一个安全e-mail系统和一台运行安全e-mail系统的机器,你分别要求有哪些安全性能?在哪一层提供这样的安全服务最适合?在你的答案中,要区分提供匿名服务和不提供匿名服务。
练习题13.5 网络越来越趋向于远程管理。研究远程网络管理的安全内涵和描述对于安全网络管理来说是必须的安全机制。
练习题13.6 你会发现专家在代理服务器和报文分组过滤防火墙的相对强度方面意见不一致。分析一下他们的论点,在他们争论的基础上证明你自己的判断的理由。
练习题13.7 Internet是计算机病毒感染的新来源。防火墙保护内部网络免受外部网的攻击。防火墙可以保护内部网络不受病毒感染吗?在你的答案中,考虑不同类型的防火墙。在TCP/IP层或者在应用层的密码保护如何影响防火墙的反病毒能力?
练习题13.8 通过计算机网络连接的部件构成一个多级的安全系统(MLS),使得通信安全要注意实施MLS策略[129]。从各个结点的操作系统角度来说,你还需要什么样的安全性质?
部署网络是为了使计算机对外部世界来说更容易使用。使计算机对外部更容易使用是好坏掺半之事。可能的相互作用越多,不受欢迎的相互作用也越多。因此,你可能希望控制自己系统上的用户怎样能够访问网络,网络上的用户怎样能访问你的系统,以及当你的数据在网络上传输时,怎样保护传输的数据等。因此,网络安全不仅是关于密码,而且对访问控制提出了新的要求。
目标
·获得针对网络的安全挑战的概观,理解网络安全怎样影响和依赖计算机安全。
·使用基本的Internet安全协议IPSEC和SSL/TLS作为范例,介绍网络安全协议的设计。
·了解网络边界可以怎样用作安全周界。
·理解各种防火墙技术的原理,它们能提供的服务,以及它们固有的限制。
13.1 简介我们在前面对安全协议的讨论保持在相当抽象的层次上。当数据(消息报文)在实体间传输时,我们完全没有关心数据交换的精确的性质。安全协议的一些特征能够在这样的模型中得到检验,但是一旦你开始实现安全协议的时候,你必须更密切注意你的计算机网络的技术细节。
计算机网络是分布式系统中结点之间传输数据的通信基础设施。一个结点上某个应用程序要发送的数据必须事先准备好,用一个序列的电信号或光信号来传输;接收端进行重组,并且传送给某个应用程序。网络协议必须找到一条从发送者到接收者的路径,它们必须处理数据的丢失和损坏,而且还要处理失去的连接,例如施工人员刺穿了电话线缆。一个好的工程实践是一次一个地解决这些令人关注的问题并使用一个应用层协议在顶端、物理地传输信息比特流的协议位于底端的分层体系结构。网络安全的主要任务之一就是为特殊的安全服务寻找一个最合适的网络层次。
网络管理协议提供了所需要的支持,使得由其他协议生成的数据可以有效地传送到指定的接收者。例如,管理协议可以检查在发送者和接收者之间的中间结点的可用性,找到最佳的连接,或者解决逻辑网络地址到物理地址的转换。其他协议用来远程地配置网络结点,在这些结点上运行的软件正在变得越来越复杂。因此,网络安全越来越依赖于网络管理协议的安全和网络中结点的安全。把网络结点安排在保护的场地内的做法已不再是对安全的保证。
13.1.1 分层模型开放系统互联(OSI)体系结构的七层模型,如图13.1所示,是分层网络协议的公共框架结构。在这本书里,我们不关心每一层的精确意义。相反,我们只对它的分层模型感兴趣,因为它们对讨论网络安全提供了相当有用的抽象。分层模型也让我们回到了在1.4.2节中的熟悉的主题。
·在顶部的安全服务可以用来满足某种特定应用的要求。然而,不同的应用每个都需要它们自身的安全协议。
·在底部的安全服务可以保护来自所有高层的通信(traffic),减轻了应用层协议设计者对安全的关心。然而,一些应用可能发现这种保护不能很好地满足它们的要求。
在一个分层模型中,N层的对等实体使用N层协议。N+1层的协议看到的是在N层上的一个虚拟连接,并且不必考虑任何底层的情况,如图13.2所示。
图13.1 ISO/OSI七层模型
图13.2 在N层的虚连接
自然,在实际的现实中,N层协议是建立在底层协议之上的。这里有一个用于传输数据到底层的通用模式。N层协议的消息(message)称为N层协议数据单元((N)-PDU)。N层协议通过调用N-1层的设施(facilities)来传输一个N层协议数据单元。在这个阶段,N层协议数据单元可能被分段或者经过其他的处理,结果经过头标和尾部包装,成为N-1层协议数据单元。这些N-1层协议数据单元的接收者使用头标和尾部中的信息来重组N层协议数据单元。图13.3给出了这个过程的一个简化视图。
现在我们可以简要地描绘安全服务能在这种分层模型中实现,使得对其他服务的影响保持最小。如果N层的协议要调用N-1层的安全服务,你可以重写一些已经存在的功能或者添加一些新的安全功能。在第一种情况下,N层协议根本不必改变。在第二种情况下,它必须改变调用,以便引用安全功能。在这两种情况下,N-1层协议数据单元的头标是存放与安全有关的数据的合适位置。
图13.3 处理一个(N)-PDU
13.1.2 嗅探(Sniffing)和欺骗(Spoofing)
网络安全的一部分和对消息传输特有的威胁有关。有些威胁,如数据的非授权泄露和修改,在前面的章节中已经详细讨论过。在计算机网络中搭线窃听并不困难,发送者和接收者之间的一个直接链路只是一种抽象而已,如图13.4所示。实际上,你应该料想到有任意多的中间结点在发送者和接收者之间转发了消息,如图13.5所示。根据它们的功能划分,这些中间结点称为网桥、网关、路由器等。每一个这样的设备读取输入的消息,然后决定下一步动作,例如,往哪里转发输入的消息。这些设备大多都包括软件组件。这样为运行功能强大的嗅探(sniffer)软件创造了机会,sniffer读入通信流,把敏感信息转发给攻击者。
图13.4 计算机网络通信的抽象视图
敏感信息包括管理数据,比如网络地址或者在一个结点上准备运行的协议指示。即使你通过加密来慎重保护你的应用数据,一个潜在的攻击者可以知道关于你的网络的内部结构,而且使用这些信息来发起攻击。类似的,从收集关于负荷和结点的可用性的网络管理协议中拣拾来的信息也可认为是敏感信息。同时,为了有效地使用网络,这些协议是需要的。如果保护太过严实,又可能很容易地降低网络提供的服务质量。
网络安全的其他威胁来自于伪装的源地址欺骗,来自于一些实体后来否认卷入它们曾经参与过的事务,或来自通信流量分析,其中攻击者仅仅从两个实体正在交换消息的事实获取信息。
13.1.3 ISO/OSI安全体系结构
ISO/OSI安全体系结构[51]定义了抗击上面列出的威胁的安全服务。这个安全体系结构频繁地被引证引用,也被批评引用。反对它的争论以及为什么实际上没有任何实现的原因属于关于网络安全方面的书中的内容。然而,你完全可能在某些形式或者其他形式上遇到这种体系结构,因此这里有一个服务列表:
·数据机密性(confidentiality):保护数据以免非授权泄露,包括通过通信流分析的信息泄露。
·数据完整性(integrity):保护数据以免非授权修改或者破坏。
·数据源认证(authentication):证实数据来源。
·对等实体认证(peer-entity authentication):验证对等实体(在同一协议层的实体)的身份;对等实体认证常常发生在一个连接建立的时候,包括关于密钥的协商,然后密钥在会话期间用来进行数据源认证。
·不可否认(Non-repudiation):创建数据被发送或者接收的证据,因此发送者(或者接收者)后来不能否认这个事实。ISO 7498-2 使用了术语初始源证据(proof of origin)和递送证据(proof of delivery)。在其他文献中,你也可能发现提交证据(proof of submission)和接收证据(proof of receipt)。这些术语的意义有时会有交叠。
为提供这些服务使用的机制大多来自密码术,即加密、数字签名、完整性检查功能等。密码保护有一个好的特性。当N层安全协议在其下层不安全协议的上面运行时,N层的安全协议不会受到危害。对这种规则有一个例外。当你的目标是匿名,而且你采取预防措施来隐藏在一层的参与者的身份时,则由较低层的协议添加的一些数据仍然可能泄露关于消息的来源和目的地的信息。
图13.5 在计算机网络中的消息传输
13.2 TCP/IP安全为了用实例说明网络安全在实际中如何工作,我们现在研究在Internet协议套范围内的安全,如图13.6所示。在Internet模型中,ISO/OSI模型协议已经瓦解了,只留下了四层。
·在应用层的协议有Telnet,FTP,HTTP,SMTP(Simple Mail Transfer Protocol,简单邮件传送协议),或者SET(Secure Electronic Transaction,安全电子事务处理)。
·在传输层的协议是TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。TCP和UDP根据端口号标识PDU(协议数据单元)所属的应用协议。公共端口号有21(FTP),23(Telnet),25(SMTP)和80(HTTP)等。
·在网络层,有IP协议(Internet Protocol,网际互连协议)。
·接口层的协议与具体的网络技术有关。
TCP和IP,连同UDP和管理协议ICMP一起,形成Internet的核心。最初,这些协议是为通过不可靠网络连接的友好和协同工作的用户设计的,因此根本就没有考虑安全问题。现在,TCP/IP被广泛地使用,便出现了对安全服务的强烈要求。Internet工程任务组(IETF)已经在网际互连层和传输层对安全协议提出了建议。这些协议将是后面两节讨论的主题。我们必须利用这个事实,这些提议中的许多至今还是草案,还没有深深的进入技术细节。在这一章结束的参考文献中指出了现行技术文档的出处。
图13.6 Internet分层结构
13.2.1 IPSEC
网际互连协议(IP)是无连接无状态的协议,它负责传输IP数据报,即网际互连层的PDU(协议数据单元)。因为IP协议是无连接无状态的,所以每一个数据报都作为独立的实体进行处理,与任何其他的数据报没有联系,而且不保证数据报的传递。IP的第四版本IPv4在1981年作为RFC 791发布。从那时起,Internet开始持续增长,因此,IP必须适应和满足新的要求。IP的第六版本IPv6在草案RFC 1883中说明,现在已相当成熟,在讨论IP的安全机制时,我们将参考这个版本。
IP数据报的头标包含了很多的域,其中包括源IP地址和校验和,通过校验和接收者可以检查数据报在传输过程中是否被损坏。然而,这个校验和只是循环冗余检验(CRC),不能提供对数据报的有意修改的防御。更糟的是,接收者不能真正知道数据报是从哪儿来的。在IP头标中的源地址并不一定是发送数据报的IP地址。这就像在8.7.1节中提到的,源路由攻击利用了这个事实。总之,IP协议没有对端到端数据的可靠性、数据报的排序、或者安全的特定机制。这样的安全机制在RFC 1825中进行介绍,即IP协议的安全体系结构(IPSEC)。IPSEC包括两个主要的安全机制:
·IP认证头标(AH),包含在RFC 1826中。
·IP封装安全有效载荷(ESP),包含在RFC 1827中。
IP安全体系结构并不包括阻止流量分析的机制。
IP认证头标保护IP数据报的完整性和认证,但是不保护机密性。顾名思义,认证数据被放在数据报内的头标中。图13.7显示了头标的语法和它在IPv6数据报中的位置。(目的选项也可以出现在认证头标的前面。)在认证头标中的每一行表示一个32位(bit)的字。
图13.7 认证头标的位置和格式
·下一个头标(Next Header):一个8位域,标识在认证头标后面的有效载荷的类型。
·有效载荷长度(Payload length):一个8位域,以32位字为单位,表示认证头标的长度减2。例如,对于一个96位的认证值,认证头标的实际长度是6,但是有效载荷长度是4。值2表示采用了IPv6中的空(null)认证算法。
·保留:一个16位域,保留给将来使用。
·序列号域(Sequence number field):包含一个计数值,这个值必须被发送者计入,而由接收者作判断处理。
·安全参数索引(SPI):一个32位域,它标识对数据报的安全关联。值0表示不存在任何安全关联。
·认证数据:以32位字为单位,长度可变,它包含了认证数据,例如MAC码(消息认证码)或者数字签名。
为了认证一个数据报,发送者首先必须确定一个安全关联(association),明确说明像完整性检验算法、密码密钥和认证数据的长度等参数。通常,用户身份、目的地址和SPI决定了使用哪种安全关联。
通常,一种MAC算法用于认证。采用MD5的HMAC和采用SHA-1的HMAC是缺省选项,所有的IPSEC实现都必须对其提供支持。然而,其他的完整性检验函数也可以使用。认证数据的计算认为在数据报中的域都能够出现在接收者一方。在传输期间,有的域会发生改变,像在IPv6头标中的中继限制(hop limit)。而有的域还是不知道的,像在认证头标中的认证数据。在计算MAC时,这些域用零值来填充。MAC然后被放在认证头标的认证数据域中。
数据报的接收者借助SPI和目的地址来确定相关的安全关联和验证认证数据。如果认证失败,故障必须被记录下来且数据报必须丢弃。
在这个算法中,IP头标中的某些域没有包括在保护机制中。对于进一步的保护,隧道模式增加了一个外部的(outer)IP头,外部IP头标包含了一些其他的IP地址,典型的是安全网关的地址。内部IP头标包含了初始的源地址和目的地址,并且完全被认证头标保护起来,如图13.8所示。
IP封装安全有效载荷保护了数据的机密性。依靠所使用的加密算法,它们也保护了完整性和认证。ESP头标通常放在加密数据的前面,如图13.9所示。ESP头标包含了SPI。不透明转换数据是一个保护域,它包含了对于加密算法处理有关的更多的参数。
在加密一个数据报以前,发送者又一次确定一个安全关联,以决定使用哪种加密算法和使用的密钥。(这里提到的安全关联不同于在认证头标中使用的安全关联。)发送者然后在两种ESP模式中选择一种模式。
·在传输模式(transport mode)中,一个上层协议帧,例如,来自TCP或者UDP的帧,被封装在ESP中,而IP头标并不被加密。传输模式提供在两个结点间交换的数据报的端到端的保护。
·在隧道模式(tunnel mode)中,一个完全的IP数据报被封装在ESP中。这个ESP在另外一个IP数据报中传输,该数据报的头标是以明文形式出现的。IP隧道因此可以描述为在IP中的IP。隧道模式可以用在网关机器(防火墙)之间来创建一个虚拟专用网(VPN),VPN在13.3节中描述。
数据报的接收者确定相关的安全关联,对加过密的有效载荷解密。如果解密失败,故障必须被记录下来,并且必须丢弃数据报。
到现在为止,我们已经适当地解释了在IPSEC中的密钥管理问题。安全关联放在我们需要提到它的地方。确实,IPSEC规定了独立于密钥管理协议的认证和加密服务,密钥管理协议用来建立安全关联和会话密钥。这样,IPSEC安全服务没有与任何特殊的密钥管理协议捆绑在一起。如果发现使用的密钥管理协议有缺陷,那么该协议可以被替换,不会更进一步地影响到IPSEC的实现。
图13.8 隧道模式认证头标小结
IPSEC为使用IP的每一个人提供了安全,它没有改变IP的接口,如图13.10所示。为了实现安全,上层协议不需要改变,甚至不需要知道在IP层保护它们的通信。然而,没有太多的范围来调整应用层要求的保护级别。我们需要关心的是IP作为通信协议的性能,不能在检查应用特定的数据方面花费太多的时间来选择一种安全关联。
图13.9 ESP头的位置和格式
图13.10 IP安全
由于发送者和接收者执行密码操作,IPSEC增加了协议处理开销和通信延迟时间。IPSEC可以为所有的上层协议提供安全,但是它也为此增加了系统开销。
IPSEC没有规定特殊的密钥管理协议。这样允许不同的结点选择它们最喜爱的方案,但是在不同的结点使用IPSEC来保护在它们之间的通信之前,它们必须就使用某种密钥管理方案达成一致。
13.2.2 SSL/TLS
TCP协议提供了在两个结点之间的可靠的字节流通信。TCP是一种有状态的面向连接的协议,它检测什么时候报文分组丢失和什么时候报文分组次序颠倒地到达,并且丢弃重复的数据。TCP在建立两个结点间的会话时,甚至实现基于地址的实体认证;但是,正如在8.7.1节中强调的,这是TCP协议的相当脆弱的实现。TCP缺乏强有力的密码实体认证、数据完整性和机密性。这些服务是在安全套接字层(SSL)协议中引入的,它由Netscape(网景公司)开发,主要保护WWW通信。关于传输层安全(TLS)的IETF草案,它基本上与SSL的第三版本一样,于是这个协议就变成了众所周知的SSL/TLS。
在Internet协议栈中,SSL位于应用层协议和TCP协议之间。因此,SSL能够依赖由TCP保证的性质,例如它自己就不必关心数据的可靠传递。像TCP一样,SSL也是有状态的和面向连接的。SSL会话状态包括为执行密码算法所要求的信息,例如,会话标识符、密码程序组的说明、共享的秘密密钥、证书、由协议(如Diffie-Hellan协议,见12.3.1节)使用的随机数等等。为了抑制由密钥管理引起的系统开销,一个SSL会话可以包括多个连接。有特色的实例是在客户和服务器之间的HTTP会话,其中为传输复合文档的每一个部分都要建立一个新的连接。对每一个连接,仅仅是状态信息中的一个子集发生变化。SSL由两部分组成,如图13.11所示:
·SSL记录层(SSL record layer),和
·SSL握手层(SSL handshake layer)。
SSL记录层从上层协议获得数据块,将这些数据块分段为SSL明文记录,然后应用在现行会话状态中的密码说明定义的密码变换。从本质上来说,SSL记录层提供一种类似于IPSEC的服务,在IPSEC安全关联和SSL状态之间的相似绝不是偶然的。
SSL握手协议建立会话状态的密码参数。在图13.12中,你可以发现在客户和服务器之间的消息交换,括号中的组件是可选的。为了举例说明这个协议,我们现在单步调试客户认证服务器的运行过程。
客户用ClientHello消息开始协议的运行,该消息包含一个随机数、一张建议的密码表(它是根据客户的偏爱定制的)和一个建议的压缩算法:
M1:ClientHello:ClientRandom[28]
建议的密码程序组(suite):
TLS_RSA_WITH_IDEA_CBC_SHA
TLS_RSA_WITH_DES_CBC_SHA
TLS_RSA_EXPORT_WITH_DES40_CBC_SHA
建议的压缩算法:无服务器从建议的程序组中选择TLS_RSA_WITH_DES_CBC_SHA。RSA将用于密钥交换,DES_CBC用作加密算法,SHA用作hash函数。服务器将用一个Server_Hello消息和一个证书链来响应:
图13.11 SSL层
图13.12 SSL握手协议
M2:ServerHello:ServerRandom[28]
使用密码程序组:
TLS_RSA_WITH_DES_CBC_SHA
会话ID:0xa00372d4XS
证书: Subject:DN=SuperStoreVirtualOutlet
PublicKey:0x521aa593…
Issuer:SuperStoreHQ
Subject:DN=SuperStoreHQ
PublicKey:0x9f400682…
Issuer:Verisign
Server Done:NONE
在我们的例子中,没有要求来自客户的证书。客户验证证书链,然后本地生成一个48字节的PreMasterSecret。MasterSecret是下面的前48字节:
PRF(PreMasterSecret,(master secret(,ClientRandom || ServerRandom)
这里的PRF是一个基于MD5(Message Digest 5)和SHA(Secure Hash Algorithm)的复杂函数的简写形式。MasterSecret用作构造如下形式的密钥块的输入:
PRF(MaserSecret,(key expansion(,ClientRandom || ServerRandom)
(符号“||”表示级联)。对于客户和服务器需要的所有的MAC和加密密钥都是从密钥块中得到的。保护从客户到服务器通信的密钥与保护从服务器到客户的通信的密钥是不同的。这样,参与者可以很容易的区分他们发送的消息和接收的消息,并且他们也不受反射(reflection attacks)攻击的影响,反射攻击就是将消息重新发送到它的发送方。
客户现在发送PreMasterSecret到服务器,它使用在选择的密码程序组中规定的密钥管理算法和服务器的认证公开密钥(客户然后应该立即销毁PreMasterSelect)。在我们的例子中,算法是RSA,公开密钥是0x521aa593…。客户通过不请求改变来指示它接收了选择的密码程序组,并且通过用MD5和SHA构造的散列值来捆绑第三个消息到前两个消息。
M3:A:ClientKeyExchang:RSA_Encrypt(ServerPublicKey,PreMasterSecret)
B:ChangeCipherSpec:NONE
C:Finished MD5(M1 || M2 || M3A)
SHA (M1 || M2 || M3A)
服务器解密PreMasterSelect,然后从它计算出MasterSelect、密钥块和对于与客户的这次会话有效的所有衍生出来的秘密密钥。服务器验证附加到客户消息上的散列值,通过不请求改变来表明它接受所选择的密码程序组,而且用下面的消息回答:
M4:A:ChangCipherSpec:NONE
B:Finished MD5(M1 || M2 || M3A || M3C)
SHA(M1 || M2 || M3A || M3C)
客户验证在服务器消息中的散列值。现在,参与者双方都建立了他们用来保护应用通信的共享秘密密钥。
小结目前,SSL是最广泛使用的Internet安全协议,且由所有重要的Web浏览器支持。SSL在应用协议和TCP之间加了一个安全层,所以应用层必须明确地要求安全。这样,应用层的代码必须修改,但是要求的改变并不是很多,例如,在使用套接字的TCP连接中,用SSL-connect调用代替在SSL以前的应用中的TCP connect调用。SSL-connect调用会初始化密码状态参数,然后再作原来的TCP connect调用。
不同于IPSEC,SSL规范定义了一个握手协议,客户和服务器利用它来商定密码程序组,确立必需的键控资料,进行相互认证。和IPSEC不同,SSL至今没有规定在符合SSL标准的所有实现中必须包含的密码算法的程序组。这一点目前是在使SSL/TLS成为Internet标准的途中的绊脚石。
在10.3节,我们提到这样一个问题,如何使没有意识到安全的应用变得安全。使用IPSEC和SSL,你遇到了与GSS-API类似的情形。为了使用一个密码服务调用,它进行数据的加密和认证,一个应用层的编程者在应用代码中必须改变一点点(SSL)或者一点都不改变(IPSEC)。安全上下文环境由SSL建立,而在IPSEC中则必须用其他独立的方式建立。客户和服务器必须保护好它们的安全上下文环境的参数,否则由IPSEC和SSL提供的安全就会受到威胁,于是我们再次返回到计算机安全方法。
密码保护不会受到来自在通信链路下面层的威胁,它很可能受到来自网络结点的下面层的威胁。
13.3 网络边界通过使用IPSEC和SSL,在一个计算机网络中安全周界(perimeters)与结点边界(boundaries)相一致。结点被认为是安全的,而网络是不安全的。这是一个关于外部世界的相当简单化的观点。网络是由很多嵌套的子网组成,子网的边界是一个相当安全的周界,这是完全有可能的情形。
考虑一个组织已经安装了一个局域网(LAN)的情况。报文分组可以借助于LAN中任何结点寻路,每个结点都有嗅探指定到其他结点的报文分组的潜力。该组织已经认为他们的前提是,与其他泄漏信息的方式相比,搭线窃听攻击不是主要的威胁;但雇员的数据不应该偶然地在人事部门外流动。为了实现这个目标,这个局域网被分成了两个用路由器连接起来的子网,如图13.13所示。人事部门的计算机通过子网subnet_1连接起来,该组织的所有其他的计算机则通过子网subnet_2连接。仅仅在报文分组明确地定址到另外一个子网的结点时,路由器才转发这个数据包。
当这两个子网不直接连接时,你可以创建一个虚拟专用网(VPN),VPN通过在每个子网的网关之间建立安全连接来实现,如图13.14所示。在两个子网间的所有通信必须经过这些网关,其中增加的密码保护扩展了安全边界。
你已经看到了两个例子,其中在网络边界的结点实现了安全机制。一般来说,在一个网络边界(boundary)的主机可以用来:
·控制对网络的访问
·对离开网络的数据进行密码保护
·隐藏网络的内部结构在下一节,将更密切地考虑可能在网络边界实现的安全机制的种类。
图13.13 分离的两个子网
图13.14 虚拟专用网
13.4 防火墙继续讨论我们的例子。在组织内部的LAN连接了个人计算机PC。在PC上的操作系统是用户友好的,但不是为安全设计的。只要LAN对组织来说是内部的,这就不一定是个问题。然而,当LAN被连接到Internet上的时候,威胁的环境改变了。同样地,组织可能决定扩展对雇员数据的安全策略,并且要求这样的数据从来不被送到在人事部门以外的结点。阻塞所有离开人事部门子网的通信不是一个选择方案,所以必须引入新的机制来实行这种安全策略。从安全的角度来说,对LAN内的所有结点进行升级保护也许是一个不错的主意,但这不是很实际的情况。
定义 我们用防火墙(firewall)作为代表保护内部网络边界的任何安全系统的通用名。堡垒主机(bastion host)是一个具有坚固安全性的计算机系统,因为它要暴露给外部世界。
防火墙与Internet安全密切联系在一起。当你考虑使用一种认证协议的时候,你必须知道你的用户是谁。当你想要向外延伸到Internet上的未知世界去见到不断增长的用户群时,这种必须知道你的用户是谁的假设就不适当了。如果你想对未知的用户提供受控制的访问,你能做什么呢?远程用户来自的地址或者请求的服务可能决定了你的访问控制决策。因此,防火墙的典型任务是:
·基于发送者或者接收者地址的访问控制;
·基于请求的服务的访问控制;
·隐藏内部网络,例如,拓扑结构、地址、来自外部的通信量;
·在接收的文件中进行病毒检测:这一点已经紧紧地和通过e-mail传播的宏病毒联系在了一起。
·基于通信源的认证;
·做Internet活动日志。
由防火墙使用的两种基本机制是报文分组过滤和代理服务器。
13.4.1 报文分组过滤网络协议把报文分组从源地址发送到目的地址。关于报文分组的有关信息包含在它的头标中。头标可以包含源地址、目的地址以及报文分组所属应用协议的一些指示信息。例如,TCP端口号23标识了一个Telnet报文分组。可以基于下述的信息进行报文分组过滤:
·源地址:源地址可以很容易被伪造,所以它的有效性是有限的;建议你阻止从Internet到达的、用内部IP地址作为源地址出现的报文分组。
·目的地址:一个典型的例子就是在图13.16中的筛选路由器(screening router),它仅仅发送报文分组到堡垒主机。
·协议:你可以使用TCP端口号和所属协议的基础上过滤报文分组。例如,你可以允许FTP,但阻塞Telnet。
·连接:网络层过滤(有状态检查)使报文分组与一个连接发生联系,这样可以辨别报文分组。例如,可以区分开内部FTP请求响应的FTP包和来自Internet连接的FTP包。
13.4.2 代理服务器让我们围绕着FTP例子来讨论。内部网络的一个客户想要访问在Internet上的FTP服务器。安全策略可能仅仅允许有限的一组用户使用FTP,而且可能禁止用户去下载被认为是有攻击行为的资料。报文分组过滤支持允许FTP而阻止Telnet连接的策略,但是在这里,报文分组过滤策略根本不起任何作用。另外,当允许对外部的FTP服务器访问时,客户的网络地址也暴露了。对于潜在的攻击者来说,这些信息可能是有用的。
为了实现基于用户身份的策略和隐藏关于内部网络的信息,可以使用代理服务器。代理服务器是另外一个受控调用(controlled invocation)的实例。代理服务器截获客户的请求,并且根据它的安全规则来决定这个请求是否允许。如果允许的话,这个请求才传给真正的服务。代理服务器是外部可以看见的唯一实体,它对内部的用户来说是透明的。代理服务器可以应用协议特定的访问规则,执行基于用户身份和报文分组内容的访问控制,如要执行的特殊指令。例如,代理可以允许通过FTP的get(下载)请求,但是阻止FTP的put(上传)请求。用户不必登录到防火墙,所以不必维护用户的帐户。与应用有关的事件可以记录下来。当然,对于每一个你需要保护的服务都需要一个代理服务器。随着Internet提供的Internet服务项目不断增加,这种方法不具有很好的可扩展性。
相同的原理可用于任何的协议层。如果你想要保护一个特殊的应用层协议,你可以重新装配在防火墙相应协议中交换的消息(和会话),使用应用特定的安全检测,然后与指定的服务通信。对于复杂协议来说,这样的策略仍可能产生不受欢迎的性能开销。
13.4.3 双宿主主机防火墙双宿主主机(dual-homed host)是一台具有两个网络接口的机器。这样的防火墙不只是简单地在Internet和内部网络之间路由报文分组,它还要根据它的安全规则处理这些报文分组。双宿主主机是“全内置”防火墙((all in one( firewall);它能够提供报文分组过滤和代理服务。在内部网络的客户可以通过使用防火墙上的代理服务器或者直接登录到防火墙来访问在Internet上的服务。
13.4.4 筛选主机防火墙双宿主主机常常通过改写Unix系统而建立。图13.15中的防火墙则是一个直接面对外部世界的相当复杂的系统。如果你不是太放心那样的情况,你可以分离防火墙所实现的一些功能,并且通过具有受限功能的更强壮的系统连接到Internet。
图13.15 双宿主主机防火墙
图13.16中的防火墙被称作筛选主机防火墙(screened host firewall)[28],它由实施报文分组过滤和提供与Internet接口的筛选路由器以及内部网络的堡垒主机组成。筛选路由器将所有允许进入的通信发送到堡垒主机,在这儿,在报文分组被转发到内部网络中的结点前,可以进行进一步的访问控制决策,并且只接收来自堡垒主机的内部报文分组。
把报文分组过滤从防火墙实现的其他任务分离开来可以产生不太复杂的路由器,这样,路由器和防火墙都有了更好的性能,因为硬件可以用来优化路由任务和更高程度的安全性保证。基于这种理解,筛选主机防火墙比双宿主主机[28]具有更高安全性的断言可以认为是有道理的。另一方面,你可能会抱怨它的高安全保证仅仅适用于有限的功能度(functionality),而且必须由代理服务器提供更多相关的可选软件(features)。
13.4.5 筛选子网防火墙筛选子网防火墙(screened subnet firewall)组合了前面两种方法的特性,如图13.17所示。一个周边网络(peripheral network),也称作非军事区(demilitarized zone,DMZ),被放置在内部网络和Internet之间。筛选路由器位于Internet和周边网络之间。在这里,高安全保证是所希望的,仅仅报文分组过滤对于应付外部用户来说是足够了。在外围网和内部网之间的双宿主主机防火墙可以提供较少的安全保障,但可以应用更复杂的策略来管理内部用户。
周边网络是用于非敏感主机的合适场所,非敏感主机应该能访问外部世界,像Web服务器。外部用户浏览你的Web网页根本不需要进入内部网络,并且如果你真正关心你的声誉,你可以把服务器中的数据存储在不可写的介质上,比如CD-ROM。
小结构建防火墙的挑战是双重的。从功能性来说,防火墙的保护机制必须与用户的安全策略相对应,它常常是基于地址的策略和基于身份的策略的混合。此外,你需要确保防火墙不被破坏和绕过。对于复杂的系统,为那些放在暴露位置的机器获得所要求的安全保证是不容易的,存在许多由于防火墙的错误配置而攻破防火墙的情况。
图13.16 筛选主机防火墙
图13.17 筛选子网防火墙允许攻击者绕过防火墙的常见漏洞是连到内部网络机器上的拨号线路。这里可能存在另外一种情况,过于严格的安全措施证明会产生相反的结果。如果防火墙过多地干涉对网络的访问,用户将从效率方面考虑要求管理部门提供拨号线路接入。最后,即使有配置适当的防火墙,如果你的内部主机有安全问题,你的境况也不见得好到哪里去。相当重要的是,防火墙对保护你免受内部人员的攻击是完全无能为力的。
进一步的阅读这一章仅仅能够对网络安全的问题和技术给出一个简要的梗概。网络安全在文献[53]中进行了全面的阐述,Internet安全在文献[8]中进行了详细的描述。
关于Internet安全的最好的资料来源当然是Internet了。Internet工程任务组的网址是:
http://www.ietf.org
根据IETF定义,IETF规范是在进行中的工作。对Internet安全研究来说,它完全是这种情况,所以当你阅读这本书的时候,如果IPSEC或者SSL/TLS的某些方面已经改变了,也不要失望。RFC文档和Internet草案也可以从Internet草案影像目录(Internet Drafts Shadow Directories)获得:
ds.internic.net (美国东岸)
nic.nordu.net (欧洲)
ftp.isi.edu (美国西岸)
munnari.oz.au (太平洋地区)
IPSEC在RFC 1825、RFC 1826和RFC 1827中定义。关于SSL的Netscape公司Web页面的网址是:
http://www.netscape.com/eng/ssl3
关于防火墙的有用书籍是[28,29]。在Web安全方面,对防火墙的功能广泛的讨论在文献[128]中描述。可信信息系统(Trusted Information System,TIS)免费提供防火墙工具包。TIS Web页面的地址是:
http://www.tis.com
推荐一个关于防火墙的Web搜索的出发站点:
http://www.clark.net/pub/mjr/pubs
厂商的Web站点是寻找关于当前的防火墙产品信息的位置。例如,关于Sidewinder防火墙的资料由下面站点提供:
http://www.sctc.com
练习题练习题13.1 ARP(地址解析协议)将IP地址与硬件地址联系起来[8]。这种联系可能随着时间改变。在网络中的每一个结点保存了对应IP地址和硬件地址的ARP高速缓存。高速缓存条目在几分钟后就过期了。结点设法发现它要寻找的IP地址的硬件地址在它的高速缓存中不存在时,则广播ARP请求,该请求也包含了它自己的IP地址和硬件地址。具有ARP所要求的IP地址的结点将用它的硬件地址来响应,所有其他的结点可以忽略这个请求。在ARP协议中,欺骗的范围是什么?哪种防御可以用来对抗这种欺骗?
练习题13.2 在IPSEC中,数据报可以通过认证头标来认证,但是,也可以通过ESP头标来认证,比较这两种方法,哪一种提供更好的保护?
练习题13.3 对于IPSEC和SSL来说,运行协议的结点被假设是安全的。为了使这种假设变成真的,在这些结点你需要采取哪些附加的安全措施?
练习题13.4 对一个安全e-mail系统和一台运行安全e-mail系统的机器,你分别要求有哪些安全性能?在哪一层提供这样的安全服务最适合?在你的答案中,要区分提供匿名服务和不提供匿名服务。
练习题13.5 网络越来越趋向于远程管理。研究远程网络管理的安全内涵和描述对于安全网络管理来说是必须的安全机制。
练习题13.6 你会发现专家在代理服务器和报文分组过滤防火墙的相对强度方面意见不一致。分析一下他们的论点,在他们争论的基础上证明你自己的判断的理由。
练习题13.7 Internet是计算机病毒感染的新来源。防火墙保护内部网络免受外部网的攻击。防火墙可以保护内部网络不受病毒感染吗?在你的答案中,考虑不同类型的防火墙。在TCP/IP层或者在应用层的密码保护如何影响防火墙的反病毒能力?
练习题13.8 通过计算机网络连接的部件构成一个多级的安全系统(MLS),使得通信安全要注意实施MLS策略[129]。从各个结点的操作系统角度来说,你还需要什么样的安全性质?