要約
- Sharon Goldberg、Aanchal Malhotra、Isaac E. Cohen、Erik Brakkeは、旧版
ntpdが要求と一致しない起点タイムスタンプを持つKiss-o'-Death応答まで受け入れることを確かめた。 - 構成済みサーバーごとに偽造パケットを一個送れば、攻撃者が選んだ期間だけ同期を失わせ得た。拒否を要求に結び付け、後退時間を端末側で制限することが恒久的な教訓となった。
NTPクライアントは、時刻を尋ね続けるだけの単純な存在ではない。サーバーを酷使しないため、相手から頻度を落とすよう求められれば従う。その協調性が、2015年に報告された攻撃の入口になった。
Aanchal Malhotra、Isaac E. Cohen、Erik Brakke、Sharon Goldbergの論文が扱ったのは、Kiss-o'-Death、通称KoDという応答である。モード4、うるう秒指示3、階層0という形を取り、参照ID欄にはRATE、DENY、RSTRなど四文字のコードが入る。混雑する公共サーバーが過剰なクライアントを遠ざけるための仕組みだ。
仕組みの目的ではなく、受け手が与えた権限に欠陥があった。研究チームが試したntpd 4.2.6と4.2.8では、KoDが自分の要求への返答かどうかを確認しないまま、そこに示されたポーリング間隔を採用した。サーバーのアドレスを詐称できる経路外の攻撃者は、通信を盗み見る必要さえなかった。
未使用だった照合材料
通常のNTP往復には、応答を要求に結び付ける値がすでにある。クライアントのモード3要求には送信タイムスタンプが入り、サーバーのモード4応答はそれを起点タイムスタンプとして返す。TEST2はこの値を未完了の要求と照合する。暗号学的な本人確認ではないが、少なくとも「この答えは、いま出した問いに対応する」と確認できる。
旧版のKoD処理は、その検査を通していなかった。形式だけ整えた偽の応答でも、負の命令として通用したのである。ここで奪われたのは現在時刻ではなく、これから質問する権利だった。
ポール値は2の累乗で待ち時間を表す。17なら2^17秒、約36時間である。実装は想定範囲を超える値も受け入れ、25ならおよそ一年に達する。送信者の負担は一瞬だが、受信者が抱える状態は長い。制御面では、この寿命の非対称性がパケットサイズより重要だった。
RFC 5905はRATEを受けた際にパケット間隔を延ばす意図を定める。公開済みの訂正では、元の文面にあった逆向きの動詞も修正されている。仕様の一語が実装の安全性を自動的に保証するわけではない。どの入力を本物と見なし、どれほど長く従うかは、別々に設計する必要がある。
時刻源を一つずつ消す
直接攻撃には、対象クライアントのIPアドレスと、利用中のサーバーが必要だった。論文はそのサーバーを知る方法も示す。同期済みのIPv4クライアントにモード3の問い合わせを送り、返ってくるモード4応答の参照IDを見ると、現在のサーバーアドレスが分かる場合がある。
攻撃者は、そのサーバーから来たように見えるKoDを偽造する。クライアントが次のサーバーへ切り替えたら、同じことを繰り返す。必要なのは毎秒何万個ものパケットではない。構成された時刻源ごとに、受理される命令が一個あればよい。
実験では、三つの公開サーバーを使うntpd 4.2.8p2に対し、約一時間半で三つ目のKoDまで到達した。その後、実験を止めてもクライアントは少なくとも次の50時間、問い合わせを再開しなかった。偽造パケットが指定した最小待ち時間は約36時間だった。
2015年当時のインターネット計測では、攻撃の第一段階に必要な問い合わせへ応答するIPv4アドレスが1300万超と推定された。ただし、これは現在の脆弱台数ではない。KoDに反応すること、同期先がIPv4で参照IDから見えることなど、別の条件も必要だった。計測値は当時の前提の広がりを示すもので、永続的な母数ではない。
狂わせる攻撃と、補正を奪う攻撃
KoD一個が時計を任意の時刻に書き換えたわけではない。外部サンプルを止め、クライアントを自走状態に置いた。以後のずれは、物理発振器、仮想化、CPU負荷、OSや同期実装によって変わる。
安定した物理機なら緩やかにずれるかもしれない。仮想マシンでは短時間に不確かさが広がることもある。ログ、証明書検査、認証、分散処理、予約実行への影響も一様ではない。したがって事実として言えるのは、「攻撃者が補正源を長時間取り除けた」ことまでである。どの時刻へ、いつ到達するかまで保証する攻撃ではない。
運用記録もこの境界に合わせるべきだ。最後の正常同期、KoDの送信元とコード、起点タイムスタンプの検査結果、適用した間隔、利用可能なサーバー数、ホールドオーバー中の推定誤差を残す。沈黙の後に時刻ずれだけ見つけても、原因と影響を精密には結べない。
修正は攻撃コストを変えた
NTP ProjectのBug 2901告知によると、直接詐称への修正は4.2.8p4に入った。KoDでも起点タイムスタンプを検査し、実在する要求の値を返していなければ受け付けない。開発系列では4.3.77より前が該当するとされる。
これは送信元を暗号的に認証するものではない。それでも、経路外から値を発明するだけの攻撃は封じた。論文が「priming pump」と呼ぶ残余手段では、被害者のアドレスを詐称した要求を本物のサーバーへ多数送り、サーバー自身に正しい起点タイムスタンプを持つKoDを作らせる。直接攻撃より高価で、得られる待ち時間もポール10、約15分のように短くなりやすい。
2019年のRFC 8633は、さらに境界を明文化した。KoDは起点タイムスタンプが有効な場合だけ受理する。RATEに従う場合も、クライアントは合理的な最大値を持ち、ポール13、つまり2時間を超えてはならない。異常に大きなポール値を持つ要求は、一個だけでも攻撃の兆候になり得るとも記す。
要求との照合、送信者認証、効果時間の上限は同じものではない。照合はでっち上げを難しくし、認証は相手を確かめ、上限は本物の指示が過大でも損害を閉じ込める。三つを混同しないことが、修正を一つの比較処理で終わらせない鍵となる。
Goldbergが結び付けた三つの証拠層
Boston Universityの公式プロフィールは、Goldbergの研究を、暗号・ゲーム理論・アルゴリズムと、ネットワーク計測・モデル化・シミュレーションの結合として説明する。NTP研究にもその構造がある。RFCは意図された意味を示し、実装試験は実際の受理条件を示し、実験と走査は状態の持続と当時の露出条件を測った。
成果は四人の共同研究である。研究ページによれば、責任ある開示は2015年8月20日に始まり、Network Time Foundation、NTPsec、Cisco、Red Hatが10月21日の公表前に修正を出した。Goldbergを人物として追うことは、Malhotra、Cohen、Brakkeの仕事を単独の英雄物語へ吸収することではない。
この事例が残した問いは広い。retry later、拒否、隔離、停止、購読解除のような負のメッセージを受けたとき、どの要求と相手に結び付いているか。継続時間を誰が決めるか。上限を超えた指示を異常として記録できるか。従っている間にも回復経路が残るか。
エラー応答は、未来の行動を変える制御命令である。KoDが強力だったのは、偽造の費用が小さく、沈黙から戻る費用が大きかったからだ。安全な設計は逆にする。文脈を証明させ、後退を有限にし、時計が尋ねなくなった瞬間を観測可能にする。
出典
- Malhotra、Cohen、Brakke、Goldberg — Attacking the Network Time Protocol
- Sharon Goldberg研究グループ — Attacking NTP
- RFC 5905 — Network Time Protocol Version 4
- RFC 8633 — Network Time Protocol Best Current Practices
- NTP Project — Bug 2901セキュリティ告知
- Boston University Computer Science — Sharon Goldberg
- BU Today — Could Hackers Change the Time?
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
