发布时间:2019-12-25 14:22:39
IPSec 简介
安全机制1. ,提供包括存取控制、无连接数据的完整性、数据源认证、防止重发攻击、基于加密的数据机密性和::4L2TP2L2TP: TPESP393. 4L2TP 2,,[1],1450052,2;2.L2TP,ResponderIPSec,IP1 ,
IPSec 是用于保护网络层通信节点之间通信安全的一组协议集。它主要由 IP Security Architecture document 、IKE、AH、ESP 等组成。其中 IKE( The Internet Key Exchange RFC2409) 是一个密钥管理协议 , AH/ ESP 用于保护 IP 数据流。IPSec 能为 IPv4/ IPv6 网络提供能共同操作/ 使用的、高品质的、基于加密的
受限数据流的机密性服务。
IPSec 提供了两种安全机制 :认证和加密 。认证机制使 IP 通信的数据接收方能够确认数据发送方的真实身份以及数据在传输过程中是否遭到篡改。加密机制通过对数据进行编码来保证数据的机密性 ,以防数据在传输过程中被他人截获而失密。IPSec 的认证头 AH(Authentication Header ,[ RFC2402]) 定义了认证的应用方法 ,封装安全负载 ESP(Encapsulating Security Payload ,[ RFC2406 ]) 定义了加密和可选认证的应用方法。ESP 用加密器提供机密性 ,身份验证器提供数据完整性 ,它们采用的算法由 ESP 的安全关联 SA 决定。ESP 可以提供抗重播服务 ,一个唯一的、单向递增的序列号由受 ESP 保护的数据报的发送端插入 ,接收端可以据此对数据报进行检验。在实际进行 IP 通信时 ,可以根据安全需求同时使用这两种协议或选择使用其中的一种。AH 和 ESP 都可以提供认证服务 ,不过 ,AH 提供的认证服务要强于 ESP。
在一个特定的 IP 通信中使用 AH 或 ESP 时 ,协议将与一组安全信息和服务发生关联 ,称为安全关联 (Security Association ,SA) 。安全关联是 IP 层安全模型的核心 ,是构成 IPSec 的基础。它是在数据发送前两个通信实体经协商建立起来的一种如何对数据加密变换的协定。它描述了通信实体之间如何利用安全服务来实现通信 , SA 包含认证算法、加密算法、用于认证和加密的密钥。SA 是一个单向的逻辑连接 ,也就是说 , 两个主机之间的认证通信将使用两个 SA ,分别用于通信的两个方向。
IPSec 定义了两种类型的 SA :传输模式 SA 和隧道模式 SA。传输模式 SA 是在 IP 包头(以及任何可选的扩展包头) 之后和任何高层协议(如 TCP 或 UDP) 包头之前插入 AH 或 ESP 包头 ,保护高层协议 ;隧道模式 SA 是将整个原始的 IP 数据报放入一个新的 IP 数据报中 ,保护原来的 IP 数据报(包括 IP 地址) 。
2 安全关联(SA)和因特网密钥交换协议
IPSec 体系结构的关键组成元素中包括安全关联 SA ,SA 提供通信双方的认证/ 加密信息、密码学算法和所使用的密钥。ISAKMP 和 IKE 构成因特网密钥交换的框架。IKE 支持自动的安全关联的协商、自动密钥的产生和刷新。
因特网密钥交换 IKE[2]使用了 ISAKMP 的基础、Oakley 的模式和 SKEME 的密钥交换协议 ,它为 IPSec 的 AH 和 ESP 协议以及 ISAKMP 自身提供密钥管理和安全关联管理。IKE 中定义了几种认证方法 :预先共享密钥、数字签名(DSS、RSA) 和公钥加密(RSA 和修改的 RSA) 。
ISAKMP(Internet Security Association and Key Management Protocol ,[ RFC2408]) 提供了通信双方协商安全参数和建立安全协定的框架。Oakley(Oakley Keys Determination Protocol [ RFC2412]) 可以用于在通信双方之间建立会话密钥 ,它是一个可用于 ISAKMP 框架的密钥交换协议 ,为安全关联提供密钥交换和刷新的功能。将上面两个协议联合起来使用 ,称为 ISAKMP/ Oakley ,可以同时完成密钥的建立和安全参数的协商 ,提供密钥交换过程中的认证、完整性和机密性。这意味着使用 ISAKMP/ Oakley 的通信双方可以明确知道自己在与何人通话 ,并确信窃听者不可能通过窃听数据包交换来推测出任何有用的信息。ISAKMP/ Oakley 只有在安全关系预先存在的情况下才有用。如两个节点可以使用 ISAKMP/ Oakley 来协商使用
备来完成。2 [3]L2TP 协议定义了[5] LAC 和 LNS 之间 PPP [4]协议数据单元的传送、访问控制和管理 ,远程系统通过 Triple DES 加密和相应的共享密钥 ,然而它们不能确信它们的确在和对方通话 ,除非它们能够以安全方式获得对方的公钥。安全获得对方密钥的方式可以采取手工配置或通过证书权威机构。
使用 ISAKMP/ Oakley 初始化安全关联 SA 的两个阶段 :
密钥的保密性对任何密码系统中的健壮性来讲远比其密码算法的实现细节更重要。IPSec 中定义了一套安全强度极高的 ISAKMP/ Oakley 密钥交换协议 ,它由两个阶段构成。
阶段 1 :建立 ISAKMP 安全关联。协商建立一个主密钥 ,用于保护以后用户数据流的所有密钥都将根据主密钥产生 ,因为主机之间此前尚没有协商好密钥或 SA。阶段 1 主要用来建立对 ISAKMP 自身消息的保护措施 ,而不是建立用于保护用户数据流的安全关联或密钥。通常情况下 ,公钥算法用于建立系统之间的
ISAKMP 安全关联 ,用来保护阶段 2 中 ISAKMP 协商报文而使用的密钥。
阶段 2 :建立协议安全关联 ,用于保护用户数据流。在完成阶段 1 ,建立 ISAKMP 安全关联的协商过程以后 ,下一步就是初始化 Oakley 阶段 2 的消息交换 ,定义用于保护用户 IP 数据报文的安全关联。阶段 2 的交换相对比较简单 ,因为第一阶段协商的安全关联已经被激活 ,可以保护第二阶段的消息。
由于在第一阶段协商的目的是为了决定如何保护 ISAKMP 消息 ,所以阶段 2 的 ISAKMP 负载 (除 ISAKMP 报头) 还应当使用阶段 1 中协商好的算法加密。在阶段 2 中使用 Oakley 快速模式时 ,身份认证通过几个密码学哈希函数来完成。哈希函数的输入一部分来自阶段 1 得到的消息 SKEYID ,另一部分是阶段
2 中交换的信息。
当阶段 1 和阶段 2 完成后 ,两个系统就可以开始用所协商的安全协议保护用户数据流了。因为阶段 1 的交换可以支持多重的后继第二阶段交换。
3 L2TP 协议及其安全性隐患
L2TP 是虚拟专用网中最常用的一个隧道协议 ,它将传统的 NAS(NAS Network Access Server) 的功能分裂为客户/ 服务器的体系结构 ,由 LAC(L2TP Access Concentrator) 和 LNS(L2TP Network Server ) 两个设
本地电话拨号网建立一条到 LAC 的 PPP 连接 ,LAC 通过穿越公共网络的隧道将 PPP 连接延伸到 LNS 上。
L2TP 通过隧道传输 PPP 帧 ,将远程用户连接到家乡局域网的 LNS 上 ,就像本地工作站一样。
L2TP 支持多种传输介质 ,L2TP 隧道可以穿越 IP 和非 IP 的公共网络。当 L2TP 隧道穿越 IP 公共网络时 ,由于 L2TP 的控制报文和数据报文都采用明文传送 ,因此很容易受到攻击。例如 :通过监听数据报文可以发现用户身份标识符 ;很容易对 L2TP 的数据报文和控制报文进行修改 ;很容易对 L2TP 隧道和隧道中的 PPP 连接进行攻击 ;可以通过发送否认消息报文来攻击隧道和/ 或隧道中的 PPP 连接 ,并迫使其中断 ;可以破坏 PPP 的加密控制协议 ECP 的协商过程 ,减弱或删除 PPP 的数据机密性保护。也可以通过对 PPP 的
LCP 认证协商过程的监听和控制 ,来减弱或取消 PPP 的认证过程 ,甚至可以获得用户口令。
4 使用 IPSec 为 L2TP提供安全保护
为了消除 L2TP 协议的安全隐患 ,可以使用 IPSec ESP。使用 IPSec ESP 能够为 L2TP 的控制报文提供安全保护 ,也可以为 L2TP 的数据报文提供安全保护 。如果不要求对 L2TP 的数据报文提供安全保护 , ESP 就可以使用空密钥 。利用 IPSec 的重发保护机制可以实现对 L2TP 报文的重发保护。L2TP 的安全性要求使用 IKE 进行身份认证、安全关联 SA 协商和使用 IPSec DOI 进行密钥管理 ,并支持 IPSec ESP 的密钥(包括空密钥) 管理。
我们把 L2TP 隧道建立的发起者称为请求者 Initiator ,它是 LAC 或是 LNS ,它首先发送 SCCRQ ,并等待接收来自对方的 SCCRP。另一方我们称为响应者 Responder ,它也是 LAC 或是 LNS ,它接收 SCCRQ ,并向对方 Initiator 发出响应 SCCRP。
下面我们主要讨论如何使用 IPSec 保护基于 IP 的 L2TP 的控制连接和隧道中的数据流 ,以及 IPSec 和 L2TP 如何协同工作。如果提供的是点到点的安全 ,那么可以直接在隧道中使用 IPSec ,作为对 L2TP 隧道安全性的补充。
由于 IPSec 不了解它所保护的应用程序的细微差别 ,因此 IPSec 经常不能和应用程序集成在一起 ,尤其像 L2TP 协议。L2TP 协议允许 Responder 发送 SCCRP 时使用一个新的 IP 地址。为了在 IPSec 保护 L2TP 时也允许使用这一特性 ,当 Responder 选择使用一个新的 IP 地址时 ,它必须发送一条 StopCCN 控制报文给 initiator ,并在 Result 和 Error Code AVP 域中标明 :Result Code 域必须设为 2( General Error) , 并且将 Error Code 设为 7 ( Try Another) ;如果 Error Code 为 7 ,那么可选的错误报文必须提供新的 IP 地址 ,初始者 initiator 分析 Result 和 Error Code 获得其中的信息。这种方法可以减少实现的复杂性 ,因为 initiator 已经精确知道对方的 IP 地址。这是一种将 L2TP 与 IPSec 的过滤器和安全规则捆绑在一起的控制机制。
4. 1 IKE 协商的第一阶段( IKE Phase 1 Negotiations)
每一个 IKE 过程 ,当使用共享密钥认证时 ,在需要进行安全通信的节点之间必须有一对共享密钥。当使用能提供身份保护的主模式时 ,这个密钥必须与对方的 IP 地址相对应。
如果初始化接收到一个 StopCCN 报文 ,并在 Result 和 Error Code 域中设置了“try another”并提供了一个新的 IP 地址 ,它应将 IKE 使用的原始共享密钥与新的 IP 地址捆绑在一起放在 error - message 报文中。
4. 2 IKE 协商的第二阶段( IKE Phase 2 Negotiations)
在 IKE phase 2 的协商时 ,双方同意彼此之间的数据流将被 IPSec 协议保护。快速模式 IDS 描绘它们之间同意保护的数据流 ,它由地址、协议和端口信息组成。
4. 3 IKE Phase 1 和 Phase 2 保护初始的 SCCRQ报文
当使用 IPSec 保护 L2TP 时 ,为了覆盖所有的情形 ,认为 IP 地址和端口号都是动态的 ,Initiator 选择一个新的动态的 PORT ,Responder 选择新的 IP 地址和 PORT 端口号。L2TP 报文如下 :
SCCRQ - > (Initiator 使用固定 IP 地址和动态 Port)
< - STOPCCN(Responder 选择新的 IP 地址)
Responder 选择一个新的 IP 地址 ,使用 STOPCCN 报文通知 Initiator。Initiator 分析 STOPCCN 报文 ,
获得 Responder 要求使用新的 IP 地址。由于 Responder 的 IP 地址发生变化 , 因此 , Initiator 必须与 Responder 重新进行新的一轮协商。为了保护新一轮的 SCCRQ 报文 ,在此之前 ,要求首先进行新一轮的 IKE 协商。新的 IKE Phase 1 和 Phase 2 用于保护新一轮的 SCCRQ 报文 ,SCCRQ 报文中的 IP 地址就是新的 Responder 的 IP 地址
SCCRQ - >(SCCRQ 中使用 Responder 的新的 IP 地址)
< - 新的 IKE Phase 2 对 Responder 选择的新的 port 端口号保护
< -SCCRP(Responder 选择新的 PORTr)
SCCCN - >(L2TP 隧道建立过程完成)
如果 Responder 选择一个新的端口号 ,由于 IP 地址没有发生变化 ,因此 ,需要进行新的 IKE 第二阶段的协商 ,以适应端口号的变化。
为了具有通用性 ,可以使用一种允许 L2TP 向 IPSec 的过滤规则库中动态添加过滤规则的机制。分别在 Initiator 和 Responder 上设置输出规则和输入规则 ,格式为 < 源 IP 地址 ,目的 IP 地址 ,协议 ,源端口 ,目的端口 > ,与这些过滤规则相匹配的 L2TP 报文可以被 IPSec 保护。Initiator 和 responder 上设置的初始规则可以保护 Initiator 发出的用于建立 L2TP 隧道的 SCCRQ 报文。Initiator 和 Responder 必须事先配置这些规则 ,并将这些规则插入到 IPSec 的过滤规则库中 ,在 L2TP 开始之前 ,使这些规则有效。当 Initiator 使用动态端口 ,一旦源端口号确定 ,L2TP 必须将相应的规则加入到 IPSec 过滤规则库中。当 Responder 选择使用一个新的 IP 地址时 ,它发送一条 StopCCN 控制报文给 Initiator ,当 Initiator 收到 STOPCCN 后 ,从中解析出新 IPSec 及其在动态 IP 隧道协议 L2TP 中的应的 IP 地址 ,并对这个地址进行合法性检查。如果检查无误 ,L2TP 向 IPSec 的过滤规则库中插入相应的新规则 ,并在一轮新的 SCCRQ 发送之前生效。
如果最初的隧道已经拆除 ,原来用于建立隧道的过滤规则也将被删除。这种机制和依靠 IPSec 保护并同时又必须使用动态端口的其它应用程序使用的机制是相同的 :在报文交换过程中 ,当发送一个 L2TP 报文时 ,首先在 IPSec 的过滤规则库中添加一个(组) 规则 ,允许这个报文输出 ,之后 ,再向 IPSec 的过滤规则库中添加一组规则 ,允许应答报文进入。当报文交换过程结束后 ,需将这些规则从过滤规则库中删除。Responder 可以不支持动态 IP 地址和 PORT 端口号 ,但 Initiator 必须支持 Responder 使用动态 IP 地址和 PORT 端口号的能力。
4. 4 包的安全性检查当安全隧道建立后 ,从安全隧道接收每一个报文 ,L2TP 必须检查并确保这个报文能被 IPSec 解密和/ 或认证。如果 IPSec 已经用某个安全关联 SA 校验了这个报文 ,L2TP 可以确信这个报文的确是从一个信任的节点发出的 ,并且是安全的。
5 结束语
IPSec 是用于保护网络层通信节点之间通信安全的一组协议集 ,它提供两种安全机制 :认证和加密。由于 L2TP 的控制报文和数据报文都采用明文传送 ,很容易受到攻击 ,因此可以使用 IPSec ESP 为 L2TP 的报文提供安全保护。其方法是 :当发送一个 L2TP 报文时 ,首先在 IPSec 的过滤规则库中添加一个(组) 规则 , 允许这个报文输出 ;之后 ,再向 IPSec 的过滤规则库中添加一组规则 ,允许应答报文进入 ;当报文交换过程结束后 ,需将这些规则从过滤规则库中删除。规则的添加和删除是动态进行的 ,因此在 L2TP 隧道建立过程中 ,当 Responder 使用新的 IP 地址时 ,仍可以对隧道的建立过程提供安全保护 ;当在隧道建立后 ,IPSec ESP 可以为隧道中传输的报文提供安全保护。
大客户
微信
置顶