【转载】http和网络安全
链接:https://www.nowcoder.com/discuss/445029
来源:牛客网
结合自顶向下一书重写了之前的 HTTP 和网络安全的内容
HTTP
HTTP 概况
HTTP 即超文本传输协议,是 Web 的应用层协议。HTTP 由两个程序实现,一个客户程序和一个服务器程序,客户程序和服务器程序运行在不同的端系统中,通过交换 HTTP 报文进行会话。HTTP 定义了这些报文的结构以及客户和服务器进行报文交换的方式,当用户请求一个 Web 页面时,浏览器向服务器发出对该页面中所包含对象的 HTTP 请求报文,服务器接收到请求并用包含这些对象的 HTTP 响应报文进行响应。
HTTP 使用 TCP 作为它的支撑运输协议,HTTP 客户首先发起一个与服务器的 TCP 连接,一旦连接建立,该浏览器和服务器进程就可以通过套接字访问 TCP。客户端的套接字接口是客户进程与 TCP 连接之间的***器端的套接字接口则是服务器进程与 TCP 连接之间的门。客户向它的套接字接口发送 HTTP 请求报文并从它的套接字接口接收 HTTP 响应报文,类似的,服务器从它的套接字接口接收 HTTP 请求报文并向它的套接字接口发送 HTTP 响应报文。一旦客户向它的套接字接口发送一个 HTTP 请求报文,该报文就脱离了客户控制并进入 TCP 的控制,TCP 为 HTTP 提供可靠的数据传输服务,因此一个客户进程发出的每个 HTTP 请求报文最终都能完整地到达服务器,服务器进程发出地每个 HTTP 响应报文最终也可以完整地到达客户。这里体现了分层体系结构的优点,HTTP 协议不需要担心数据丢失,也不需要关注 TCP 从网络的数据丢失和乱序中如何恢复。
HTTP 是一种无状态的协议,服务器向客户发送被请求的文件,而不存储任何关于该客户的状态信息。假如某个客户在短时间内连续两次请求同一个对象,服务器并不会因为刚刚为该客户做出了响应就不再响应,而是重新进行响应。
非持续连接和持续连接
依据每个请求/响应对经过一个单独的 TCP 连接还是相同的 TCP 连接发送,可以将连接划分为非持续连接和持续连接。HTTP 默认使用持续连接,但是也可以配置成使用非持续连接。
非持续连接
使用非持续连接时,从服务器向客户传送一个包含了一个 HTML 文件和 10 个 JPG 对象的 Web 页面步骤:
① HTTP 客户进程在端口号 80 发起一个到服务器的 TCP 连接,并经它的套接字向服务器发送一个 HTTP 请求报文。② HTTP 服务器进程经它的套接字接收请求报文,从其存储器中检索出请求对象,在一个 HTTP 响应报文中封装对象,并通过套接字向客户发送响应报文。③ HTTP 服务器进程通知 TCP 断开该 TCP 连接,直到 TCP 确认客户已经完整接收到响应报文才会实际断开连接。④ HTTP 客户接收到响应报文,客户从报文中提取出 HTML 文件,得到多个 JPG 图像的引用,并对每个引用的 JPG 图像对象重复前三个步骤。
每个 TCP 连接会在服务器发送一个对象后关闭,即该连接并不为其他的对象而持续下来。每个 TCP 连接只传输一个请求报文和一个响应报文,假如请求一个 HTML 文件和其中包括的 10 个 JPG 图像就要产生 11 个 TCP 连接。
在非持续连接中,每次请求文件到接收响应大约需要花费两个 RTT 加上服务器传输文件的时间,RTT 就是往返时间,指一个短分组从客户到服务器然后再返回客户所发送的时间。其中三次握手的前两个部分占用一个 RTT,三次握手的第三个确认部分向服务器发送了请求报文,服务器接收到之后做出响应,这用去了另一个 RTT。
持续连接
非持续连接有很多缺点。第一,必须为每个请求的对象建立和维护一个新的连接,对于每个连接,在客户和服务器中都要分配 TCP 的缓冲区和保持 TCP 变量,这给 Web 服务器带来了很大负担。第二,每一个对象需要消耗两倍的 RTT,一个用于创建 TCP,一个用于请求和接收对象。
在 HTTP1.1 中使用了持续连接,服务器在发送响应后保持该 TCP 连接打开。在相同的客户与服务器之间,后续的请求和响应报文能够通过相同的连接进行传送。在使用持续连接的情况下,请求一个完整的 Web 页面可以使用单个持续的 TCP 连接,例如之前所说的包含一个 HTML 文件和 10 个 JPG 对象的 Web 页面就只需要一个 TCP 连接而不是 11 个。
HTTP 报文格式
HTTP 报文有两种,分为请求报文和响应报文。
请求报文
HTTP 请求报文的第一行叫做请求行,其后继的行叫做首部行。请求行有三个字段,包括方法、URL 和 HTTP 版本。方法包括了 GET、POST、HEAD、PUT 和 DELETE 等。绝大部分的 HTTP 请求报文使用 GET 方法,当使用 GET 方法时,在 URL 字段中会带有请求对象的标识。
首部行指明了对象所在的主机,其实已经存在 TCP 连接了,但是还需要首部行提供主机信息,这时 Web 代理高速缓存所要求的。通过包含Connection:close的首部行,可以告诉服务器不要麻烦地使用持续连接,它要求在发送完响应后就关闭连接。User-agent可以用来指明用户代理,即向服务器发送请求的浏览器类型,服务器可以有效地为不同类型的用户代理发送实际相同对象的不同版本。
在首部行之后有一个空行,后面跟着的是实体。使用 GET 方法时实体为空,而使用 POST 方法时才会使用实体。当用户提交表单时,HTTP 客户通常使用 POST 方法,使用 POST 方法时用户仍可以向服务器请求一个 Web 页面,但 Web 页面的特定内容依赖于用户在表单字段中输入的内容。如果使用 POST 方法,则实体中包含的就是用户在表单字段的输入值。不管表单不是必须使用 POST 方法,也可以使用 GET。
HEAD 方法类似于 GET,当服务器收到一个使用 HEAD 方法的请求时,将会用一个 HTTP 报文进行响应,但是并不返回请求对象。通常开发者使用 HEAD 方法进行调试跟踪。PUT 方法常用于上传对象到指定的 Web 服务器上指定的目录,DELETE 方法允许用户或应用程序删除 Web 服务器上的对象。
响应报文
响应报文包括状态行、首部行和实体。状态行有三个字段,协议版本、状态码和对应的状态信息。实体是报文的主要部分,即所请求的对象本身。
服务器通过首部行来告诉浏览器一些信息。Connection:close可以告诉客户发送完报文后将关闭该 TCP 连接。Date是首部行指示服务器发送响应报文的日期和时间,这个时间不是对象创建或修改的时间,而是服务器从它的文件系统中检索到该对象,将该对象插入响应报文并发送的时间。Server指明了服务器的类型,类似于请求报文中的User-agent。
状态码及其相应的短语指示了请求的结果,一些常见的状态码和相关短语如下:
状态码 | 短语 | 含义 |
---|---|---|
200 | OK | 成功响应 |
301 | Moved Permanently | 请求的对象已经被永久转移了,新的 URL 定义在响应报文的 Location 首部行,客户将自动获取新的 URL。 |
302 | Found | 与301类似,但资源只是临时被移动,客户端应继续使用原有 URL。 |
400 | Bad Request | 一个通用的差错代码,标识该请求不能被服务器理解。 |
401 | Unauthorized | 未认证,缺乏相关权限。 |
403 | Forbidden | 服务器理解客户端的请求,但是拒绝执行。 |
404 | Not Found | 被请求的文档不在服务器上,有可能因为请求 URL 出错。 |
405 | Method Not Allowed | 客户端中请求的方法被禁止,例如限制 POST 方式但使用了 GET 访问。 |
500 | Internal Server Error | 服务器内部错误,无法完成请求。 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应。 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。 |
504 | Gateway Timeout | 充当网关或代理的服务器,未及时从远端服务器获取请求。 |
505 | HTTP Version Not Supported | 服务器不支持请求报文使用的 HTTP 协议版本。 |
cookie
HTTP 的无状态性简化了服务器的设计,并且提高了 Web 服务器的性能,使其可以同时处理大量的 TCP 连接。但是一个 Web 站点通常希望能够识别用户,可能是为了限制用户的访问,也可能为了把内容与用户身份关联起来,为此 HTTP 使用了 cookie,cookie 是一种客户端的会话技术,允许站点对用户进行追踪。
cookie 技术有四个组件
① 在 HTTP 响应报文中的一个 cookie 首部行。② 在 HTTP 请求报文中的一个 cookie 首部行。③ 在用户端系统中保留有一个 cookie 文件,并由用户的浏览器关联。④ 位于 Web 站点的一个后端数据库。cookie 的工作流程:当客户通过浏览器第一次访问某个站点时,该 Web 站点将产生一个唯一识别码,并以此作为索引在它的后端数据库中产生的一个表项。接下来服务器会用一个包含Set-cookie首部的 HTTP 响应报文对浏览器进行相应,当浏览器收到后将其添加到自己管理的 cookie 文件中,在下次访问该站点时,请求报文的首部行中就会包括这个识别码,尽管浏览器不知道客户是谁,但是可以确定是同一个客户进行了访问。
cookie 和 session 的区别
① cookie 只能存储 ASCII 码字符串,而 session 则可以存储任何类型的数据,因此在考虑数据复杂性时首选session。② session 存储在服务器,而 cookie 存储在客户浏览器中,容易被恶意查看。如果非要将一些隐私数据存在 cookie 中,可以将 cookie 值进行加密,然后在服务器进行解密。
Web 缓存
Web 缓存器也叫代理服务器,它是能够代表初始 Web 服务器来满足 HTTP 请求的网络实体。Web 缓存器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象副本。可以配置用户的浏览器,使得用户所有的 HTTP 请求首先指向 Web 缓存器。客户通过 Web 缓存器请求对象的步骤如下:
① 浏览器创建一个到 Web 缓存器的 TCP 连接,并向 Web 缓存器中的对象发送一个 HTTP 请求。② Web 缓存器进行检查,查看本地是否存储了该对象副本。如果有,Web 缓存器就向客户浏览器用 HTTP 响应报文返回该对象。③ 如果 Web 缓存器中没有该对象,它就打开一个与该对象的初始服务器的 TCP 连接,Web 缓存器在这个连接上发送一个请求并接受响应。④ Web 缓存器接收到响应后,在本地存储空间存储一份副本,并向客户的浏览器用 HTTP 响应报文发送该副本。
Web 缓存器既是服务器又是客户,当它接受浏览器的请求并响应时,它是一个服务器,当他向初始服务器发出请求并接收响应时,它是一个客户。在因特网上部署 Web 缓存器有两个原因,首先,Web 缓存器可以大大减少对客户请求的响应时间,特别是客户与初始服务器之间的带宽远低于客户与 Web 缓存器之间的带宽时更是如此。其次,Web 缓存器可以大大减少一个机构的接入链路到因特网的通信量,通过减少通信量,机构就不必基于增加带宽,可以降低费用。
HTTPS
HTTP 存在的问题
HTTP 没有密码加密,无法保证通信内容不被窃听,攻击者可以截取客户发送的数据并得到他的信息。
HTTP 没有报文完整性验证,无法确保通信内容在传输过程中不被改变,攻击者可以篡改客户通信内容。
HTTP 没有身份鉴别,无法让通信双方确认对方的身份,攻击者可以伪装成客户或者服务器。
加密原理
HTTPS 即 HTTP over SSL,在 HTTP 传输上增加了 SSL 安全***。SSL 是安全套接字层,通过采用机密性、数据完整性、服务器鉴别以及客户鉴别来强化 TCP,主要用于为发生在 HTTP 之上的事务提供安全性。SSL 会对数据进行加密并把加密数据送往 TCP 套接字,在接收方,SSL 读取 TCP 套接字中的数据并解密,然后把数据交给应用层。HTTPS 采用混合加密机制,使用非对称加密传输对称密钥来保证传输过程的安全性,之后使用对称加密进行通信来保证通信过程的效率。
HTTPS 的传输过程主要分为两部分:通过 SSL 握手建立安全的 HTTPS 通道和在安全的通道上进行数据传输,SSL 握手的步骤如下:
① 客户发送它支持的密码算法列表,以及一个客户的不重数,不重数就是在一个协议的生存期只使用一次的数。
② 服务器从该列表中选择一种对称加密算法(例如 AES),一种公钥加密算法(例如 RSA)和一种报文鉴别码算法。服务器把它的选择以及证书和一个服务器不重数返回给客户。
③ 客户通过 CA 提供的公钥验证该证书,验证成功后提取服务器的公钥,生产一个前主密钥 PMS,用服务器的公钥加密该 PMS,并将加密的 PMS 发送给服务器。
④ 客户和服务器独立地从 PMS 和不重数中计算出仅用于当前 SSL 会话的主密钥 MS,然后该 MS 被切片以生成两个密码和两个报文鉴别码密钥。自从以后,客户和服务器之间发送的所有报文均被加密和鉴别(使用报文鉴别码)。
⑤ 客户和服务器分别发送所有握手报文的一个报文鉴别码。这一步是为了使握手免受篡改危害,在第一步中客户提供的算法列表是以明文形式发送的,因此可能被攻击者截获并删除较强的算法。当客户发送一个级联它以及发送和接收的所有握手报文的报文鉴别码,服务器能够比较这个报文鉴别码和它已经接受和发送的握手报文的报文鉴别码,如果不一致就终止连接。类似的,客户也可以通过服务器发送的报文鉴别码来检查一致性。
第一步和第二步中的不重复数用于防止重放攻击,每个 TCP 会话使用不同的不重复数就可以使加密密钥不同,当收到重放的 SSL 记录时,该记录无法通过完整性检查,假冒的电子事务不会成功。
当结束 SSL 会话时,需要在类型字段中指出该记录是否是用于终止 SSL 会话的。通过包含这样一个字段,如果客户或服务器在收到一个关闭 SSL 记录之前突然收到了一个 TCP FIN,就知道遭受了截断攻击。
网络安全
网络安全主要探讨的问题是攻击者如何攻击计算机网络,以及如何防御这些攻击,或者如何事先预防这样的攻击。
网络攻击
计算机网络面临的威胁主要有被动攻击和主动攻击。
被动攻击指攻击者从网络上窃听他人的通信内容,也叫截获。在被动攻击中,攻击者只是观察和分析某一协议数据单元 PDU 而不干扰信息流。攻击者可以通过观察 PDU 的协议控制信息部分,了解正在通信的协议的地址和身份,通过研究 PDU 的长度和发送频度,了解所交换的数据的某种性质。这种攻击又叫做流量分析。
主动攻击包括:
-
篡改
攻击者篡改网络上传输的报文,包括彻底中断传送的报文,甚至把完全伪造的报文发给接收端,这种攻击方式也叫做更改报文流。
-
恶意程序
① 计算机病毒,能够传染其他程序的程序,主要通过修改其他程序来把自身或自身的变种复制进去完成。② 计算机蠕虫,通过网络通信能把自己从一个结点发往另一个节点并且自动启动运行的程序。③ 特洛伊木马,它执行的功能并非声称的功能而是恶意程序,例如一个编译程序除了完成编译任务外还偷偷地复制源程序。④ 逻辑炸弹,当运行环境满足某种特殊条件时就会执行特殊功能的程序,例如当日期为 22 号且为周三的时候就会删除所有文件。⑤ 后门入侵,指利用系统实现中的漏洞通过网络入侵系统。⑥ 流氓软件,一种未经用户同意就在用户计算机上安装并损害用户利益的软件。
-
拒绝服务DoS
DoS 攻击使得网络、主机或其他基础设施部分不能由合法用户使用。Web 服务器、电子邮件服务器、DNS 服务器和机构网络都能够成为 DoS 攻击的目标。大多数 DoS 攻击属于以下三种情况:① 弱点攻击,指向一台目标主机上运行的易受攻击的应用程序或操作系统发送制作精细的报文,如果适当顺序的多个分组发送给一个易受攻击的应用程序或操作系统,该服务器可能会停止运行甚至崩溃。② 带宽洪泛,指攻击者向目标主机发送大量的分组,分组数量之多使得目标的接入链路变得阻塞,使合法的分组无法到达服务器。③ 连接洪泛,指攻击者在目标主机中创建大量的半开或全开 TCP 连接,主机因这些伪造的连接而陷入困境,并停止接受合法的连接。
-
ARP欺骗
在使用以太网交换机的网络中,攻击者向某个以太网交换机发送大量的伪造源 MAC 地址,以太网交换机收到这样的帧就把虚假的 MAC 源地址填入到交换表中,由于伪造的数量很大很快就填满了表,导致以太网交换机无法正常工作。
对于被动攻击可以采用各种数据加密技术,对付主动攻击则需要将加密技术与适当的鉴别技术相结合。
安全的计算机网络具有以下特性:
-
机密性
仅有发送方和希望的接收方能够理解报文传输的内容,因为窃听者可以截获报文,这要求报文必须进行加密,使截取而都报文无法被截获者理解。为了使网络具有保密性,需要使用各种密码技术。
-
报文完整性
通信内容在传输过程中需要被确保未被恶意篡改或意外改动。
-
端点鉴别
发送方和接收方都应该能证实通信过程中的另一方,以确信通信的另一方确实具有其声称的身份。在实际应用中,报文完整性和端点鉴别往往是不可分割的,因为假设通过了端点鉴别保证了通信双方的身份却没有通过报文鉴别保证报文的完整性是没有意义的。
-
运行安全性
几乎所有机构都有与互联网相连的网络,这些网络都因此具有潜在的安全问题。需要通过访问控制来确保网络的安全性,防火墙位于机构和公共网络之间,控制接入和来自网络的分组;入侵检测系统指需深度分组检查任务,向网络管理员发出有关可疑活动的警告。
密码技术
密码技术使发送方可以伪装数据,接收方需要从伪装的数据中恢复出初始数据,而入侵者不能从截获到的数据中获得任何信息。报文的最初形式被称为明文,在使用加密算法加密后得到的加密报文被称为密文。密码体制分为两种,对称密钥密码体制和公开密钥密码体制。
对称密钥密码体制使用相同的加密密钥和解密密钥,对称加密的运算速度快,但是安全性差,因为在密钥传输的过程中可能会被截获。数据加密标准 DES 属于对称密码密钥,这种密码的保密性仅仅取决于对密钥的保密,而算法是公开的,之后被更加安全的高级加密标准 AES 所取代。
公开密钥密码体制使用公钥进行加密,私钥进行解密,其中公钥是任何人都可以得知的,而私钥是通信双方所独有的。非对称加密的运算速度慢,但是安全性好。最常见的公钥加密算法是 RSA,它使用两个大素数 p 和 q 来生成密钥,p 和 q 的值越大,破解的难度就越大,但是执行加密和解密的时间也就越长,RSA 实验室推荐 p 和 q 的乘积为 1024 的数量级。
在使用对称密钥时,由于双方使用同样的密钥,因此在通信信道上可以进行一对一的双向保密通信,每一方既可以用该密钥加密明文并发送给对方,也可以接收密文用同一密钥解密。这种保密通信仅限于持有此密钥的双方。但在使用公开密钥时,在通信信道上可以是多对一的单向保密通信,可以同时有很多客户利用公钥对自己的报文加密后发送给某个服务器,服务器利用其私钥可以对收到的密文一一解密,但如果是反方向则是行不通的,例如在网购时很多客户都向同一个网站发送各自的信用卡信息。
数字签名
数字签名的作用
① 报文鉴别:接收者能够核实发送者对报文的签名,也就是说接收者可以确认报文发送方的身份。
② 报文完整性:接收者可以确信收到的数据和发送者发送的完全一样并且没有被篡改过。
③ 不可否认:发送者事后不能抵赖对报文的签名。
实现原理
有多种实现数字签名的方法,但采用公钥算法要比采用对称密钥算法更容易实现。为了进行签名,会首先用私钥对报文进行 D 运算得到某种不可读的密文,为了核实签名,接收方会利用发送方的公钥进行 E 运算还原出明文。任何人都可以用发送方的公钥还原出明文,因此这种通信方式并不是为了保密,而是为了进行签名和核实签名,即确认发送方的身份。
数字签名实现报文鉴别:除了发送方之外没有人持有其私钥,因此无法可以产生发送方才能产生的密文。
数字签名保证报文完整性:如果其他人篡改过密文,那么解密出的明文就会不可读,就知道收到的报文被篡改过。
数字签名保证不可否认:如果发送方抵赖发送过报文,接收方可以把初始报文和密文发送给公证的第三者,第三者通过公钥很容易证实发送方确实发送过报文。
公钥认证
攻击者可能会发送使用自己私钥加密的密文和自己的公钥来伪造发送方的身份,该问题通过 CA 解决,发送方在发送数据时也会发送 CA 签署的证书,接收方会利用 CA 的公钥来核对发送方证书的合法性并提取发送方的公钥。
CA 即认证中心,将公钥与特定的实体绑定, 它的职责就是使识别和发行证书合法化。CA 主要有两个作用:① CA 认证一个实体(一个人、一台路由器等)的真实身份。② 一旦 CA 认证了某个实体的身份,CA 会生成一个将其身份和实体的公钥绑定起来的证书,这个证书包含了这个公钥和公钥所有者全局唯一的身份标识信息(例如一个人的名字或一个 IP 地址),由 CA 对这个证书进行数字签名。
报文鉴别
报文鉴别就是鉴别收到的报文确实是发送方发送的,而不是别人伪造或篡改的。数字签名就可以实现报文鉴别,但是数字签名有一个很大的缺点,就是对较长的报文进行数字签名时会使计算机增加非常大的负担,因为需要较长时间的运算。有一种相对简单的报文鉴别方式,就是密码散列函数。在密码学中的散列函数称为密码散列函数,最重要的特点就是:要找到两个不同的报文,它们具有相同的密码散列函数输出,在计算上是不可行的,也就是说密码散列函数实际上是一种单向函数。
使用散列函数进行报文鉴别的原理
通信双方需要共享一个密钥 k ,发送方生成报文 m,用 k 级联 m 生成 m+k,并使用 SHA-1 或 MD5 这样的散列函数计算 m+k 的散列值 h,这个散列值就被称为报文鉴别码 MAC。发送方会将 MAC 附加到报文 m 上,生成一个扩展报文,并将该扩展报文发送给接收方。接收方接到扩展报文后,由于知道共享密钥 k,因此可以计算出报文鉴别码,如果计算出的报文鉴别码和 h 相等就可以得出一切正常的结论。
除了共享密钥,还可以使用公钥加密。发送方可以利用自己的私钥进行散列运算,接收方利用发送方的公钥进行还原。这种方法得到的扩展报文是不为伪造且不可否认的,因为攻击者没有发送方的私钥,无法伪造出发送方发出的报文。
端点鉴别
端点鉴别就是一个实体经过计算机网络向另一个实体证明其身份的过程,实体可以是一个人也可以是一个进程。端点鉴别主要通过鉴别协议 ap 来实现,鉴别协议通常在两个通信实体运行其他协议之前运行。鉴别协议首先建立相互满意的各方标识,仅当鉴别完成之后各方才继续下面的工作。
鉴别协议 ap1.0
发送方直接发送一个报文说明自己的身份,缺陷很大,攻击者可以任意伪造。
鉴别协议 ap2.0
发送方有一个总是用于通信的 IP 地址,接收方可以验证携带鉴别报文的 IP 数据报的源地址和发送方经常使用的 IP 地址是否匹配来进行鉴别。但存在 IP 欺骗的可能性,攻击者也可以伪造源 IP 地址。
鉴别协议 ap3.0
进行鉴别的经典方法是使用秘密口令,口令是鉴别者和被鉴别者之间的一个共享秘密。接收方会要求发送方提供口令来进行验证,但这种方式依旧不是安全的,因为攻击者可能会通过嗅探获得发送方的口令。一种改进想法是对口令进行加密,防止攻击者获得口令,但是这不能解决重放攻击,攻击者可以获取加密口令并不断重放。
鉴别协议 ap4.0
重放攻击主要是由于接收方并不知道此时发送方是否还是活跃的,ap 4.0 主要通过一个不重数来防止重放攻击。不重数就是在一个协议的生存期中只会使用一次的数,是一个不重复使用的大随机数,一旦某协议使用了一个不重数,就永远不会再使用那个数了。接收方会向发送方发送一个不重数,发送方将其加密后发回给接收方,接收方通过验证这个数字来判断发送方是否是活跃的。
安全协议
网络层
网络层的安全协议是 IPsec,它并不是一个单一的协议,而是能够为两个网络实体之间的 IP 数据报提供通信安全的协议族。IPsec 并没有限定用户必须使用的加密和鉴定算法,允许通信双方选择合适的算法和参数,为保证互操作性而包含了一套加密算法,要求所有 IPsec 的实现都必须使用。许多机构都使用 IPsec 来保证虚拟专用网 VPN 的安全性。
IPsec 协议族中有两个主要协议:鉴别首部 AH 协议和封装安全有效载荷 ESP 协议。当某源 IPsec 实体向一个目的实体发发送安全数据报时,它可以使用 AH 或 ESP 协议来实现。AH 提供源鉴别和数据完整***,而 ESP 除了这两种服务外还可以提供机密***,因此使用要比 AH 广泛许多。使用 AH 或 ESP 的 IP 数据报称为 IP 安全数据报,它可以在两台主机、两台路由器或一台主机和一个路由器之间发送。IP 安全数据报有两种工作方式:① 运输方式,在整个运输层报文段的前后分别加上控制信息再加上 IP 首部,构成 IP 安全数据报。② 隧道方式,在原始的 IP 数据报的前后分别加上控制信息,构成 IP 安全数据报,这种方式使用较多。
运输层
运输层的安全协议主要是 SSL 安全套节字层和 TLS 运输层安全,TLS 是 SSL3.0 的修改版本。SSL 主要作用在端系统的 HTTP 和运输层之间,在 TCP 上建立起一个安全通道,为 TCP 传输的应用层数据提供安全保障。应用层使用 SSL 最多的就是 HTTP,但 SSL 并不是只用于 HTTP,而是可以用于任何应用层的协议,例如 SSL 也可以用于邮件存取的鉴别和数据加密。
SSL 提供的安全***包括三种:① 服务器鉴别,允许用户证实服务器的身份,支持 SSL 的客户端通过验证来自服务器的证书来鉴别服务器的身份并取得服务器的公钥。② 客户鉴别,SSL 可选的安全服务,允许服务器验证用户的身份。③ 加密的 SSL 会话,对客户和服务器发送的所有报文进行加密,并检测报文是否被篡改。
防火墙和入侵检测
在计算机网络中,当通信流量进入/离开网络时要执行安全检查、做记录、丢弃或转发,这些工作都有防火墙和入侵检测系统来完成。
防火墙
防火墙是一个硬件和软件的结合体,它将一个机构的内部网络与整个因特网隔离开,内部的属于可信网络,外部的属于不可信网络,允许一些数据分组通过而阻止另一些。它属于一种访问控制技术,通过严格控制进出网络的分组来禁止任何不必要的通信,从而减少潜在侵入的发送,从外部到内部和从内部到外部的所有流量都必须经过防火墙,只有被授权的流量才允许通过,授权与否由本地的安全策略定义,防火墙可以限制对授权流量的访问。
防火墙分为三种:① 基于分组过滤,分组过滤器独立地检查每个数据报,然后基于管理员特定的规则决定该数据报应当允许通过还是丢弃,过滤因素通常包括 IP 源或目的地址、TCP 或 UDP 地源和目的端口、IP 数据报中的协议字段类型等。② 基于状态过滤,利用一张连接表来实际地跟踪 TCP 连接,并使用跟踪信息做出过滤决定。③ 应用程序网关,这是一个应用程序特定的服务器,所有应用程序数据都必须通过它,每种程序都需要一个不同的应用网关。
入侵检测系统 IDS
防火墙不可能阻止所有入侵行为,入侵检测系统作为第二道防线,通过对进入网络的分组进行深度分析与检测发现异常网络行为,并进行报警以便进一步处理。IDS 可以用于检测多种攻击,包括网络映射、端口扫描、DoS 带宽洪泛攻击、病毒和蠕虫等。一个机构可以在它的机构网络中部署一个或多个 IDS 传感器,由于 IDS 不仅需要做深度分组检查,还必须要把每个过往的分组与数以万计的特征进行比较,因此会导致很大的处理量,所以一般都需要多个 IDS 传感器。IDS 系统可以大致分为基于特征的系统和基于异常的系统。
基于特征的 IDS 维护了一个范围广泛的攻击特征数据库,每个特征是一个与入侵活动相关联的规则集,基于特征的 IDS 嗅探通过它的每个分组,将分组中的数据与数据库中的特征进行比较,如果匹配将产生一个警告,该警告能够发送一个电子邮件报文给网络管理员或者网络管理系统。但是基于特征的 IDS 无法应对新型攻击,并且即使与特征匹配时也可能不是一个攻击而因此产生了一个虚假警告。
基于异常的 IDS 会观察正常运行的流量,并生成一个流量概况文件。它会寻找统计上不寻常的分组流,例如 ICMP 分组不寻常的百分比或端口扫描指数性突然增长。基于异常的 IDS 最大的特点就是不依赖现有攻击的以前只是,另一方面区分正常流量和统计异常流量也是一个挑战。至今大多数部署的 IDS 主要是基于特征的。