BIND9 パッチ · 1 min read · Oct 28, 2025

Debian EtchでDNSキャッシュポイズニングからBIND9をパッチする方法

Debian EtchでDNSキャッシュポイズニングからBIND9をパッチする方法

Version 1.0
Author: Falko Timme

この文書では、Debian Etchシステム上のBIND9ネームサーバーを修正し、DNSキャッシュポイズニングに対して脆弱でなくする方法を説明します。

この文書は、いかなる種類の保証もなく提供されます!これがあなたにとって機能するという保証はありません!

1 BINDが脆弱かどうかの確認

以下のコマンドをネームサーバーに対して実行して、脆弱かどうかを確認します(ns1.example.comを自分のネームサーバーアドレスに置き換えてください):

dig +short @ns1.example.com porttest.dns-oarc.net TXT 

mh1:~# dig +short @ns1.example.com porttest.dns-oarc.net TXT
z.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.
“1.2.3.4 is POOR: 26 queries in 4.4 seconds from 1 ports with std dev 0.00”
mh1:~#

POORはBINDが脆弱であることを示しています。この場合、BINDを必ずパッチする必要があります。

全く応答がない場合、これはあなたのDNSサーバーが再帰的リゾルバではないことを意味します。つまり、権限のないドメインに対するクエリには応答しません。この場合、キャッシュポイズニングに対して脆弱ではありませんが、それでもBINDを更新することを強くお勧めします!

2 BINDのパッチ

これはパッチというよりも更新です。単に実行してください。

apt-get install bind9 bind9-host

これにより、Debianリポジトリから更新されたBINDパッケージがインストールされます。

その後、/etc/bind/named.confを開き、オプションセクションを修正します。再帰的リゾルバが必要ない場合(つまり、ネームサーバーが責任を持つドメインに対するクエリのみを応答する場合)、allow-recursion { none; };を追加します。これにより、他のドメインのキャッシュがオフになります。追加すべき2行目はdnssec-enable yes;です。これにより、BINDはハッカーが推測しにくいランダムなポートでクエリに応答します(第1章のdigコマンドの応答を思い出してください:[…]26 queries in 4.4 seconds from 1 ports[…] - BINDは1つのポートでのみ応答していました…)。

修正: Alan Cleggから以下のメールを受け取りました:

おはようございます! あなたの書いた記事を読みました: https://www.howtoforge.com/how-to-patch-bind-to-avoid-cache-poisoning-debian-etch いくつかのコメントがあります。 まず、これを書いてくれてありがとう。この問題を修正するためにできるだけ多くの人が必要です。 次に、修正すべき小さなエラーがあります。あなたは次のように述べています: “追加すべき2行目はdnssec-enable yes;です。これにより、BINDはハッカーが推測しにくいランダムなポートでクエリに応答します” 実際には、この行は、質問において”DO”(DNSSEC OK)ビットが設定されているときに、サーバーがDNSSECレコードで応答することを可能にします。 人々が探すべきは、次のような文です: query-source […] port XX; ここで、XXはこのシステムから送信されるクエリのための固定ポート番号です。これにより、新しいバージョンのBINDがUDPソースポートをランダム化するために行うすべてのことが元に戻ります。 質問があれば、気軽にメールを送ってください。 Alan Clegg
インターネットシステムコンソーシアム(ISC)
トレーニングとサポート

vi /etc/bind/named.conf

| [...] options { pid-file "/var/run/bind/run/named.pid"; directory "/etc/bind"; auth-nxdomain no; allow-recursion { none; }; dnssec-enable yes; /* * あなたと通信したいネームサーバーの間にファイアウォールがある場合、 * 以下のquery-sourceディレクティブのコメントを外す必要があるかもしれません。 * BINDの以前のバージョンは常にポート53を使用して質問を行いましたが、 * BIND 8.1はデフォルトで特権のないポートを使用します。 */ // query-source address * port 53; }; [...] |

その後、BINDを再起動します:

/etc/init.d/bind9 restart

(ISPConfigを使用している場合、変更はISPConfigによって上書きされます。これを防ぐために、named.confテンプレートファイル/root/ispconfig/isp/conf/named.conf.masterを取得し、上記のように修正し、修正されたテンプレートを/root/ispconfig/isp/conf/customized_templatesディレクトリに保存します => /root/ispconfig/isp/conf/customized_templates/named.conf.master。/etc/bind/named.confも上記のように修正してください。)

3 再度BINDを確認

今、再び第1章のクエリを実行します:

dig +short @ns1.example.com porttest.dns-oarc.net TXT

すべてがうまくいけば、今度はPOORの代わりにGOODと表示され、1つのポート以上を使用しているはずです:

mh1:~# dig +short @ns1.example.com porttest.dns-oarc.net TXT
z.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.
“1.2.3.4 is GOOD: 26 queries in 4.4 seconds from 26 ports with std dev 20195.32”
mh1:~#

おめでとうございます、BINDを修正しました!

ISPのネームサーバーに対してもdigコマンドを実行して、彼らのネームサーバーがまだ脆弱かどうかを確認できます。もし脆弱であれば、ISPにネームサーバーを更新するよう促してください!

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。