具有 RunAs 用户和自动转录的受限端点未正确记录调用用户
Constrained endpoint with RunAs user and automatic transcription doesn't correctly log the invoking user
我已经使用 RunAs 用户创建了 PowerShell 会话配置。我能够使用 Enter-PSSession
和 Invoke-Command
以及通过 PowerShell Web 访问连接到配置。它有效,并且似乎 运行 作为 RunAs 用户正确。
我还通过组策略启用了自动转录,以便记录所有 PowerShell 会话。
PowerShell 记录同时记录 "Username" 和 "RunAs User",据我所知,这正是这种情况。
但我遇到的问题是它将 RunAs 用户记录为两个用户,并且用于连接到会话的用户名没有记录在任何地方。
**********************
Windows PowerShell transcript start
Start time: 20161109123326
Username: DOM\adminuser
RunAs User: DOM\adminuser
Machine: HOSTMACHINE (Microsoft Windows NT 6.3.9600.0)
Host Application: C:\Windows\system32\wsmprovhost.exe -Embedding
Process ID: 4676
PSVersion: 5.0.10586.117
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0.10586.117
BuildVersion: 10.0.10586.117
CLRVersion: 4.0.30319.42000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
这是我的记录的顶部,其中更改了用户名和机器名。 DOM\adminuser
我们是 RunAs 用户,但对会话进行身份验证的用户不同(我自己的帐户)。
我不认为这应该是这样工作的。我期待在 "Username" 字段中看到我的用户。
我希望有人以前看过这个。
我想我明白了。我很确定 RunAs User
字段是用于虚拟帐户 (RunAsVirtualAccount
) 的,如果您将端点设置为模拟,而不是真正用于使用 RunAsCredential
.
很遗憾,虚拟帐户对我不起作用,因为它必须是本地帐户,而我需要它来访问域。
我对此不是 100%,所以除非得到确认,否则我不会接受自己的回答,所以希望其他人能提供更多信息。
更新
经过更多阅读,我确信这就是 "expected" 行为,并且以上是正确的。
为了完整起见,我正在寻找的用户("invoker")被称为 "Connected User",如果您正在记录这些事件,它会出现在事件日志中。碰巧我是。事件包含进程的 PID,它也可以在记录中找到,因此我可以从记录中读取 PID,然后找到与其关联的所有事件。
这是一个(非常粗略的)片段:
[int]$logpid = gc $log | % {
if ($_ -match '^Process ID:\s(?<pid>\d+)') {
$Matches['pid']
}
} | Select-Object -First 1
$events = Get-WinEvent -ProviderName 'Microsoft-Windows-PowerShell' -FilterXPath "*[System[Execution[@ProcessID='$logpid']]]"
(其中 $log
是转录文件的路径)。
这是另一个粗略的片段,[hashtable]
从一些事件中可用的多汁信息中提取出来(它是非结构化文本):
$infohash = $events[0].Properties[0].Value -split '\r?\n' |
% -b { $stuff = @{} } -p {
$kv = $_ -split '\s+=\s+'
$stuff[$kv[0].Trim(' ',"`t")] = $kv[1]
} -e { $stuff }
除此之外,您将使用 $infohash.'Connected User'
查找连接到会话的用户,并使用 $infohash.User
查看进程的身份(RunAs 用户)。
这几乎没有经过测试,它需要工作,但希望它能作为一个起点并帮助某人。
我已经使用 RunAs 用户创建了 PowerShell 会话配置。我能够使用 Enter-PSSession
和 Invoke-Command
以及通过 PowerShell Web 访问连接到配置。它有效,并且似乎 运行 作为 RunAs 用户正确。
我还通过组策略启用了自动转录,以便记录所有 PowerShell 会话。
PowerShell 记录同时记录 "Username" 和 "RunAs User",据我所知,这正是这种情况。
但我遇到的问题是它将 RunAs 用户记录为两个用户,并且用于连接到会话的用户名没有记录在任何地方。
********************** Windows PowerShell transcript start Start time: 20161109123326 Username: DOM\adminuser RunAs User: DOM\adminuser Machine: HOSTMACHINE (Microsoft Windows NT 6.3.9600.0) Host Application: C:\Windows\system32\wsmprovhost.exe -Embedding Process ID: 4676 PSVersion: 5.0.10586.117 PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0.10586.117 BuildVersion: 10.0.10586.117 CLRVersion: 4.0.30319.42000 WSManStackVersion: 3.0 PSRemotingProtocolVersion: 2.3 SerializationVersion: 1.1.0.1 **********************
这是我的记录的顶部,其中更改了用户名和机器名。 DOM\adminuser
我们是 RunAs 用户,但对会话进行身份验证的用户不同(我自己的帐户)。
我不认为这应该是这样工作的。我期待在 "Username" 字段中看到我的用户。
我希望有人以前看过这个。
我想我明白了。我很确定 RunAs User
字段是用于虚拟帐户 (RunAsVirtualAccount
) 的,如果您将端点设置为模拟,而不是真正用于使用 RunAsCredential
.
很遗憾,虚拟帐户对我不起作用,因为它必须是本地帐户,而我需要它来访问域。
我对此不是 100%,所以除非得到确认,否则我不会接受自己的回答,所以希望其他人能提供更多信息。
更新
经过更多阅读,我确信这就是 "expected" 行为,并且以上是正确的。
为了完整起见,我正在寻找的用户("invoker")被称为 "Connected User",如果您正在记录这些事件,它会出现在事件日志中。碰巧我是。事件包含进程的 PID,它也可以在记录中找到,因此我可以从记录中读取 PID,然后找到与其关联的所有事件。
这是一个(非常粗略的)片段:
[int]$logpid = gc $log | % {
if ($_ -match '^Process ID:\s(?<pid>\d+)') {
$Matches['pid']
}
} | Select-Object -First 1
$events = Get-WinEvent -ProviderName 'Microsoft-Windows-PowerShell' -FilterXPath "*[System[Execution[@ProcessID='$logpid']]]"
(其中 $log
是转录文件的路径)。
这是另一个粗略的片段,[hashtable]
从一些事件中可用的多汁信息中提取出来(它是非结构化文本):
$infohash = $events[0].Properties[0].Value -split '\r?\n' |
% -b { $stuff = @{} } -p {
$kv = $_ -split '\s+=\s+'
$stuff[$kv[0].Trim(' ',"`t")] = $kv[1]
} -e { $stuff }
除此之外,您将使用 $infohash.'Connected User'
查找连接到会话的用户,并使用 $infohash.User
查看进程的身份(RunAs 用户)。
这几乎没有经过测试,它需要工作,但希望它能作为一个起点并帮助某人。