入力された資格情報からセキュリティ トークンが作成され、Active Directory に対して検証されると、パスワードは保持されなくなります。他の場所で取得および再利用することはできません。トークンだけが残ります。これは仕様によるものです。
更新:
私は自分のケースを強化するためにもう少し掘り下げました.上記のようにはなりませんが、最終結果は同じです. で使用されているパスワードrunas.exe
が利用できないようです。ネットワーク資格情報はAD に対して検証されません。振り返ってみると、リモートの信頼されていないドメインで作業するために使用することが多いため、これは理にかなってい/netonly
ます。定義上、ローカル システムからリモート資格情報を検証することはできません。MSDN から:
LOGON_NETCREDENTIALS_ONLY
で使用されるflag の情報は次のとおりCreateProcessWithLogonW
です。
ログオンしますが、ネットワーク上でのみ指定された資格情報を使用します。新しいプロセスは呼び出し元と同じトークンを使用しますが、システムは LSA 内に新しいログオン セッションを作成し、プロセスは指定された資格情報を既定の資格情報として使用します。
この値を使用して、リモートとは異なる資格情報のセットをローカルで使用するプロセスを作成できます。これは、信頼関係がないドメイン間のシナリオで役立ちます。
システムは、指定された資格情報を検証しません。したがって、プロセスは開始できますが、ネットワーク リソースにアクセスできない可能性があります。
資格情報を検証してトークンを取得できないため、後で SSPI などのためにパスワードをネットワーク経由で渡す必要があるため、パスワードをメモリのどこかに保存する必要があります。runas.exe
? どれどれ:
PS> runas /netonly /user:foo\bar powershell.exe
Enter the password for foo\bar: ******
foo\bar
上記のドメインとユーザーに文字通り使用しました。すでに述べたように、検証されていません。12345
パスワードを入力しました。上記の行は、powershell の新しいインスタンスを起動します。それでは、その新しいインスタンスから、デフォルトのネットワーク資格情報を見てみましょう。
PS> [System.Net.CredentialCache]::DefaultNetworkCredentials
UserName Domain
-------- ------
ああ、運が悪かった: 何もない。私の推測では、クレデンシャルはカーネル内のメモリの暗号化された部分で保護されており、おそらく LSA (ローカル セキュリティ機関) が詮索好きなプロセスの手の届かないところにあると思われます。