1. 网络安全概述
计算机网络安全包括三方面内容:安全威胁、安全服务和安全机制。
1.1 安全威胁
计算机网络所面临的安全威胁分为被动攻击和主动攻击两大类。
1.1.1 被动攻击
攻击者通过窃听手段仅观察和分析网络中传输的电子邮件、文件数据、IP电话等数据流中的敏感信息,而不对其进行干扰。
即使通信内容被加密,使得攻击者不能直接从被加密的内容中获取机密信息,也可以通过观察协议数据单元(PDU)的首部信息,来获知正在通信的协议实体的地址和身份。
通过研究PDU的长度和传输的频度来了解所交换的数据的性质。这种被动攻击又称为流量分析(Traffic Analysis)。
对于被动攻击,由于其不涉及对数据的更改,因此很难被发现。
对付被动攻击主要采用各种数据加密技术进行预防,而不是主动检测。
1.1.2 主动攻击
主动攻击是指攻击者对传输中的数据流进行各种处理。
三种最基本的主动攻击形式:
- 中断(Interruption):攻击者故意中断他人的网络通信。
- 篡改(Modification):攻击者故意篡改网络中传送的PDU。
- 伪造(Fabrication):攻击者伪造PDU在网络中传送。
除了中断、篡改和伪造,还有一种特殊的主动攻击就是恶意程序(Rogue Program)。恶意程序的种类繁多,可以通过网络在计算机系统间进行传播,对网络安全威胁较大的主要有以下几种:
- 计算机病毒(Computer Virus):这是一种会“传染”其他程序的程序。“传染”是通过修改其他程序来把自身或自己的变种复制进去完成的。
- 计算机蠕虫(Computer Worm):这是一种通过网络的通信功能将自身从一个节点发送到另一个节点并自动启动运行的程序。
- 特洛伊木马(Trojan Horse):简称为木马,这是一种在表面功能掩护下执行恶意功能的程序。例如,一个伪造成文本编辑软件的木马程序,在用户编辑一个机密文件时偷偷将该文件的内容通过网络发送给攻击者。计算机病毒有时也以木马的形式出现。
- 逻辑炸弹(Logic Bomb):这是一种当运行环境满足某种特定条件时就触发自身恶意功能的程序。例如,一个文本编辑软件平时正常运行,但当系统时间为13日且为星期五时,就会触发该程序的恶意功能,它会删除系统中的所有文件,这种程序就是一种典型的逻辑炸弹。
- 后门入侵(Backdoor Knocking):是指利用系统中的漏洞通过网络入侵系统。这就好比一个盗贼侵入某个房门有缺陷的住户。
- 拒绝服务(Denial of Service,DoS)是一种很难防范的主动攻击。攻击者向因特网上的某个服务器不停地发送大量分组,使该服务器无法提供正常服务,甚至完全瘫痪。攻击者甚至还可利用系统漏洞首先非法控制因特网上成百上千台主机(这些主机被称为“僵尸”主机),然后从这些“僵尸”主机上同时向某个服务器发起猛烈攻击。
对于主动攻击,由于物理通信设施、软件和网络本身潜在的弱点具有多样性,因此完全防止主动攻击是非常困难的。但是主动攻击容易检测,因此对付主动攻击除要采取数据加密技术、访问控制技术等预防措施,还需要采取各种检测技术及时发现并阻止攻击,同时还要对攻击源进行追踪,并利用法律手段对其进行打击。
1.2 安全服务
为防止各种安全威胁,一个安全的计算机网络应设法提供基本安全服务。
1)保密性
保密性(Confidentiality)就是确保网络中传输的信息只有其发送方和接收方才能懂得其含义,而信息的截获者则看不懂所截获的数据。显然,保密性是计算机网络中最基本的安全服务,也是对付被动攻击所必须具备的功能。
2)报文完整性
报文完整性(Message Integrity)就是确保网络中传输的信息不被攻击者篡改或伪造,它在应对主动攻击时也是必不可少的。
报文完整性与实体鉴别往往是不可分割的。因此,在谈到“鉴别”时,有时同时包含了实体鉴别和报文完整性。换句话说,既鉴别发送方的身份,又鉴别报文的完整性。
3)实体鉴别
实体鉴别(Entity Authentication)是指通信两端的实体能够相互验证对方的真实身份,确保不会与冒充者进行通信。目前频发的网络诈骗,多数情况都是由于在网络上不能鉴别出对方的真实身份。实体鉴别在对付主动攻击时是非常重要的。
4)不可否认性
不可否认性(Nonrepudiation)用来防止发送方或接收方否认发送或接收过某信息。在电子商务中这是一种非常重要的安全服务。
5)访问控制
访问控制(Access Control)是指可以限制和控制不同实体对信息源或其他系统资源进行访问的能力。必须在鉴别实体身份的基础上对实体的访问权限进行控制。
6)可用性
可用性(Availability)就是确保授权用户能够正常访问系统信息和资源。很多攻击都会导致系统可用性的损失,拒绝服务DoS攻击就是可用性最直接的威胁。
2. 密码学与保密性
密码学是计算机网络安全的基础。
2.1 密码学相关基本概念
将发送的数据变换成对任何不知道如何做逆变换的人都不可理解的形式,从而保证数据的机密性,这种变换称为加密(Encryption)。
加密前的数据被称为明文(Plaintext),而加密后的数据被称为密文(Ciphertext)。
通过某种逆变换将密文重新变换回明文,这种逆变换称为解密(Decryption)。
加密和解密过程可以使用一个密钥(Key)作为参数,密钥必须保密,但加密和解密的过程可以公开。换句话说,只有知道密钥的人才能解密密文,否则即使知道加密或解密算法也无法解密密文。
加密密钥和解密密钥可以相同,也可以不同(即使不同,这两个密钥也必然有某种相关性),这取决于采用的是对称密钥密码体制还是公开密钥(公钥)密码体制。
2.2 对称密钥密码体制
对称密钥密码体制是指加密密钥与解密密钥相同的密码体制。由IBM公司研制并于1977年被美国定为联邦信息标准的数据加密标准(Data Encryption Standard,DES),就是对称密钥密码体制的典型代表。
2.2.1 DES的加密方法
在使用DES进行加密前,先将整个明文划分成若干个64比特长的二进制数据。然后对每一个64比特的数据采用64比特的密钥(实际密钥长度为56比特,另外8比特作为奇偶校验)进行加密处理,产生一个64比特的密文数据。最后将各64比特的密文数据串接起来,就可得出整个密文。
2.2.2.三重DES
DES的保密性仅取决于对密钥的保密和密钥的长度。20世纪70年代设计的DES,经过了世界上无数优秀学者几十年的密码分析,除了其56比特密钥长度太短,没有发现其任何大的设计缺陷。
为了解决56比特DES密钥太短的问题,学者们提出了三重DES(Triple DES,3DES)
对明文使用密钥K1和DES算法进行加密,将得到的密文使用密钥K2和DES算法进行解密,再将解密的结果使用密钥K3和DES算法进行加密,即可得到经过3DES加密后的密文。
对密文使用密钥K3和DES算法进行解密,将解密的结果使用密钥K2和DES算法进行加密,再将加密的结果使用密钥K1和DES算法进行解密,即可得到经过3DES解密后的明文。
2.3 公钥密码体制
在公钥密码体制中,加密密钥是向公众公开的,称为公钥(Public Key, PK)。而解密密钥是需要保密的,称为私钥或密钥(Secret Key,SK)。
公钥密码体制的特点如下:
- 发送方用PK对明文X加密后,在接收方用SK解密,即可恢复出明文。
- PK只能用来加密,而不能用来解密。
- 尽管在计算机上可以容易地产生成对的PK和SK,但从已知的PK是不可能推导出SK的,即从PK到SK是“计算上不可能的”。
- 加密算法和解密算法都是公开的。
由于从PK不能推导出SK,并且PK不能用来解密,因此PK可以是公开的。
公钥密码体制提出不久,研究人员就找到了三种公钥密码算法。公钥密码体制不仅用于加密,还可以很方便地用于鉴别和数字签名。然而,目前的公钥密码算法比对称密码算法慢好几个数量级。因此,公钥密码通常用于会话密钥的建立,而对称密码被用于其他大多数情况下的加密。
用户A与B要进行加密通信。A首先选择了一个用于加密数据并且与B共享的DES或AES密钥(对称密码体制),由于该密钥仅用于A和B之间的这次会话,因此被称为会话密钥。
为了让B知道该会话密钥,A必须将该会话密钥通过秘密渠道告知B。为此,A用B的RSA公钥(公钥密码体制)加密该会话密钥后发送给B,B收到加密的会话密钥后,就用自己的私钥对其解密得到会话密钥。此后,A与B之间就可以用该会话密钥加密通信的数据。
3. 报文完整性与鉴别
如果报文被攻击者篡改或伪造,则报文就不具备完整性。
对报文进行完整性验证就是进行报文鉴别,也就是鉴别报文的真伪。
3.1 报文摘要和报文鉴别码
3.1.1 报文摘要和报文鉴别码简介
使用加密技术通常就可以达到报文鉴别的目的,因为被篡改的报文解密后一般不能得到可理解的内容。
然而,对于不需要保密而只需要报文鉴别的网络应用,对整个报文进行加密和解密,会使计算机花费相当多的CPU时间。
使用报文摘要(Message Digest,MD)进行报文鉴别是一种更有效的方法。
1)发送方对待发送的报文m(其长度可变)进行报文摘要算法,得出固定长度的报文摘要,记为H(m)。然后使用密钥K对H(m)进行加密,得到加密后的报文摘要E(H(m)),并将E(H(m)附加在报文m的后面发送出去。
2)接收方收到后,使用密钥K对E(H(m))进行解密得到H(m),并把收到的报文进行报文摘要运算,如果运算结果与H(m)相同,则可判定收到的报文就是发送方产生的报文m,否则可判定收到的报文不是发送方产生的报文m。
使用报文摘要的好处是,只对长度固定且比整个报文长度短得多的报文摘要H(m)进行加密,比对整个报文m进行加密简单得多。密钥K仅在通信双方之间共享,没有第三方能用伪造报文产生出使用密钥K加密的伪造报文摘要。
3.1.2 实用的报文摘要算法
最有名的报文摘要算法(密码散列函数或称散列算法)有MD5(Message Digest,MD-5)和安全散列算法1(Secure Hash Algorithm,SHA-1)。
3.1.2.1 MD5
MD5输出128比特的摘要。MD5希望达到的设计目标是,根据给定的MD5报文摘要,想要找出一个与原报文具有相同报文摘要的另一个报文,其难度在计算上几乎是不可能的。
但在2004年,中国学者王小云发表了轰动世界的密码学论文,证明了可以用系统的方法找出一对报文,这对报文具有相同的MD5报文摘要,而这仅需要15分钟至不到1小时的时间。这使得“密码散列函数的逆变换是不可能的”这一传统观念受到了颠覆性的动摇。之后,又有许多学者开发了对MD5的实际攻击方法,这导致MD5最终被安全散列算法SHA-1所取代。
3.1.2.2 SHA
SHA是由美国标准与技术研究院NIST提出的一个散列算法系列。SHA-1输出160比特的报文摘要,计算要比MD5慢一些。尽管SHA-1比MD5安全,但后来也被证明其实际安全性并未达到设计目标,并且也曾被王小云教授的研究团队攻破。
尽管现在SHA-1仍在使用,但很快就会被SHA-2和SHA-3所替代。
3.2 数字签名
在计算机网络中传送的报文可以通过数字签名(Digital Signature)来证明其真实来源。
数字签名必须保证以下三点:
1)接收方能够核实发送方对报文的数字签名。
2)包括接收方在内的任何人都不能伪造对报文的数字签名。
3)发送方事后不能抵赖对报文的数字签名。
3.2.1 数字签名的实现
现在已有多种实现数字签名的方法。采用公钥密码算法比采用对称密钥密码算法更容易实现数字签名。
1)发送方A使用自己的私钥SKA、(即解密密钥)对报文m进行解密运算D。
2)A将经过解密运算D的结果D(即带有数字签名的报文m)发送给B。
3)B收到带有数字签名的报文D后,用A的公钥PKA(即加密密钥)对报文D进行加密运算E,就可得出原报文m。
由于除A外的其他任何人都没有A的私钥SKA,所以除A外没有其他任何人能产生带有数字签名的报文,而任何伪造的报文经过加密运算后都不会得到可理解的内容。因此,B就通过这种方式核实了报文m的确是A签名发送的。
如果A要抵赖曾发送报文m给B,B可以把报文m和带有数字签名的报文出具给第三方。第三方很容易用A的公钥PK,去证实A确实发送过报文m给B。
反之,若B把报文m1伪造成m2,则B不能在第三方前出示带有数字签名的报文,因为B不可能具有A的私钥SK。这样就证明B伪造了报文。很显然,数字签名实现了对报文来源的鉴别。
由于公钥密码算法的计算代价非常高,对整个报文进行数字签名是一件非常耗时的事情,更有效的方法是仅对报文摘要进行数字签名。
3.2.2 具有保密性的数字签名
之前介绍的数字签名过程仅对报文m进行了数字签名,但对报文m本身并没有保密。因为知道发送方A身份的任何人,通过查阅手册就可获得A的公钥PK,这时截获带有数字签名的报文后,就可得到报文m。如果采用具有保密性的数字签名,就可以同时实现数字签名和秘密通信。
4. 实体鉴别
实体鉴别就是通信双方的一方验证另一方身份的技术,常简称为鉴别。
实体可以是人、客户进程以及服务器进程等。
通信实体的鉴别通常是两个通信实体之间传输实际数据之前或进行访问控制之前的必要过程,这是很多安全协议的重要组成部分。
实体鉴别的一种最简单方法就是使用用户名和口令。
然而,直接在网络中传输用户名和口令会面临安全威胁,因为用户名和口令可能会被网络上的攻击者截获,因此需要对用户名和口令进行加密。
如图所示,攻击者C可以从网络中截获A发送给B的加密报文,C并不需要对该报文进行解密,而是以后把该报文发送给B,使B误认为C就是A。之后,B就向伪装成A的C发送许多本来应当发送给A的报文,这就是重放攻击(Replay Attack)。
为了应对重放攻击,可以使用不重数。所谓“不重数”,就是指一个不重复使用的大随机数,即“一次一数”。在实体鉴别过程中,不重数可以使用户把重复的实体鉴别请求和新的实体鉴别请求区分开。
1)用户A首先给B发送一个报文,该报文包括A的用户名和一个不重数RA。
2)B收到后给A发送响应报文,在该报文中用A和B共享的密钥KAB。加密RA,并同时也给出自己的不重数RB。
3)A收到后给B发送一个响应报文,在该报文中用KAB加密RB。
这里的关键点是,A和B对不同的会话必须使用不同的不重数集。由于不重数不能重复使用,所以攻击者在进行重放攻击时无法重复使用所截获的不重数,因而就无法伪装成A或B。这种使用不重数进行实体鉴别的协议又称为挑战-响应(Challenge-Response)协议。同理,使用公钥密码体制也可以实现实体鉴别。通信双方可以利用自己的私钥将对方发来的不重数进行签名,而用对方的公钥来鉴别对方签名的不重数,从而实现通信双方的鉴别。
5. 密钥分发
对称密钥密码体制中通信双方共享的密钥是需要保密的,而公钥密码体制中的公钥是公开的,但私钥仍然需要保密。很显然,密钥系统的安全性完全依赖于对密钥的安全保护。
密钥分发是密钥系统中一个非常重要的问题。密钥必须通过安全的通路进行分发。例如,可以通过非常可靠的信使携带密钥分发给相互通信的各用户,这称为网外分发。密钥必须定期更换才能确保可靠。
然而,随着网络用户的增多以及用户间通信量的增大,通过信使分发密钥的方法已不再适用。因此,必须解决网内密钥自动分发的问题,即通过网络自动分发密钥。
5.1 对称密钥的分发
对于对称密钥密码体制,目前常用的密钥分配方式是设立密钥分配中心(KDC)。KDC是个公众都信任的机构,其任务就是给需要进行秘密通信的用户临时分配一个会话密钥。
假设用户A和B都是KDC的登记用户,他们在KDC登记时就分别拥有了与KDC通信的主密钥KA、和KB。用户A和B通过KDC安全获得他们之间共享的、用于一次会话的密钥KAB的过程如下:
1)用户A向KDC发送报文(无须加密),说明自己想与用户B通信。在该报文中给出A和B在KDC登记的身份。
2)KDC收到A发来的报文后,用随机数产生一个“一次一密”的会话密钥KAB。供A和B的一次会话使用。之后,KDC构建一个准备向A发送的回答报文。在该报文中包含有会话密钥KAB、和需要由A转发给B的一个票据(ticket),该票据的内容为A和B在KDC登记的身份,以及A和B这次会话将要使用的密钥KAB。KDC用B的主密钥KB。加密票据,由于A并没有B的主密钥KB,因此A无法知道该票据的内容,实际上A也无须知道该票据的内容。KDC构建好准备向A发送的回答报文后,使用A的主密钥KA对该报文加密后发送给A。
3)A收到KDC发来的加密报文后,用自己的主密钥KA,对其解密,就可得到由KDC分发的用于自己与B进行一次会话的密钥KAB,以及需要转发给B的加密票据。于是A将加密票据转发给B,B收到后用自己的主密钥KB。对其进行解密后,就知道A要与自己进行通信,同时也知道了KDC为这次自己与A通信所分配的会话密钥KAB。此后,A和B就可以使用会话密钥KAB进行这次通信了。
5.2 公钥的分发
我们知道,公钥密码体制中的公钥是公开的,而私钥是用户私有的(保密的),如果每个用户都知道其他用户的公钥,用户之间就可以实现安全通信。然而,如果通过网络来随意公布用户的公钥,会面临极大的安全风险。
这需要有一个值得信赖的机构将公钥与其对应的实体(人或机器)进行绑定(binding)。这种机构被称为认证中心(Certification Authority,CA),一般由政府出资建立。
需要发布公钥的用户可以让CA为其公钥签发一个证书(Certifcate),证书中包含有公钥及其拥有者的身份标识信息(人名、公司名或IP地址等)。
CA必须首先核实用户真实身份,然后为用户产生公钥-私钥对并生成证书,最后用CA的私钥对证书进行数字签名。该证书就可以通过网络发送给任何希望与该证书拥有者通信的实体,也可将该证书存放在服务器由其他用户自由下载。
任何人都可从可信的地方(例如代表政府的报纸)获取CA的公钥,并用这个公钥来验证某个证书的真伪。一旦证书被鉴别是真实的,则可以相信证书中的公钥确实属于证书中声称的用户。
如果全世界仅使用一个CA来签发证书,则会出现负载过重和单点故障等问题。因特网采用的是[RFC5280]给出的、在全球范围内为所有因特网用户提供证书的签发与认证服务的公钥基础结构(Public Key Infrastructure,PKI)。
下级CA的证书由上级CA签发和认证。顶级的根CA能验证所有1级CA的证书,1级CA可以在一个很大的地理区域或逻辑区域内运作,而2级CA可以在一个相对较小的区域内运作。
所有用户都信任顶级的根CA,但可以信任也可以不信任中间的CA。用户可以在自己信任的CA获取个人证书,当要验证来自不信任CA签发的证书时,需要到上一级CA验证该证书的真伪,如果上一级CA也不可信则需要到更上一级CA进行验证,一一直追溯到可信任的一级CA。这一过程最终有可能会追溯到顶级的根CA。
6. 访问控制
6.1 访问控制的基本概念
用户要访问某信息系统,通常需要经过的第一道安全防线就是身份鉴别,身份鉴别可以将未授权用户隔离在信息系统之外。当用户经过身份鉴别通过第一道安全防线进入系统后,并不能毫无限制地访问系统中的任意资源,而只能访问授权范围内的资源,这就是访问控制(Access Control)。
访问控制可被看作信息系统的第二道安全防线,对进入系统的合法用户进行访问权限控制。
对合法用户访问权限的授予一般遵循最小特权原则。所谓“最小特权”,就是指能够满足用户完成工作所需的权限,用户不会被赋予超出其实际需求的权限。最小特权原则可以有效防范合法用户滥用权限所带来的安全风险。
访问控制包含以下基本要素:
- 主体(Subject):是指访问活动的发起者,可以是某个用户,也可以是代表用户执行操作的进程、服务和设备等。
- 客体(Object):是指访问活动中被访问的对象。凡是可以被操作的信息、文件、设备、服务等资源都可以认为是客体。
- 访问(Access):是指对客体(被访问的对象)的各种操作类型。例如创建、读取、修改、删除、执行、发送、接收等操作。不同的系统有不同的访问类型。
- 访问策略:是访问控制的核心,访问控制根据访问策略限制主体对客体的访问。访问控制策略可用三元组(S、O、P)来描述,其中S表示主体,O表示客体,P表示许可(Permission)。许可P明确了允许主体S对客体0所进行的访问类型。访间策略通常存储在系统的授权服务器中。
上图给出了著名的访问监控器(Reference Monitor)模型。按照访问监控器模型的描述,当系统中出现访问请求时,访问监控器对访问请求进行裁决,它向授权服务器进行查询,根据授权服务器中存储的访问策略决定主体对客体的访问是否被允许。
在访问监控器模型中有一个负责审计的模块,它是访问控制的必要补充。审计模块会记录与访问有关的各类信息,包括主体、客体、访问类型、访间时间以及访问是否被允许等信息。系统管理员通过查看审计记录,就可以详细了解系统中访问活动的具体情况,主要包括以下三方面的情况:
- 哪些主体对哪些资源的访问请求被拒绝。主体发出大量违规的访问请求,这往往是攻击和破坏活动的征兆,需要引起特别的关注。
- 访问策略是否得到了严格执行。如果访问规则在配置或执行过程中存在失误,一些违反访问策略的访问请求可能被许可。通过查看审计记录可以发现此类情况,以便及时修正。
- 提供访问活动的证据,为事后追查和追责提供依据。
6.2 访问控制策略
典型的访问控制策略可分为三类:自主访问控制、强制访问控制和基于角色的访问控制。
6.2.1 自主访问控制策略
自主访问控制(Discretionary Access Control,DAC)策略中“自主”的意思是客体的拥有者可以自主地决定其他主体对其拥有的客体所进行访问的权限。
这种访问控制策略具有很强的灵活性,然而也有其明显的缺陷,即权限管理过于分散,容易出现漏洞,并且无
法有效控制被攻击主体破坏系统安全性的行为。
木马程序利用自主访问控制策略的上述缺陷,可以很容易地破坏系统的安全性。例如,用户A对文件门具有读权限。攻击者B为了非法获取该文件,编写了一个木马程序,并诱骗用户A运行了该木马程序。木马程序获得用户A的访问权限,能够读取文件f的内容,并将这些内容写入到新创建的文件中,然后用户A将文件的读取权限授予攻击者B,这样攻击者B就可以非法读取到文件的内容了。
自主访问控制策略的最大特点是“自主”,也就是资源的拥有者对资源的访问策略具有决策权,因此是一种限制比较弱的访问控制策略。这种访问控制策略给用户带来灵活性的同时,也带来了安全隐患。
6.2.2 强制访问控制策略
强制访间控制(Mandatory Access Control,MAC)策略与自主访问控制策略不同,它不允许一般的主体进行访问权限的设置。在强制访问控制策略中,主体和客体被赋予一定的安全级别。通常只有系统的安全管理员可以进行安全级别的设定,而普通用户不能改变自己或任何客体的安全级别。
系统通过比较主体和客体的安全级别来决定某个主体是否能够访问某个客体。
在强制访问控制策略中广泛使用以下两项原则:
- “下读”原则:主体的安全级别必须高于或等于被读客体的安全级别,主体读取客
体的访问活动才能被允许。 - “上写”原则:主体的安全级别必须低于或等于被写客体的安全级别,主体写客体
的访问活动才能被允许。
“下读”和“上写”原则限制了信息只能由低级别的对象流向高级别或同级别的对象,这样能够有效防止木马等恶意程序的窃密攻击。
例如,用户A的安全级别高于文件f1,而用户B的安全级别低于文件f1,因此用户A可以读取文件f1,而用户B却不能读取文件f1。即使用户A运行了用户B编写的木马程序,但由于该木马程序具有与用户A同样的安全级别,虽然木马程序可以读取文件f1,却不能将文件f1的安全级别修改成用户B可读的安全级别,也无法将其内容写入到安全级别比用户A低的文件中。因此,用户B无法读取到文件f1中的信息。
6.2.3 基于角色的访问控制策略
基于角色的访问控制(Role Based Access Control,RBAC)策略,其目的在于降低安全管理的复杂度。用户在实际工作中所承担的角色,往往决定了在信息系统中应为该用户赋予怎样的访问权限。
RBAC的核心思想是,根据安全策略划分不同的角色,用户不再直接与许可关联,而是通过角色与许可关联。
在RBAC中,一个用户可以拥有多个角色,一个角色也可以赋予多个用户;一个角色可以拥有多种许可,一种许可也可以分配给多个角色。许可指明了对某客体可以进行的访问类型。
角色与许可之间的关系比角色与用户的关系要更加稳定,当一个用户的职责发生变化或需要为一个新的用户授权时,只要修改或设置用户的角色即可。很显然,将用户和访问权限通过角色进行逻辑隔离能够减小授权的复杂性,增强权限的可管理性,减少因授权失误导致安全漏洞的风险。
7. 网络体系结构各层采取的安全措施
7.1 物理层安全实例:信道加密
在物理层实现通信数据的保密性和完整性的方法是对信道进行加密。
对信道进行加密需要使用信道加密机。信道加密机位于通信节点(例如路由器)前端(按数据流动方向),它将通信节点发送的所有数据都进行加密处理,然后再发送到物理链路上。
使用信道加密技术可为通过链路的所有数据提供安全保护,并且对上层协议几乎没有任何影响(也就是具有很好的透明性)。
由于链路上传送的各种协议数据单元(PDU)的首部和数据载荷都被加密了,PDU的截获者无法从PDU中提取源地址和目的地址,因此可以防止各种形式的流量分析。由于信道加密机完全使用硬件加密技术,因此加密和解密速度快,并且无须传送额外的数据,采用该技术不会减少网络的有效带宽。
一般情况下,网络的源点和终点在物理上都可以确保安全,但是所有的中间节点(可能经过的路由器)则未必都是安全的。因此,在网络互联的情况下,信道加密这种仅用于保护网络局部链路通信安全的技术就不能确保端到端通信的安全了。在实际应用中,通常只在容易被窃听的无线链路(例如卫星链路)上,或军用网络等专用网络的通信链路所在不安全区域的部分使用信道加密技术。
7.2 数据链路层安全实例:802.11i
随着802.11无线局域网的广泛应用,其安全问题越来越受到关注。我们知道,在无线通信方式下,电磁波在自由空间辐射传播,任何无线终端都可在无线接入点的信号覆盖范围内接收其无线信号。若不采取相应的安全措施,任何无线终端都可以接入到网络中,进而窃听网络通信或非法使用网络资源。
因此802.11无线局域网的安全问题就显得尤为重要。802.11无线局域网主要在数据链路层为用户提供安全服务。
除了无线终端和接入点AP,802.11i还定义了一种鉴别服务器(Authentication Server,AS)。AP可与AS进行通信。将AS从AP分离出来的目的在于可使一台AS服务于多台AP,集中在一台AS中处理鉴别和接入,可以降低AP的复杂性和成本。
在802.11i中,无线终端与AP之间建立安全通信的过程包含四个阶段:
1)安全性能力发现阶段:在安全性能力发现阶段,AP会向其信号覆盖范围内的无线终端,通告其所能提供的鉴别和加密方式。各无线终端收到后,可请求各自所期望的特定的鉴别和加密方式。尽管在上述过程中无线终端已经与AP交换了报文,但此阶段无线终端还没有被鉴别,也没有获得用于数据通信的加密密钥。
2)相互鉴别和主密钥生成阶段:相互鉴别发生在无线终端和AS之间。在相互鉴别的过程中,AP仅在无线终端和AS之间转发报文,也就是仅起到通信中继的作用。无线终端与AS之间的双向鉴别过程使用由扩展的鉴别协议(Extensible Authentication Protocol,EAP)[RFC2284]所定义的一种端到端的报文格式。在EAP中,AS可以选择多种鉴别方式中的任何一种来执行鉴别,主要利用公钥加密技术(包括不重数加密和报文摘要)在某个无线终端和AS之间进行相互鉴别,并生成双方共享的一个主密钥(Master Key,MK)。
3)成对主密钥生成阶段:除了在上一个阶段所生成的由某个无线终端和AS之间共享的MK,该无线终端与AS彼此之间还要再生成一个密钥,称为成对主密钥(Pairwise Master Key,PMK)。PMK由无线终端和AP共同使用。AS将PMK发送给AP,这时该无线终端和AP就具有了一个共享的密钥,并彼此相互鉴别。
4)临时密钥生成阶段:使用上一阶段获得的PMK,该无线终端和AP可以生成用于加密通信的临时密钥(Temporal Key,TK)。TK被用于经无线链路向任意远程主机发送数据的链路级的数据加密。
IEEE 802.11i提供了多种加密形式,其中包含WEP加密的强化版本临时密钥完整性协议(Temporal Key Integrity Protocol,TKIP)和基于高级加密标准(AES)的加密方案。考虑到不同用户和不同应用的安全需要,例如企业用户需要很高的企业级安全保护,而家庭用户往往只是使用网络来浏览网页、收发电子邮件等,对安全保护的要求相对较低。为了满足不同用户的需求,IEEE802.11i规定了以下两种应用模式:
- 企业模式:使用AS和复杂的安全鉴别机制来保护无线网络的通信安全。
- 家庭模式:也称个人模式(包括小型办公室),在AP或无线路由器上以及无线终端上配置预设共享密钥(Pre-Shared Key,PSK)来保护无线网络的通信安全。
7.3 网络层安全实例:IPSec
7.3.1 IPSec协议族概述
IPSec是“IPSecurity”(IP安全)的缩写,它是为因特网网际层提供安全服务的协议族(也有人不太严格地称其为“IPSec协议”)[RFC 4301,RFC6071]。IPSec并不限定用户使用何种特定的加密和鉴别算法,通信双方可以选择合适的算法和参数(例如,密钥长度)。为了保证互操作性,IPSec还包含了一套加密算法,所有IPSec的实现都必须使用。
IPSec包含两种不同的工作方式:运输方式和隧道方式
运输方式(Transport Mode)下IP安全数据报的封装方式:IPSec将运输层向下交付给网际层的运输层报文添加IPSec首部和尾部,之后网际层再为其添加一个IP首部,使之成为IP安全数据报。
隧道方式(Tunnel Mode)下IP安全数据报的封装方式:IPSec给原始IP数据报添加IPSec首部和尾部,之后网际层再为其添加一个新的IP首部,使之成为IP安全数据报。
无论使用上述哪种方式,所封装出的IP交全数据报的首部都是不加密的。这是为了使因特网中的各路由器能够识别IP安全数据报首部中的相关信息,进而可以将IP安全数据报在不安全的因特网中从源点安全地转发到终点。所谓“IP安全数据报”是指数据报的数据载荷是经过加密并能够被鉴别的。
7.3.2 安全关联
7.3.2.1 在路由器之间建立安全关联
在使用隧道方式传送IP安全数据报之前,应当首先为通信双方建立一条网际层的逻辑连接(即安全隧道),称为安全关联(Security Association,SA)。这样,传统因特网无连接的网际层就变成了具有逻辑连接的一个层。
例如,某个公司有一个总部和一个在外地的分公司。总部需要与分公司进行双向安全通信,还要与各地出差的n个员工进行双向安全通信。在这种情况下,总部与分公司需要2条SA(用于双向安全通信),n个员工每个都需要与总部建立2条SA,因此共需要建立(2+2n)条SA。IP安全数据报就是在这些SA中传送的。
路由器R1和R2分别是公司总部和分公司的防火墙中的路由器,它们各自负责为其所在部门收发IP数据报。因此公司总部与分公司之间的SA可以建立在R1和R2之间。现假定公司总部中的主机A要给分公司中的主机B通过因特网中已建立好的SA发送IP安全数据报,具体过程如下:
1)主机A给B发送的IP数据报必须首先经过路由器R1。
2)R1对该数据报进行IPSec加密并为其添加一个新的IP首部,使之成为IP安全数据报。
3)IP安全数据报经过因特网中多个路由器的转发后到达路由器R2。
4)R2对IP安全数据报进行IPSec解密,还原出原始的IP数据报,并将其直接交付给主机B。
从逻辑上看,IP安全数据报在SA中的传送,就好像通过一条安全的隧道。
如果公司总部中的主机A和C进行通信,由于都在公司内部而不需要经过不安全的因特网,因此不需要建立SA。主机A发送的IP数据报只需通过路由器R1转发一次就可传送给主机C。如果主机A想要上网浏览一些新闻,也不需要建立SA,只需通过路由器R1收发普通的IP数据报即可。
7.3.2.2 在路由器和主机之间建立SA
上图给出了公司总部中的主机A要和正在外地出差的某个员工的主机B进行安全通信的情况。在这种情况下,公司总部中的路由器R1与外地员工的主机B之间需要建立SA,之后主机A发送IP数据报给主机B,具体过程如下:
1)主机A发送的IP数据报经过路由器R1的IPSec处理后就变成了IP安全数据报。
2)IP安全数据报经过因特网中多个路由器的转发,最终到达主机B。
3)主机B中的IPSec对IP安全数据报进行鉴别和解密,还原出主机A发送的原始IP数
从逻辑上看,IP安全数据报是在路由器R1和员工的主机B之间的安全隧道中传送的。
建立SA的路由器或主机,需要维护这条SA的状态信息,包括如下项目:
- 一个32位的连接标识符,称为安全参数索引(Security Parameter Index,SPI)。
- SA的源点和终点的IP地址(即路由器R1和主机B的IP地址)。
- 所使用的加密类型(例如DES或AES)。
- 加密的密钥。
- 完整性检查的类型(例如,使用报文摘要MD5或SHA-1的报文鉴别码MAC)。
- 鉴别使用的密钥。
当路由器R1要通过SA传送IP安全数据报时,首先需要读取SA的上述状态信息,以便知道应当如何加密和鉴别IP数据报。
7.4 运输层安全实例:SSL/TLS
现在广泛使用的运输层安全协议有以下两个:
- 安全套接字层(Secure Socket Layer,SSL)
- 运输层安全(Transport Layer Security,TLS)
SSL作用于端系统应用层中的HTTP和运输层中的TCP之间,在TCP连接之上建立起一个安全通道,为通过TCP连接传输的应用层报文提供安全服务。
1995年,SSL由因特网工程任务组(IETF)进行了标准化。IETF在SSL3.0的基础上设计了TLS协议,为所有基于TCP连接的网络应用提供安全数据传输服务。
SSL/TLS作用于TCP/IP体系结构的应用层与运输层之间。在应用层中使用SSL/TLS最多的协议是HTTP(但不限于HTTP,IMAP也可使用)。
当使用浏览器查看普通网站的网页时,HTTP直接使用TCP连接,这时SSL不起作用。但使用浏览器进行网上购物时,支持SSL的购物网站的Web服务器,会提供使用SSL的安全网页,浏览器访问这种网页时就需要使用SSL协议。这时,HTTP会调用SSL对整个网页进行加密。在浏览器地址栏原来显示http的地方,现在变成了https,表明现在使用的是提供安全服务的HTTPS。
SSL提供以下三种安全服务:
- SSL服务器鉴别:支持SSL的客户端通过验证来自服务器的证书,来鉴别服务器的真实身份并获得服务器的公钥。
- SSL客户鉴别:用于服务器证实客户的身份,这是SSL的可选安全服务。
- 加密的SSL会话:加密客户和服务器之间传送的所有报文,并检测报文是否被篡改。
7.5 应用层安全实例:PGP
PGP(Pretty Good Privacy)是已被广泛应用的,为电子邮件提供加密、鉴别、电子签名和压缩等技术的电子邮件安全软件包。
PGP为电子邮件用户提供保密性、完整性、发件人鉴别和不可否认性四种安全服务。PGP并没有使用什么新的概念,它使用对称密钥和公钥的组合进行加密,为电子邮件提供保密性,通过报文摘要和数字签名技术为电子邮件提供完整性和不可否认性。需要说明的是,尽管PGP已被广泛使用(电子邮件的事实上的标准),但PGP并不是因特网的正式标准。
假设用户A给B发送电子邮件的明文为X,要使用PGP来确保该邮件的安全。用户A有三个密钥:用户A自己的私钥、用户A自己生成的一次性密钥以及用户B的公钥。用户B有两个密钥,分别是用户B自己的私钥和用户A的公钥。
用户A(邮件发送方)的PGP处理过程具体解释如下:
1)用散列函数(例如MD5运算)得到明文邮件X的报文摘要H。用A自己的私钥对H进行数字签名,得出报文鉴别码(MAC)。将MAC拼接在X后面,得到扩展的邮件(X,MAC)。
2)使用A自己生成的一次性密钥对扩展的邮件(X,MAC)进行加密。
3)使用B的公钥对A生成的一次性密钥进行加密。
4)把加密后的一次性密钥和加密后的扩展的邮件发送给B。
用户B(邮件接收方)收到A发来的、加密后的一次性密钥,以及加密后的扩展的邮件后,PGP处理过程具体解释如下:
1)将加密后的一次性密钥与加密后的扩展的邮件分开。
2)用B自己的私钥解密出A生成的一次性密钥。
3)用一次性密钥对扩展的邮件进行解密,并从解密后的结果(X,MAC))中分离出邮件
4)用A的公钥对MAC进行鉴别(即签名核实),得出报文摘要H。该报文摘要就是A原先用明文邮件X通过散列函数生成的那个报文摘要。
5)用散列函数对分离出的明文邮件X生成另一个报文摘要H,将H与之前得出的H进行比较。若相同,则对邮件的发送方的鉴别就通过了,并且邮件的完整性也得到肯定。
8. 防火墙访问控制与入侵检测系统
尽管之前介绍的网络各层面的安全机制,可为网络提供保密性、报文完整性、实体鉴别和不可否认性等基本的安全服务,但仍无法应对以下安全问题:
- 非法用户利用系统漏洞进行未授权登录。
- 授权用户非法获取更高级别的权限。
- 通过网络传播病毒、蠕虫和特洛伊木马。
- 阻止合法用户正常使用服务的拒绝服务攻击。
为了降低上述安全威胁所带来的安全风险,可以使用防火墙来严格控制出入网络边界的分组,禁止任何不必要的通信,从而减少入侵的发生。由于防火墙不可能阻止所有入侵行为,可使用入侵检测系统作为第二道防线,通过对进入网络的分组进行检测与深度分析,来发现疑似入侵行为的网络活动,并进行报警以便进一步采取相应措施。
8.1防火墙
防火墙(Firewall)属于一种访问控制技术,具体实现为一种可编程的特殊路由器,它把一个单位(机构或公司)的内部网络与其他网络(一般为因特网)进行安全隔离。
根据防火墙中配置的访问控制策略,某些分组允许通过防火墙,而某些分组则被禁止通过。访向控制策略由使用防火墙的单位根据自己的安全需要自行制定。
防火墙位于因特网和内部网络之间。防火墙的外面为因特网,防火墙的里面为内部网络。一般把防火墙里面的网络称为“可信网络”(Trusted Network),而把防火墙外面的网络称为“不可信网络”(Untrusted Network)。
8.1.1 防火墙设备
实现防火墙技术的设备一般有两种:分组过滤路由器和应用网关。
8.1.1.1 分组过滤路由器
分组过滤路由器是一种具有分组过滤功能的路由器,它根据所配置的分组过滤规则对出入内部网络的分组执行转发或丢弃(即分组过滤)。
分组过滤规则所采用的各参数来自分组的网际层和/或运输层首部中的某些字段的值,例如,网际层的源IP地址和目的IP地址、运输层的源端口和目的端口以及协议类型(TCP或UDP)等。
我们知道,TCP/IP应用层中的FTP使用运输层TCP的端口号为21(用于控制连接),如果在分组过滤规则中配置一条“将目的端口号为21的出分组(Outgoing Packet)进行阻拦”的规则,则本单位可信网络中的用户将无法从不可信的因特网中的所有FTP服务器下载文件。
通常,分组过滤规则以访问控制列表(Access Control List,ACL)的形式存储在分组过滤路由器中,网络管理人员可以通过命令行或图形界面来配置ACL中的规则。
上图给出了一个简单的ACL例子,规则1和2使得内网中的主机可以访问因特网中的各种Web服务器;规则3和4使得因特网中的主机可以访问内网中IP地址为192.168.1.252的电子邮件服务器;规则5则禁止因特网中IP地址为211.67.230.1的主机访问内网中的任何主机。
上述ACL所进行的分组过滤是无状态的,也就是独立地处理每一个分组。功能更强的分组过滤路由器还支持有状态的分组过滤,也就是要跟踪每个连接或会话的通信状态,并根据这些状态信息来决定是否转发分组。
从以上介绍可以看出,分组过滤路由器简单高效,对用户是透明的(用户感觉不到分组过滤路由器的存在)。然而,分组过滤路由器不能对应用层数据进行过滤。例如,不能禁止某个用户对某个特定网络应用进行某个特定的操作,也不支持应用层用户鉴别等。这些功能需要使用应用网关来实现。
8.1.1.2 应用网关
应用网关又称为代理服务器(Proxy Server),它可以实现应用层数据的过滤和高层用户的鉴别。所有出入网络的应用报文都必须通过应用网关。当用户通过应用网关访问内网或外网资源时,应用网关可以要求用户进行身份鉴别,然后根据用户身份对用户做出相应的访问控制。
当某个网络应用的客户进程向服务器发送一个请求报文时,该报文会被首先传送给应用网关,应用网关解析该报文,根据该报文中的应用层用户标识或其他应用层信息来判断该请求是否满足安全要求。如果满足安全要求,则应用网关会以客户进程的身份将该请求报文转发给服务器。如果不满足安全要求,则应用网关会丢弃该请求报文。例如,某种邮件网关在收到邮件时,除了检查邮件地址,还会检查其内容是否包含有禁用的敏感词,最终决定该邮件是否能通过邮件网关。
应用网关也有一些局限:
- 每种网络应用都需要一个专用的应用网关。当然,多个不同的应用网关可以运行在同一台主机上。
- 在应用层处理和转发报文,处理负担较重。
- 应用网关对应用程序是不透明的,用户需要在应用程序客户端指明应用网关的地址。
通常可将分组过滤路由器和应用网关这两种防火墙技术结合使用。
8.1.2 个人防火墙
之前介绍的防火墙又称为网络防火墙,其任务是保护内部网络的安全,主要由网络管理员进行配置和使用,普通的网络用户较少接触。
对于普通网络用户,使用更多的是个人防火墙(一般操作系统都自带功能较弱的防火墙)。
个人防火墙是一种安装在用户计算机中的应用程序,它对用户计算机的网络通信行为进行监控。很显然,个人防火墙不同于网络防火墙,个人防火墙仅保护单台计算机,并且由用户为其配置分组过滤规则,由于比较简单,一般无须网络管理员配置。
个人防火墙根据用户配置的分组过滤规则,允许或拒绝网络通信。
8.1.3 防火墙的局限性
尽管防火墙提高了内部网络的安全防护程度,但是它并不能解决所有的网络安全问题,主要有以下局限:
1)对防火墙的配置是否正确和完善,在很大程度上决定了防火墙可以发挥的安全防护作用。
2)防火墙对恶意代码(病毒、木马等)的查杀能力非常有限,因此不能有效地防止恶意代码通过网络的传播。这是因为查杀恶意代码的计算开销非常大,若提高防火墙的查杀力度,则会降低防火墙的处理速度,进而降低用户的网络带宽。
3)防火墙对于一些利用系统漏洞或网络协议漏洞进行的攻击是无法防范的。攻击者通过分组过滤规则中允许的端口对某个服务器的漏洞进行攻击,这对于一般的分组过滤路由器是无法防护的,即使使用应用网关,也必须具有能够识别该特定漏洞的应用网关才能阻断攻击。
4)防火墙技术自身存在不足。例如,分组过滤路由器不能防止IP地址和端口号欺骗,而应用软件自身也可能有软件漏洞而存在被渗透攻击的风险。
8.2 入侵检测系统
入侵检测系统(Intrusion Detection System,IDS)是在入侵已经开始但还未造成危害或在造成更大危害之前,及时检测到入侵并尽快阻止入侵的一种技术。
IDS对出入网络的分组执行深度检查,当检查到可疑分组时,会及时向网络管理员发出警报或进行阻断。由于IDS的误报率较高,因此一般情况下不建议对可疑分组进行自动阻断。
IDS能够检测端口扫描、拒绝服务DoS攻击、网络映射、恶意代码(蠕虫和病毒)、系统漏洞攻击等多种网络攻击。
IDS一般分为两种:基于特征的入侵检测系统和基于异常的入侵检测系统。
8.2.1 基于特征的入侵检测系统
基于特征的入侵检测系统需要维护一个已知各类攻击的标志性特征的数据库。
每个标志性特征就是一个与某种入侵活动相关联的行为模式或规则集,这些规则可能基于单个分祖的首部字段值或数据载荷中特定的比特串,又或者与一系列分组有关。
当IDS检测到与某种攻击特征匹配的分组或分组序列时,就判断可能出现了某种入侵行为。
被用于入侵检测的标志性特征必须具有很好的区分度,也就是说这种标志性特征只出现在攻击活动中,而在系统正常运行的过程中通常不会出现。因此,这些标志性特征一般由网络安全专家提供,由单位的网络管理员定制并将其加入到数据库中。
很显然,基于特征的IDS只能检测已知攻击,对于未知攻击则无法防范。
8.2.2 基于异常的入侵检测系统
基于异常的入侵检测系统通过观察正常运行的网络流量来学习正常网络流量的统计特性和规律。
当IDS检测到网络流量的某种统计规律不符合正常情况时,则判断可能发生了入侵行为。然而,区分正常流量和统计异常流量是非常困难的。现在很多研究致力于将机器学习方法应用于入侵检测,让机器自动学习某种网络攻击的特征或正常流量的模式。
这种智能的方法可以大大减小对网络安全专家的依赖。目前,大多数部署的IDS主要是基于特征的,有些IDS中也包含了某些基于异常的特征。
漏报率和误报率是衡量IDS效能的重要依据。如果漏报率比较高,则只能检测到少量入侵,给人以安全的假象。对于特定的IDS,可以通过调整某些参数或阈值来降低漏报率,然而这同时会增大误报率。误报率太大会导致大量的虚假警报,网络管理员需要花费大量时间分析警报信息,甚至会因为虚假警报太多而对警报“视而不见”,使IDS形同虚设。
9. 常见的网络攻击及其防范
9.1 网络扫描
网络扫描是获取攻击目标信息的一种重要技术。攻击目标信息包括目的主机的IP地址、操作系统类型、运行的程序及存在的漏洞等。在进行网络攻击之前,对攻击目标的信息掌握得越全面和具体,就越能有效合理地制定出攻击策略和攻击方法,进而提高网络攻击的成功率。
9.1.1 网络扫描的四种主要类型
网络扫描主要有四种类型:主机发现、端口扫描、操作系统检测和漏洞扫描。
9.1.1.1 主机发现
主机发现是指搜索要攻击的主机,这是对其进行攻击的前提。搜索要攻击的主机,实际上是要确定该目标主机的IP地址。
进行主机发现的主要方法是利用网际控制报文协议(ICMP)。我们知道,运行TCP/IP协议栈的每台主机(和路由器)都运行了ICMP。攻击者向主机发送ICMP查询报文,则主机会用ICMP应答报文进行响应,这样攻击者就知道了该主机正在运行。攻击者可以利用ping命令(应用层直接利用网际层ICMP实现的连通性测试工具)对某个IP地址范围内的所有IP地址进行连通性测试,来发现正在运行的目标主机。
为了防范ping扫描,可以配置防火墙不允许通过ICMP查询报文,也可以配置主机(或服务器或路由器)对ICMP查询报文不进行响应。
针对防火墙对ICMP查询报文进行阻断的情况,攻击者可能会向目标主机故意发送首部有错误的IP数据报,当目标主机收到这种IP数据报时会向攻击者发送ICMP差错报告报文。一般情况下,防火墙不会阻断ICMP差错报告报文,否则目标主机将失去进行ICMP差错报告的功能,而影响正常的网络通信。
9.1.1.2 端口扫描
在进行主机发现确定了要攻击的目标主机后,攻击者可以进一步通过端口扫描来获取目标主机上所有端口的工作状态,进而得出目标主机上开放了哪些网络服务。例如HTTP服务使用TCP的80端口,而DNS服务使用UDP的51端口。
由于活跃的TCP端口会对收到的TCP连接请求报文进行响应,因此攻击者可以通过尝试与某个目的端口建立TCP连接,来检测该TCP端口是否处于工作状态。
对于无连接的UDP,攻击者向某个目的端口发送UDP用户数据报,如果该目的端口处于工作状态,则会收到该UDP用户数据报,由于该UDP用户数据报是攻击者发送的,其内容一般不可能满足接收方的要求,因此接收方不会做出任何响应。但如果该目的端口处于关闭状态,则目标主机会给攻击者发送“端口不可达”的ICMP差错报告报文,攻击者收到ICMP差错报告报文后就可推断出该UDP端口处于关闭状态。
9.1.1.3 操作系统检测
不同的操作系统所存在的安全漏洞可能有很多不同。要利用这些安全漏洞进行攻击,首先必须检测远程目标主机所使用的操作系统类型,通常有三种方法:
- 获取操作系统旗标(Banner)信息:在客户机与服务器建立连接的过程中,服务器往往会返回各种独特的欢迎信息。攻击者可根据这些信息来推断出服务器的操作系统类型。
- 获取主机端口状态信息:操作系统通常会默认开启一些常用的网络服务,这些服务会打开各自特定的端口进行网络监听。而不同操作系统默认开启的网络服务可能不同,因此可对目标主机进行端口扫描,根据端口扫描结果来推断目标主机的操作系统类型。
- 分析TCP/IP协议栈指纹:尽管RFC文档严格规定了各种协议的三要素(语法、语义和同步),但RFC并没有规定各种协议的具体实现。同一个协议在不同操作系统中的实现细节可能会有所不同,通过分析协议数据单元或协议交互过程中的这些细节,可以推断出目标主机的操作系统类型。
9.1.1.4 漏洞扫描
利用操作系统检测和端口扫描,可以获知目标主机上运行的操作系统类型和网络应用服务。根据操作系统类型和网络应用服务,可在网络安全机构提供的漏洞库中查找匹配的漏洞,然后根据不同漏洞的具体细节向目标主机发送探测分组,并从返回的结果进一步判断目标主机是否存在可利用的漏洞。
上述过程属于攻击者基于网络的漏洞扫描,而用户自己可以进行基于主机的漏洞扫描,以便及时修补漏洞。显然,漏洞扫描对于用户和攻击者都有重要意义。
9.1.2 网络扫描的防范
为了防范上述各种类型的网络扫描,可以采取以下主要措施:
- 仅打开确实需要使用的端口,关闭闲置和危险端口。
- 限制因特网(不可信网络)中的主机主动与内部网络(可信网络)中的主机进行通信。
- 设置防火墙,根据安全要求设置分组过滤策略(例如过滤不必要的ICMP报文)。
- 使用入侵检测系统及时发现网络扫描行为和攻击者IP地址,配置防火墙对来自该地址的分组进行阻断。
网络扫描的行为特征是比较明显的,例如,在短时间内对某一IP地址范围内的每个地址和端口发起连接等。
目前,大部分防火墙都具有识别简单的网络扫描行为的功能。然而,很多攻击者也在研究如何隐蔽自己的网络攻击行为,例如,利用虚假源地址、减缓扫描速度、动态调整扫描顺序、分布式扫描等。这些对防火墙和IDS都提出了更高的要求。
9.2 网络监听
9.2.1 网络监听的常见类型
网络中传输的数据大部分都是明文形式。如果攻击者对网络进行监听并截获了包含有大量明文信息的一系列分组,则可从这些分组中直接分析出账号、密码等敏感信息。
常见的网络监听类型有:分组嗅探器、交换机毒化攻击和ARP欺骗。
9.2.1.1 分组嗅探器
分组嗅探器(Packet Sniffer)是一种网络监听工具软件,它运行在网络中的某台主机上,被动接收所有出入该主机的网络适配器(网卡)的数据链路层协议单元(即帧)。
如果将网络适配器配置为混杂方式,网络适配器就会接收所有进入自己接口的MAC帧,而不管这些帧的目的MAC地址是否指向该网络适配器。
对于使用集线器互连的共享式局域网(或802.11无线局域网),只要分组嗅探器软件所在主机中的网络适配器设置为混杂方式,就可以监听到网络中的所有分组。然而,现在的局域网基本上都是采用交换机互连而成的交换式以太网,如果网络中的以太网交换机已经通过被动自学习知道了网络中各主机与交换机自身各接口的对应关系,则各主机通常只能接收到发送给自己的单播帧或广播帧。这样该网络中某主机中的分组嗅探器就只能收到发送给该主机的分组,而无法收到其他分组。
为了能够捕获到网络中的其他分组就必须采用一些特殊手段,例如交换机毒化攻击和ARP欺骗。
9.2.1.2 交换机毒化攻击
在使用以太网交换机的交换式以太网中,攻击者向以太网交换机发送大量的伪造不同源MAC地址的帧。以太网交换机收到这样的帧进行自学习,就把帧首部中伪造的源MAC地址写入自己的转发表中。由于这种伪造源MAC帧的数量巨大,因此很快就会使以太网交换机的转发表填满,使得真正需要保存的MAC地址被更新淘汰。此时,如果交换机收到正常的单播帧,由于在交换机的转发表中找不到这些单播帧的目的MAC地址,交换机就不得不广播这些单播帧。这样,网络中某主机中的分组嗅探器就能监听到网络中其他主机间的通信了。
9.2.1.3 ARP欺骗
从ARP的工作原理可知,ARP存在ARP欺骗的问题。
- 攻击者C希望监听主机A和B之间的通信。于是C向A发送ARP报文,声称自己是B;而同时又向B发送ARP报文,声称自己是A。
2)主机A和B就都被攻击者C欺骗了,A误认为C就是B,B误认为C就是A。
3)主机A发送给B的分组就会发送给攻击者C,C收到后再转发给B。
4)主机B发送给A的分组也会发送给攻击者C,C收到后再转发给A。
5)主机A和B之间的通信完全被攻击者C监听,而A和B却不知道C的存在。
实际上,ARP欺骗是之前曾介绍过的中间人攻击。设想一下,如果网络中的所有主机都被攻击者进行了ARP欺骗,则攻击者就将自己伪装成了路由器,从而可以监听到网络中的所有通信,这对网络安全造成了极大的危害。
9.2.2 网络监听的防范
为了防范上述各种类型的网络监听,可以采取以下主要措施:
1)使用交换机替代集线器,这不但可以提高网络性能,还能使攻击者在交换机环境中更难实施监听。目前,大多数交换机都具备一些安全功能。例如防止交换机毒化攻击。
2)禁用交换机的自学习功能,将IP地址、MAC地址与交换机的接口进行静态绑定,这样可以限制非法主机的接入,使攻击者无法实施交换机毒化攻击,也使ARP欺骗难以实施。
3)对于ARP欺骗,主机或路由器可以仅使用静态ARP表,而不再依据ARP请求报文或响应报文动态更新。
4)划分VLAN以限制攻击者的监听范围,因为分组嗅探只能在单个局域网范围内进行。
5)防范网络监听的最有效的方法是进行数据加密和实体鉴别技术。
9.3 拒绝服务攻击
9.3.1 拒绝服务攻击的常见类型
拒绝服务(DoS)攻击,它是最容易实现却又最难防范的攻击手段。
常见的DoS攻击类型有:基于漏洞的DoS攻击、基于资源消耗的DoS攻击和分布式DoS攻击。
9.3.1.1 基于漏洞的DoS攻击
基于漏洞的DoS攻击主要利用网络协议漏洞或操作系统漏洞。攻击者向目标系统发送一些特殊分组,使目标系统在处理这些分组时出现异常,甚至崩溃。这种攻击又称为剧毒包或杀手包(Killer Packet)攻击。
著名的“死亡之ping”攻击就属于基于漏洞的DoS攻击,其基本原理是攻击者向目标系统发送超长的ICMP回送请求报文,致使将其封装成IP数据报后,IP数据报的长度超过了RFC标准中规定的最大长度(65535字节),目标系统在接收这种IP数据报时会发生内存分配错误,导致堆栈崩溃,系统死机。
防范基于漏洞的DoS攻击的最有效方法就是及时为操作系统更新安全漏洞补丁。
9.3.1.2 基于资源消耗的DoS攻击
基于资源消耗的DoS攻击是DoS攻击中采用最多的一种攻击。攻击者通过向目标系统发送大量的分组,从而耗尽目标系统的资源,致使目标系统崩溃而无法向正常用户提供服务。
“TCP SYN洪泛”攻击就是一种典型的基于资源消耗的DoS攻击。攻击者伪造大量不同的IP地址,并以这些IP地址向目标TCP服务器发送大量的TCP连接请求报文(即TCP SYN报文)。目标TCP服务器不能区分正常的TCP连接请求报文和恶意的TCP连接请求报文,只能为每个TCP连接请求建立TCP连接,为其分配缓存等相关资源,并向这些伪造的IP地址发送TCP连接请求确认报文段(即TCPSYN+ACK报文段)进行响应。然而,攻击者并不会对TCP连接请求确认报文段发送普通的确认报文段(即TCPACK报文段)进行响应,这样就无法完成TCP建立连接的“三报文握手”过程。其结果就是导致TCP服务器维护大量未完成的TCP连接,当这些半连接的数量超过了系统允许的上限时,系统就不会再接受任何TCP连接请求。这将导致TCP服务器无法为正常客户提供服务。
与“TCPSYN洪泛”攻击思想类似的另一种攻击方法,就是向目标主机发送大量的属于不同IP数据报的分片,但是不会发送完构成任何一个IP数据报的所有分片。这将导致目标主机一直缓存已收到的部分分片,并一直等待收齐一个IP数据报的所有分片。很显然,这将耗费目标主机越来越多的系统缓存,直到系统崩溃。
还有一种被称为反射攻击的间接攻击方法,例如Smurf攻击。Smurf攻击是一种病毒攻击,以最初发动这种攻击的程序“Smurf”来命名。攻击主机向其所在网络发送大量ICMP回送请求报文,封装该请求报文的IP数据报的目的IP地址为该网络的广播地址,而源地址被伪造成被攻击的目标主机的IP地址,这将导致该网络中的所有主机作为反射节点,将ICMP回送回答报文作为响应都发往被攻击的目标主机。这可能会引起网络拥塞或导致目标主机崩溃而无法对外提供服务。很显然,反射攻击具有放大攻击流量的功能,因为攻击者发送的一个分组经网络中所有其他主机的反射后将变成多个分组,网络中的主机越多,这种放大效果越好。
9.3.1.3 分布式DoS攻击
我们知道,基于资源消耗的DoS攻击需要攻击者向目标主机发送大量的分组,然而单靠一个攻击源一般很难到达效果。在分布式DoS(DDoS)攻击中,攻击者会首先通过嗅探口令、漏洞渗透、木马等非法入侵手段来控制因特网上的大量主机,然后在每个被控制的主机中安装并运行一个恶意从属程序,该恶意从属程序静默等待攻击者的主控程序的指令。当被控主机达到一定数量后,攻击者就通过主控程序向这些被控主机中的恶意从属程序发出攻击指令,指示这些恶意从属程序同时向目标系统发起DoS攻击。这种DDoS攻击往往能产生巨大的流量来耗尽目标系统的网络带宽,或导致目标系统资源耗尽而崩溃。
另外,很多DDoS攻击还会结合反射攻击技术进一步将攻击流量进行放大。
9.3.2 DoS攻击的防范
到目前为止,还没有一种能够完全有效防范DoS攻击的技术和方法,尤其是利用大规模流量进行攻击的DDoS攻击更难以防范。
目前防范DoS攻击的主要方法有以下几种:
1)利用防火墙对恶意分组进行过滤。例如,将防火墙配置为过滤掉所有ICMP回送请求报文可以防范Smurf攻击。然而对于像“TCPSYN洪泛”这类攻击,一般很难区分哪些TCP连接请求报文是恶意的。某些防火墙可以动态检测到指定TCP服务器上半连接的数量,当该数量超过预设的阈值时,防火墙将丢弃向该TCP服务器发送的TCP连接请求报文。
2)使用支持源端过滤的路由器。通常参与DoS攻击的分组的源IP地址都是伪造的,如果能够防止IP地址伪造,就能够防止此类的DoS攻击。使用支持源端过滤的路由器可以尽量减少IP地址伪造的现象。这种路由器会检查来自其直连网络的分组的源IP地址,如果源IP地址与该网络的网络前缀不匹配,则路由器丢弃该分组。然而这种简单的源端过滤并不能彻底消除IP地址伪造现象,因为攻击者仍然可以冒充因特网服务提供者的网络中的任何一台主机。因此,如果要通过源端过滤来防范DoS攻击,则必须使因特网上所有的路由器都具有源端过滤的功能。然而目前源端过滤并不是路由器的强制功能,支持源端过滤的路由器还是少数。
3)追溯DoS攻击源。路由器对通过自己的IP数据报的首部进行标记,通过该标记可以追溯到DoS攻击源。一旦确定了参与攻击的源主机,就把它隔离起来。然而,这个过程通常很慢,并且需要人工千预,因此目前主要用于事后追查以及为采取相应的法律手段提供依据。
4)进行DoS攻击检测。入侵检测系统可以通过分析分组首部特征和流量特征来检测正在发生的DoS攻击并发出警报。及时检测到DoS攻击可将攻击所造成的危害降到最低。文章来源:https://www.toymoban.com/news/detail-826773.html
上述措施并不能彻底防范DoS攻击,DoS攻击是目前最容易实现却又最难防范的攻击手段。文章来源地址https://www.toymoban.com/news/detail-826773.html
到了这里,关于计算机网络之网络安全的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!