この連載ではJANOGに関連する話題と私が興味を持っている技術的な話題を交互にお話しているわけですが,前回がJANOG18のお話でしたので今回は少し技術的なお話をしてみたいと思います。

 インターネットというものは,今や「誰でも」接続できます。その上で,自分の考えたことが「何でも」できる環境といってよいでしょう。そこがインターネット最大の魅力なわけです。ただ,この魅力も裏を返すと最大のウィークポイントとなってしまいます。

 つまり,誰でも,何でもできるということは,そこで悪意を持ってしまえば,極端な話,悪いこともできてしまうのです。その結果が,昨今叫ばれているマルウエアの氾濫です。これらの不正なソフトウエアが自分や他のコンピュータに進入して,データの盗用など様々な被害を及ぼしています。その中の一つにDoS(denial of service)アタックやDDoS(distributed denial of service)アタックというものがあります。

攻撃対象のサービスを妨害するDoSアタック

 このDoSアタックというのは,アタック対象となるサーバーのサービスを妨害するというものです。具体的には,対象のサーバーに対して,過剰なアクセスや過剰なトラフィックを与えます。こうして,サーバーを高負荷の状態に陥れたり,サーバーが接続している回線を輻輳させ,他の正当なユーザーからのアクセスを妨害したりするのです。

 最近のサーバーなら,頑張れば数Gビット/秒のトラフィックをさばくことができますし,それを接続するプロバイダも数十Gビット/秒という膨大なトラフィックをさばけるようになっています。ですから,それほど影響が大きくないと思われる方もいらっしゃるかもしれません。

 ところが,実際のDoSアタックで生成されるトラフィックは,対象のサーバーの付近では,100Gビット/秒にも及ぶトラフィックになることがあるのです。このため,以前と変わらず大きな問題となっています。

 このようなDoSアタックの手法はいくつか考えられていますが,今回はこれらの中から比較的対応が難しく,多くの皆さんの協力がなければ対策を講じることのできない攻撃手法「DNS Amplification Attacks(DNS Amp)」について詳しく見てみることにしましょう。

DNS Ampに用いられる二つの手口

 DNS Ampを成立させるための技術は二つあります。一つはIP Spoofing,もう一つは,DNS Open Relay Resolverです。

 IP SpoofingはIPアドレスを詐称する技術です。基本的に,インターネットで利用するIP(internet protocol)では,パケットの先頭に送信元アドレスと送信先アドレスを付けて,送信先ホストに届けます。受信側では,適切な処理を施した返送パケットを生成し,受信したパケットの送信元アドレスを,送信先アドレスに変えて返送します。

 このとき,送信元アドレスが詐称されていれば,まったく関係のないホストにパケットが到着することになります。送信元ホストを攻撃対象のアドレスにし,そのパケットを無防備なホストに送りつければ,そのホストがパケットを攻撃対象に返信します。こうすれば別のホストを経由して攻撃できるわけです。

 この無防備なホストは,「中継ホスト」とか「踏み台」と呼ばれます。踏み台などと言われるとなかなかいやな感じがしますね。踏み台とされるホストは,どのようなホストでもなりえますが,適切な設定をしていれば,攻撃に加担することを回避できます。「無防備」で「ずさんな管理」をしている「油断した」ホストだけが踏み台となるわけです。

 ただ,この踏み台となるホストが1台では,それほど大きな問題にはなりません。ここに,(1)踏み台ホストで返送するパケットの大きさを増幅する,(2)大量の踏み台ホストを用意して一斉に攻撃する,という二つを組み合わせることで,直接攻撃するケースに比べて数十,数百倍という攻撃能力を持つようになるわけです。このうち(1)を実行するために「DNS Open Relay Resolver」を使います。

パケット・サイズを拡大して送る

 DNSはホスト名の問い合わせに対してIPアドレスを返すという,インターネットには欠かせないサービスの一つです。DNSには,IPアドレスとホスト名を変換する以外に,ホストの情報やメールサーバーの情報を問い合わせるといったさまざまな機能があります。これらは,リソース・レコードというレコードに書かれています。アドレスであれば「Aレコード(名前に対するIPアドレスを示すレコード)」,メールサーバーであれば「MXレコード(該当ドメインのメールサーバーのアドレスを示すレコード)」となります。

 このなかに,テキスト情報をやりとりするための「TXTレコード」というものがあります。比較的大きな情報を扱えるのが特徴です。今回説明する攻撃において,このTXTレコードをどのように使うかを詳しく見ていきましょう(図1)。

