2014年 07月 23日
Bind のバージョンを隠す方法: SUSE は YaST で
小規模ネットワークのイントラキャッシュサーバであれば、別に隠すことが重要なわけではないのですが、 Bind も脆弱性の多いソフトウェアなので、もしこれが外部に向けた DNSである場合は、バージョンを隠しておくことは重要です。バージョンをむき出しにしておくと、
「戸締り悪いな」
という印象があり、アタッカーが粘着的にほじくり返して、自分の気が付かなかった脆弱性を見つけられてしまうという事にもなりかねません。ということで、 Bind のバージョンを隠してしまう方法です。
まず、設定したての Bind のバージョンを確認してみます。
sles11:/~# dig @localhost chaos txt version.bind
; <<>> DiG 9.6-ESV-R5-P1 <<>> @localhost chaos txt version.bind
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9153
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;version.bind. CH TXT
;; ANSWER SECTION:
version.bind. 0 CH TXT "9.6-ESV-R5-P1"
;; AUTHORITY SECTION:
version.bind. 0 CH NS version.bind.
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jul 23 16:32:18 2014
;; MSG SIZE rcvd: 70
ということで、リモートホストでも同じ方法でバージョンが確認できます。専門にハッキングしているヒトからすると、これは”××のディストリビューション使っているな”とわかるものらしいので、他の脆弱性を晒されるヒントになりかねません。
yast でバージョンを隠します。
# yast から Network Service > DNS server > Basic Option で option のフィールドを開きます。

オプションリストの下の方に version というのがあるので、これを選択し、引数に "任意の文字列" (文字列は " Double Qurtation" で囲みます) をセットします。

これで DNS からどういったバージョン番号が帰ってくるか。
sles11:/~# dig @localhost chaos txt version.bind
; <<>> DiG 9.6-ESV-R5-P1 <<>> @localhost chaos txt version.bind
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7803
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;version.bind. CH TXT
;; ANSWER SECTION:
version.bind. 0 CH TXT "byebyebaby"
;; AUTHORITY SECTION:
version.bind. 0 CH NS version.bind.
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jul 23 16:34:56 2014
;; MSG SIZE rcvd: 67
sles11:/~#
ということで "bybybaby" が帰ってきました。
ここではオフザケなので、何でも良いのですが、あまりにふざけたバージョン文字列を返すと、逆効果で”その筋”のニンゲンを燃え立たせてしまう逆効果もあります。
無難に "unknown" を返すのが良いでしょう。
お問い合わせは
islandcenter.jp