当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 审核 Active Directory 组成员身份

作者:精品下载站 日期:2024-12-14 13:17:08 浏览:13 分类:玩电脑

使用 PowerShell 审核 Active Directory 组成员身份


Active Directory 变更经常发生,尤其是组织规模越大时。 Active Directory 是任何组织的关键组件;确保适当的用户是适当组的成员非常重要。幸运的是,您来对地方了审核 Active Directory 组成员资格更改。

在本教程中,您将了解如何检测 Active Directory 组成员身份更改。您将通过设置审核策略并使用 PowerShell 在 Windows 事件日志中查找事件来实现此目的。

让我们开始吧!

先决条件

本文将是一个实践教程。如果您想继续操作,请确保您具备以下条件:

  • Active Directory 域 - 本教程将使用 Windows Server 2019,但运行 Windows 2008 R2 或更高版本的域控制器 (DC) 应该可以工作。本教程将使用名为 test.local 的域以及两个 DC(DC01 和 DC02)。
  • 安装了 PowerShell 的已加入域的 Windows PC。本教程将使用 Windows 10 和 Windows PowerShell v5.1。
  • 用于更改组的 Active Directory 用户帐户。本教程将使用名为User1的用户帐户。
  • 作为域中域管理员组成员的用户帐户。

构建和分配审核策略

要审核 Active Directory 组成员身份更改,您必须首先确保这些更改记录在某处。默认情况下,许多重要事件不会记录在事件日志中。要告诉 Windows 存储重要的 Active Directory 组成员身份更改,您必须定义审核策略。

审核策略创建一组规则,告诉 Windows 和其他服务将某些事件记录到 Windows 事件日志中;默认情况下,它不会。创建后,您必须通过组策略将审核策略分配给目标计算机(在本例中为域控制器)。

让我们从创建审核策略开始本教程,以强制 Windows 将重要的 Active Directory 组成员身份更改记录到 Windows 事件日志中。

要创建新的审核策略,您必须创建组策略对象 (GPO) 并使用 GPO 定义审核策略。

在安装了 Windows 远程管理工具 (RSAT) 的任何域控制器或任何加入域的计算机上:

1. 打开组策略管理控制台 (GPMC) 并创建一个新的 GPO,将其附加到域控制器组织单位 (OU),并为其指定一个有意义的名称,例如审核 Active Directory 组成员身份变化。

2. 打开 GPO 并展开计算机配置 —> Windows 设置 —> 高级审核策略配置 —> 审核策略。

例如,单击帐户登录DS Access系统等每个类别,将在右侧窗格中提供更细化的类别,如您所见以下。

[玩转系统] 使用 PowerShell 审核 Active Directory 组成员身份

3. 现在,单击左侧窗口中的帐户管理,然后在右侧窗口中打开审核安全组管理子类别。

4. 启用配置以下审核事件:框以及成功失败。一旦将此审核策略应用于计算机,它将记录修改组的所有尝试。此外,它还会记录所有成功和不成功的尝试,例如当用户尝试进行更改但没有权限时。

[玩转系统] 使用 PowerShell 审核 Active Directory 组成员身份

5. 单击审核安全组管理属性框中的确定,然后关闭 GPO。您现在已经设置了一个 GPO,并定义了审核策略,可以开始工作了!

GPO 应链接到 Active Directory 域控制器 OU。因此,每当您修改 GPO 时,该 OU 中的每个 DC 都应在其典型的组策略刷新过程中应用该策略。

使用 Windows 事件查看器审核组成员身份更改事件

现在您已经构建了审核策略并将其链接到域控制器 OU,让我们进行更改并测试它。

在安装了 Windows 远程管理工具 (RSAT) 的任何域控制器或任何加入域的计算机上:

1. 打开 Active Directory 用户和计算机 (ADUC),然后打开可用于测试的任何用户帐户。本教程将使用名为User1的帐户。

2. 单击成员选项卡。在这里您将看到用户所属的每个组。单击添加并输入Enterprise Admins,然后单击确定将用户添加到Enterprise Admins 组。

[玩转系统] 使用 PowerShell 审核 Active Directory 组成员身份

3. 现在,打开 Windows 事件查看器,展开Windows 日志,然后单击安全事件日志。

[玩转系统] 使用 PowerShell 审核 Active Directory 组成员身份

在事件窗格中,您应该看到 Windows 记录了 ID 为 4756 的事件。

[玩转系统] 使用 PowerShell 审核 Active Directory 组成员身份

修改 Active Directory 组时,您将看到安全事件日志中记录的三个不同事件之一,具体取决于修改的组的类型;全局组为 4728,本地域组为 4732,通用组为 4756。

4. 打开 ID 为 4756 的事件,您将看到有关此特定组成员身份更改事件的 Windows 记录的所有信息。

  • 主题 - 进行更改的用户。这将显示您登录的用户帐户名。
  • 成员 - 受此更改影响的用户。这是用户 1。
  • 群组 - 成员添加到的群组。这是企业管理员组。

[玩转系统] 使用 PowerShell 审核 Active Directory 组成员身份

使用 PowerShell 审核组成员身份更改事件

现在您的域控制器正在将组成员身份更改事件记录到 Windows 事件日志中,您不必只使用 Windows 事件查看器。您也可以使用 PowerShell!

您是刚开始使用 Windows 事件日志和 PowerShell 吗?在 PowerShellcenter.com 上了解 PowerShell 和 Windows 事件日志基础知识的第一步。

