详解IPSec介绍( 八 )

  • 抵御DDoS(Distributed Denial of Service)攻击IKEv2中抵御DDoS攻击的机制和方法:SPI值IKEv2消息头部有发起方SPIi和响应方SPIr,它们是内核产生的8字节的随机数,用来标识SA,同时也可以标识进行消息交换的一对节点 。具有相同SPI值的请求处理一次(重传消息除外),而把其他请求作为重复数据包丢弃,可以在一定程度上防止DDoS攻击 。带Cookie交互IKEv2中使用N载荷携带Cookie的辅助交换来抵御拒绝服务攻击 。在通信过程中,响应方认为自己正受到DDoS攻击时,可以向发起方请求回复一个无状态cookie 。响应方收到对方发来的第一条消息后并不急于进行IKE_SA_INIT交互,而是再产生一个新的cookie,封装在通知载荷中发送给对方 。如果发起方不是攻击者,就可以收到这条消息,然后重新开始协商,并将响应方的cookie封装在该消息中,其它载荷内容保持不变 。重传约定IKEv2中所有消息都是成对出现,在每对消息中,发起方负责重传事件,响应方不必对其响应消息进行重传,除非收到对方的一个重传请求 。避免了双方同时发起重传,造成资源的浪费,同时也可以防止攻击者截获消息后,伪装成协商者不断地发送重传消息,耗费协商双方的资源 。丢弃半开(half-open)连接IKEv2只能通过两种情况判断对方是否失效:一种是重复尝试联系对方,直到应答时间过期;另一种是收到对方的不同IKE SA加密保护下的INITIAL CONTACT通知消息 。IKEv2发起方允许多个响应方响应第一条消息,并把所有的响应方视为合法并作回应 。发起方发送一些消息后,一旦收到一个有效的加密的响应消息,将其他的响应消息忽略,并将其他所有的无效的半连接丢弃 。这样在协商开始时就可以避免受到DDoS攻击 。
  • 完善的前向安全性PFS(Perfect Forward Secrecy)IPSec SA数据传输需要的加密、验证密钥由SKEYID_d、SPI、协议等参数衍生得出,可以保证每个IPSec SA都有自己独一无二的密钥 。但是由于所有IPSec SA密钥都是相同的来源产生的,所以这些IPSec SA密钥相互间都有关联,假如有攻击者能够根据IKE SA判断出SKEYID_d的值,那么就能非常容易的掌握从该SKEYID_d衍生出来的所有IPSec SA的密钥 。IPSec专门提供PFS特性来解决这个问题,实现思路是:IKEv2初始交互的密钥衍生材料不被用于衍生供IPSec SA使用的相关密钥,而是通过在CREATE_IPSec_SA交互中引入可选的IKE载荷重新进行一次额外的DH交换来生成密钥材料 。通过这种方式,IPSec密钥之间相互没有关联,即使攻击者攻克了一个密钥,也只能破解这个密钥保护的数据,而不能破解受其它密钥保护的数据 。
  • 防重放IPSec中的重放攻击(Replay Attack)主要是指攻击者大量发送目的主机已接收过的数据包,大量消耗系统资源,可能导致系统CPU资源耗尽 。
    IPSec利用序列号和滑动窗口来实现防重放(Anti-Replay) 。IPSec中AH和ESP协议报文头中有个序列号字段(Sequence Number)专门用于防重放攻击 。
    通信双方协商好IPSec SA之后,序列号字段被置为0,此后发送方每发出一个报文,该数值加1 。接收方存在一个防重放滑动窗口和已接收报文的序列号数据库 。
    • 如果该序列号的报文从未被接收过,且在防重放窗口内,接收方就接收该报文 。如果该序列号的报文已经被接收过,则认为是重放攻击,丢弃该报文 。
    • 如果该序列号在防重放窗口的左侧(小于防重放窗口的最小值),则认为是已经接收的报文,因而被丢弃 。
    • 如果该序列号在防重放窗口的右侧(大于防重放窗口的最大值),则认为未被接收的报文,会正常接收,同时触发防重放窗口向右滑动 。
    下面结合图1详细描述防重放的原理 。图1 防重放示意图
    详解IPSec介绍

    文章插图