Kerberos の時刻ずれ
Kerberos 認証を用いるシステムで,許容する時刻のずれを 5 分に設定している。KDC とクライアントの時計は正しいが,アプリケーションサーバの時計だけが 10 分遅れていた。クライアントは KDC からサービスチケットを取得し,オーセンティケータとともにアプリケーションサーバに提示した。このときのアプリケーションサーバの処理として,適切なものはどれか。
- アサービスチケットの有効期間内であれば,オーセンティケータの時刻は検証しないので,認証は成功する。
- イオーセンティケータに含まれる時刻と自らの時刻との差が許容範囲を超えるので,時刻のずれが大きすぎることを示すエラー(KRB_AP_ERR_SKEW)を返し,要求を拒否する。
- ウオーセンティケータをリプレイキャッシュと照合し,同じものが記録されていなければ,時刻のずれにかかわらず認証を成功させる。
- エKDC がアプリケーションサーバの時計のずれを検出してサービスチケットの発行を拒否するので,クライアントはサービスチケットを取得できない。
正解と解説を見る
正解 イ
この問題の基礎知識
- Kerberos では,クライアントは KDC から TGT を取得し,TGT を用いてサービスチケットを取得して,それをアプリケーションサーバに提示して認証を受ける。
- オーセンティケータは,クライアント名や時刻などをセッション鍵で暗号化したものであり,チケットとともに提示して,チケットの正当な所持者であることを示す。
- リプレイ攻撃は盗聴した認証データを後から再送する攻撃であり,Kerberos はオーセンティケータの時刻と受信側の時刻の差を許容範囲内に限ることとリプレイキャッシュでこれを防ぐ。
- 時刻を検証に使うので,Kerberos の環境では KDC,クライアント及びサーバの時刻を NTP などで同期させることが前提となる。
アプリケーションサーバは,チケットの有効期間とは別に,オーセンティケータの時刻と自らの時刻の差を検証する。この検証は,盗聴したチケットとオーセンティケータを後から再送するリプレイ攻撃を防ぐためのものである。
サーバの時刻とオーセンティケータの時刻の差が許容範囲を超えると,KRB_AP_ERR_SKEW のエラーとなる。許容範囲内のオーセンティケータはリプレイキャッシュで再送を検出し,範囲外のものは受け付けないことで,リプレイ攻撃を防ぐ。
リプレイキャッシュが記憶するのは許容範囲内に提示されたオーセンティケータであり,範囲外の時刻のものは時刻の検証で拒否される。時刻の検証を省くと,キャッシュから消えた古いオーセンティケータの再送を検出できなくなる。
サービスチケットの発行はクライアントと KDC の間のやり取りで行われ,KDC はアプリケーションサーバの時計を参照しない。KDC とクライアントの時計は正しいので,サービスチケットは発行され,提示先のサーバで拒否される。
照合の根拠(3 件)
- イ(正解)・ア(誤り): サーバはオーセンティケータの時刻と自らの時刻の差を検証し,許容範囲を超えれば KRB_AP_ERR_SKEW を返す
If the local (server) time and the client time in the authenticator differ by more than the allowable clock skew (e.g., 5 minutes), the KRB_AP_ERR_SKEW error is returned.
RFC 4120 · Section 3.2.3(新しいタブで開きます) - ウ(誤り): リプレイキャッシュが記憶するのは許容範囲内に提示されたオーセンティケータであり,範囲外のものは時刻の検証で拒否される
the server MUST utilize a replay cache to remember any authenticator presented within the allowable clock skew.
RFC 4120 · Section 3.2.3(新しいタブで開きます) - ウ(誤り): 時刻の検証があるから,キャッシュから消えた古いオーセンティケータの再送を防げる
If a server loses track of authenticators presented within the allowable clock skew, it MUST reject all requests until the clock skew interval has passed,
RFC 4120 · Section 3.2.3(新しいタブで開きます)
サーバの時計が 10 分遅れているので,オーセンティケータの時刻(クライアントの正しい時刻)とサーバ時刻の差は 10 分で許容 5 分を超える。3.2.3 ではこの SKEW の検証がチケットの starttime の検証(KRB_AP_ERR_TKT_NYV,starttime がサーバ時刻より許容範囲以上先なら返す)より前に記述されており,この状況では TKT_NYV の条件にも当たり得るが,記述順では SKEW が先に返る。選択肢に TKT_NYV はないので正解は一意。エ: チケットの発行は AS/TGS 交換(クライアントと KDC)で行われ,KDC とクライアントの時計は正しいので発行は拒否されない。