Windows基礎

【図解】セキュアチャネルと netlogon (MS-RPC) の仕組み

セキュアチャネルとは

セキュアチャネルとは、『ドメインコントローラ (DC)』と『ドメイン参加しているコンピュータ』の間で確立する、MS-RPC (TCP 135 port + random port) 通信における安全な通信パスのことです。

AD ドメインに参加した PC やサーバはドメインコントローラ上で「コンピュータアカウント」として登録されますが、このコンピュータアカウントにはパスワード (SharedSecret) が自動で生成され、コンピュータ側とドメインコントローラ側でそれぞれ保管します。(ユーザアカウントではありません。コンピュータというオブジェクトに対してパスワードを発行します。そしてこれは定期的に自動で変更されます。)

そのコンピュータが起動するタイミングでドメインコントローラへ MS-RPC (TCP/135) のインタフェースの 1 つである Netlogon RPC interface を開始し、ドメインコントローラはその Netlogon 通信上でコンピュータアカウントのパスワードが合っているかを確かめます。合致していればセッションキーによる暗号化を行うセキュアチャネルを確立します。

このセキュアチャネルを確立することで、ドメイン参加しているコンピュータがドメインコントローラと一体となって動作する礎になるわけです。元々は Windows NT の PDC ⇔ BDC のレプリケーションで使われていたようです。現在は NTLM のパススルー認証時にユーザ資格に関連する情報を流すときや、DHCP failover cluster による DHCP scope の同期するときなど、主にコンピュータ間で (ユーザ権限に依存せず) 連携が必要なときに使われています。

繰り返しになりますが、これはあくまでコンピュータアカウントの権限による通信経路であることです。ユーザアカウントを認証しているわけではなく、コンピュータを認証しているのです。

以下に netlogon の暗号化セッションキー生成、およびセキュアチャネルを確立するまでのシーケンスの一例を示します。

セキュアチャネルの破損

もし起動時等こコンピュータアカウントのパスワードが端末側とドメインコントローラ側で一致しない場合は「このワークステーションとプライマリ ドメインとの信頼関係に失敗しました」というメッセージが出力されます。いわゆる「セキュアチャネルの破損」状態です。

原因の一例としては、ドメイン参加している PC/サーバのバックアップ取得後にコンピュータアカウントのパスワードが変更され、その後 PC/サーバ側をリストアした場合、コンピュータアカウントのパスワードは元に戻ってしまい、ドメインコントローラ側と不一致になります。(もしくはPC/サーバとドメインコントローラが逆のパターンもあります。)

この状態になったら、PC/サーバ側のドメイン離脱⇒ドメイン再参加、という手続きになります。

もし破損が頻発するなら、PC が再起動するたびに環境を復元するようなソフトによって、コンピュータアカウントのパスワードが元に戻ってしまう、等の原因が考えられます。

セキュアチャネルと SSL/TLS , schannel.dll との関係

セキュアチャネルというと、SSL/TLS による暗号化を思い浮かべたりするかもしれません。が、少なくとも Windows 上の定義ではこれは一切関係ありません。

前述の通り、セキュアチャネルは MS-RPC というプロトコルを使った仕組みです。前述の通り、認証、および暗号化に使われるセッションキーは『コンピュータアカウントのパスワード』がベースになります。

Kerberos もコンピュータアカウントのパスワードを使ったコンピュータ認証 (ユーザ認証も行いますが、その前に行うコンピュータ認証) を行うため、『Kerberos でセキュアチャネルを確立する』という誤解も稀に見かけます。

一方、SSL/TLS は現在の一般的なシーケンスでは一時的に生成した Diffie-Hellman 系の一時利用の公開鍵を交換しあって共通鍵を生成します。暗号の共通鍵の作り方もプロトコルも全く違うものです。

また、Windows のライブラリに schannel.dll というものがあります。これは Windows 用の SSL/TLS ライブラリです。(Linux だと OpenSSL のようなもの)

名前からしてセキュアチャネルと関係ありそうですが、これは SSL/TLS 通信をするときに使われるものですので、やはりセキュアチャネルとは関係ないのです。

コメント

タイトルとURLをコピーしました