NTLM ユーザー認証
この記事では、NTLM ユーザー認証に関するいくつかの情報を提供します。
元の KB 番号: 102716
まとめ
この記事では、Windows での NTLM ユーザー認証の次の側面について説明します。
- アカウント データベース内のパスワード ストレージ
- MSV1_0 認証パッケージを使用したユーザー認証
- パススルー認証
詳細
アカウント データベース内のパスワード ストレージ
ユーザー レコードは、セキュリティ アカウント マネージャー (SAM) データベースまたは Active Directory データベースに格納されます。 各ユーザー アカウントは、LAN マネージャーと互換性のあるパスワードと Windows パスワードの 2 つのパスワードに関連付けられています。 各パスワードは暗号化され、SAM データベースまたは Active Directory データベースに格納されます。
LAN マネージャーと互換性のあるパスワードは、LAN Manager で使用されるパスワードと互換性があります。 このパスワードは、OEM (相手先ブランド) の文字セットに基づいています。 このパスワードは大文字と小文字を区別せず、最大 14 文字まで使用できます。 このパスワードの OWF バージョンは、LAN Manager OWF または ESTD バージョンとも呼ばれます。 このパスワードは、DES 暗号化を使用してクリア テキスト パスワードを使用して定数を暗号化することによって計算されます。 LAN マネージャー OWF パスワードの長さは 16 バイトです。 クリア テキスト パスワードの最初の 7 バイトは、LAN マネージャー OWF パスワードの最初の 8 バイトを計算するために使用されます。 クリア テキスト パスワードの 2 番目の 7 バイトは、LAN マネージャー OWF パスワードの 2 番目の 8 バイトをコンピューターに使用します。
Windows パスワードは、Unicode 文字セットに基づいています。 このパスワードでは大文字と小文字が区別され、最大 128 文字の長さにすることができます。 このパスワードの OWF バージョンは、Windows OWF パスワードとも呼ばれます。 このパスワードは、RSA MD4 ハッシュ関数を使用して計算されます。 この関数は、クリア テキスト パスワード バイトの可変長文字列の 16 バイト ダイジェストを計算します。
すべてのユーザー アカウントに LAN Manager パスワードまたは Windows パスワードが不足している可能性があります。 ただし、パスワードの両方のバージョンを維持するためにすべての試行が行われます。
たとえば、ユーザー アカウントが PortUas を使用して LAN Manager UAS データベースから移植されている場合、または LAN Manager クライアントまたは Windows for Workgroups クライアントからパスワードが変更された場合、LAN Manager バージョンのパスワードのみが存在します。 Windows クライアントでパスワードが設定または変更され、パスワードに LAN マネージャー表現がない場合は、Windows バージョンのパスワードのみが存在します。 (パスワードが 14 文字を超えているか、OEM 文字セットで文字を表すことができないため、パスワードに LAN マネージャー表現がない可能性があります)。
Windows のユーザー インターフェイスの制限では、Windows パスワードが 14 文字を超えないようにします。 この制限の影響については、この記事の後半で説明します。
Windows 2000 Service Pack 2 以降のバージョンの Windows では、Windows がパスワードの LAN Manager ハッシュを格納できないように設定できます。 詳細については、次の資料番号を参照して、Microsoft サポート技術情報の記事を参照してください。
299656 Windows がパスワードの LAN マネージャー ハッシュを Active Directory およびローカル SAM データベースに格納できないようにする方法
Note
Microsoft では、SAM データベースの手動またはプログラムによる変更はサポートされていません。
MSV1_0 認証パッケージを使用したユーザー認証
Windows では、すべての種類のユーザー認証に LsaLogonUser API が使用されます。 LsaLogonUser API は、認証パッケージを呼び出してユーザーを認証します。 既定では、LsaLogonUser はMSV1_0 (MSV) 認証パッケージを呼び出します。 このパッケージは Windows NT に含まれています。 MSV 認証パッケージは、SAM データベースにユーザー レコードを格納します。 このパッケージは、Netlogon サービスを使用した他のドメインのユーザーのパススルー認証をサポートします。
内部的には、MSV 認証パッケージは 2 つの部分に分かれています。 MSV 認証パッケージの最初の部分は、接続先のコンピューターで実行されます。 2 番目の部分は、ユーザー アカウントを含むコンピューターで実行されます。 両方の部分が同じコンピューターで実行されている場合、MSV 認証パッケージの最初の部分は、Netlogon サービスを使用せずに 2 番目の部分を呼び出します。 MSV 認証パッケージの最初の部分では、渡されるドメイン名が独自のドメイン名ではないため、パススルー認証が必要であることが認識されます。 パススルー認証が必要な場合、MSV は Netlogon サービスに要求を渡します。 その後、Netlogon サービスは、ターゲット コンピューター上の Netlogon サービスに要求をルーティングします。 さらに、Netlogon サービスは、そのコンピューター上の MSV 認証パッケージの他の部分に要求を渡します。
LsaLogonUser では、対話型ログオン、サービス ログオン、およびネットワーク ログオンがサポートされます。 MSV 認証パッケージでは、すべての形式のログオンで、ユーザー アカウントの名前、ユーザー アカウントを含むドメインの名前、およびユーザーのパスワードの何らかの機能が渡されます。 ログオンの種類によって、パスワードを LsaLogonUser に渡すときの表現が異なります。
対話型ログオン、バッチ ログオン、およびサービス ログオンの場合、ログオン クライアントは MSV 認証パッケージの最初の部分を実行しているコンピューター上にあります。 この場合、クリア テキスト パスワードは LsaLogonUser と MSV 認証パッケージの最初の部分に渡されます。 サービス ログオンとバッチ ログオンの場合、Service Control Manager とタスク スケジューラは、アカウントの資格情報をより安全に格納する方法を提供します。
MSV 認証パッケージの最初の部分では、クリア テキスト パスワードを LAN Manager OWF パスワードと Windows NT OWF パスワードの両方に変換します。 次に、パッケージの最初の部分は、クリア テキスト パスワードを NetLogon サービスまたはパッケージの 2 番目の部分に渡します。 次に、2 番目の部分では、SAM データベースに OWF パスワードのクエリを実行し、それらが同じであることを確認します。
ネットワーク ログオンの場合、コンピューターに接続するクライアントには、以前に 16 バイトのチャレンジ ("nonce") が与えられていました。クライアントが LAN Manager クライアントの場合、クライアントは 16 バイトの LAN Manager OWF パスワードを使用して 16 バイトのチャレンジを暗号化することで、24 バイトのチャレンジ応答を計算しました。 その後、LAN Manager クライアントは、この "LAN Manager Challenge Response" をサーバーに渡します。 クライアントが Windows クライアントの場合は、同じアルゴリズムを使用して "Windows NT チャレンジ応答" が計算されます。 ただし、Windows クライアントは LAN Manager OWF データの代わりに 16 バイトの Windows OWF データを使用します。 その後、Windows クライアントは LAN Manager チャレンジ応答と Windows NT チャレンジ応答の両方をサーバーに渡します。 どちらの場合も、サーバーは LsaLogonUser API に次のすべてを渡すことによってユーザーを認証します。
- ドメイン名
- ユーザー名
- 元の課題
- LAN マネージャチャレンジレスポンス
- 省略可能な Windows NT チャレンジ応答
MSV 認証パッケージの最初の部分は、この情報を 2 番目の部分に変更せずに渡します。 最初に、2 番目の部分では、SAM データベースまたは Active Directory データベースから OWF パスワードを照会します。 次に、2 番目の部分では、データベースの OWF パスワードと渡されたチャレンジを使用してチャレンジ応答を計算します。 次に、2 番目の部分では、計算されたチャレンジ応答と渡されたチャレンジ応答を比較します。
Note
また、NTLMv2 を使用すると、クライアントは、一般的な攻撃のリスクを軽減するのに役立つセッション キーの使用と共にチャレンジを送信できます。
前述のように、パスワードのバージョンが SAM データベースまたは Active Directory データベースに存在しない可能性があります。 また、LsaLogonUser の呼び出しに、いずれかのバージョンのパスワードが見つからない可能性があります。 SAM データベースの Windows バージョンのパスワードと LsaLogonUser の Windows バージョンのパスワードの両方を使用できる場合は、両方が使用されます。 それ以外の場合は、LAN Manager バージョンのパスワードが比較に使用されます。 この規則は、Windows から Windows へのネットワーク ログオンが発生したときに大文字と小文字の区別を適用するのに役立ちます。 この規則では、下位互換性も可能です。
パススルー認証
NetLogon サービスはパススルー認証を実装します。 このツールは、次の機能を実行します。
- 認証要求を渡すドメインを選択します。
- ドメイン内のサーバーを選択します。
- 選択したサーバーに認証要求を渡します。
ドメインの選択は簡単です。 ドメイン名は LsaLogonUser に渡されます。 ドメイン名は次のように処理されます。
- ドメイン名が SAM データベースの名前と一致する場合、そのコンピューターで認証が処理されます。 ドメインのメンバーである Windows ワークステーションでは、SAM データベースの名前はコンピューターの名前と見なされます。 Active Directory ドメイン コントローラーでは、アカウント データベースの名前はドメインの名前です。 ドメインのメンバーではないコンピューターでは、すべてのログオンが要求をローカルで処理します。
- 指定したドメイン名がこのドメインによって信頼されている場合、認証要求は信頼されたドメインに渡されます。 Active Directory ドメイン コントローラーでは、信頼されたドメインの一覧を簡単に使用できます。 Windows ドメインのメンバーでは、要求は常にワークステーションのプライマリ ドメインに渡され、指定されたドメインが信頼されているかどうかをプライマリ ドメインが判断できるようになります。
- 指定されたドメイン名がドメインによって信頼されていない場合、指定されたドメイン名がそのドメイン名であるかのように、接続されているコンピューターで認証要求が処理されます。 NetLogon では、存在しないドメイン、信頼されていないドメイン、および誤って型指定されたドメイン名は区別されません。
NetLogon は、探索と呼ばれるプロセスによってドメイン内のサーバーを選択します。 Windows ワークステーションは、プライマリ ドメイン内の Windows Active Directory ドメイン コントローラーの 1 つの名前を検出します。 Active Directory ドメイン コントローラーは、各信頼されたドメイン内の Active Directory ドメイン コントローラーの名前を検出します。 検出を行うコンポーネントは、Netlogon サービスで実行される DC ロケーターです。 DC ロケーターは、構成されているドメインと信頼の種類に応じて、NETBIOS または DNS の名前解決を使用して必要なサーバーを特定します。