- ·上一篇文章:黑客技术研究之系统防线溃于DNS蚁穴
- ·下一篇文章:零时差攻击的危险性及特征
深入了解DDOS与DDOS追踪
w.distance=0 then let f be the fragment of
R' at offset w.offset write f?w.frag into w.frag increment w.distance Path reconstruction
procedure at victim v: let FragTbl
be a table of tuples(frag,offset,distance) let G be a tree with root v let edges in G be
tuples(start,end,distance) let
maxd:=0 let last:=v for each packet w from attacker FragTbl.Insert
(w.frag,w.offset,w.distance) if w.distance>maxd then
maxd:=w.distance for d:=0 to maxd for all ordered combinations of fragments at distance d
construct edge z if d!=0 then z:=
z?last if Hash(EvenBits(z))=OddBits(z) then insert edge(z,EvenBits(z),d) into G
last:=EvenBits(z); remove any edge(x,y,d)
with d!=distance from x to v in G extract path(Ri..Rj) by enumerating acyclic paths in G
实验室情况下这种标记技术只需要victim能够抓到1000到2500个包就能够重构整个路径了,应该说结果是很好的,但是没有投入到实用中,主要是需要路由器厂商和ISP支持。
差不多ip traceback的已经实用的技术和实验室技术,或者已经死掉的,就主要是这些,虽然还有其他的一些。
已经很长时间没有搞DDOS防范这一块了,国内也有黑洞这样的产品,以前也了解一些国外的,比如floodguard、toplayer、radware等。受securitytest提示,又了解到riverhead的,我就立刻看了看他们的白皮书。
因为前面bigfoot提出的主要是ip traceback的题目,securitytest也又到防御的问题。针对DDOS的问题ip traceback和Mitigation是不一样的,ip traceback主要是进行追踪,因为DDOS主要是spoof,而很难判别到真正的攻击源,而且如果能够很容易找到真正的攻击源,不仅仅对付DDOS,对付其他的攻击也很有帮助,比如法律问题等。而Mitigation是从受害者的角度,因为victim一般是没有能力去调查整个网络,找出source,而且,即便能够找到source,也得有法律或者一些沟通的手段来让source停下来(攻击的source并不是source的攻击者),这种意味着大量的沟通、跨ISP、跨过等类似的非技术问题,所以,通常很难处理。但是从victim的角度来说,必须得有所解决办法,所以就需要Mitigation。
这又正好是我以前研究的范围,所以,又会说出一大堆。对于Mitigation,其实,技术的根本就是要能从众多的流量中将攻击包和合法包分离出来,把攻击包抛弃掉,让合法包通过就性了。这就是根本,所以实际运用的技术就是要如何尽可能识别出攻击包,而又尽可能小地影响正常包。这又得来分析DDOS(甚至DOS)的方式和原理。基本又下面几种形式:
1、系统漏洞形成的DOS。这种特征固定,检测和防御也容易。
2、协议攻击(一些跟系统处理相关,一些跟协议相关)。比如SYN FLOOD,碎片等。特征还好识别,检测和防御相对容易。比如SYN COOKIE、SYN CACHE,碎片可以抛弃。比如land攻击、smurf、teardrop等。
3、bandwidth FLOOD。垃圾流量堵塞带宽,特征不好识别,防御不容易。
4、基本合法的FLOOD。比3更难了,比如分布的Slashdot。
实际的DDOS,一般都是多种方式结合的。比如SYNFLOOD,可能同时是bandwidth FLOOD。
影响防御的主要因素就是看特征是否能得到,比如1、2就相对好解决,一些基本不影响的使用的FLOOD,则可以很好被抛弃,比如ICMP FLOOD。
但是,攻击发包工具如果将数据包更能伪装成合法包,那么就很难识别出来了。
一般的Mitigation方法也就是:
1、Filter。对于特征明显的,比如一些蠕虫等,在路由器上就可以搞定。当然,过滤是最终解决办法,只要识别出了攻击包,就是要把这些包过滤掉。
2、随机丢包。跟随机算法相关,好的算法可以让合法包受到更小影响。
3、SYN COOKIE、SYN CACHE等特定防御办法。针对一些固定的攻击手段来防御和过滤。比如ICMP FLOOD、UDP FLOOD。SYN COOKIE等都是避免spoof问题,至少TCP还有三次握手,所以还好判断SPOOF。
4、被动消极忽略。可以说也是一种确认是否被欺骗的办法。一般正常连接失败会重新尝试,但是攻击者一般不会尝试的。所以可以临时抛弃第一次连接请求而接受第二次或者第三次连接请求。
5、主动发送RST。对付SYN FLOOD的,比如一些IDS上。当然,实际不是有效的。
6、统计分析和指纹。这本来是研究的主要内容,但是最后陷入了算法牛角尖,因为主要是一个算法问题。通过统计分析的角度来得到指纹,然后根据指纹来抛弃攻击包,也是一种异常检测的技术。说得很简单,但是要不影响合法包也不容易,不至于变成了随机丢包。(其实当时考虑太过复杂,非得要详细分析出攻击包和合法包,实际不需要,只要过滤掉足够的攻击包,即便让攻击包通过,但只要不造成DOS就可以了。)这也是很多研究者研究的主要课题,目的也就是识别攻击包。
现在在回到securitytest提到的riverhead。关于riverhead的技术,我都只是从他们的白皮书上了解到的,但根据我的分析技术方法都没有超出上面提到的范围。
Riverhead的核心方案就是检测 Detection、转移 Diversion 和 缓解 Mitigation,也就是检测到攻击,然后将流量转移到他们的产品guard上,然后通过guard进行Mitigation。
它的实现步骤,就是:
因为没有图,所以先定义一下,才能说清楚:
#靠近分布式拒绝服务源头的路由器为 远端路由器
#靠近受害者的路由器为 近端路由器
#Riverhead的Guard设备附属安装的路由器为 附属路由器
防御的步骤
1、首先检测到有DDOS发生,并了解到victim。
2、Guard发送BGP通告到远端路由器(在victim的BGP通告设置前缀,并得到比原始BGP通告更高的优先权),表示从远端路由器到victim有新的路由,并且路由到Guard的loopback interface,所有到victim的都经过附属路由器转移到了Guard上。
3、Guard检查流量,并且清除其中的攻击流量,然后把安全的流量转发到附属路由器上,在回到victim其中核心就是Guard,技术就是白皮书中描述的MVP架构(Multi-Verification Process),也就是下面5个层次过滤(Filtering) :这个模块包含静态和动态的DDOS过滤。静态过滤,拦截non-esse ntial流量,可以是用户定义的,或者是riverhe
深入了解DDOS与DDOS追踪