NTPを利用するDDoSリフレクション攻撃に対する対策

今までに何度か耳にしている話ですが、「分散型サービス拒否(DDoS)攻撃」では様々な基本的インターネットプロトコルが攻撃に利用されています。今回は、正確な現在時刻を習得するためのプロトコル「Network Time Protocol(NTP)」が DDoS攻撃に利用されている事例です。1月10日、US-CERT は、NTP を利用した「DoSリフレクション(DRDoS)攻撃」について報告しました。日本でもこれを受けて JPCERT/CC から同様の報告が行われています。

NTP は、DNS や HTTP と比較すると、あまり知られていませんが、それらと同様に重要なプロトコルです。NTP は、ネットワークに接続された複数の端末間で時刻を同期するために使用されます。NTP が無いと、PC の時刻設定を手動で行わなければいけなかった時代へ戻ることになります。これらの攻撃に対する対策法は、10年前から知られています。しかし残念なことに、そのような対策法は十分に採用されていないと考えられます。

NTP の主な役割は、互換性のある機器に対し、GPS や原子時計の一種である「セシウム時計」といった高精度の情報源から時刻を配信するものです。非常に残念なことですが、あなたの PC 内の時計は必ずしも正確ではありません。通常クォーツ時計には、約 1 ppm(百万分率)の誤差率、または 1秒間に 1マイクロ秒の進みと遅れが存在します。これを言い換えると、1カ月に約半秒間の時刻の変動があることになり、さほど悪いものには思えませんが、積み重なることにより、大きな誤差になることがあります。

我々は、すべての時点で時刻が進んでいるのか、または遅れているのかを把握できませんし、わずかな温度変化がクォーツ時計に大きな影響を与えます。これに加え、上述の半秒間に、現在の標準よりも遅い 1GHz のプロセッサは、5億クロックサイクルの処理を行います。クラスタシステムや分散システムにおいて、現在の時刻を知るということは極めて重要なものになります。

NTP端末は、現在の時刻が何時であるかを照らし合わせるため、端末同士で UDPパケットを交換します。十分な設定のされたクライアントは、より正確な時間を取得するために 3つ以上の端末を参照します。端末が参照元の時計から大きく外れている場合、時刻はもはや正確でないと考え、クロック速度に対しわずかに補正します。これにより、いかなる実行中のソフトウェアも中断させないために、システム時刻を徐々に変更させることが可能になります。これは、重要な問題への直接的な対策法です。

残念なことに、サイバー犯罪者たちは、この重要なサービスを悪用し DDoS攻撃を実行します。NTPサーバは、公に晒されており、多くの場合どこからの接続も受け入れます。NTPサーバの状態を確認する機能であるコマンド「monlist」は、UDP 経由で、直近に接続した端末の応答を要求する NTPサーバに送信されます。

これは、問題が起こった際には便利な対策方法ですが、攻撃者にとって最適な攻撃ツールにもなりえます。ソースアドレスを標的の IPアドレスに偽装した小さなパケットを NTPサーバに送信すると、サーバは、適切に大量のデータをその標的に送信します。ビジー状態のサーバほど、より攻撃は増幅されます。

IT管理者は、これらの攻撃に気付かず加担しないためにできる対策があります。NTP は、IPv6 に対しても機能するため、IPv6 はこの問題の対策とは無関係です。まず第1 に、未使用のサービスを無効化してください。いまだに「Character Generator Protocol(CHARGEN)」を提供している PC の数を知ったら驚くことでしょう。PC が NTPサーバとして使用されていなければ、NTPサーバのソフトウェアを実行させておく必要はありません。これは、他の未使用のサービスやプロトコルにも同様のことが言えます。

そして第2 に、実行するサービスの環境設定をよく確認してください。NTP の設定により、monlist 機能を無効にする、もしくはアクセスを制限することで攻撃に利用されることを防ぐことができます。少なくとも我々の手元にある NTP のバージョンでは、コマンド「monlist」は初期設定で使用可能になっています。しかし、設定変更とその確認には時間を要し、ユーザ側であらゆるオプションの危険性を調べる必要があります。より良い対策方法は、アプリケーション側が妥当で安全な初期設定を提供することです。

第3 に、これは最も重要なことですが、IPアドレスの偽装は、ネットワークエッジで検出およびブロックされるべきです。偽装に対するフィルタリング技術である「BCP-38」の導入は、多くの場合不可能に思えますが、それほど悪いものではありません。10年前に BCP-38 を使用するため取り入れたグローバルバックボーンを知っています。重要なことは、ネットワークエッジにのみ集中するということです。ネットワークの中心で行われた場合、その限りではありません。

簡易化した対策では、エッジルーティング機器をネットワークからの受信パケットにのみ許可するように設定し、パケットに対する応答がその受信したネットワークへ正確に送り返されるようにします。これは、NTP や CHARGEN、DNS の偽装を用いた攻撃がユーザのネットワーク資源を利用し、他者へ攻撃を行うのを防ぐだけでなく、ユーザのネットワークと交わるすべての IPアドレスの偽装を防ぐことができます。

プロトコルに対するその場しのぎの対応は、古いものになりました。BCP-38 は、インターネットセキュリティに対する基本的なものです。より多くのネットワークが BCP-38 に準拠することで、ユーザのセキュリティ資源は、DDoS攻撃への資源を流用させることができ、いまだ適切な対策法のない問題への取り組みを始めることができます。

BCP-38 は、2000年5月に公開されました。つまり、最新の DDoS活動でさえ、13年以上前から排除する方法が知られていました。それは、完全に無料であるものの、実装には技術的な資源を必要とします。技術的な資源はかかりますが、ユーザのネットワークが偽装された DDoS攻撃に加担していないと自信を持って言えるでしょうか?

残念ながら、BCP-38 の実装は、ユーザのネットワーク資源が DDoS攻撃に利用されることのみを防ぎ、攻撃を受けることからは防げません。しかし、これらの対策が広く伝わり、多くの人々にインターネットの適切な実践方法が奨励されれば、上述の IPアドレスの偽装を用いた攻撃は、長期的には最小限に抑えられる可能性があります。

参考記事:

  • A Free Solution For DDoS Reflection Attacks: A Decade In Waiting
    by Ben April (Senior Threat Researcher)
  • 翻訳:木内 牧(Core Technology Marketing, TrendLabs)