2010-11-07

OldNewThing:時刻合わせの際、日付が違っていると失敗する理由

Why does the Win32 Time service require the date to be correct before it will set the time? - The Old New Thing - Site Home - MSDN Blogs

時刻同期の際に、日付が違っていると、処理は失敗し、次のようなエラーメッセージが返ってくる。「Windowsは時刻をtime.windows.comと同期させる際に、エラーが発生しました。セキュリティ上の理由により、Windowsは時刻を同期できません。理由は、日付が違っているためです。日付を修正して再試行してください」。セキュリティ上のリスクとは何だ?

まず、問題を解決したい人は、エラーメッセージに従うことだ。日付を正しく設定して、再試行すべきである。もし、それでも失敗する場合、時間をある程度近い値に設定すべきである。時刻がある程度近くなれば、timeサーバーと正常にやり取りできる。

閑話休題(それはさておき)、ここでいう、セキュリティ上のリスクとは何か。

一見すると、サーバー側が、時刻があまりにも間違って設定されているクライアントを弾いているように見える。しかし、事実は逆である。クライアントが、悪意のあるtimeサーバーの攻撃を防いでいるのである。

ケルベロス認証プロトコルは、お互いが同じ時刻を使っていることを前提としている。(多少の誤差は許容範囲だが)。もし、攻撃者が、例えばDNS poisoningなどで、クライアントの時刻を、悪意あるサーバーと同期させた場合、攻撃者は不正な時刻(大抵は過去の時刻)を用いて、次の攻撃の足がかりにすることができる。

Windows Timeサービスのデフォルトの設定では、15時間以上も違っている日付を拒否するようになっている。このKB記事に従えば、設定を変更することもできる。なお、このKB記事が、本文執筆の主要なソースとなっている。

No comments: