我正在寻找捕获客户端计算机上发生的用户帐户控制的解决方案。我想开发 Powershell 的脚本并使用 Active Directory 2008 和 Windows 10 客户端在环境中部署。目前,最终用户拥有完全的本地管理权限。我需要一份报告来检查他们真正需要提升权限的频率。
问候, 山猫
要查看何时显示 UAC 提示,您可以在具有注册表项或组策略设置的设备上启用 UAC 审核,如此处所述:
Uac 审计是通过更改 Windows 策略(Local\Group)来完成的。感兴趣的策略位于:Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\Audit Policy
Audit Privilege Use 将使用系统事件日志中的 UAC consent.exe 对话框为您提供有关提升使用情况的信息。由此创建的事件 ID:4648 和 4624.
审计流程跟踪将为您提供有关流程及其创建/终止的信息。由此创建的事件 ID:4688。 此外,查看事件 ID 4696 以查看何时将新令牌(用户登录句柄)分配给进程。使用所有这些事件,您可以清楚地了解每个使用 UAC 对话框请求提升权限的进程的时间线。
完成后,您可以通过查找具有适当 ID 的 Windows 事件来审核 PowerShell 脚本中的这些事件,如下所示:
$UACEvents = Get-WinEvent -LogName System | where Id -in (4648, 4624)
然后您只需将其烘焙到您喜欢的任何过程中即可。
活动信息
Id Event
4624 A new account was logged in
4648 A logon was attempted using explicit credentials
4696 A primary token was assigned to process
以下是我正在处理的类似脚本的一些片段,用于检测加入 Azure AD 的 PC 上的 UAC 提升,这些 PC 只能通过 Intune 进行管理。
# Enable Auditing of Sensitive Privilege Use
auditpol.exe /set '/subcategory:{0CCE9228-69AE-11D9-BED3-505054503030}' /success:enable
filter ParseSPUEvent {
$SelectorStrings = [string[]]@(
'Event/EventData/Data[@Name="SubjectUserName"]',
'Event/EventData/Data[@Name="SubjectDomainName"]',
'Event/EventData/Data[@Name="SubjectUserSid"]',
'Event/EventData/Data[@Name="ProcessId"]',
'Event/EventData/Data[@Name="ProcessName"]'
)
$PropertySelector = [System.Diagnostics.Eventing.Reader.EventLogPropertySelector]::new($SelectorStrings)
$SubjectUserName, $SubjectDomainName, $SubjectUserSid, $ProcessId, $ProcessName = $_.GetPropertyValues($PropertySelector)
[pscustomobject][ordered]@{
DateTime = $_.TimeCreated
UserName = $SubjectUserName
Domain = $SubjectDomainName
UserSid = $SubjectUserSid
ProcessId = $ProcessId
ProcessName = $ProcessName
} | Write-Output
}
Get-WinEvent -FilterHashtable @{LogName = 'Security'; ID = 4673; StartTime = (Get-Date).AddDays(-1)} | ParseSPUEvent