文章目录
IPSec 协议
IPSec 的定义
IPSec 是目前唯一一种能为任何形式的 Internet 通信提供安全保障的协议。此外, IPSec 也允许提供逐个数据流或者逐个连接的安全,能实现非常细致的安全控制。
IPSec 的应用
(1)分支机构通过 Internet 互联;
(2)Internet 上安全的远程访问;
(3)合作者之间建立内联网和外联网的互联;
(4)增强电子商务的安全性;
(5)任何分布式的应用,都可以通过 IPSec 增加安全性。
上述五点可以概括为一点:任何分布式的机制都可以通过 IPSec 增加安全性。
IPSec 的优点和功能服务
- 优点:
(1)提供强大的安全性;
(2)防火墙内部的 IPSec 可以抵制旁路;
(3)IPSec在传输层以下,对所有的应用透明;
(4)IPSec对终端用户透明;
(5)必要时可以为单个用户提供安全性; - 功能:
认证、机密性和密钥管理。 - 服务:
访问控制、无连接完整性、数据源认证、拒绝重放包、保密性、限制流量保密性。
IPSec 的工作模式
分为传输模式和隧道模式。
传输模式(Transport Mode):用于两个主机之间的端到端通信。
隧道模式(Tunnel Mode):适用于当 SA 的一端或两端是安全网关。
下面对 ESP 和这两种工作模式展开讲解。
ESP 与工作模式详解
ESP 协议
如下图所示的是 ESP 头的格式。
ESP 使用加密算法来保护数据,提供保密功能。
两个额外的域
(1)初始值(IV)或随机数,它在针对 ESP 的加密或认证加密算法要求出现时会出现。
(2)流量机密性(TFC)填充.
填充部分的作用是:把明文拓展到需要长度、隐藏实际的长度。
传输模式
- 定义:
在两个主机之间直接提供加密和认证(认证可选)。 - 作用:
传输模式主要为上层协议提供保护。用于在两台主机之间进行的端到端通信。 - 报文变化:
在传输模式中,ESP 被插入到 IP 头与协议头之间,保护 TCP/UDP/ICMP 负载;
隧道模式
- 定义:
使用隧道模式建立虚拟专用网络。 - 作用:
隧道模式对整个IP数据包提供保护。 - 报文变化:
在隧道模式中,AH、ESP 在原 IP 头之前,另生成一个新的报文头放在这之前,保护负载。
IP 安全策略
下图是一个完整的 IPSec 体系结构:
关于这部分,可以参考 oracle对IP安全体系结构的一些讲解。
安全关联 SA
安全关联 SA 是在发送者和为进出通信提供安全服务的接收者之间的一种单向关系,如果需要一个对等的关系用于双向的安全交换,就要用两个安全关联。提供给一个 SA 的安全服务可以用于 AH 或 ESP,但不能同时用于两者。
下方人话:
SA 指定由通信主机识别的安全属性。单个 SA 保护单一方向的数据,此保护针对单个主机或一组(多播)地址。
安全关联由三个参数标识
(1)安全参数索引 SPI;
(2)目标 IP 地址;
(3)安全协议(AH 或 ESP)。
SPI 是任意 32 位的值,与 AH 或 ESP 包一起传输。
安全关联存储在安全关联数据库 (Security Associations Database, SAD) 中。
IPSec 策略由安全策略数据库 (Security PolicyDatabase, SPD) 加以维护。在每个条目中定义了要保护什么样的通信、怎样保护它以及和谁共享这种保护。
每一个 SPD 条目由一个 IP 集合和上层协议定义(SA 选择器 selector) ,这些选择器用于过滤输出流量,将它们映射到某个特定 SA。
窗口机制
重放攻击
攻击者得到了一个经过认证的分组的副本,稍后又将其传送到目的站点。
重复的接收可能会中断或出现不希望的结果。
序列号能阻止重放攻击。每建立一个新的 SA,发送方把序列号计数器的初始值设为 0,每次在 SA 上发送一个包,则发送方增加计数器的值。
由于IP 的传输不稳定,可能会乱序或丢失,因此 IPSec 规定接收方应该实现一个大小为 W 的窗口(W 的默认值为 64),这就是窗口机制。
窗口机制
如上图所示,红框部分即为窗口,窗口的右端代表目前收到的合法分组最大序列号 N。
(1)如果接收到的分组在窗口中而且是新的分组,则验证消息认证码,若验证通过,就标记窗口中相应的位置。
(2)如果收到分组超过了窗口的右边界而且是新的分组,则验证 MAC。若通过,则让窗口前进,使此序列号成为窗口的右边界。
(3)如果收到分组超过了窗口的左边界,或者没有通过验证,则丢掉这个分组,并记录审计事件。
以个人理解举个例子:
初始没有接收到任何分组,只有一个空的窗口,左为 0,右为 63。
(1)收到一个分组,序列号为 20。20 在 0 到 63 之间,验证消息认证码,如果通过就标记 20 这个位置。
此时如果再次接收到重放攻击的序列号为 20 的分组,就可以识别出来从而防止攻击。
(2)收到一个分组,序列号为 80。80 超过右边界 63,验证 MAC。如果通过则滑动窗口(前进 80-63 格),此时窗口左为 17,右为 80。
从这里可以看到,窗口本质上是一个允许验证的序列号的集合。只有 >= 窗口的左边界,才允许序列号认证。这时如果收到序列号在窗口左边,说明已经太久远了(不好思考的话可以简单的理解成左边界的序列号是保质期)。
(3)这时如果收到一个分组,序列号为 10,超过左边界 17,则直接认为失效,丢弃。
因特网密钥交换(IKE)
什么是 IKE
上面提到了安全关联,IKE 就是在 IPSec 通信双方之间,建立起共享安全参数及其密钥(建立“安全关联”)。
IKE 可以选择通过手动或自动的方式管理密钥,包括密钥的确定和分配。
IKE 能够在不安全的网络(Internet)上安全地认证身份、分发密钥、建立 IPSec SA。
IKE 的密钥协定基于 DH 密钥协商。不过缺陷是没有认证、易受中间人攻击。
在建立起一对 SA 的过程中,IKEv2 比 IKEv1 减少了交换消息数。IKEv2定义了三种交换:初始交换(Initial Exchanges)、创建子 SA 交换(Create_Child_SA Exchange)以及通知交换(Informational Exchange),如下图所示。
解释一下初始交换的步骤:
(1)消息 ① 和 ② 属于第一次交换,发起者发送参数,响应者查找匹配的参数并返回。这一步是参数协商,参数用来生成密钥,后续步骤用这个密钥加密。
(2)消息 ③ 和 ④ 属于第二次交换,发送者和响应者以加密信息互相验证身份和交换过程。
IKE 的 Cookie 交换机制以及拥塞攻击
一句话:各方在初始消息中需要发送一个伪随机数Cookie,此消息要得到对方的确认,在DH交换的第一条消息中重复。如果源地址被伪造,那么攻击者收不到应答。
拥塞攻击:
如果一个网络攻击者伪造大量地址发送请求,根据 IKEv1 协议,响应方需要维护会话信息,从而耗费大量系统资源,造成 DoS 攻击。
对于这种攻击,KEv2 使用 cookie-challenge 机制来解决。当响应方 B 发现构建的半开 SA(大量伪地址构建的单向 SA)超过指定数目时,会构造一个通知载荷并返回发起方 A。如果 A 能携带这个通知载荷回复 B,则继续进行协议。
应对重放攻击
使用随机数,抵御重放攻击。
对于身份认证,提供了三种认证方法
(1)数字签名;
(2)公钥加密;
(3)对称密钥加密。