8

Windowsの認証方法とプロトコルを検索して、IISとWeb認証で好きになる前に、単純な実行可能ファイルで使用されるNegotiate、Kerberos、およびNTLMの正確な違いを理解することにしました。Windows実行可能ファイル認証

私は良い結果に達しましたが、引き続き交渉とケルベロスに関する詳細が必要です。私は次のシナリオいる

:私は管理者を持つドメインユーザーだ

System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType 

注:

は、私は非常に単純なC#ウィンドウを作成したメッセージボックスを示していたアプリケーションは、の値を表示する構成します私のローカルマシン上の権限は、私は次のような結果を持っている:私は積極的にDCに接続されていながら、私はexeファイル(ダブルクリック)を実行すると、私が得た

  1. 」交渉する "。

  2. 私はDCに積極的に接続しているうちにexeファイル(differentnetユーザー/ローカルユーザーを使用して実行します)を実行すると、 "NTLM"が取得されます。

  3. 「管理者として実行」または「別のユーザーとして実行」を使用してexeファイルを実行すると「Kerberos」が表示されます。

  4. ローカルアカウントを使用してローカルにログインしているときにEXEファイルを実行すると、「NTLM」が表示されます。

私は、LSAは、ローカルアカウントのNTLMを使用することを理解しています。また、私はActive DirectoryがKerberosを使用してドメインユーザーとコンピュータを認証することを理解しています。

ネゴシエート認証タイプは、自分のアカウントを使用して(ダブルクリック)実行するか、同じアカウントを使用して「別のユーザーとして実行する」ですか?

アップデート:私は、次のように気づいた:

- ローカルユーザーは、exeファイルを実行している場合、それは、NTLM
ある - ドメインユーザーは、exeファイルを実行すると、それはをネゴシエートです(そのユーザーがローカル管理者の場合)Kerberos(そのユーザーがローカル管理者でない場合)
- ドメイン管理 exeを実行すると、Kerberos

この動作についてはっきりとわかります。

+0

質問は不明である:

は、ここですべての認証は、Windowsで一緒にどのように適合するかを示し古いがまだ関連図です。ユーザを認証するために使用される認証パッケージは、ユーザを認証するために使用されるプロトコルとは異なり、それぞれが認証を実行するエンティティとは異なる。 1対1(対1)の関係はありません。 NTLMとKerberos(およびネゴシエート)は、リモートコンピュータへの認証時にのみ関係します。非ドメイン環境のリモートコンピュータへの認証ではNTLMが使用され、ドメイン内のリモートコンピュータに対する認証ではKerberosまたはNTLMが使用されます。あなたは正確に何を見つけようとしていますか? – conio

+0

これは当てはまりません。また、ローカルマシンは、認証パッケージを使用して、GINA経由でWinlogonによって収集されたログオン資格情報を認証します。 Winlogonは、認証パッケージを使用してログオンセッションを作成するLsaLogonUserを呼び出します。 LSAはローカルログオンの場合、ローカルマシンSAMのアカウントを検索するためにNTLM(Msv1_0.dll)を使用します。リモートコンピュータは必要ありません。 – codekaizen

+1

あなたは近くにいません。 MSV1_0が「NTLM」と誤って記述されているようないくつかのページ(回答でリンクしたページなど)が、[MS-NLMP]で説明されている** NTLM **プロトコル**を使用しているわけではありません。 (正しい記述は[Microsoft認証](http://i.stack.imgur.com/k6rdD.png)[パッケージv1.0](http://i.stack.imgur.com/313Y3.png)、 btw。)私はこの点について、私がどのようにしてもっと明確になるかわかりません。ローカルSAMに対して認証すると、誰もチャレンジを作成せず、パスワードのLMハッシュまたはNTハッシュに基づいてそのチャレンジに対するレスポンスを作成しません。 – conio

答えて

6

まず、EXEには認証がありません。これは単なる実行可能ファイルです。プリンシパルによって識別されるログオンセッション内でそれを実行するOS creates a process object。これは、NTLMまたはKerberos(または他のプロトコル)によって認証されたプリンシパルです。

次に、ログオンセッションが作成されたときに、Negotiate authentication packageを使用して、使用する認証パッケージ(KerberosまたはNTLM)を決定することを意味します。

WindowsIdentity.AuthenticationTypeの値を照会すると、最終的にLsaGetLogonSessionDataというローカルセキュリティ機関(LSA)の関数が呼び出されます。これは、実行中のプロセスを実行するために使用されたログオンセッションの詳細を報告します。このログオンセッションの作成方法は、資格情報の検証に使用される認証パッケージに最も大きな影響を与える可能性があります。 LsaLogonUserを呼び出すことによって

When logging into Windows the first time, Winlogon.exe establishes an interactive logon。与えられた資格情報を認証できるパッケージが見つかるまで、HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Authentication Packagesの認証パッケージを順番に照会します。対話型ログオンが確立されると、別の資格情報で非対話型ログオンを使用して新しいプロセスを作成できます。この場合、LogonUser関数が呼び出される可能性があります。

LOGON32_PROVIDER_DEFAULT 

Use the standard logon provider for the system. 
The default security provider is negotiate, unless you pass NULL 
for the domain name and the user name is not in UPN format. 
In this case, the default provider is NTLM. 

ので、プロセスがの下で実行されているログオンセッションで報告されたパッケージがどのようにログオンによって異なります。この関数のパラメータの1つが(おそらく使用したものである)、次のデフォルトを持っていdwLogonProviderですセッションはで作成されました。 (あなたの質問から、あなたがテストしているログオンセッションをどのように作成するのかは明確ではありません。すべてのケースで「Run As」を実行していますか?場合によってはLogoff/Logon Windows?)また、Winlogonが最初に対話型ログオンセッションで正常に認証されます。最終的には、認証メカニズムがすべて認証パッケージを呼び出すことに注意してください.Nototiateが使用されている場合は、Kerberosが優先されますが、Negotiateは報告されたものです。

Windows Authentication Architecture

Source

+0

Re。 'LogonUser'ドキュメントからのあなたの引用 - 私は別の認証パッケージを使いたいのですが? 'LsaLogonUser'はこれを許可しますか? MSV1_0が使用されているドメインユーザーと、キャッシュされた資格情報がないかどうかを確認し、ネゴシエートを使用していることを推測しています。ローカルユーザーにはMSV1_0が使用されています。 LSA内で愚かなチャレンジレスポンスゲームをプレイするのではなく、使用済みのパスワードをSAMに保存されているものと比較することを喜んで賭けています。 – conio

+0

はい、ログオン時に任意の認証パッケージを指定できます(実際には、独自のGINA /認証パッケージを実装することで可能です)。 Winlogonは 'LsaLookupAuthenticationPackage'を介してパッケージのIDを取得し、返された値を' LsaLogonUser'に渡します。ドメインユーザーの場合は、MSV1_0を使用できます(パススルーはLSAではなくそのパッケージによって処理されます)。またはKerberosを使用できます。ローカルログオンの場合、NTLMを取得するために、ドキュメント名のように "ドメイン名にNULLを渡し、ユーザー名はUPN形式ではありません"と表示され、NTLMパッケージ(LSAではなく)がSAMを使用します。 – codekaizen

関連する問題