一种抵御 DDoS 攻击的 IP 追踪技术
在拾掇家务时,发现一页我在 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 在可控域中,未被入侵。
由图中可见,如果主机使用真实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 不同的位即可进行追踪。
在我的 idea 里,Mark 使用的是 IP 头中的 IDENTIFICATION 域,共 16 位(我们也可以用上 TOS,这样就有 19 或者 24 位),其中各个位的作用如图 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 一下。
建议继续学习:
- 防DDoS脚本 in python (阅读:6020)
- 浅谈Ddos攻击攻击与防御 (阅读:3873)
- DDOS攻击解决过程 (阅读:2875)
- Nginx过滤hash ddos攻击 (阅读:2479)
- 防DDoS脚本 in python (阅读:2401)
- 学习手册:浅析DDoS的攻击及防御 (阅读:1452)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Solrex Yang 来源: Solrex Shuffling
- 标签: DDoS IP追踪
- 发布时间:2012-11-05 22:15:20
- [53] IOS安全–浅谈关于IOS加固的几种方法
- [52] 如何拿下简短的域名
- [51] android 开发入门
- [51] 图书馆的世界纪录
- [50] Oracle MTS模式下 进程地址与会话信
- [49] Go Reflect 性能
- [46] 【社会化设计】自我(self)部分――欢迎区
- [46] 读书笔记-壹百度:百度十年千倍的29条法则
- [36] 程序员技术练级攻略
- [29] 视觉调整-设计师 vs. 逻辑