« Re: for 文を setTimeout に変換する | メイン | CGI::Application 用にディスパッチャ兼パーマリンクジェネレータを書いてみた »

2007年11月12日

djbdns にパッチをあてて Anti-DNS Pinning 対策

 Anti-DNS Pinning 攻撃について、以前から DNS キャッシュサーバで対処すべきだよねという話はしていたのですが、ふと思い立って、djbdns 用のパッチを書いてみました (djbdns-antidns-pinning-block.patch)。下のログをご覧いただければ明らかなように、外部の DNS キャッシュに問い合わせると 127.0.0.1 が返ってくるアドレスについて、ローカルホストで動作している DNS キャッシュは 169.254.0.0 という無効なアドレスを返しています。本当は不正なアドレスを削除して NXDOMAIN を返すようにするべきなのでしょうが、パケットサイズの調整等が面倒なので、とりあえずは適当なアドレスを埋め込む方向で。

 このパッチをちゃんとしたものにすべきかどうかはともかくとして、同様の対策はクローラーとかその手のものを運用する場合にも必要になったりします。そもそもインターネット上にあるDNSサーバがプライベートアドレスを返してくるというのがおかしいのですから、DNS キャッシュレベルでの対策が早く一般化すればいいなと思います。もっとも、Gungho 等、自前で対策コードを実装しているソフトもあったりするんですけど :-p

$ dig 127-0-0-1.xxx.yy @zzzzzzzzz
; <<>> DiG 9.3.3rc2 <<>> 127-0-0-1.xxx.yy @zzzzzzzz
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53374
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 5

;; QUESTION SECTION:
;127-0-0-1.xxx.yy.              IN      A

;; ANSWER SECTION:
127-0-0-1.xxx.yy.       60      IN      A       127.0.0.1

(略)
[kazuho@kazdev-centos5 djbdns-1.05]$ dig 127-0-0-1.xxx.yy @localhost

; <<>> DiG 9.3.3rc2 <<>> 127-0-0-1.xxx.yy @localhost
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12357
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;127-0-0-1.xxx.yy.              IN      A

;; ANSWER SECTION:
127-0-0-1.xxx.yy.       60      IN      A       169.254.0.0

(略)

投稿者 kazuho : 2007年11月12日 16:09 このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

トラックバック

このエントリーのトラックバックURL:
http://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/1639