さくらVPS:NTPの脆弱性を利用したDDoS攻撃対策のまとめ

さくらVPS:NTPの脆弱性を利用したDDoS攻撃対策のまとめ

Posted at February 14,2014 1:23 AM
Tag:[NTP, sakura]

さくらVPSにおけるNTPの脆弱性を利用したDDoS攻撃対策についてまとめました。

1.はじめに

さくらインターネットから「NTPの脆弱性について」というメールが届きました。

インターネットでも掲載されているので一部を引用します。

【重要】NTPの脆弱性について

以下のサービスにおきまして、NTP(Network Time Protocol)の脆弱性を悪用したNTPリフレクション攻撃の事象が多く確認されており、コンピュータセキュリティ関連の情報発信などを行うJPCERTコーディネーションセンターからも注意喚起が発表されています。

 ▼対象サービス
  ・さくらのVPS
  ・さくらのクラウド
  ・さくらの専用サーバ
  ・専用サーバ
  ・専用サーバPlatform

 ▼JPCERTコーディネーションセンター
  「ntpd の monlist 機能を使った DDoS 攻撃に関する注意喚起」
  http://www.jpcert.or.jp/at/2014/at140001.html
お客様におかれましては、ntpdへの適切なアクセス制限が設定されているかを今一度ご確認いただき、不正に利用されないよう対策をお願いいたします。 なお、対策の一例として詳細情報をご案内いたしますのでご参照ください。

ということで、さくらVPSでのDDoS攻撃対策について調べてみました。

2.NTPについて

NTPとは「Network Time Protocol」の略で、ネットワークに接続するサーバやPCなど、機器自身がもっている時計情報について、正確な時刻に同期させるための通信プロトコルを指します。

NTPを利用したざっくりした時刻合わせの仕組みですが、まず絶対的な時刻をもつ親サーバがあり、それ以外のサーバやPCは、NTPを利用して親サーバの時刻情報を取得し、その時刻情報を使って自マシンの時間のずれを補正しす。

3.NTPの脆弱性を利用したDDoS攻撃とは

NTPの脆弱性を利用したDDoS(Distributed Denial of Service)攻撃について、図で解説します。

ntpの脆弱性を利用したDDoS攻撃

攻撃者は脆弱性のあるNTPサーバ(①)に対し、monlist(状態を確認するコマンド)のパケットを送信します。

パケットの送信元IPアドレスは、攻撃対象サーバまたはPC(②)のIPアドレスに詐称しておきます。

monlistのパケットを受信したサーバ①は、monlistの応答をサーバ②に向けて(間違って)送信します。

この仕組みで②のサーバに大量のmonlist応答パケットが送られるようです。

この攻撃では、サイズの小さいパケットで問い合わせ、被害者に対してサイズの大きな応答パケットを送信できることです。

monlistのパケットサイズは200~300バイト程度ですが、応答パケットのサイズは最大200倍以上にもなることがあるようです。

大量のパケットが②へ到達することで、②が利用している回線が輻輳し、正常な通信ができない状態となります。

4.対策

さくらインターネットでは、対策として、

  • 「restrict」を追加してアクセス制限を行う
  • 「disable monitor」を追加して monlist 機能を無効にする
  • NTPを使用していない場合は、NTPの停止または削除

の3点を挙げています。

デフォルトで「restrict」は設定されているので、「disable monitor」の追加方法とNTPの停止方法について紹介します。

なお、デフォルト状態であれば「disable monitor」は設定不要と思われます。これについては後述します。

5.ntpdのバージョンについて

ntpdのバージョンがntpd 4.2.7p26以前のものが影響を受けるようです。

ntpdのバージョンは以下のコマンドで確認できます。

$ ntpd --version
ntpd - NTP daemon program - Ver. 4.2.4p8

または

$ ntpq -c rv
assID=0 status=c011 sync_alarm, sync_unspec, 1 event, event_restart,
version="ntpd 4.2.4p8@1.1612-o Tue Nov 29 00:09:12 UTC 2011 (1)",
…後略…

ntpqコマンドはntpdが動作していることが前提となります。

私の使っているさくらVPSのバージョンは上記に示すとおり、4.2.4p8でした。

で、ntpdのバージョンアップ(ntpd 4.2.7p26(開発版))でも対処となります。

ここでは説明を割愛しますが、バージョンアップが可能な方は。

6.「disable monitor」の追加

/etc/ntp.confを編集します。一般ユーザーでは保存できないのでroot権限で編集します。

$ sudo vi /etc/ntp.conf

変更前

…前略…
# Enable writing of statistics records.
#statistics clockstats cryptostats loopstats peerstats

変更後

…前略…
# Enable writing of statistics records.
#statistics clockstats cryptostats loopstats peerstats
 
disable monitor

編集後、ntpdの再起動します。こちらもroot権限で実行が必要です。

$ sudo /etc/init.d/ntpd restart
[sudo] password for hoge:
Shutting down ntpd:                                        [  OK  ]
Starting ntpd:                                             [  OK  ]

7.NTPの停止

NTPを停止するには、ntpdコマンドを実行します。こちらもroot権限で実施します。

$ sudo /etc/init.d/ntpd stop
[sudo] password for hoge:
Shutting down ntpd:                                        [  OK  ]

8./etc/ntp.confの設定変更による動作の違い

ntp.confの設定を変更することでどのような挙動になるのか、実際に確認してみました。

確認するコマンドは「ntpdc」です。root権限で実行します。

$ sudo ntpdc -n -c monlist xxx.xxx.xxx.xxx

ntpdcはntpd専用のクエリツールで、ローカル及びリモートにある ntpd の状態の確認や設定変更ができます。

「xxx.xxx.xxx.xxx」の部分に利用しているさくらVPSサーバのIPアドレスを設定します。

「-n」はホスト名をDNS名前解決しないで表示します。

「-c command」で指定したコマンドを実行します。ここでは問題となっているmonlistを実行します。

デフォルト状態で実行するとタイムアウト(Request timed out)になります。

$ sudo ntpdc -n -c monlist xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx: timed out, nothing received
***Request timed out

次に、ntp.confにデフォルトで設定されている、すべてのアクセスを制限する意味を示す

restrict default ignore
restrict -6 default ignore

をコメントアウトしてntpd再起動後、ntpdcを実行すると通常の応答が返ってきました。

$ sudo ntpdc -n -c monlist xxx.xxx.xxx.xxx
remote address          port local address      count m ver code avgint  lstint
===============================================================================
xxx.xxx.xxx.xxx        33732 xxx.xxx.xxx.xxx        1 7 2      0      0       0
yyy.yyy.yyy.yyy          123 xxx.xxx.xxx.xxx        1 4 4    5d0      0       5

上記の設定に加えてdisable monitorを設定した状態で実行すると、「Server reports data not found」という応答に変わりました。

$ sudo ntpdc -n -c monlist xxx.xxx.xxx.xxx
***Server reports data not found

最後にデフォルトの状態に戻し、disable monitorのみ追加した状態で実行すると、最初と同様の「Request timed out」になりました。

$ sudo ntpdc -n -c monlist xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx: timed out, nothing received
***Request timed out

つまりデフォルト状態でdisable monitorを設定しても、先にrestrictの設定にひっかかるようなので、特に設定は不要のように思われます。

9.参考サイト

参考サイトは以下です。ありがとうございました。

ntpd.confの設定項目やそれぞれの意味についても色々調べましたので、そちらについては別途まとめをエントリーしたいと思います。

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)