ネットワークタイムプロトコル(NTP)は、RFC 5905で規定されているように、階層的な時刻ソースとタイムスタンプ付きメッセージの交換を用いて、ネットワークに接続されたデバイス間でコンピュータシステムの時計を同期させるネットワークプロトコルです。 正確な時刻は、インシデント調査、TLS証明書の検証やKerberos認証などのセキュリティ機能、および運用の信頼性にとって極めて重要です。これは、クロックのドリフトが認証の失敗や監査証拠の破損を引き起こす可能性があるためです。 組織は、複数の信頼できる内部時刻ソース、UDPポート123に対するファイアウォールの制限、認証メカニズム、およびドリフトの防止やリフレクション攻撃・クロックスプーフィングからの保護を目的とした監視など、NTPセキュリティのベストプラクティスを実装する必要があります。
NTPの仕組み
NTPクライアントは、ローカルクロックが1つ以上の基準サーバーとどの程度ずれているかを推定し、それに基づいてクロックを徐々に調整します。サーバーは「ストラタ」と呼ばれる階層に分類されており、ストラタ1のサーバーはGPSなどの基準クロックに直接接続されています。
- クライアントによるリクエストの送信:クライアントは、ポート123上のNTPサーバーにUDPパケットを送信し、そのパケットに自身の送信タイムスタンプを記録します。
- サーバーの応答:サーバーは、リクエストを受信した時刻と応答を送信した時刻を記録し、クライアントの元のタイムスタンプとともに、これら両方のタイムスタンプを返します。
- クライアントによる到着時刻の記録:クライアントは応答が到着した時刻を記録し、これにより通信のやり取りに関する4つのタイムスタンプが得られます。
- オフセットと遅延の計算:クライアントは4つのタイムスタンプから、サーバーとの往復遅延およびサーバーに対する自身のクロックオフセットを計算します。
- 選択とフィルタリング:複数のサーバーが設定されている場合、クライアントはサンプルを比較し、信頼性の低いソースを排除して、最適な候補を選択します。
- クロック・ディシプリン:クライアントは、オフセットを解消するためにクロックを徐々に調整します。クロックの調整は、誤差が大きい場合にのみ行われます。
このやり取りは継続的に繰り返され、時計が安定するにつれてポーリング間隔は長くなります。NTPはデフォルトではサーバーの認証を行わないため、送信元の信頼性が重要な場合は、対称鍵やネットワークタイムセキュリティ(NTS)などのオプションのメカニズムが使用されます。
NTPのよくある問題
NTPデーモンは、パニックしきい値(リファレンス実装ではデフォルトで1000秒)を超えてずれている時計の修正を拒否する場合があります。そのため、バッテリーが切れている、または日付が間違っているデバイスは、管理者が手動で時刻を設定するか、stepオプションを指定してデーモンを起動するまで、誤った状態のままとなります。
サーバーを1台のみ設定すると、クライアントは障害のあるソースを検出する手段がなくなります。そのサーバーがずれたり誤った情報を送信したりした場合、すべてのクライアントがそれに追従してしまいます。複数の独立したソースを使用することで、選択アルゴリズムが外れ値を排除できるようになります。
DNS および Web トラフィックは許可するが、UDP ポート 123 をブロックするファイアウォールルールでは、明らかなエラーが表示されないままクライアントの同期が失われます。症状としては、オフセットの増加、ストラタム 16 ステータス、またはピアにまったく接続できない状態などが挙げられます。ステートフルなデバイスを通じて、送信リクエストと返信トラフィックの両方を確認してください。
任意のアドレスからの監視や制御のクエリに応答するサーバーは、第三者に対するリフレクション攻撃に悪用される可能性があります。クエリや制御へのアクセスを信頼できるネットワークに限定し、ソフトウェアのパッチを常に適用しておく必要があります。
ゲストは、一時停止、スナップショットの復元、またはホストの移行後に時刻がずれたり、急激に変化したりすることがあります。ハイパーバイザーの時刻同期機能と並行してゲストNTPクライアントを実行すると、両者が時刻の制御を巡って競合する可能性があるため、どちらかの方法を慎重に選択してください。