BIND OPT Record Large UDP DDoS
Published: 2008/06/09
先週末、6/5 20時ごろから6/7までDNS(BIND8のなかでも8.3.3)を標的したDDoSが発生していました。何を狙っていたのかというとこんな感じです。
まぁ本来の目的は置いておいて、実質「UDP53向けにでかいパケットを投げつける」という典型的なDNS向けのDDoSになってました。
かなりの量の攻撃が広範囲に渡り行われていたようです。
パケットのサンプルはこんな感じです。
Source: x.x.x.x
Destination: *.*.*.*
User Datagram Protocol, Src Port: 62348 (62348), Dst Port: 53 (53)
Source port: 62348 (62348)
Destination port: 53 (53)
Length: 36
Checksum: 0x3492 [correct]
[Good Checksum: True]
[Bad Checksum: False]
Non-authenticated data is unacceptable
Questions: 1
Answer RRs: 0
Authority RRs: 0
Additional RRs: 1
Queries
<Root>: type ANY, class IN
Name: <Root>
Type: ANY (Request for all records)
Class: IN (0x0001)
Additional records
<Root>: type OPT
Name: <Root>
Type: OPT (EDNS0 option)
UDP payload size: 65535
Higher bits in extended RCODE: 0x0
EDNS0 version: 0
Z: 0x0
Data length: 0
そしてDNSへのDDoSの際に常に発生する事象が今回も発生していました。
つまり、「DNS queryとして成立していないパケット」にもかかわらず、namedは無理矢理DNS queryとして解読して、そのアドレス解決を行おうと上位のRootDNS等に問い合わせるqueryを乱発するというものです。これはこれで上位DNSへのDDoSとして成立しまう。また、今回の攻撃のsource addressは一つのIPアドレスでしたが、攻撃を受けた各DNSがこのアドレスに向けてQuery Response(今回はアドレス解決できないのでServer Failure等)を送り返しますので、ここにもDDoSの効果が現れます。この攻撃元となったIPアドレスが無実の被害者のものだったのか、なんの改竄もせずここから攻撃が行われたものかわかりませんが。
まとめるとDNSへのDDoSは常に以下の三つの効果を生みます。
- 直接のターゲットへのDDoS
- 上位DNSへのDDoS
- ソースアドレスを改竄していた場合、このソースアドレスへのDDoS
通常のDDoSと違って2番目の問題を伴うことが特徴ですが、これはnamedがUDP53向けのパケットを何でもかんでもDNS Queryと考えて処理する残念な仕様だから発生します。
フォーマットエラーを認識するDNSやIDS等にてDNSをガードしたいものです。
by jyake