技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 网络系统 --> 一种抵御 DDoS 攻击的 IP 追踪技术

一种抵御 DDoS 攻击的 IP 追踪技术

浏览:6207次  出处信息

   在拾掇家务时,发现一页我在 2008 年 10 月做的备忘录,记录了一个可用于抵御 DDoS 攻击的 IP 追踪技术。当时因为觉得 idea 太小,不值当写成文章投出去。纸张放那里总是占地方,在博客里电子化一下,然后就能销毁了。

Differential Deterministic Packet Marking

   这个 idea 是在 IP 协议的基础上做一些扩展,可以帮助用户在 DDoS 攻击时识别攻击数据包和定位攻击者。在理解这个 idea 之前,可能需要先看几篇参考文献:

   [1] Z. Gao and N. Ansari, "Tracing cyber attacks from the practical perspective, " IEEE Communications Magazine, vol. 43, no. 5, pp. 123-131, 2005.

   [2] A. Belenky and N. Ansari, "On deterministic packet marking, " Computer Networks, vol. 51, no. 10, pp. 2677-2700, 2007.

   [3] Y. Xiang, W, Zhou, and M. Guo, "Flexible deterministic packet marking: an iP traceback system to find the real source of attacks, " IEEE Transactions on Parallel and Distributed Systems, vol. 20, no. 4, pp. 567-580, 2009.

   这个 idea 主要是在 [3] 基础上做的改进,其 motivation 是仅仅使用标记段 [3] 内容太保守,用标记段再结合 IP 头中已有的信息,可以做得更好。简单来说就是运营商的接入路由器在 IP 头中增加一些标记,服务器在遭遇到 DDoS 攻击时,可以根据接入路由器增加的标记再结合 IP 头中已有的信息,识别攻击流量,以及确认攻击源。

   下文的内容基于三个假设:

  • Source IP 和 ingress router 的接入 interface 的 IP 经常在同一个网段中;

  • 大部分网络流是正常的网络流而非 DDoS 的网络流。

  • ingress router 在可控域中,未被入侵。

  • 图1: 典型网络拓扑示意图,来源于[2]

       由图中可见,如果主机使用真实IP 的话,Host 1 发出数据包的 source IP 和 router interface 1 的 IP 仅在最后八位不同,Host 2 发出数据包的 IP 和 router interface 2 的IP 也是仅仅在最后八位不同。

       由假设有大部分数据包的 source IP 与 router interface IP 在同一个网段中,这样 ingress router 只需在标记段中标记与 source IP 不同的位即可进行追踪。

    图2: IP 头和标记段,标记段与[3]相同

       在我的 idea 里,Mark 使用的是 IP 头中的 IDENTIFICATION 域,共 16 位(我们也可以用上 TOS,这样就有 19 或者 24 位),其中各个位的作用如图 3 所示:

    图3: 标记段内容

       入口路由器上执行的标记算法是:

    Algorithm:( 16-bit Mark case, RI for Router Interface)
    
    if (SourceAddr RIAddr ) ⊕ & 0xffff8000 = 0 // Case 1
        Mark := SourceAddr ⊕ RIAddr // 1 packet
    else if (SourceAddr ⊕ RIAddr ) & 0xff000000 = 0 // Case 2
        Digest := hash(RIAddr)
        for i=0 to 2 // 3 packets
            Mark[i].M := 1
            Mark[i].A := 0
            Mark[i].seg := i
            Mark[i].digest := Digest
            Mark[i].address_diff := ((SourceAddr ⊕ RIAddr) >> (i*8)) & 0xff
    else // Case 3
        Digest := hash(RIAddr)
        for i=0 to 3 // 4 packets
            Mark[i].M := 1
            Mark[i].A := 1
            Mark[i].seg := i
            Mark[i].digest := Digest
            Mark[i].address_diff := ( RIAddr >> (i*8)) & 0xff

       我提出的新 idea 对 [3] 的改进能够带来以下几个好处:

  • 大部分数据包仅靠 1 个包就可以 traceback。根据上面的假设,正常的数据包应该仅仅在 IP 地址的低位与路由器接口 IP 不同,这样仅仅需要在 mark 中的低 15 位与源 IP 异或就能得到路由器接口 IP(case 1)。

  • 加快路由器对正常数据包的处理速度。由于正常的数据包仅需要 1 个包就能 traceback,不需要计算地址的 hash 值,大大加快了路由器对正常数据包,也是大部分数据包的处理速度。

  • 不影响正常 IP 数据包的 fragment 策略。由于大部分正常的数据包仅仅需要一个包就能 traceback,那么修改 IDENTIFICATION 域对这些数据包的 fragment 策略毫无影响。对于非正常的数据包,本算法需要多个包才能 traceback,所以对其 fragment 策略会有影响,但由于它是非正常的数据包,不用考虑后果。

  •    之所以觉得这个 idea 小,有两个原因:

  • 第一是在别人方案基础上做的改进,创新不够;

  • 第二是需要部署到全网(至少某个运营商内部)所有接入路由器上,(尤其在 IPv6 已增强安全性的前提下)不太可能实现。

  •    这也符合我对很多研究的看法,虽然有意义,但在工程上基本价值不大,基本上就自己 YY 一下。


建议继续学习:

  1. 防DDoS脚本 in python    (阅读:5867)
  2. 浅谈Ddos攻击攻击与防御    (阅读:3746)
  3. DDOS攻击解决过程    (阅读:2759)
  4. Nginx过滤hash ddos攻击    (阅读:2362)
  5. 防DDoS脚本 in python    (阅读:2254)
  6. 学习手册:浅析DDoS的攻击及防御    (阅读:1265)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1