問題タブ [impersonation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
security - 一部の偽装のユースケースでは、LSA MSV1_0 サブ認証パッケージが必要ですか?
ご挨拶、
私は、Windows LSA MSV1_0 サブ認証パッケージを使用するコードを実装したベンダーと協力しています (興味がある場合は MSDN 情報: http://msdn.microsoft.com/en-us/library/aa374786(VS.85 .aspx ) 必要かどうかを判断しようとしています。
私が知る限り、サブ認証ルーチンとフィルターを使用すると、標準の LSA MSV1_0 ログオン イベント処理をフックまたはカスタマイズできます。問題は、ベンダーの製品がこれらの機能を必要とする理由がわからないことです。
私は彼らに尋ねたところ、彼らはそれを使用してなりすましを行うと言いました。製品は間違いなく偽装を行う必要がありますが、私の限られた win32 の知識に基づいて、サブ認証パッケージなしで通常の認証 API (LsaLogonUser、ImpersonateLoggedOnUser など) を使用して必要な機能を取得できます。さらに、私は偽装を行う多くの同様の製品を使用してきましたが、サブ認証パッケージを使用したのはこれだけです。
なぜ私が気にするのか疑問に思っている方のために説明すると、製品の以前のバージョンには、サブ認証パッケージ dll にロックアップまたはブルースクリーンを引き起こすバグがありました。これにはかなり神経質になり、このような低レベルでカーネルに依存するインターフェイスの使用に疑問を抱くようになりました。ベンダーに戻り、「なりすましのために LSA サブ認証パッケージが必要になる方法はありません。削除してください」と言いたいのですが、標準の win32 認証の使用例と考えられる制限を理解しているかどうかはわかりません。 /impersonation API は、その主張を決定的に行うのに十分です。
それで、そこにいる win32 セキュリティの達人に、偽装しかしていないのに、LSA MSV1_0 サブ認証パッケージが必要になる理由はありますか?
ご意見をお寄せいただきありがとうございます。
impersonation - アセンブリの偽装
私は2つのコンパイル済みアセンブリを持っています。アセンブリ A はアセンブリ B を参照します。
アセンブリ B の一部のコードを変更したいと考えています。アセンブリ A の観点からアセンブリ B を偽装するクラス ライブラリを作成したいと考えています。アセンブリ A には、何も起こらなかったかのように新しい型と名前空間を使用し続けてもらいたいと考えています。
同じ名前とバージョン番号で新しいアセンブリを作成できますか? アセンブリ A は、新しいアセンブリが古いアセンブリ B とまったく同じであると想定しますか?
asp.net - フォーム認証を使用して偽装する
にアクセスするために Windows 認証ではなくフォーム認証を使用する必要がある ASP.NET サイトがありますActiveDirectoryMembershipProvider
。Windows 認証が使用するブラウザー認証ポップアップではなく、設計された入力フォームが必要なため、サイトはフォームを使用する必要があります。
サイトは、ユーザー固有のファイルにアクセスするために、Active Directory 経由でログインしているユーザーになりすます必要があります。
ただし、私の web.config には以下が含まれていますがWindowsIdentity.GetCurrent()
、これは と同じではありません。HttpContext.Current.User.Identity
特定のアクセス許可を取得するために AD ユーザーになりすます必要があり、フォームがログインを処理するため、ユーザーのパスワードがわからないため、 と を使用できませLoginUser()
ん。WindowsIdentity.Impersonate()
おそらくlogin.aspx.csから取得して、トークンをセッション変数にSystem.Web.UI.WebControls.Login.Password
保存して後で使用することは可能ですか? それとも、正しい方法で偽装するより安全な方法でしょうか?LoginUser()
WindowsIdentity.Impersonate()
フォーム認証が自動的にできない理由がわかりません<identity impersonate="true" />
このhttp://msdn.microsoft.com/en-us/library/ms998351.aspxを読みましたが、Windows 認証を使用しています。
wcf - wcf 呼び出しのクライアント側になりすます方法
WCF と承認について助けが必要です。現在、Windows サービスでホストされている .NET リモーティング オブジェクトとして呼び出し、WCF サービスを呼び出しているクライアントがあります (wshttpbinding を使用)。WCF サービスは、メッセージ ベースのセキュリティで Windows 認証を使用しています。
Windows サービスは特別なアカウントで実行されています。クライアント呼び出しが .NET リモーティング オブジェクトに到達すると、thread.currentprincipal がクライアントから提供されたプリンシパルに設定されるため、すべてのアクションがクライアントからの資格情報で実行されます。これまでのところ問題はありませんが、ここで現在の問題が発生します。wcf サービスは、クライアント ユーザーの資格情報を使用して呼び出す必要があります。Afaik WCF は WindowsIdentity.GetCurrent を使用して、呼び出しの承認情報を作成します。Thread.CurrentPrincipal は呼び出しに使用したい ID を保持しているので、 (hread.CurrentPrincipal.Identity as WindowsIdentity).Impersonate() が仕事をすると思いました。
しかし今、私は WCF セキュリティ例外の代わりにこの例外を取得しています: System.ComponentModel.Win32Exception: セキュリティ パッケージで利用可能な資格情報はありません
コールスタック: System.IdentityModel.SspiWrapper.AcquireCredentialsHandle (文字列パッケージ、CredentialUse インテント、AuthIdentityEx& authdata) で System.ServiceModel.Security.SecurityUtils.GetCredentialsHandle (文字列パッケージ、NetworkCredential 資格情報、ブール値 isServer、String[] additionalPackages) で System.ServiceModel. System.ServiceModel.Security.SecurityUtils.GetCredentialsHandle(SecurityBindingElement sbe、BindingContext コンテキスト) での Security.SecurityUtils.GetCredentialsHandle (SecurityBindingElement sbe、ClientCredentials clientCredentials) System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.OnOpening() で System.ServiceModel.Security.WrapperSecurityCommunicationObject で。 System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan タイムアウト) で System.ServiceModel.Security で OnOpening()。CommunicationObjectSecurityTokenProvider.Open(TimeSpan タイムアウト) で System.ServiceModel.Security.SecurityUtils.OpenTokenProviderIfRequired(SecurityTokenProvider tokenProvider, TimeSpan タイムアウト) で System.ServiceModel.Security.SecuritySessionClientSettings`1.ClientSecuritySessionChannel.OnOpen(TimeSpan タイムアウト) で System.ServiceModel.Channels.CommunicationObject .Open(TimeSpan タイムアウト) System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan タイムアウト) System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan タイムアウト) で System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels .ServiceChannel.ICallOnce.Call(ServiceChannel チャネル、TimeSpan タイムアウト) System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan タイムアウト、CallOnceManager カスケード) で System.ServiceModel.System.ServiceModel.Channels.ServiceChannel.Call での Channels.ServiceChannel.EnsureOpened(TimeSpan タイムアウト) (文字列アクション、Boolean oneway、ProxyOperationRuntime 操作、Object[] ins、Object[] outs、TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage メソッド呼び出し、ProxyOperationRuntime 操作) で System.ServiceModel.Channels.ServiceChannelProxy.Invoke( IMessage メッセージ)System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage メソッド呼び出し、ProxyOperationRuntime 操作) で System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessageメッセージ)System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage メソッド呼び出し、ProxyOperationRuntime 操作) で System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessageメッセージ)
マーティンの助けを借りてthx
編集:偽装後にchannelfactoryを作成するのを忘れたため、この例外につながる間違いを犯しましたが、別の例外が発生し、対処方法がよくわかりません: System.IO.FileLoadException: ロードできませんでしたファイルまたはアセンブリ 'System.IdentityModel.Selectors, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' またはその依存関係の 1 つ。必要な偽装レベルが指定されていないか、指定された偽装レベルが無効です。(HRESULT からの例外: 0x80070542)
c++ - ネットワーク偽装(C ++)のためのLogonUserの代替
LogonUserの代わりに、ネットワークリソースにアクセスするために特定のアカウントを偽装する方法はありますか?私は、外部ドメインのマシン(または同じ問題のワークグループマシン)に接続できるようにするなりすましの方法を探しています。
私が持っている初期データの場合:マシン名、ユーザー名(またはドメイン\ユーザー名)、クリアテキストのパスワード。
WNetAddConnectionを使用して\\machinename\ ipc $への接続を確立する方法があることを知っています。ほとんどのネットワーク関数はそのアカウントのコンテキストで実行されますが、win2008は別の工夫を加え、一部の関数は引き続きアカウントを使用し、そのスレッドは。
また、SSPIを使用して偽装トークンを取得する方法があることも認識しています。誰かがそれらのトークンを試したことがありますか?それらは共有、SCM、リモートレジストリなどにアクセスするのに適していますか?WNetAddConnectionが使用しているものは何ですか?
編集:明確にするために、LogonUserを使用できない理由は、信頼されていないドメインまたはワークグループのユーザーになりすます必要があるためです。
EDIT2:別の説明:私が実装しようとしている項目はpsexecに似ています。例:
- プログラムは、ホストまたはActive Directoryの構成を変更しないでください(例:一時的なローカルユーザーの作成など)。さらに、DCで実行されているかどうかを想定することはできません。
- どのソフトウェアがリモートホストにプリインストールされているかを想定することはできません。与えられた条件は、Windowsファイル共有がターゲットで有効になっていることだけです。
- アカウント/パスワードはターゲットで機能していることがわかっていますが、ターゲットマシンはローカルドメイン、外部ドメインにある可能性があり、ドメインにまったく存在しない可能性があります。
EDIT3: SSPI InitializeSecurityContext/AcquireCredentialsHandleオプションについてもっと知りたいです。このAPIを幅広く使用している人はいますか?偽装で返されたトークンを使用して、スレッドがネットワーク共有にアクセスしたり、ファイルをコピーしたりできるようにすることは可能ですか?誰かが実用的なコードスニペットを投稿できますか?
EDIT4:マーシュレイのおかげで、問題は解決されました。誰かが概念実証コードを見たいと思っているなら、それはここにあります
c# - 別のユーザーとしてコードを実行する
別のユーザーとして実行するようにコードを指示する方法はありますか?
PInvokeを介してNetUserSetInfoを呼び出していますが、別のユーザーとして呼び出す必要があります。それを行う方法はありますか?
c# - 別のユーザーとドメインで共有ファイルを開きますか?
別のドメインのマシンで共有ファイルを読み取る必要があるC#コンソールアプリケーションがあります。アプリケーションがファイルにアクセスしようとすると、ローカルユーザーが共有リソースにアクセスする権限を持っていないため、例外が発生します。
現在、実行から共有フォルダーを開き、ユーザー名とパスワードをWindows認証ダイアログに入力してからアプリケーションを実行することにより、この問題を手動で克服しています。
プログラムでそれを行うにはどうすればよいですか?
c# - イベントログ、なりすまし、アクセス拒否Win32Exception
専用アカウント(SDDLポリシーを使用)を使用して、イベントログエントリをカスタムイベントログに書き込みます。このために、私はWindowsImpersonationContextを使用し、LogonUserでトークンを取得します。
このコードはイベントログエントリを生成しますが、Win32Exceptionも発生します。
これで、偽装行の後にThread.Sleep(500)を配置すると、例外がなくなります。
この例外の原因と、アクセス拒否の例外があってもイベントログエントリが書き込まれるのはなぜですか?
編集:そして、私はそれを使用する前に、関連するログでイベントソースを登録しました。メッセージを短くするために、小さなコードスニペットのみを含めました。
.net - 構成ファイルを使用したWindowsサービスの偽装
現在、Windowsサービスを固定ユーザーとして実行するには、Windowsサービスにログオンプロパティを設定します(実行するユーザー名とパスワードを指定します)。
しかし、iamは、構成ファイルに記載されているWebアプリケーションでの偽装として、固定ユーザーとしてWindowsサービスを実行するこの機能を喜んで使用します。
親切にこれについてあなたの考えを投げてください、それはこれを実行するための実行可能なアプローチ簡単な方法ですか?