假设您仍在 DC 的桌面上:

1. 打开 Windows PowerShell。

2. 运行 Get-WinEvent cmdlet 查询 Security 事件日志,查找 ID 为 4756 的所有事件,如下所示。此命令将返回通用组的所有组成员身份更改事件。

对于全局组,将 ID 值更改为 4728;对于本地域组,将 ID 值更改为 4732。

Get-WinEvent -FilterHashtable @{ Logname='Security'; ID='4756'}

FilterHashtable 参数是一个哈希表,并接受其值作为键值对,例如@{Key1='值1'; Key2='Value2'}

3. 如果您不想看到对所有 Active Directory 组的更改,请通过查看Message使用Where-Object cmdlet 来限制输出字符串 Enterprise Admins 的 属性,如下所示。

Get-WinEvent -FilterHashtable @{ Logname='Security'; ID='4756'}  | Where-Object {$_.Message -like "Enterprise Admins"} | Format-Table -AutoSize -Wrap

然后,PowerShell 将返回企业管理员组成员身份发生更改的所有事件。

[玩转系统] 使用 PowerShell 审核 Active Directory 组成员身份

监控 Active Directory 管理组

在上一节中,您了解了如何审核 Active Directory 中单个组的组成员身份更改。既然进展顺利,为什么不监视 Active Directory 中的所有内置组呢?

识别默认(管理)Active Directory 组

Active Directory 附带一组管理组。这些组可以为其中的任何用户定义特权权限。让我们首先弄清楚如何发现所有这些管理组。

要找到这些管理组,您必须首先找出它们之间的一些共性。这种共性是其安全标识符 (SID) 中的一种模式。 Active Directory 中的每个对象都有一个唯一的安全标识符 (SID)。每当 Windows 引用对象时,都会使用 SID 而不是组名。

所有 Active Directory 管理安全组都有一个始终以小于 1000 结尾的 SID,称为相关标识符 (RID)。了解这一点后,您可以构建一些 PowerShell 代码来查找它们。

假设您仍然在域控制器上打开 PowerShell:

1. 运行 Get-ADGroup 命令并仅返回组的 SID,如下所示。

(Get-ADGroup 'Enterprise Admins').SID

从下面的屏幕截图中您会看到 SID 分为两部分;域 SID 和 RID。

[玩转系统] 使用 PowerShell 审核 Active Directory 组成员身份

同一域中的所有对象的域 SID 都是相同的;仅 RID 发生变化。

2. 现在使用相同的命令,但这次搜索 RID 等于或小于 1000 的所有组,以获取 Active Directory 管理组的完整列表。

## Find the domain SID to use in the filter
 $LocalDomain=(Get-ADDomain).DomainSID
## Search for all AD groups ensuring the objectSID property is returned.
## Then filter the results based on the SID ending in a dash and three numbers.
 Get-ADGroup -Properties objectSid -Filter * |where {($_.ObjectSid.Value -match ("-\d{3}$")) -and ($_.Objectsid.value.length -gt $LocalDomain.Value.length)} | select name,Objectsid,GroupScope

[玩转系统] 使用 PowerShell 审核 Active Directory 组成员身份

构建 PowerShell 脚本来审核所有管理组更改

您现在拥有查找所有管理组所需的代码,并且根据上一节所述,您还拥有查询事件日志所需的 PowerShell 代码。现在让我们将它们结合起来创建一个方便的 PowerShell 工具。

打开您最喜欢的代码编辑器,复制/粘贴以下脚本并保存。代码的解释都是内联的。

## Create an array to save all events
$EventsResult=@()

## Find the Domain SID to filter administrative groups
$LocalDomain=(Get-addomain).domainsid

## Define the earliest event date to search from
$dateFrom=(Get-Date).AddDays(-1)

## Find all of the AD administrative groups
$ADAdminGroups=(Get-ADGroup -Properties objectSid -Filter * |where {($_.ObjectSid.Value -match ("-\d{3}$")) -and ($_.Objectsid.value.length -gt $LocalDomain.Value.length)}).Name

## Query the Security event log for all events with IDs 4728, 4732 or 4756
## that start from $dateFrom and end right now.
$PossibleEvents= Get-WinEvent -FilterHashtable @{id=(4728,4732,4756)
                                                logname="Security"
                                                StartTime=$dateFrom
                                                EndTime=(get-date)}

## Begin processing each Windows event found
Foreach ($Events in $PossibleEvents) {
	## Check if the event was for a membership change for an administrative group
	if ($ADAdminGroups | where {$Events.message -match $_}){
		## If so, add an object with the time of event and the details to the $EventResult array
		$Result=[pscustomObject]@{
			Date=($foreach.current).TimeCreated
			Message=($foreach.current).message
		}
    
    $EventsResult+=$Result           
	}
}
## If any events found, send an email with the event as the body
if ($EventsResult){
	Send-MailMessage -From "[email " -To "[email " -Body ($EventsResult |Out-String) -SmtpServer Out.YourSMTPServer.com
}

将 SMTPServer 参数替换为有效的 SMTP 服务器。此外,如果您使用的是 Office365,您可能需要首先对 SMTP 服务器进行身份验证。

使用此脚本可以提供有关谁更改了什么的详细信息,并且是许多安全解决方案中的标准方法。

结论

您现在已经掌握了如何使用 PowerShell 审核 Active Directory 中的组成员身份更改。您将如何使用上述脚本?您如何改进它以帮助您的组织审核 Active Directory 中的组成员身份更改?

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