软件架构之安全性和保密性设计(2)
16.4 安全协议
Internet 是 IT 领域中发展的重大成就,它的迅速发展和全面普及给人们的生产、生活带来了很大的帮助。 但是,Internet 在当初是为了让更多的人来使用网络、共享资源,并且容易扩充、容易治理等而设计的,因此它是一个全面开放的系统,而没有在安全方面作充分的考虑。加上日益增加的庞大的用户、各种不同的动机等因素,使得 Internet 上的安全事件层出不穷。在 Internet 安全中,网络通信的安全是一个非常重要的环节,因此有必要研究在网络上安全传输数据的方法。
16.4.1 IPSec 协议简述
在 TCP/IP 协议中,对 IP 数据包没有提供任何安全保护,攻击者可以通过网络嗅探、IP 欺骗、连接截获等方法来攻击正常的 TCP/IP 通信。因此,通信过程中会存在以下危险:数据并非来自合法的发送者、数据在传输过程中被非法篡改、信息内容已被人窃取等。
为了确保在 IP 网络上进行安全保密的通信,IETF 制定了一套开放标准的网络安全协议IPSec(IP Security)。该协议把密码技术应用在网络层,以向信息的发送方和接收方提供源地址验证、数据传输的完整性、存取控制、保密性等安全服务,保护通信免遭窃听、抵御网络攻击,而且更高层的应用层协议也可以直接或间接地使用这些安全服务,为其上层协议如TCP、UDP 等提供透明的安全保护服务,在 Internet 这样不安全的网络中为通信提供安全保证。
在 IPv6 中,IPSec 协议是一个必备的组成部分,被强制实施;在 IPv4 中,它是一个可选的扩展协议。由于 Internet 等网络具有公共特性,因此在通信过程中难以确认传输媒介是安全的,所以要进行安全的通信,则通信数据必须经过加密。IPSec 协议对数据的加密以数据包而不是整个数据流为单位,这不仅非常灵活,也有助于进一步提高 IP 数据包的安全性。
IPSec 协议的基本工作原理是:发送方在发送数据前对数据实施加密,然后把密文数据发送到网络中去,开始传输。在整个传输过程中,数据都是以密文方式传输的,直到数据到达目的节点,才由接收方对密文进行解密,提取明文信息。
IPSec 协议对网络层的通信使用了加密技术,它不是加密数据包的头部和尾部信息(如源地址、目的地址、端口号、CRC 校验值等),而是对数据包中的数据进行加密。由于加密过程发生在 IP 层,因此可在不改变 HTTP 等上层应用协议的情况下进行网络协议的安全加密,为通信提供透明的安全传输服务。
IPSec 协议中使用端到端的工作模式,掌握加密、解密方法的只有数据的发送方和接收方,两者各自负责相应的数据加密、解密处理,而网络中其他节点只负责转发数据,无须支持 IPSec,从而可以实现加密通信与传输媒介无关,保证机密数据在公共网络环境下的适应性和安全性。因此,IPSec 可以应用到非常广泛的环境中,能为局域网、拨号用户、远程站点、Internet 之上的通信提供强有力的保护,而且还能用来筛选特定数据流,还可以用于不同局域网之间通过互联网的安全互联。
IPSec 协议不是一个单独的协议,它包括应用于 IP 层上网络数据安全的一整套协议,主要包括 AH(Authentication Header,IP 认证头部协议)、ESP(Encapsulating Security Payload,封装安全负载协议)、IKE(Internet Key Exchange,Internet 密钥交换协议)和用于网络认证及加密的一些算法等。
AH 提供数据的完整性和认证,但不包括保密性;而 ESP 原则上只提供保密性,但也可在 ESP Header 中选择适当的算法及模式来实现数据的完整性和认证。AH 和 ESP 可分开使用也可一起使用。IKE 则提供加密算法、密钥等的协商。
1.安全关联和安全策略
**安全关联(Security Association,SA)**是指提供通信安全服务的发送方和接收方之间的一种单向关系。安全关联是构成 IPSec 的基础,它是进行通信的双方经协商建立起来的一种协定。安全关联可以用一个 32 位的安全参数索引(Security Parameter Index,SPI)来唯一标识,一个 SPI 值决定一个特定的 SA,它通常放在 AH 或 ESP 头中;安全关联是单向
的,如果要对两台主机 A 与 B 实现双向安全,则需要两个安全关联,每个方向一个:(A,B)、(B,A)。安全关联的内容包含了 IP 数据包是否加密、认证,以及加密、认证采用的算法、密钥等相关信息。所有的 SA 记录都存放在安全关联数据库中,按散列方式存取。
**安全策略(Security Policy)**定义了两个 IPSec 系统之间的安全通信特征,并决定在该通信中为数据包提供的安全服务。一个 IPSec 系统的所有安全策略都存放在安全策略数据库中,根据选择符(包括源地址、目的地址、协议、端口等)进行检索。安全策略通常与 SA 合作,共同作用于通信的数据包。
2.AH
AH 协议先将数据进行校验和加密,然后封装为 IP 包,从而实现无连接通信的数据完整性、数据源认证和防止重放攻击。AH 能完成除数据加密外的所有的 ESP 所能提供的功能。在认证机制上,它所覆盖的范围比 ESP 的广,包括对 IP 头中一些选项的认证。为了应用 IPSec 协议,IP 数据包的格式要有所改变,即在 IP 头和被保护的数据之间插入一个 AH 头,如图 16-3 所示。
AH 头的格式如图 16-4 所示,包括:下一报头、有效载荷长度、保留位、安全参数索引、序列号、认证数据。
AH 使用的典型的认证算法是一种迭代型的消息摘要算法。AH 中采用 MD5 算法,可以提供完整性服务。从前面的讲述可以知道 MD5 可以对任意长度的信息进行散列运算产生一个唯一的 128 位消息摘要。由于消息摘要是唯一的,所以对信息的任何修改都将得到另一个不同的消息摘要,因此能防止消息被篡改,从而保证了数据的完整性。AH 也可以采用SHA 算法提供更强的抗攻击能力,SHA 是在 MD5 的基础上,增加了分组处理的迭代次数和复杂性,产生一个 160 位的消息摘要。接收者在收到数据后可以通过检验数据包中的单向递增的序列号来确定数据包的合法性,防止重放攻击。
3.ESP
ESP 通过对数据包的数据进行加密来提供传输信息的保密性,从而实现了数据完整性、数据源认证、数据保密性的安全服务。ESP 是一个通用的、可扩展的安全机制,其加密认证算法主要由 SA 的相应数据项决定。接收者也可以通过在收到数据后检验数据包中的单向递增的序列号来确定数据包的合法性,防止重放攻击。在应用中,需要在 IP 数据包的头和被保护的数据之间插入一个 ESP 头,在被保护的数据后附加一个 ESP 尾,如图 16-5 所示。
ESP 头的格式如图 16-6 所示,包括:安全参数索引(标识用于处理数据包的安全关联)、序列号(用于防止重放攻击)、有效荷载数据。ESP 头的所有字段都是不加密的,因为在解密数据包时需要先读取头部字段。
ESP 尾的格式如图 16-7 所示,包括:填充项(某些加密算法要求被加密数据的长度是密钥长度的整数倍,若受保护的数据的长度不满足这个要求,就需要在后面追加一些填充项)、填充项长度(指明填充项的长度)、下一个头部、认证数据(数据完整性的检验结果)。
ESP 在提供加密功能的同时,还可以提供认证功能。对于发出的数据包,首先进行加密处理;而对于收到的数据包,则先进行认证处理。
ESP 支持多种加密算法。DES 是 ESP 中默认的加密算法,它采用 64 位的密钥,对明文进行加密,加密、解密使用同一个密钥,该算法简单高效。此外还可以选择采用 3DES、AES、RC5、RC6、Blowfish 等算法。
4.IP 密钥交换
IKE 是一个混合协议,它使用了 Internet 安全关联和密钥管理协议(Internet Security Association and Key Management Protocol,ISAKMP)、密钥确定协议 Oakley 和描述支持匿名和快速密钥刷新的密钥交换的 SKEME 协议。IKE 除了实现通信双方的密钥交换,还使用ISAKMP 实现 IPSec 的安全关联。
ISAKMP 协议是 IKE 的核心组成部分,它定义了包括协商、建立、修改、删除安全关联的过程和数据格式。ISAKMP 的工作分为两个阶段:第一阶段,通信双方协商并建立一个安全的通道,并对该通道进行验证,为第二阶段的进一步通信提供安全服务;第二阶段,为IPSec 建立起具体的 IPSec 安全关联,用于保护通信双方的数据传输安全。在 IKE 的协商过程中,使用了 Diffie-Hellman 机制、Oakley 的密钥交换模式和 SKEME 的共享和密钥更新技术。
5.IPSec 的工作模式
IPSec 的工作模式有两种:传输模式和隧道模式。
-
传输模式首先将要传送的数据使用 IPSec 加密封装起来,再把相关的 IPSec 头插入 IP 头和被保护的数据之间封装起来。因为 IP 头没有加密,接收端收到封装的数据包时直接处理 IP 头,然后从 IPSec 头读取 SPI 值得到相对的 SA,再利用 SA 所定的解密参数解出所加密的数据。 传输模式的 IPSec 头直接加在欲传送的数据前,由于加密的部分较少,没有额外的处
理,因此比较节省带宽和 CPU 负载,通信和处理效率较高。 在传输模式中,解密者就是目的地址端的使用者。 -
隧道模式首先使用 SA 的相关信息将 IP 的数据包全部加密,接下来在前面加上 ESP Header,然后把它们作为数据为它们再加上一个新的 IP 头。接收端收到 ESP 封包后,使用 ESP Header 内容中的 SPI 值提供的 SA,然后解出 ESP Header 后的装载数据,就可以取回原始的 IP 头与封包。 隧道模式可以在两个终端之间建立一个安全的隧道,经由这两个终端之间的通信均在这个隧道中进行,因此安全性较高。 两种模式的 IP 数据包的格式如图 16-8 所示。
-
16.4.2 SSL 协议
SSL 是用于安全传输数据的一种通信协议。它采用公钥加密技术、对称密钥加密技术等保护两个应用之间的信息传输的机密性和完整性。但是,SSL 也有一个不足,就是它本身不能保证传输信息的不可否认性。
SSL 协议包括服务器认证、客户认证、SSL 链路上的数据完整性、SSL 链路上的数据保密性等几个方面,通过在浏览器和 Web 服务器之间建立一条安全的通道来保证 Internet 数据传递的安全性。目前,利用公钥加密的 SSL 技术,已经成为 Internet 上进行保密通信的工业标准。
SSL 协议常常用于增强 Web 服务的安全性。 在 TCP/IP 协议中,SSL 协议建立在传输层即 TCP 之上、应用层之下。SSL 协议有一个突出的优点,就是它与应用层协议相独立,高层的应用层协议如 HTTP 等可以透明地建立在 SSL 协议之上进行工作。
通过 SSL 协议建立的传输通道具有如下的基本安全性:
(1)通道是保密的,经过握手确定密钥之后,所有的消息被加密。SSL 协议在应用层协议工作之前就已经完成了加密算法、密钥的协商、服务器认证等工作,而此后的所有应用层所传送的数据都是经过加密的,因此 SSL 协议具有很好的保密性。
(2)通道是被认证的,通信中的服务器端总是被认证,客户端可选认证。在基于 SSL 协议的通信过程中,服务器端认证是必须进行的,所以,即使在一次会话过程中不进行客户端认证,该会话的确认性也能够有很好的保证。
(3)通道是可靠的,用 MAC 对传送的消息进行完整性检查,保证通道上数据的完整性。基于 SSL 协议的通信过程,因为传递的消息中包括消息完整性检查数据(即 MAC 数据),因此,可以保证该通信是可靠的。SSL 协议由 SSL 记录协议、SSL 握手协议、SSL 密码变更说明协议、SSL 警告协议等组成。其架构如图 16-9 所示。
1.SSL 记录协议
在 SSL 记录协议中,所有要传输的数据都被封装在记录中,记录是由纪录头和长度不为0 的记录数据组成的。所有的 SSL 通信,包括握手消息、安全空白记录、应用数据等都需要使用 SSL 记录。
2.SSL 协议记录头格式
SSL 协议记录头格式如图 16-10 所示。
SSL 协议记录头包括的数据有记录头长度、记录数据长度、记录数据中是否有粘贴数据等。SSL 协议记录头长度既可以是 2 字节、也可以是 3 字节长。当记录头的最高位为 1 时,表示不含有粘贴数据,记录头长度为 2 字节,记录数据最大长度为 32 767 字节;当记录头的最高位为 0 时,则含有粘贴数据,记录头长度为 3 字节,记录数据最大长度为 16 383字节。当记录头的最高位为 0 时,次高位有特殊的含义。当次高位为 1 时,表示所传输的记录是普通记录;当次高位为 0 时,表示所传输的记录是安全空白记录。
记录头中数据长度编码不包括数据头所占用的字节长度。记录头长度为 2 字节时记录长度的计算方法为:
记录长度=(( byte[0]&0x7f) <<8))|byte[1]
记录头长度为 3 字节时记录长度的计算方法为:
记录长度=(( byte[0]&0x3f) <<8))|byte[1]
以上计算式中,byte[0]、byte[1]也分别表示所传输的第一、二个字节。 另外,粘贴数据的长度为传输的第三个字节。
3.SSL 记录数据的格式
SSL 记录数据包含三个部分:MAC 数据和实际数据和粘贴数据。
MAC 数据用于数据完整性检查。计算 MAC 所用的散列函数由握手协议中的消息确定。若使用 MD5 算法,则 MAC 数据长度是 16 字节。MAC 数据的产生方式为:
MAC 数据= HASH(密钥、实际数据、粘贴数据、序号)
其中,当会话的客户端发送数据时,密钥是客户的写密钥(服务器用读密钥来验证 MAC 数据);而当会话的客户端接收数据时,密钥是客户的读密钥(服务器用写密钥来验证 MAC 数据)。序号是一个可以被发送和接收双方递增的计数器。每个通信方都会建立一个计数器,分别属于发送者和接收者。计数器有 32 位,计数值循环使用,每发送一个记录计数值递增
一次,序号的初始值为 0。
4.SSL 握手协议
SSL 握手协议建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密密钥等。SSL 握手的过程可以分为两个阶段,第一阶段用于建立秘密的通信信道,第二阶段用于客户验证。
在 SSL 协议中,同时使用了对称密钥加密算法和公钥加密算法,这是为了综合利用对称密钥加密算法的高速度和公钥加密算法的安全性的优点。SSL 协议使用公钥加密算法使服务器端身份在客户端得到验证,并且传递用于会话中对数据加密的对称密钥。然后再利用对称密钥在通信过程中对收到和发送的数据进行比较快速的加密,从而减小系统开销,保证通信效率。
SSL 支持各种加密算法。在“握手”过程中,使用 RSA 公开密钥系统。密钥交换后,可以使用多种密码,例如,RC2、RC4、IDEA、DES、3DES 及 MD5 信息摘要算法等。 SSL 协议可以非常有效地保护通信过程。但是,如果某种攻击是利用 SSL 协议通信进行的,那么,这种攻击也会受到 SSL 协议的保护,从而使得攻击更加隐蔽,难于被发现。当然,这种攻击也能够很好地穿透防火墙、躲过入侵检测系统的检查。另外,SSL 在通信过程中,要进行许多加密、解密的操作,这些计算的复杂性随着密码的强度不同而不同,但是高强度的计算会增加服务器负载、增加网络带宽,从而使服务器性能下降,吞吐量也下降。
16.4.3 PGP 协议
在信息时代里,电子邮件已经成为人们生活中的一部分,同时电子邮件的安全问题也就日益显得突出。一般来说,电子邮件在网络上的传输是不加密的。这种不加保护的邮件在网络上传输,第三者就会轻易获得通信过程中传送的信息。此外,为了防止冒名顶替,收信人需要确认邮件没有被第三者篡改,确实是发送者本人发出的,这就需要使用数字签名的一些
技术。从前面的讲述可以知道,RSA 公钥密码体系非常适合用来满足上述要求。但是要直接使用 RSA 加密电子邮件,还有一些不方便的地方。
PGP(Pretty Good Privacy)是美国人 PhilZimmermann 于 1995 年提出的一套电子邮件加密方案。它可以用来对邮件加密以防止非授权者阅读,还能对邮件加上数字签名而使收信人可以确认邮件确实是由发送方发出的。
PGP 并不是新的加密算法或协议,它综合采用了多种加密算法,例如,对邮件内容加密采用 IDEA 算法、对于加密信息采用 RSA 公钥加密算法,还采用了用于数字签名的消息摘要算法,加密前进行压缩处理等技术手段进行邮件加密的一套软件。通过组合使用这些加密方法,把 RSA 公钥加密体系的良好加密效果和对称密钥加密体系的高速度结合起来,并
且通过在数字签名和密钥认证管理机制中的巧妙设计,使得 PGP 成为一个优秀的强有力的数据加密程序。
由于 PGP 功能强大、处理迅速、使用简便,而且它的源代码是免费的,因此,PGP 在IT 等多个行业得到了广泛的应用,迅速普及。如今,PGP 除了用于通常的电子邮件加密,还可以用来加密重要文件,用 PGP 代替 UUencode 生成 RADIX64 格式(就是 MIME 的BASE64 格式)的编码文件,以保证它们在网络上的安全传输,或为文件做数字签名,以防止篡改和伪造。
1.PGP 加密的原理
假设一个用户 A 想要发送一个加密的邮件给另一个用户 B。那么加密的过原理如图16-11 所示。
首先,用户 A 对要发送的邮件 P 运用 MD5 散列算法进行计算,生成一个 128 位的消息摘要,有了这个消息摘要就可以检验邮件信息是否完整、有没有被篡改。然后再通过RSA 算法,运用 A 的私钥 SKA 对消息摘要进行加密,生成消息摘要的密文 H。邮件 P 与经过加密的邮件消息摘要 H 共同构成新的报文 P1,接着对 P1 进行 ZIP 压缩,成为压缩的报文 P1.Z。再对 P1.Z 采用 IDEA 算法加密,这次加密使用一个一次性的密钥 K,并且 K 必须经过 RSA 算法使用通信的另一方 B 的公开密钥 PKB 加密,与加密后的报文 P2 一起,再经过 BASE64 编码,得到一系列 ASCII 码,作为邮件内容发送到网络上。
用户 B 接收到 A 发来的加密的邮件后,执行解密过程:与加密过程相反,首先对邮件内容进行 BASE64 解码,再利用自己的秘密密钥 SKB,通过 RSA 算法解出 IDEA 的密钥K。再用此密钥恢复出 P1.Z,对 P1.Z 进行解压缩后还原出 P1。接着把明文 P 和邮件信息摘要的密文 H 分离开来,并用 A 的公开密钥 PKA 解密 H 得到真正的邮件消息摘要。然后 B 自己也运用 MD5 算法对邮件明文 P 进行运算,生成一个 128 位的消息摘要。比较这两个摘要是否一致,如果一致,则表明 P 是 A 发来的邮件。
通过上述通信过程可以看出,PGP 既可以保证邮件不被第三方窃取,又可以防止发信人抵赖和信件被途中篡改。 由于 RSA 算法的计算量太大、速度太慢,对邮件正文这种大量数据不适合用它来加密。所以 PGP 实际上用来加密邮件正文的不是 RSA 本身,而是采用的 IDEA 加密算法。
IDEA 的加密和解密使用同一个密钥,它的主要缺点就是在公共网络环境中很难进行安全的密钥的传递,不适合 Internet 上邮件加密的需要。但 IDEA 的加密、解密速度比 RSA 快得多,所以 PGP 使用一个随机生成的密钥(每次加密都不同)运用 IDEA 算法对明文加密,然后用RSA 算法对 IDEA 密钥加密。这样收件人同样使用 RSA 算法解密出这个随机的 IDEA 密钥,再用 IDEA 算法解密邮件本身。这样的链式加密就做到了既具有 RSA 算法的保密效果,又具有 IDEA 算法的快捷方便。这里,PGP 在每次加密邮件时所使用的 IDEA 密钥是一个随机数,而且为了增强随机性,PGP 是从用户敲击键盘的时间间隔上取得随机数种子来产生密钥的,从而更加增强了它的加密效果。
PGP 中使用 PKZIP 算法来压缩加密前的明文。这对电子邮件而言,一方面压缩后再加密得到的密文有可能比明文更短,这就节省了网络传输的时间;另一方面,明文经过压缩,实际上相当于多经过一次变换,信息更加杂乱无章,对非法攻击的抵御能力更强。 PGP 还可以只签名而不加密,这可以用于公开发表声明。声明人为了证实自己的身份,可以用自己的私钥签名。这样就可以让公众用其公开的公钥来验证该签名,从而确认声明人的身份。
2.PGP 的密钥管理机制
在 PGP 加密通信过程中,密钥无疑起着最为关键的作用。一个成熟的加密体系必然要有一个成熟的密钥管理机制与之相配套。PGP 对于密钥管理也提出了一套分配、使用、管理的方案。
公钥加密体制本身就是为了解决对称密钥加密体制中的密钥分配难以保密的问题而提出的。例如,攻击者常用的手段之一就是“监听”,如果密钥是通过网络传送就很容易被拦截。PGP 中采用公钥来加密,而公钥本来就要公开,所以不存在被监听的问题。但是公钥在发布过程中仍然存在安全隐患。例如,公钥被非法篡改,这就是公钥密码体系中的一大安全隐患,因为这很难被普通用户发现。
举例来说,假如用户 A 要向用户 B 发一封加密的邮件,那么 A 必须拥有 B 的公钥。于是 A 从公共目录中查到了 B 的公钥,并用它加密了邮件然后发给了 B。这是一个正常的过程。但是,在这个过程中可能出现攻击:A 和 B 都不知道,另一个用户 C 用他自己假冒 B的名字生成的密钥当中的公钥替换了 B 的公钥!
那么 A 用来发信的公钥就不是 B 的而是 C 的公钥。然而一切看来都很正常,因为 A 拿到的公钥的用户名是 B。于是 C 就可以用他手中的私钥来解密 A 发给 B 的邮件,甚至他还可以用 B 真正的公钥来转发 A 发给 B 的信,这样 A 和 B 都不会发现什么异常,而他们的通信却全部泄漏了。甚至 C 如果想改动 A 发给 B 的邮件也毫无问题。 而且,C 还可以伪造 B 的签名给 A 或其他人发送信息,因为 A 和其他人手中的公钥是 C 伪造的,A 和其他人可以正常解密这份伪造的签名,因而以为真是来自 B 的信息。
要防止这种情况,必须防止任何人伪造其他人的公钥。例如,通信双方直接见面并交换密钥,就可以避免得到伪造的公钥。然而当双方相隔遥远或不方便直接见面时,就难以直接交换密钥。这种情况下,PGP 是通过一种公钥介绍机制来解决这个问题的。
继续上面的例子:如果 A 和 B 有一个共同的朋友 D,而 D 知道他手中 B 的公钥是正确的(这里假设 D 已经认证过 B 的公钥)。这样 D 就可以用他自己的私钥在 B 的公钥上签名,表示他担保这个公钥是 B 的真正的公钥,并把它发送给 A。然后 A 用 D 的公钥来验证 D 发给 A 的 B 的公钥,同样 D 也可以向 B 担保 A 的公钥。这样 D 就成为了 A 和 B 之间的公钥介绍人。
这样 B 或 D 就可以放心地把 D 签过名的 B 的公钥列示到公共目录中,供 A 读取,没有人能够伪造 B 的公钥而不被 A 发现。这就是 PGP 从不安全的 Internet 上传递公钥的安全手段。
不过,如何确认 D 的公钥的安全可靠性呢?对这种情况 PGP 建议通过一个大家普遍信任的人或权威部门担当认证机构角色。每个由权威认证机构签字的公钥都被认为是真实的,这样大家只要有一份认证机构的公钥就行了。由于认证机构广泛提供公钥服务,因而其公钥流传广泛,假冒其公钥是很困难的,所以认证其公钥也非常方便。
在 PGP 中使用密钥,要注意在使用任何一个公钥之前,一定要首先认证它。无论什么情况下,都不要直接信任一个从公共渠道得来的公钥。而要使用可信的人介绍的公钥,或者自己与对方亲自认证。
由于 PGP 能够实现数字签名、不可否认、防止篡改、防止破译等功能,所以自从 PGP 推出以来,就受到人们的普遍欢迎。目前,PGP 几乎成为最流行的公钥加密软件。随着人们通信的增加和安全意识的增强,PGP 将会得到更加广泛的应用。
16.5 计算机病毒与防治
计算机技术和网络技术的飞速发展,为人们的工作、学习、生活带来了极大的方便。计算机已经成为人们不可缺少的现代化工具。但是计算机病毒的出现带给人们不安和忧虑,同时向人们提出了挑战。
16.5.1 计算机病毒概述
计算机病毒(Computer Virus)的概念最早是由美国计算机病毒研究专家 F.Cohen 博士提出的。对于计算机病毒的定义,不同的国家、不同的专家从不同的角度给出的定义也不尽相同。根据《中华人民共和国计算机信息系统安全保护条例》第 28 条规定:“计算机病毒,是指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据,影响计算机使用,并能自我复制的一组计算机指令或者程序代码。”此定义在我国具有法律效力和权威性。 和生物病毒一样,计算机病毒的复制能力使得计算机病毒可以很快地蔓延,又常常难以根除。它们能把自身附在宿主系统或文件中,当系统被运行或文件从一个用户传送到另一个用户时,它们就随同系统运行或文件传输一起蔓延开来。
在病毒的生命周期中,病毒一般会经历潜伏阶段、传染阶段、触发阶段和发作阶段 4 个阶段。多数病毒是基于某种特定的方式进行工作的,因此也依赖于某个特定的操作系统或某个特定的硬件平台。因此,攻击者经常利用某个特定系统的细节和弱点来设计病毒程序。
1.计算机病毒的特征
计算机病毒多种多样,但是它们都具有共同的特征,即传染性、非授权性、潜伏性和破坏性。
- 计算机病毒的传染性是指病毒具有把自身复制到其他系统或文件等宿主中去的能力,这是病毒的基本特征。
- 非授权性是指病毒程序的执行不需要得到用户的同意,对用户来说是未知的。
- 潜伏性是病毒生存的必要条件,即病毒潜伏在系统中而不被人们所发觉。
- 破坏性是指病毒在一定条件下可以自动触发,并对计算机实施破坏,是病毒的表现特征。病毒的非授权性、潜伏性使得病毒的行为是不可预见的,也增加了病毒检测的困难。病毒破坏性的触发条件越多,则传染性越强,但同时其潜伏性降低。一个病毒必须具备传染性,但不一定需要拥有其他属性。
2.计算机病毒的分类
计算机病毒按不同的分类标准,有许多不同分类:
-
按照操作系统分,可分为攻击 DOS 系统的病毒、攻击 Windows 系统的病毒、攻击Unix/Linux 系统的病毒、攻击 OS/2 系统的病毒、攻击 Macintosh 系统的病毒、攻击手机的病毒、其他操作系统上的病毒。
-
按照链接方式分,计算机病毒可分为源码型病毒、嵌入型病毒、Shell 病毒、宏病毒、脚本型病毒、操作系统型病毒。
-
按照破坏情况分,计算机病毒可分为良性病毒和恶性病毒。按传播媒介来分,计算机病毒可分为单机病毒和网络病毒。
3.计算机病毒的组成
病毒程序一般由传染模块、触发模块、破坏模块和主控模块组成,相应地完成病毒的传染、触发和破坏等任务。也有少数病毒不具备所有的模块。
(1)传染模块。传染模块是病毒进行扩散传播的部分,负责把计算机病毒从一个系统或文件传播到更多的系统或文件中去。每个病毒都有一个自我识别的标记,叫作传染标记或病毒签名。病毒程序传染系统或文件时,要把传染标记写入系统或文件中某个特定区域,例如,宿主程序、注册表、物理磁道等,作为该系统或文件已被传染的标记,以防止重复传染,增
强病毒的潜伏效果。传染模块的主要功能有:寻找一个可传染的系统或文件;检查该系统或文件中是否有传染标记,判断该系统或文件是否已经被传染;如果没有传染标记,则进行传染操作,将病毒代码植入宿主系统或文件中,完成一次传染。
(2)触发模块。病毒触发模块主要检查预定触发条件是否满足,如果满足,则调用相应传染或破坏模块,进行传染和破坏动作。病毒的触发条件有多种形式,如日期、时间、键盘、发现特定程序、发现网络连接、发现系统漏洞、传染的次数、特定中断调用的次数等。依据触发条件的情况,可以控制病毒传染和破坏动作的频率,使病毒在隐蔽的状态下,进行
传染和破坏动作。
(3)破坏模块。破坏模块负责实施病毒的破坏动作。这些破坏动作可能是破坏程序及数据、降低系统的性能、干扰系统的运行,还有些病毒甚至可以破坏计算机硬件。也有少数病毒的破坏模块并没有明显的恶意破坏行为,仅在被传染的系统设备上表现出特定的现象,该模块有时又称为表现模块。
(4)主控模块。主控模块在总体上控制病毒程序的运行。染毒程序运行时,首先运行的是病毒的主控模块。
16.5.2 网络环境下的病毒发展新趋势
在互联网给人们的工作、生活带来方便的同时,也给大量新病毒的产生和发展带来了“方便”。在互联网高度发达的今天,计算机病毒的数量急剧增多,传播途径也更加多样,传染速度也更加快捷。除了以往通过相互复制文件、系统之间交叉传染等方式外,目前的计算机病毒更多地通过网页、电子邮件、局域网共享、系统漏洞等方式在网络上进行自动传播。有些流行病毒,常常借助于网络在两、三天内迅速传遍全国,传遍全世界。
例如,E-mail 病毒就是目前最为流行 Internet 病毒种类之一,它通过在电子邮件附件中添加危险的病毒执行程序,在邮件正文中添加诱惑性的文字,诱使收件人执行附件病毒程序,以达到其激活的目的。目前此类病毒多数针对微软的 Outlook 和 Outlook Express 程序,并以使用 Windows 的地址簿联系人发送病毒邮件形式传播。不但危害个人,而且可能导致Internet 邮件服务器由于收发大量的病毒附加的邮件被大量占用网络资源,直至邮件服务器崩溃。
此外,由于 Internet 即时通信被广泛运用,借助于 MSN、QQ、OICQ 等传播病毒也成为近年来病毒流行的一个趋势,病毒很可能通过这些软件自动发送有害信息实现自动传播。
目前,通过局域网共享传播的病毒也有很多。在广泛使用的 Windows 系统中,管理共享、特殊端口等默认是打开的,有些版本的系统中,甚至具有可写权限。这样,病毒在搜索到局域网共享资源后,便可以直接传染目标计算机相应文件夹中的文件或者将病毒写入相应系统中,以便得到在目标计算机中执行的机会。也正是因为这个原因,很多病毒在传染一台计算机后会造成某个局域网普遍传染的情况,并且在不断开网络连接的情况下很难将病毒清除干净。
在当前的网络环境下,最常见的恶意程序是木马程序,也称后门程序。它们大多利用系统漏洞或者空闲的端口,通过在系统中安装相应的木马程序,并通过互联网使用专门的软件监视宿主计算机,以这样的方式获得宿主系统文件访问授权,以及收集宿主系统的信息,如用户个人资料、银行账号与密码、网游账号等。
由于网络传输速度很快,所以网络环境下的病毒传染速度也非常快,一度轰动的“冲击波”、“震荡波”等病毒都是在相应的系统漏洞被发现后几天时间里,就迅速在全世界大范围蔓延开来。可以说,今天的计算机病毒的品种和传播速度,超过了以往任何时候。
16.5.3 计算机病毒的检测与清除
本节简单介绍计算机病毒的检测方法,以及如何清除病毒。
1.特征码检测
所谓特征码查毒法,就是在获取病毒样本后,提取出其特征码,(例如,杨基病毒的特征码是 16 进制的“F4 7A 2C 00”,快乐时光病毒中的“Fun Time”字符串等),然后通过该特征码对目标文件或内存等进行扫描。如果发现这种特征码,就说明感染了这种病毒,然后针对性地清除病毒。
特征码技术是最早被采用,而且被许多反病毒软件一直沿用至今的病毒检测方法。特征码检测方法检测病毒,方法简单、准确、快速,可识别病毒的名称,误报警率低。但是,特征码技术只能诊断已知的计算机病毒,其响应速度永远滞后于病毒,而且不能检查未知病毒和变形病毒,不能对付隐蔽性病毒。
随着计算机病毒的发展,不断出现的新的病毒,甚至有些病毒具有自动变形功能,例如,“卡死脖”病毒,采用传统病毒特征码搜索技术的杀毒软件常常难以应付这些变形病毒。为此,人们提出了广谱特征码过滤技术,该技术在一定程度上可以弥补以上缺陷。
2.校验和检测
先计算正常文件的内容和正常的系统扇区数据的校验和,将该校验和写入数据库中保存。检测时,检查文件现在内容的校验和与原来保存的校验和是否一致,从而可以发现文件或扇区是否被感染,这种方法称校验和检测。
校验和检测技术的优点是:方法简单、能发现未知病毒、被查文件的细微变化也能发现。但是,它不能识别病毒种类。而且,由于病毒感染并非是文件内容改变的唯一原因,文件内容的改变有可能是正常程序引起的,所以校验和检测技术受到种种限制,同时这种方法也会影响文件的运行速度。另外,校验和不能检测新的文件,如从网络传输来的文件、磁盘和光盘拷入的文件、备份文件和压缩文档中的文件等。
3.行为监测
随着近年来病毒与反病毒斗争的不断升级、新病毒产生的速度不断加快,传统反病毒技术滞后于病毒的特点越来越不能适应防病毒的需要,更需要采用通用反病毒技术来保护计算机的安全。现阶段中被广泛研究和采用的通用病毒检测技术有病毒行为监测技术、启发式扫描技术和虚拟机技术。
通过研究发现,病毒不论伪装得如何巧妙,它们总是存在着一些和正常程序不同的行为,而这些行为在正常应用程序中却十分罕见,这就是病毒的行为特性。
常见的病毒行为特性有:对可执行文件进行写操作、写磁盘引导区、病毒程序与宿主程序的切换、程序自己重定位、通过搜索函数索引表来获取 API 函数地址等。 利用这些特征,就可以对病毒实施监视,在病毒程序体进行活动时发出报警。采用这种行为特性检测方法不仅可以检测出已知病毒,而且可以检测出新出现的未知病毒,无论该病毒是什么种类,或是否变形。但是,行为监测技术也可能误报警,而且不能识别病毒名称。
4**.启发式扫描**
在特征码扫描技术的基础上,利用对病毒代码的分析,获得一些统计的、静态的启发性知识,可以用于静态的启发性扫描技术(Heuristic Scanning)。
启发式扫描主要分析文件中的指令序列,根据统计知识,判断该文件可能被感染或者没有被感染,从而有可能找到未知的病毒。因此,启发式扫描技术是一种概率方法,遵循概率理论的规律。早期的启发式扫描软件采用代码反编译技术作为它的实现基础。这类病毒检测软件在内部保存数万种病毒行为代码的跳转表,每个表项对应一类病毒行为的必用代码序列,如病毒格式化磁盘必须用到的代码等。启发式病毒扫描软件利用代码反编译技术,反编译出被检测文件的代码,然后在这些表格的支持下,使用“静态代码分析法”和 “代码相似比较法”等有效手段,就能有效地查出已知病毒的变种,以及判定文件是否含有未知病毒。
由于病毒代码千变万化,具体实现启发式病毒扫描技术是相当复杂的。通常这类病毒检测软件要能够识别并探测许多可疑的程序代码指令序列,如格式化磁盘类操作、搜索和定位各种可执行程序的操作、实现驻留内存的操作、子程序调用中只执行入栈操作、远距离(如超过文件长度的三分之二)跳往文件头的指令等。一般来说,仅仅一项可疑的功能操作不足以触发病毒报警。但如果同时具有多项可疑操作,目标程序就很可能是病毒程序。
5.虚拟机
自动变形病毒,也称为多态性病毒或多型(形)性病毒。自动变形病毒每次感染宿主时都自动改变自身的程序代码和特征码,这类病毒的代表有“幽灵”病毒等。
一般而言,自动变形病毒采用以下几种操作来不断变换自己:采用等价代码对原有代码进行替换;改变与执行次序无关的指令的次序;增加许多垃圾指令;对原有病毒代码进行压缩或加密等。因为自动变形病毒对其代码不断进行变换,而且每次传染使用不同的密钥。将染毒文件的病毒代码相互比较,也难以找出相同的可作为病毒特征的稳定特征码,因此用传统检测方法根本无法检测出这类病毒。但是,自动变形病毒也有一个共同的规律:即无论病毒如何变化,每一个自动变形病毒在其自身执行时都要对自身进行还原。
为了检测自动变形病毒,出现了一种新的病毒检测方法——“虚拟机技术”。该技术用软件方法让病毒在一个虚拟的环境中,仿真一部分系统指令和功能调用,对病毒代码作解释执行,而且仿真运行不对系统产生实际的影响,即可获得程序运行的后果,并在此基础上对程序运行分析,进而判断是否存在病毒。不管病毒使用什么样的加密、隐形等伪装手段,只要在虚拟机所营造的虚拟环境下,病毒都会随着运行过程自动褪去伪装(实际上是被虚拟机动态还原)。正是基于上述设计原理,虚拟机在处理加密、变换、变形病毒方面具有很强的优越性。
虚拟机检测方法,实际上是用软件实现了模拟人工反编译、智能动态跟踪、分析代码运行的过程,其效率更高,也更准确。使得反病毒从单纯的静态分析进入了动态和静态分析相结合的新时期,极大地提高了对已知病毒和未知病毒的检测水平。在今后相当长的一段时间内,虚拟机技术还会有很大的发展。
6.病毒的清除
将病毒代码从宿主中去除,使之恢复为可正常运行的系统或程序,称为病毒清除。大多数情况下,采用反病毒软件或采用手工处理方式可以恢复受感染的文件或系统。 不是所有染毒文件都可以消毒,也不是所有染毒的宿主都能够被有效恢复。依据病毒的种类及其破坏行为的不同,感染病毒后,如果宿主数据没有被删除,常常可以恢复;如果宿主数据被病毒删除或覆盖、或者宿主数据的逻辑关系被病毒破坏,常常不能恢复。
16.5.4 计算机病毒的预防
“防重于治”,对于计算机病毒也是如此。在日常使用计算机的过程中,同时做好预防工作,可以很大程度上避免被病毒感染,减少不必要的物力、数据损失。 要预防计算机病毒,最好的方法就是不与外界交换文件,但这是不可能的。人们在工作中,要经常与外界进行各种数据交换。而大量与外界交换信息,就给病毒的感染与传播创造了条件。
为了保护计算机不受病毒破坏,至少必须做到:
(1)一定要在计算机中安装反病毒软件。
(2)不要轻易使用来历不明的或者没有经过确认的软件;对从网络上下载的程序和文档应十分小心,在执行文件或打开文档之前,要检查是否有病毒;从外部取得的介质及其中的文件,应检查病毒后再使用;压缩后的文件应解压缩后检查病毒。
(3)电子邮件的附件应该先检查病毒后再开启,并在发送邮件之前检查病毒;不要运行来历不明的 E-mail 附件,尤其是在邮件正文中以诱惑性的文字建议执行的附件程序。
(4)定期使用反病毒软件扫描系统。
(5)确保所使用的反病毒软件的扫描引擎和病毒代码库为最新的,因为旧的扫描引擎和病毒代码库不会检查到新出现的病毒。
(6)为防止引导型病毒对系统的破坏,应该在系统安装完成后立即制作系统应急启动盘,以便万一硬盘分区表遭到破坏时,能从应急盘启动,并用备份的引导区、分区表等直接进行恢复。
(7)对于一些重要的文件,要定期进行备份,以便万一系统遭受病毒破坏时能够从备份恢复。
(8)利用安全扫描工具定时扫描系统和主机。若发现漏洞,及时寻找解决方案,从而减少被病毒和蠕虫感染的机会。
(9)使用反病毒软件时,最好先查毒,找到了带毒文件后,再确定是否进行杀毒操作。因为查毒不是危险操作,它可能产生误报,但绝不会对系统造成任何损坏;而杀毒是危险操作,有的操作可能把文件破坏。
(10)建立本单位的计算机病毒防治管理制度;并对计算机用户进行反病毒培训。
16.6 身份认证与访问控制
访问控制是通过某种途径限制和允许对资源的访问能力及范围的一种方法。它是针对越权使用系统资源的保护措施,通过限制对文件等资源的访问,防止非法用户的侵入或者合法用户的不当操作造成的破坏,从而保证信息系统资源的合法使用。
访问控制技术可以通过对计算机系统的控制,自动、有效地防止对系统资源进行非法访问或者不当地使用,检测出一部分安全侵害,同时可以支持应用和数据的安全需求。 访问控制技术并不能取代身份认证,它是建立在身份认证的基础之上的。 访问控制技术包括如下几方面的内容:
**(1)用户标识与认证。**用户标识与认证是一种基于用户的访问控制技术,它是防止未经授权的用户进入系统的一种常规技术措施。用户标识用于向系统声明用户的身份。用户标识一般应当具有唯一性,其最常见的形式就是用户 ID。系统必须采用一定的策略来维护所有的用户标识。验证用户标识的有效性、真实性,通常有三种类型的认证方式:一是用户个人掌握的秘密信息,例如,口令、密钥、PIN 码等;二是用户个人所拥有的带有认证信息的特定物品,例如,磁卡、IC 卡等;三是用户个人的特定生理、生物学特征,例如,声音、指纹等。在同一种系统中可以单独采用一种认证方法,也可以联合采用多种认证方法。
**(2)逻辑访问控制。**逻辑访问控制是基于系统的访问控制技术,用来控制特定的用户对特定资源的访问。通常,把用户分成不同的组,再对组授予不同的访问权限来实现对用户的逻辑访问控制,防止用户访问他所不需要访问的资源、或者进行与工作无关的访问。
**(3)审计与跟踪。**审计与跟踪系统的一个或多个运行记录,在事件发生后对事件进行调查,分析其时间、原因、活动内容、引发的相关事件、涉及的用户等。
**(4)公共访问控制。**如果一个应用系统是面向公众开放,允许公众进行访问时,面临的主要威胁是来自外部的匿名攻击,必须采取访问控制等措施以保护系统数据的完整性和敏感信息的保密性。
16.6.1 身份认证技术
身份认证是对系统的用户进行有效性、真实性验证。
1.口令认证方式
使用口令认证方式,用户必须具有一个唯一的系统标识,并且保证口令在系统的使用和存储过程中是安全的,同时口令在传输过程中不能被窃取、替换。另外特别要注意的是在认证前,用户必须确认认证者的真实身份,以防止把口令发给冒充的认证者。 使用口令的单向身份认证过程一般是:请求认证者和认证者之间建立安全连接、并确认认证者身份等;然后请求认证者向认证者发送认证请求,认证请求中必须包括请求认证者的ID 和口令;认证者接受 ID 和口令,在用户数据库中找出请求认证的 ID 和口令;查找是否有此用户并比较两口令是否相同;最后向请求认证者发回认证结果。如果请求认证者的 ID
在认证者的用户数据库中,并且请求认证者发送的口令与数据库中相应的口令相同,则允许请求认证者通过认证。
2.基于公钥签名的认证方式
公开密钥签名算法的身份认证方式,是通过请求认证者与认证者(对于双向身份认证而言,双方互为请求认证者和认证者)之间对于一个随机数做数字签名与验证数字签名来实现的。这种方式中认证双方的个人秘密信息不用在网络上传送,从而减少了口令等秘密信息泄漏的风险。
采用数字签名技术认证与口令认证方式有一个很大的不同:口令认证通常在正式数据交换开始之前进行。认证一旦通过,双方即建立安全通道进行通信,此后的通信被认为是安全的,不再进行身份认证;而数字签名认证在每一次的请求和响应中进行,即接收信息的一方先从接收到的信息中验证发送者的身份信息,验证通过后才对收到的信息进行相应处理。 使用公钥加密算法进行身份认证要求:请求认证者必须具有私钥实现数字签名的功能;认证者必须具有使用公钥验证数字签名的功能;认证者必须具有产生随机数的功能,而且随机数的质量必须达到一定要求。
使用公钥加密算法进行身份认证的方式,对用于数字签名的私钥由参与通信的认证者自己保密,而用于验证数字签名的公钥则需要采用可靠的方式进行安全分发。一般可以采用公钥数据库方式或者使用认证机构签发数字证书的方式(认证机构与数字证书的内容参见前文PKI 部分)。
如果使用公钥数据库的方式管理公钥,则请求认证者 ID 就包含在认证请求中发给认证者,认证者使用该 ID 从公钥数据库中获得请求认证者的公钥。如果使用认证机构签发数字证书的方式管理公钥,则请求认证者的数字证书包含在认证请求中发给认证者,认证者验证请求认证者的数字证书后,从数字证书中获取请求认证者的公钥。
3.持卡认证方式
持卡认证方式最早采用磁卡。磁卡中最重要的部分是磁道,不仅存储数据,而且还存储用户的身份信息。目前所用的卡是 IC 卡,与磁卡相比,它除了存储容量大之外,还可一卡多用,同时具有可靠性高,寿命长,读写机构简单可靠,造价便宜,维护方便,容易推广等诸多优点。正由于上述优点,使得 IC 卡在世界各地广泛使用。IC 卡上一般分为不加密的公共区、加密的数据区等,有些还有自己的操作系统和微处理器。IC 卡已被广泛应用于身份认证领域。
一般 IC 卡与用户的个人 PIN 一起使用。在脱机系统中,PIN 以加密的形式存在卡中,识别设备读出 IC 卡中的身份信息,然后将其中的 PIN 解密,与用户输入的 PIN 比较,以决定 IC 卡持有者是否合法。在联机系统中,PIN 可不存在 IC 卡上,而存在主机系统中,鉴别时,系统将用户输入的 PIN 与主机的 PIN 比较,而由此认证其身份的合法性。
4.基于人体生物特征的认证方式
这种方式是指通过计算机,利用人体固有的生理特征或行为特征进行个人身份鉴定。与传统的身份鉴别手段相比,基于生物特征的认证技术具有突出的优点:一是不会遗忘或丢失;二是防伪性能好,无法伪造;三是随时随地可用。能够用来鉴别身份的生物特征一般具有广泛性(每个人都应该具有这种特性)、唯一性(每个人拥有的特征应各不相同)、稳定性(所选择的特征应该不随时间变化而发生变化)和可采集性(所选择的特征应该便于采集、测量)。目前,可用于身份鉴别的生物特征主要有指纹、笔迹、脸像、红外温、视网膜、手形、掌纹等。
由于生物特征识别的设备比其他身份认证的设备要复杂,所以一般用在非常重要的机密场合,如军事等。生物特征识别主要采用模式识别技术。身份识别系统工作方式分为识别模式和鉴定模式,其性能指标主要有错误拒绝率和错误接受率等。在选择这种认证方式时需要对这些参数作认真的考虑。
5.动态口令技术(一次性口令技术)
一般情况下,所使用的计算机口令都是静态的,也就是说在一定的时间内是相对不变的,而且可重复使用。这种口令很容易被系统中的嗅探程序所劫持,而且很容易受到基于字典的暴力攻击。
针对这种静态口令认证方式的缺陷,人们提出了利用散列函数产生一次性口令的方法,即用户每次登录系统时使用的口令都是变化的。一次性口令是动态变化的密码,其变化来源于产生密码的运算因子。一次性口令的产生因子一般都采用双运算因子:一是用户的私钥,它代表用户身份的识别码,是固定不变的。二是变动因子,正是变动因子的不断变化,才能够产生动态的一次性口令。
动态口令技术认证方式中要用到动态口令密码卡,这是一种便于携带的智能化硬件产品。这种密码卡内置的构件和程序能通过密码卡内的密钥加上其他因子动态地计算出新的口令。当密码卡持有者将这个口令输入计算机时,系统中的认证服务器会根据相同的算法和动态因子计算出对应于该密码卡的认证口令,并把这个口令与密码卡产生的口令比对,进行身份认证。
6.PPP 中的认证协议
点到点协议(Point-to-Point Protocol,PPP)提供了一种在点到点链路上封装网络层协议信息的标准方法。PPP 也定义了可扩展的链路控制协议。链路控制协议使用验证协议磋商机制,在链路层上传输网络层协议前验证链路的对端。
PPP 包含如下几个部分:在串行链路上封装数据报的方法;建立、配置和测试数据链路连接的链路控制协议(Link Control Protocol,LCP);建立和配置不同网络层协议的一组网络控制协议(Network Control Protocol,NCP)。PPP 协议定义了两种验证协议:密码验证协议(Password Authentication Protocol,PAP)和挑战—握手验证协议(Challenge-Handshake Authentication Protocol,CHAP),此外还有扩展认证协议(Extensible Authentication Protocol,EAP)。
一个典型的 PPP 链路建立过程分为三个阶段:创建阶段、认证阶段和网络层协商阶段。
**(1)创建阶段。**在这个阶段,将对基本的通信方式进行选择。链路两端设备通过 LCP 向对方发送配置信息,建立链路。在链路创建阶段,只是对验证协议进行选择,具体的用户验证过程在认证阶段实现。
**(2)认证阶段。**在这个阶段,客户端会将自己的身份发送给远端的接入服务器。该阶段使用一种安全的验证方式避免第三方窃取数据或冒充远程客户接管与客户端的连接。认证成功,则转到网络层协商阶段。如果认证失败,则链路终止。
**(3)网络层协商阶段。**认证阶段完成之后,PPP 将调用在链路创建阶段选定的各种 NCP 协商高层协议问题,例如,在该阶段 IP 控制协议可以向拨入用户分配动态地址。这样,经过三个阶段以后,一条完整的 PPP 链路就建立起来了。 最常用的认证协议有 PAP 和 CHAP,此外还有 EAP。
**(1)PAP。PAP 是一种简单的明文验证方式。**网络接入服务器要求用户提供用户名和口令,PAP 以明文方式返回用户信息,并且对回送或者重复验证和错误攻击没有保护措施。很明显,这种验证方式的安全性较差,第三方可以很容易地获取被传送的用户名和口令,并利用这些信息与网络接入服务器建立连接获取网络接入服务器提供的资源。所以,一旦用户密码被第三方窃取,PAP 无法提供避免受到第三方攻击的保障措施。
**(2)CHAP。CHAP 是一种加密的验证方式,**能够避免建立连接时传送用户的明文密码。网络接入服务器向远程用户发送一个挑战口令,其中包括会话 ID 和一个任意生成的挑战字串。远程客户端使用 MD5 散列算法返回用户名和加密的挑战口令、会话 ID 及用户口令。 CHAP 对 PAP 进行了改进,不再直接通过链路发送明文口令,而是使用挑战口令以散
列算法对口令进行加密。因为服务器端存有客户的明文口令,所以服务器可以重复客户端进行的散列操作,并将结果与用户返回的口令进行对照。
CHAP 为每一次验证任意生成一个挑战字串来防止受到攻击。在整个连接过程中,CHAP 将不定时地随机向客户端重复发送挑战口令,从而避免非法入侵者冒充远程客户进行攻击。 HAP 验证方式具有如下的优点:
① 通过可变的挑战口令和随机地、重复地发挑战口令,CHAP 防止了重放攻击。
② 该认证方法依赖于认证者和对端共享的密钥,密钥不是通过链路发送的。
③ 虽然该认证是单向的,但是在两个方向都进行 CHAP 协商,同一密钥可以很容易地实现交互认证。
④ 由于 CHAP 可以用在许多不同的系统认证中,因此可以用用户名作为索引,以便在一张大型密钥表中查找正确的密钥。这样也可以在一个系统中支持多个用户名—密钥对,在会话中随时改变密钥。
CHAP 在设计上的要求:
① CHAP 算法要求密钥长度必须至少是 1 字节,至少应该不易让人猜出,密钥最好至少是散列算法所选用的散列码的长度,如此可以保证密钥不易受到穷举搜索攻击。所选用的散列算法,必须保证从已知挑战口令和响应值来确定密钥在计算上是不可行的。
② 每一个挑战口令应该是唯一的,否则在同一密钥下,重复挑战口令将使攻击者能够用以前截获的响应值应答挑战口令。由于希望同一密钥可以用于地理上分散的不同服务器的认证,因此挑战口令应该做到全局临时唯一。
③ 每一个挑战口令也应该是不可预计的,否则攻击者可以欺骗对方,让对方响应一个预计的挑战口令,然后用该响应冒充对端欺骗认证者。虽然 CHAP 不能防止实时地主动搭线窃听攻击,但是只要能产生不可预计的挑战口令就可以防范大多数的主动攻击。
(3)EAP。EAP 是一个用于 PPP 认证的通用协议,可以支持多种认证方法。EAP 并不在链路控制阶段而是在认证阶段指定认证方法,这样认证方就可以在得到更多的信息以后再决定使用什么认证方法。这种机制还允许 PPP 认证方简单地把收到的认证信息传给后方的认证服务器,由后方的认证服务器来真正实现各种认证方法。
EAP 的认证过程是:在链路阶段完成以后,认证方向对端发送一个或多个请求报文。在请求报文中有一个类型字用来指明认证方所请求的信息类型,例如,可以是对端的 ID、MD5 的挑战口令、一次性密码及通用密码卡等。MD5 的挑战口令对应于 CHAP 认证协议的挑战口令。典型情况下,认证方首先发送一个 ID 请求报文随后再发送其他的请求报文。对端对每一个请求报文响应一个应答报文。和请求报文一样,应答报文中也包含一个类型字段,对应于所回应的请求报文中的类型字段。认证方再通过发送一个成功或者失败的报文来结束认证过程。
EAP 具有突出的优点:它可以支持多种认证机制,而不需要在建立连接阶段指定;某些设备,例如,网络接入服务器,不需要关心每一个请求信息的真正含义,而是作为一个代理把认证报文直接传给后端的认证服务器,设备只需关心认证结果是成功还是失败,然后结束认证阶段。
当然 EAP 也有一些缺点:它需要在 LCP 中增加一个新的认证协议,这样现有的 PPP 要想使用 EAP 就必须进行修改。同时,使用 EAP 也和现有的在 LCP 协商阶段指定认证方法的模型不一致。
7.RADIUS 协议
RADIUS(Remote AuthenticationDial-in User Service)协议是由朗讯公司提出的客户/ 服务器方式的安全认证协议,它能在拨号网络中提供注册、验证功能,现已成为 Internet 的正式协议标准,是当前流行的 AAA(Authentication、Authorization、Accountion)协议。RADIUS 协议可以把拨号和认证这两种功能放在两个分离的服务器——网络接入服务器
(NAS)和后台认证服务器(RADIUS 服务器)上。在 RADIUS 服务器上存放有用户名和它们相应的认证信息的一个大数据库,来提供认证用户名和密码及向用户发送配置服务的详细信息等。
RADIUS 具有非常突出的特点:
① RADIUS 协议使用 UDP 进行传输,它使用 1812 号端口进行认证,以及认证通过后对用户授权,使用 1813 号端口对用户计费。
② 支持多种认证方法,RADIUS 能支持 PAP、CHAP、UNIX Login 及其他认证方法;
③ 支持认证转接(AuthenticationForwarding),一个 RADIUS 服务器可以作为另一个RADIUS 服务器的客户端向它要求认证,这叫作认证转接。
④ 协议扩展性好,通过协议中变长的属性串能够进一步扩展 RADIUS 协议。
⑤ 认证信息都加密传输,安全性高。RADIUS 服务器和接入服务器之间传递的认证信息用一个事先设置的口令进行加密,防止敏感信息泄露,因此安全性高。
RADIUS 的认证过程如下:
① 接入服务器从用户那里获取用户名和口令(PAP 口令或 CHAP 口令),把它同用户的一些其他信息(如主叫号码、接入号码、占用的端口等)组成 RADIUS 认证请求数据包发送给 RADIUS 服务器,请求认证。
② RADIUS 服务器收到认证请求包后,首先查看接入服务器是否已经登记,然后根据请求中用户名、口令等信息验证用户是否合法。如果用户非法,则向接入服务器发送访问拒绝包;如果用户合法,那么 RADIUS 服务器会将用户的配置信息,例如,用户类型、IP 地址、连接协议、端口信息、ACL 授权等信息,一起组成访问接受包发送回接入服务器。
③ 接入服务器收到访问接受/拒绝包时,首先要判断包中的签名是否正确,如果不正确将认为收到了一个非法的包。验证签名的正确性后,如果收到了访问接受包,那么接入服务器会接受用户的上网请求,并用收到的授权信息对用户进行配置、授权,限制用户对资源的访问;如果收到的是访问拒绝包则拒绝该用户的上网请求。
④ 当用户成功登录后,接入服务器会向 RADIUS 服务器发送一个连接开始的记账信息包,其中包括用户使用的连接种类、协议和其他自定义的用户记账的信息;当用户断开连接后,接入服务器再向 RADIUS 服务器发送一个连接结束的记账信息包,通知 RADIUS 服务器停止对该用户记账。RADIUS 服务器根据收到的记账信息包按照该用户的设置为用户记账。
16.6.2 访问控制技术
访问控制是在身份认证的基础上,根据不同身份的用户对用户的访问请求加以限制。身份认证关心的是“你是谁,你是否拥有你所声明的身份”这个问题;而访问控制则关心“你能做什么,不能做什么”的问题。
在访问控制过程中,一般把发出访问、存取请求的一方,例如,用户、程序、进程等叫作主体;而把被访问的对象和资源,例如,文件、数据库、设备、内存区域等叫作客体。另外还有一套定义主体与客体之间相互关系,确定不同主体对不同客体的访问能力与权限的规则,叫作访问规则。一个完整的访问控制体系就是由上述三方面共同构成的。
1.访问控制策略
访问控制策略一般可以划分为三类:自主访问控制(Discretionary Access Control,DAC),强制访问控制(Mandarory Access Control,MAC),基于角色的访问控制(Roal Based Access Control,RBAC)。其中 DAC、MAC 是属于传统的访问控制策略,而 RBAC 则是后来出现的一种访问控制策略,被认为具有很大的优势,具有很好的发展前景。
(1)DAC。自主访问控制是目前计算机系统中实现最多的访问控制机制,它使主体可以自主地进行配置以决定其他的主体可以采取什么样的方式来访问其所拥有的一些资源,即一个拥有一定权限范围的主体可以直接或者间接地把权限授予其他的主体。
常见的操作系统如 Windows、UNIX 等都是采用自主访问控制策略来实施访问控制的。其常见的方式是由某个用户(一般为某个文件或资源的拥有者或超级管理员)采用某种方式指定不同类型、不同分组的其他用户对其名下的资源的访问许可和访问方式。
自主访问控制策略中,由用户自己决定其他用户对系统中某些资源的访问权限,这样虽然方便,但是却很难保证这种类型的授权对于整个系统来说是安全的。首先,用户往往不知道或者难以确定其他的用户是否适合具有对某些资源的访问权限;其次,如果不是所有的用户都有很强的安全意识,可能随意授权,那么这对于系统安全就是一个潜在的威胁;再次,由用户自己决定访问权限的分配,不利于系统管理员实施统一的全局访问控制;另外,许多组织中往往希望对于信息系统采取的授权与控制结构能够与该组织的行政结构一致。总之,自主访问控制策略容易使系统失控,容易给非法入侵者留下可乘之机。所以,自主访问控制策略的安全性不是很高。随着网络规模的扩大,用户对访问控制服务的质量也提出了更高的要求,采用自主访问控制策略已经很难满足一个安全性要求比较高的系统的需要。
(2)MAC。强制访问控制是系统统一采用某种访问权限的授予和撤销的策略,而且强制所有主体都必须服从这种访问权限的分配。
MAC 一般用在安全级别层次比较多的军事、安全等特殊应用领域中。它预先为系统中接受的所有主体、客体根据可以信任的程度、所处的岗位和承担的任务、信息的敏感程度、时间发展的阶段等划分成若干级别,例如,信息可以分为绝密、机密、秘密和无密级等不同的级别。然后再根据主体和客体的级别标记来决定访问模式,任何用户对任何客体的访问请求都由这种安全级别的划分及相应的权限配置来控制。 强制访问控制由于过于强调系统的安全性能,虽然能够很好地控制系统的安全,但是它管理起来比较麻烦,工作量很大,也不够灵活。
(3)RBAC。DAC 和 MAC 访问控制策略都各有其特点,但是也各有它们的不足。而基于角色的访问控制则可以在克服以上两者的缺点的同时,提供一个良好的安全的系统环境,因而是面向企业的系统中一种十分有效的访问控制策略。
DAC 系统中,有一种常见的情况,就是在一个组织中,最终用户能够使用某些资源,但是它并不是该资源的拥有者,资源的拥有者是这个组织或组织中的所有用户。这时,就应该基于用户的职务来进行访问权限的设置和分配,而不应该基于资源的拥有者来进行。
例如,在图书馆中,应该根据某一个用户是流通人员、文献编目人员,还是分馆的管理员等不同的角色来分配和设置权限。如果是文献编目人员,那么他对系统中流通的图书这种资源就只能有查看的权限,而对未进行典藏的图书等资源就有比较高的访问权限;如果是分馆的管理员,那么他相应地就具有对该分馆的读者、文献等资源有较高的访问权限,而对其他用户则没有。也就是说,用户具有什么样的访问权限,不直接取决于用户自己,而是取决于他所属的角色,有什么样的角色就有什么样的权限。
角色的种类和访问权限由系统管理员来定义,每一个成员属于哪种类型的角色也由系统管理员来规定,即只有系统管理员才有权定义和分配角色,而且对于用户来说只能服从系统中的这一系列规定,而不能有自主的配置,因此这是一种非自主型访问控制策略。
2.访问许可的授权对访问许可的授权有三种类型:
**(1)等级型。**把对客体的存取控制权限的修改能力划分成不同的等级,拥有高级别修改能力的主体可以把这种权限分配给比其级别低的主体。依此类推,从而将访问许可的授权关系组成一个树型结构。
例如,超级管理员可以作为这个等级树的根,具有修改所有客体的存取控制表的能力,且可以向任意一个主体分配这种修改权。系统管理员把用户根据部门划分成多个子集,并对部门领导授予相应存取控制权限的修改权和对修改权的分配权。部门领导又可以把自己所拥有的权力按照同样的方法向下授权。这种方式的优点是树型结构与实际组织机构类似,并且可以由领导根据日常实际工作需要进行授权来对各级用户进行控制与管理。但这种方式也有一个缺点,就是对同一个客体来说,可能存在多个主体有能力修改其存取控制权限。
**(2)拥有型。**这种类型对每一个客体都有一个拥有者(一般情况下就是该客体的创建者),拥有者具有对所拥有的客体的全部的控制权,并且可以任意修改其拥有的客体的访问控制表,并可对其他主体授予或撤销对其客体的任何一种访问权限。但是拥有者无权将其对客体的访问控制权的分配权授予其他主体。 在 UNIX 系统中就是用这种方式来进行授权控制的。
**(3)自由型。**自由型的特点是一个客体的拥有者可以对任何主体授予对他所拥有的客体的访问权限,同时还可以把这种分配权授予其他主体而不受任何限制。这样,获得了这种授权的主体就可以把这种分配权授予更多的主体而不受该客体拥有者的限制。这样,一旦访问控制的分配权被授予出去,就很难控制对客体的访问了。显然,这样做安全性比较差,一般的系统中很少采用这种方式。