キャッシュサーバとしているとき、DNSが情報を得るため目的サーバに問い合わせそのレスが戻る前に悪意のある情報を送り込む。
このときサーバは自分ものとわかるようにIDをつける(UDP通信なため)がこれが16bitしかないので、悪意のあるサイトからランダムに送りつけられると偶然一致し、間違ったデータをキャッシュされのっとられる。
しかしながら、あくまで確率を下げることしかできない。DNSの宿命?
キャッシュサーバは外部から利用させない
acl "localnet" {
192.168.0.0/16;
127.0.0.1;
};
(略)
view "local" {
match-clients { "localnet"; };
recursion yes; <=再起的な問い合わせを許可
(略)
view "world" {
match-clients { any; };
recursion no; <=再起的な問い合わせを禁止
問い合わせ元ポートをランダムにする
bindをバージョンアップ
キャッシュサーバのチェックツール:自分が使用できるキャッシュサーバのポートがランダムかどうかは、porttest.dns-oarc.net の TXT レコードを検索すると結果をテキストで返してくれるようです。 26回中1回のときは同じポートでだめPOORを返し、26回中26ポートはランダムでGREATを返す 当然GREATがパッチ後
パッチ前
$ dig +short porttest.dns-oarc.net TXT @xxx.xxx.xxx.xxx
porttest.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
"xxx.xxx is GREAT: 26 queries in 6.5 seconds from 26 ports with std dev 15453"
^^^^^
パッチ後
$ dig +short porttest.dns-oarc.net TXT @yyy.yyy.yyy.yyy
porttest.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
"yyy.yyy.yyy.yyy is POOR: 26 queries in 6.5 seconds from 1 ports with std dev 0"
^^^^
https://www.dns-oarc.net/oarc/services/dnsentropy
http://www.janog.gr.jp/meeting/janog19/files/DNS_Minda.pdf
https://www.tokai-ic.or.jp/kaminsky.html
DDosをDNSを利用しておおなう。はじめに準備段階で任意の文字が利用できるTXTフィールドを持つ悪意DNSサーバサイトを用意し、踏み台となるDNSサーバからこの悪意DNSサーバにアクセスさせる。これはキャッシュサーバは外部から利用すればよい。その後悪意のあるデータがキャッシュされる。
次に、攻撃対象サーバのIPを偽装し、複数用意した踏み台サーバに悪意DNSサーバに再帰的な問合せをおこなわせると踏み台サーバから大量のパケットが流れ込む。
対策はDNS の再帰的な問合せを外部からさせない。
http://www.cyberpolice.go.jp/server/rd_env/pdf/20060711_DNS-DDoS.pdf