NTLM ユーザー認証

この記事では、NTLM ユーザー認証に関するいくつかの情報を提供します。

適用対象: Windows Server 2012 R2
元の KB 番号: 102716

概要

この記事では、Windows での NTLM ユーザー認証の次の側面について説明します。

  • アカウント データベース内のパスワード ストレージ
  • MSV1_0認証パッケージを使用したユーザー認証
  • パススルー認証

詳細

アカウント データベース内のパスワード ストレージ

ユーザー レコードは、セキュリティ アカウント マネージャー (SAM) データベースまたは Active Directory データベースに保存します。 各ユーザー アカウントは、LAN Manager 互換のパスワードと Windows パスワードの 2 つのパスワードに関連付けます。 各パスワードは、暗号化して SAM データベースまたは Active Directory データベースに保存します。

LAN Manager と互換性のあるパスワードは、LAN Manager で使用されるパスワードと互換性があります。 このパスワードは、元の機器メーカー (OEM) の文字セットに基づいています。 このパスワードでは大文字と小文字が区別されず、最大 14 文字の長さにできます。 このパスワードの OWF バージョンは、LAN Manager OWF または ESTD バージョンとも呼ばれます。 このパスワードは、DES 暗号化を使用してクリア テキスト パスワードを使用して定数を暗号化することによって計算されます。 LAN Manager OWF パスワードの長さは 16 バイトです。 クリア テキスト パスワードの最初の 7 バイトは、LAN Manager OWF パスワードの最初の 8 バイトを計算するために使用されます。 クリア テキスト パスワードの 2 番目の 7 バイトは、LAN Manager 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 Manager 表現がない場合は、Windows バージョンのパスワードのみが存在します。 (パスワードが 14 文字を超えているか、OEM 文字セットで文字を表すことができないため、パスワードに LAN マネージャー表現がない場合があります)。

Windows のユーザー インターフェイスの制限では、Windows パスワードが 14 文字を超えることはできません。 この制限の影響については、この記事の後半で説明します。

Windows 2000 Service Pack 2 以降のバージョンの Windows では、Windows がパスワードの LAN Manager ハッシュを格納できないように設定できます。 詳細については、次の記事番号をチェックして、Microsoft サポート技術情報の記事を表示します。

299656 Windows が Active Directory およびローカル SAM データベースにパスワードの LAN マネージャー ハッシュを格納できないようにする方法

注:

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 マネージャー クライアントは、この "LAN Manager チャレンジ応答" をサーバーに渡します。 クライアントが 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 番目の部分では、計算されたチャレンジ応答と、渡されたチャレンジ応答を比較します。

注:

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 の名前解決を使用して必要なサーバーを見つけます。