図1 DNS Ampの仕組み
DNS Ampでは,乗っ取られたホストがDNSサーバーにTXTレコードを要求するパケットを送ります。このとき,要求パケットの送信元アドレスを攻撃対象のIPアドレスにしておくと,DNSサーバーは応答パケットを攻撃対象に“返信”します。このようにして,サイズの小さい要求パケットがサイズの大きい応答パケットに“増幅”されます。


 まず,あらかじめ無防備なサーバーを乗っ取ります。そして,DNS設定ファイルの特定のTXTレコードを大きな情報に書き換えて,インターネット上に公開されているDNSサーバーにキャッシュさせます。次に,攻撃対象を送信元アドレスとするIP Spoofingされたパケットで,TXTレコードをキャッシュしたDNSサーバーに該当するTXTレコードを問い合わせます。問い合わせるパケットのサイズはごく小さいものです。それらの問い合わせ要求を受け取ったDNSサーバーはTXTレコードを返信します。返信先は攻撃対象になります。

 このようにすれば,サイズが小さい問い合わせ要求をDNSサーバーで数十倍,数百倍という大きな応答パケットにして攻撃できるのです。想像してみてください。例えば,1万台のホストが3000バイトのデータを返送した場合,10000×3000=30Mバイトとなります。これを1秒間に10回繰り返したとすれば,300Mバイト/秒=2.4Gビット/秒というトラフィックになって攻撃できてしまうわけです。こうなると,いくら100Mビット/秒のFTTHにサーバーをつないでいたとしてもひとたまりもありません。サーバーは一瞬にして通常のサービスを提供できなくなってしまいます。

さて,対策は?

 というわけで,こういう攻撃への対策を講じる必要があります。一番効果的な対策は,DNSのオープンリレーな設定をやめることです。オープンリレーとは,インターネットからの問い合わせをすべて受け付けて処理することです。DNSのコンテンツ・サーバー,つまり,あるドメインのプライマリ,またはセカンダリのDNSサーバーとなっているものは,インターネットから広く問い合わせを受ける必要があるので実質的な対策は難しいでしょう。しかし,各ネットワークで運用されているような,ネットワークからの問い合わせだけを処理しているような「リゾルバ(DNSサーバー)」については,インターネットからの問い合わせに対して応答する必要はなく,特定のネットワークからだけの問い合わせを受け付ければよいわけです。

 実はDNS Ampで最も多く利用されているDNSサーバーは,このような単なるリゾルバにもかかわらず,インターネットから広く問い合わせを受けてしまう「オープンリレーなリゾルバ」なのです。このようなオープンリレーなリゾルバの設定を変更するだけで,DNS Ampのような攻撃はかなり少なくなるわけです。

 もう一つの対策として,IP Spoofing対策を適切に講じることが挙げられます。IP Spoofingは,送信元アドレスを詐称しているわけですから,ルーターなどで,詐称されたアドレスを利用したパケットを中継しないようなパケット・フィルタを適用することで対策が可能です。

 DNS AmpをはじめとするDoSアタックによって引き起こされる攻撃については,攻撃対象となるサーバー自身での対策は非常に難しいものがあります。この場合は,むしろインターネットに接続している各ホストがそのような攻撃を引きこさないように注意深く運用していく責任を負っていると言えるでしょう。

 ここで説明したDNS Ampに関する具体的な手法,対策については,2006年7月に東京で開催されたJANOG18 Meetingにおいて,IIJの松崎さんが解説されています。もしみなさんの中でDNSサーバーを運用している方がいらっしゃいましたら,今一度,自分の周りのDNSサーバーの設定を見直して,「踏み台」にされる可能性がないかを確認してみてはいかがでしょうか?

■用語>> DNS Amp

■近藤 邦昭(こんどう くにあき)

日本ネットワーク・オペレーターズ・グループ(JANOG)の会長。1970年北海道生まれ。神奈川工科大学・情報工学科修了。1992年に某ソフトハウスに入社。主に通信系ソフトウエアの設計・開発に従事。1995年,株式会社ドリーム・トレイン・インターネットに入社し,バックボーン・ネットワークの設計を行う。1997年,株式会社インターネットイニシアティブに入社,BGP4の監視・運用ツールの作成,新規プロトコル開発を行う。2002年,株式会社インテック・ネットコアに入社。2006年には独立,現在に至る。