DNS キャッシュ ポイズニングの対策パッチが各コミュニティからリリースされる中、安定性と堅牢性が大きな売りの Yamaha ルータ RT シリーズはどうだったのでしょうか。

対策のために使えなくなってしまった機能

ヤマハのルータ RT シリーズも同様に脆弱性を抱えていたのですが、告知は 7月だったものの、対策版のファーム提供は 8月25日になってからやっと、ということで、ネットワーク管理者は気が気でなかったと思います。

さらにショックを受けたのは、ファーム適用後のユーザ側の対策です。

dns srcport xxxxx-xxxxx というポート指定を追加したり、必要に応じて ip filter のソースポート指定を合わせて変更したり、この辺は良いのですが、対策のうち 1つとして次のくだりがあります。

  • ルーターの設定を変更し、DNSリカーシブサーバー機能を無効にする。dns serviceコマンドの引数をoff(使用しない)に設定します。同時に、DHCPおよびIPCP MSEXTでのDNSサーバーの通知方法から、ルーター自身を外します。

いくつかある対策が AND なのか OR なのか書かれていませんが、必須条件なのだとしたら残念なことです。

RT シリーズにはもともと DNS リカーシブサーバ機能があり、DNS キャッシュ + αの機能をルータ自身が提供しています。そいつを OFF にしてしまえば確かに毒を盛られる → ヤマハにクレームが来る可能性は排除できるでしょう。でもそれって、今日から BIND では recursion を絶対に使わないでください、と言っているようなものです。

DNS リカーシブサーバが便利だった理由

結構この DNS リカーシブサーバ機能、ネットワーク管理者にとっては便利な代物だったのです。

例えば、DNS クライアントからの問合せ内容によって、聞きに行く上位の DNS サーバを振り分けることができました。 ((dns server select コマンド))

  • 自分の LAN ローカルなサーバ … ローカルな DNS サーバに
  • フレッツ・スクウェア内のサーバ … フレッツの DNS サーバに
  • インターネット上のサーバ … プロバイダ (ISP) が提供する DNS サーバに

という具合です。一般的な DNS サーバの実装は、自分が知っている / キャッシュしているドメイン名についての問い合わせは自分で答え、分からないドメイン名はすべて、特定の上位 DNS サーバ (例えばプロバイダの提供する DNS サーバ) に聞きに行くようになっています。フレッツだけお問い合わせはコチラ、という例外は基本的にできなければ、する必要もなかったわけです。

またルータが DNS リカーシブサーバ機能を併せ持つもう一つのメリットとして、ローカルネットワークの中でもっとも可用性が高い点があります。乱暴に言えば、24時間 365日ほとんどいつでも クライアントからの問い合わせに答えてくれるわけです。

自宅のネットワークでは、複数の内向け DNS サーバが稼働しています。これが BIND にせよ、Microsoft の DNS サーバにせよ、どうしてもセキュリティアップデートのために OS を再起動したり、やれ物理 PC の移動でメンテだの、時々人為的に落とすわけです。全部一度に落とすことはまずありませんが。

そこで、DHCP サーバが返す DNS サーバとして、ルータ自身をご案内することで、ルータの負担は増えますが、内向け DNS サーバを一時的にメンテしていようが、利用者が外のショッピングサイト見に行く分には必ずつながる高可用性が得られるわけです。

葉っぱが食われそうだからって、枝ごと切るのはもったいない

ヤマハのアナウンスがあった時点で、しぶしぶ文句言いながらも DNS リカーシブサーバは使わない構成に変えてはみました。フレッツ・スクウェアは無くてもガンダムは見られる大きな影響はないので、今後使わないことにしました。

今回のダン・カミンスキー氏の指摘は、DNS の仕様自体に対する問題提起も含んでいるらしく、「一般的な対策」で書いたような内容は、確率を下げて危険を緩和する役にしか立ちません。ヤマハ RT シリーズの DNS リカーシブサーバだろうが、ヤマハルータの内側に置かれた内向け DNS だろうが、外に問い合わせを行い、偽のサーバにパケットを送りつけられる危険性は同じだと思います。

ただヤマハ RT シリーズは、色々なネットワーク構成を柔軟にサポートするために、パケットを通すルータとしての実装だけで複雑です。新しい攻撃方法との絡みで、リカーシブサーバを on にできない理由があるのかもしれませんが、セキュリティのために、魅力的な機能を 1つ使えなくしてしまうわけで、もったいないですね。