使用微软LAPS安全管理Windows管理员密码

目前,您是如何处理本地 Windows 管理员密码的?每台Windows系统都有一个本地管理员密码,而这个密码拥有每台计算机的全部权限。由于本地管理员密码不是 Active Directory (AD) 的一部分,您必须在每台计算机上单独管理每个帐户。这真是一件麻烦的事情。

很多时候,组织并没有过多考虑这个问题,只是在每台Windows机器上设置一个标准管理员密码。尽管这种做法很方便,但当这个唯一的主密码落入错误的手中时,组织就会面临更大的问题。在每台计算机上设置单独的本地管理员密码并不能完全阻止恶意个体访问一台计算机,但它在很大程度上防止了其他计算机的横向利用。

Microsoft本地管理员密码解决方案(LAPS)可以帮助解决这个问题。

在本文中,您将学习如何通过设置LAPS来保护加入AD的计算机。

什么是Microsoft LAPS?

LAPS是保持Windows环境安全的重要工具。LAPS是一种以巧妙方式工作的工具;它会自动对所有启用了LAPS的域计算机的本地管理员密码进行随机化,并定期更改每个密码。

LAPS确保在您的域上随机设置本地管理员密码,防止黑客和恶意软件的横向移动。现在,您可能认为客户端上的长本地管理员密码可以保护您免受此类威胁,但事实并非如此

黑客可以使用Pass-The-Hash方法快速在您的域中传播,并甚至可能通过相同的方法找到域管理员凭据。LAPS通过强制恶意个体为每个单独的计算机发现密码来防止此类活动。

LAPS的实际应用

LAPS有三个主要部分:

锁定的AD属性

LAPS在AD中为每台受控计算机存储每个本地管理员密码,称为ms-Mcs-AdmPwd。LAPS还需要知道密码何时过期以进行更改,因此它还存储另一个名为ms-Mcs-AdmPwdExpirationTime的AD属性。这些AD属性只能被指定的AD主体(如组或用户)读取/写入,并且还可被使用密码的计算机帐户写入。

GPO设置

为在计算机上配置LAPS并更改密码,LAPS还有一组GPO设置。当GPO链接到一组计算机时,LAPS设置会分发到每台计算机。当计算机应用GPO设置时,LAPS使用一个特殊的DLL文件来解释它们。

当LAPS发现当前日期超过密码的过期日期时,它将:

  • 随机生成一个新密码并将其设置为本地管理员密码。
  • 将新的本地管理员密码写入AD中的Ms-Mcs-AdmPwd属性。
  • 将新的过期日期写入ms-Mcs-AdmPwdExpirationTime

通过使用这种巧妙而简单的方法,域计算机保持更加安全。

设置LAPS

足够的信息,让我们真正了解一下LAPS能做什么!设置LAPS并不复杂,但确实需要一些步骤,你将在本教程中学到这些步骤。它们包括:

  1. 在管理机器上安装LAPS管理工具。
  2. 扩展AD架构以添加LAPS使用的两个自定义AD属性。
  3. 为AD中的各个组件设置适当的权限。
  4. 构建将应用于Windows计算机的LAPS GPO。
  5. 部署LAPS GPO扩展到适用的Windows计算机。

完成上述步骤后,您将拥有一个完全功能的LAPS环境,已设置并准备就绪!

先决条件

在本文中,您将真正设置LAPS。如果您想跟着操作,请确保您首先满足一些先决条件。

  • AD域(2003及以上版本)
  • A computer running Windows (10 or Server 2012+ is recommended) has RSAT for Active Directory installed.
  • 具有对既是AD域管理员又是模式管理员组成员的帐户的访问权限。

本文中的所有示例都将使用名为contoso.com的AD域。

模式管理员组的最佳实践是只在需要权限时才是其成员。

安装Microsoft LAPS管理工具

要开始,您必须首先在管理员计算机上安装LAPS管理工具。这些管理工具将安装LAPS GPO扩展(如果选择)和配置LAPS的管理工具。

  1. 首先下载LAPS.x64.msi文件,并以管理员身份运行它,然后单击下一步
Installing Microsoft LAPS

2. 按下一步直到您到达自定义设置,然后单击管理工具整个功能将安装在本地硬盘上以安装这两个组件。如果您不希望当前机器由LAPS管理,则选择AdmPwd GPO扩展

Click Management Tools

3. 点击下一步直到安装完成并退出安装程序。

您现在已安装了LAPS GPO扩展(如果已选择),以及其管理工具,现在我们可以开始扩展AD模式并添加我们的GPO。

扩展AD模式

如前所述,LAPS使用两个名为ms-Mcs-AdmPwdms-Mcs-AdmPwdExpirationTime的AD属性。这两个属性不是默认的,必须添加到AD模式中。

  1. 首先,如果帐户还不是成员,则将域管理员组的成员添加到模式管理员组。我们将这称为您的“管理员帐户”。
  2. 以管理员帐户身份启动 PowerShell,并通过执行Import-module AdmPwd.PS导入AdmPwd PowerShell 模块
  3. 模块导入后,运行命令Update-AdmPwdADSchema以更新 AD 模式并添加两个 AD 属性。您可以在下图中看到输出。
Powershell Admin Account

您现在已经扩展了我们的 AD 模式以支持 LAPS,并且已经准备好在活动目录中设置权限。

配置活动目录权限

每台计算机都需要能够更新其本地管理员密码和过期时间 AD 属性。为此,每台计算机必须对ms-Mcs-AdmPwdms-Mcs-AdmPwdExpirationTime AD 属性具有自我写入权限。幸运的是,大部分工作都可以通过 AdmPwd PowerShell 模块轻松完成。

允许机器保存其密码

首先,确保每台计算机都可以将其密码保存到ms-Mcs-AdmPwd AD 属性,并在密码过期时更新ms-Mcs-AdmPwdExpirationTime AD 属性。AdPwd PowerShell 模块有一个命令可以设置这些权限,称为Set-AdmPwdComputerSelfPermission,按组织单位(OU)设置,适用于所有子 OU。

在PowerShell中运行Set-AdmPwdComputerSelfPermission -OrgUnit ‘OU=Workstations,DC=contoso,DC=com’时,请记得更新你的具体组织单位和域名。

Update OU and Domain Name

如果你想让LAPS控制更多的组织单位,请为AD中的每个组织单位重复上述命令。

通过查找扩展权限来锁定AD属性

为确保只有你想要具有读取和重置每台计算机本地管理员密码权限的用户和组,你需要审计谁有访问权限。具体来说,你需要知道只有需要具有“扩展权限”的帐户才有这个权限。

要查找具有扩展权限的帐户,请运行Find-AdmPwdExtendedRights -OrgUnit 'OU=Workstations,DC=contoso,DC=com' | Select -ExpandProperty ExtendedRightHolders,请确保替换你的组织单位和域名。

现在你可以在以下截图中看到CONTOSO\joe-the-adminCONTOSO\MDT-serviceWorkstations组织单位具有扩展权限。

Workstations OU

MDT-service确实需要扩展权限,但joe-the-admin不需要。现在你需要删除joe-the-admin的权限。

你需要为之前在较早步骤中设置了自写权限的所有组织单位重复此过程。

移除扩展权限

一旦你确定了要从中删除扩展权限的每个帐户,现在就是实际执行的时候。

  1. 打开Active Directory 用户和计算机,点击顶部菜单中的查看,确保高级功能已启用。启用高级功能后,您将看到所有通常隐藏的 OU,如下面的截图所示。
Hidden OUs

2.右键单击要移除扩展权限的 OU,然后点击属性

Right Click OU to Remove

3.点击安全选项卡,然后点击高级按钮。
4.找到您想要移除扩展权限的帐户或组,通过选中它并点击移除来移除它。

Security Tab for Account Removal

5.根据需要重复这些步骤,为所有具有扩展权限的主体授予权限。

授予读取和重置本地管理员密码的权限

现在您已经确保只有适当的帐户具有扩展权限,您现在需要为读取和重置本地管理员密码创建两个 AD 组,分别称为LAPS 工作站密码读取LAPS 工作站密码重置

请注意,此处指定的组名称并非强制性的。您可以自由选择任何组名称。

在仍然使用管理员帐户打开的 PowerShell 控制台中,输入以下命令,为两个 AD 组授予读取 工作站 OU 中计算机本地管理员密码的权限。

PS> Set-AdmPwdReadPasswordPermission -OrgUnit 'OU=Workstations,DC=contoso,DC=com' -AllowedPrincipals "LAPS Workstations Password Read"

PS> Set-AdmPwdResetPasswordPermission -OrgUnit 'OU=Workstations,DC=contoso,DC=com' -AllowedPrincipals "LAPS Workstations Password Reset" 

您现已启用了上方的 AD 组以读取和重置位于工作站 OU 中计算机的本地管理员密码。现在您需要添加所需的管理员或组,以读取或重置密码。

创建组策略模板的中央存储

要在计算机上安装 LAPS 并使其启用,首先通过将组策略模板导入到PolicyDefinition 存储来创建组策略。 PolicyDefinition 存储是位于所有域控制器上的文件夹。

永远不要启用针对域控制器的 LAPS GPO。这是不受支持的,并可能导致意外问题。

  1. 在 AD 中选择一个域控制器;任何一个域控制器都可以。
  2. 确保存在 \\contoso.com\SYSVOL\Policies\PolicyDefinitions。如果不存在,请立即创建。
  3. 将管理员计算机上(您安装 LAPS 的计算机)C:\Windows\PolicyDefinitions 中的内容复制到域控制器的 \\contoso.com\SYSVOL\Policies\PolicyDefinitions 文件夹中。

创建 GPO

现在让我们将 LAPS GPO 模板复制到中央存储(PolicyDefinitions 文件夹)中。

  1. 在您的管理员帐户下打开 群组策略 管理,右键单击要启用 LAPS 的 OU,然后单击 链接现有 GPO…
Group Policy Management

2. 导航至 计算机配置 —> 管理模板 —> LAPS,将 启用本地管理员密码管理 设置为 已启用。如果您对密码复杂度有不同要求,请相应编辑 密码设置

Linking GPO to all OUs

您已经快完成了!现在将此 GPO 链接到您希望在其中使用 LAPS 的所有 OU。

部署 LAPS GPO 扩展

一旦 GPO 应用到所有包含计算机的适用 OU,您现在需要部署 LAPS GPO 扩展。您有几种不同的方法来安装此扩展,可以通过安装 MSI(如前所示)或注册 LAPS DLL 文件。

如果选择安装 MSI,在受 LAPS 控制的每台计算机上运行以下命令以启用 LAPS。

> msiexec /q /i \\server\share\LAPS.x64.msi

如果选择通过注册 DLL 启用 LAPS,则可以使用以下命令进行操作。

> regsvr32.dll \\server\share\AdmPwd.dll

您可以使用任何远程执行工具在计算机上运行这些命令。

通过 GPO 部署 LAPS MSI

使用 GPO 是确保 LAPS GPO 扩展安装在所有计算机上的最简单方法。

  1. LAPS.x64.msi 复制到所有域计算机都可以访问的网络共享位置。
  2. 在管理员计算机上打开 组策略管理 并创建一个名为 安装 LAPS 或类似名称的 GPO。
Creating GPO called Install LAPS

3. 右键单击 安装 LAPS 的 GPO,点击 编辑 并导航到 计算机配置 —> 策略 —> 软件设置 —> 软件安装。

LAPS GPO Software Installation

4. 右键单击 软件安装 并导航到 新建—> 程序包…

GPO New Package

5. 浏览到你复制了 LAPS.x64.msi 的共享位置,选择它,点击 确定 并选择 分配

Assigning LAPS.x64.msi

6. 现在将 GPO 链接到与你配置 LAPS 相同的 OU。现在你已经准备好测试 LAPS 了!

测试 LAPS

为了确保 LAPS 在受控计算机上按预期工作,现在让其中一台计算机强制应用上述 GPO 并查看发生了什么。

  1. 重新启动位于你刚刚配置的 OU 下的计算机。计算机再次启动后,应开始安装 LAPS。
  2. 一旦 LAPS 在计算机上安装完成,再次重启计算机,并在管理员计算机上以 LAPS 工作站密码读取LAPS 工作站密码重置 AD 组的成员身份以管理员身份打开 PowerShell 控制台。
  3. 运行Get-AdmPwdPassword <computername>命令,使用刚刚重新启动并安装LAPS的计算机名称。如果一切正常,您将会看到类似于以下截图输出的内容。
LAPS Installation Output

4. 现在尝试使用上面显示的密码登录受LAPS控制的计算机。如果成功,您将能够登录。
5. 然后尝试运行Reset-AdmPwdPassword <ComputerName>命令来重置密码,并重新启动计算机。查看以下截图,看看密码是否已更改。

LAPS Password Reset

现在您已经在您的环境中使用LAPS了。虽然管理相当简单,但还有一些需要注意的事项…

使用LAPS的实际技巧

虽然上述的设置对于大多数较小的环境已经足够,但对于较大的组织来说可能不够安全,或者无法提供所需的审计级别。以下是在实际环境中使用LAPS的一些建议。

1. 打开审计功能

审计某人何时读取或重置密码非常重要,特别是考虑到如果某人读取了所有计算机的密码,您可以将警报连接到它。幸运的是,AdmPwd模块提供了一个命令来启用此功能。

PS> Set-AdmPwdAuditing -AuditedPrincipals Everyone -OrgUnit "OU=Workstations,DC=contoso,DC=com"

2. 确保没有用户可以直接读取ms-mcs-AdmPwd AD属性

一种确保用户无法读取 ms-mcs-AdmPwd AD 属性的方法是创建一个自助方法来获取计算机的本地管理员密码。虽然这不在本文的讨论范围内,但如果您没有适用于此的现有自助门户,请查看诸如 JEAWebJEA 等工具。

3. 在磁盘镜像期间重置 Ms-Mcs-AdmPwdTime 属性

在重新镜像由 LAPS 控制的计算机时,必须记得重置 Ms-Mcs-AdmPwdTime 属性,否则它不会触发密码更改,而将保留图像提供的本地管理员密码。然而,在 Ms-Mcs-AdmPwdTime 过期后,它将触发。

您可以使用以下 PowerShell 命令在没有 AdmPwd 模块的情况下重置 ExpirationTime

# 使用 RSAT 
Get-ADComputer Workstation1 | Set-ADObject -Replace @{"ms-mcs-AdmPwdExpirationTime"=(Get-Date)} 

# 没有 RSAT
$Computer = New-Object DirectoryServices.DirectoryEntry "LDAP://CN=Workstation1,OU=Workstations,DC=contoso,DC=com"
$Computer.'ms-Mcs-AdmPwdExpirationTime'.Clear()
$Computer.CommitChanges()

4. 记住 ms-Mcs-AdmPwd 属性会保留在 AD 回收站中

当您在 AD 中删除对象并启用 AD 回收站时,AD 通常会删除重要属性;幸运的是,ms-Mcs-AdmPwd 受到了保护!

5. LAPS 不适用于临时访问

虽然诱人,但LAPS并非用于提供临时访问权限给供应商、用户和其他类型的账户。与其使用LAPS,不如使用一个是特定计算机本地管理员的AD组,并使用组成员资格的TimeToLive。

结论

您现在已经学会如何部署LAPS,设置其权限以及一些使其更安全的技巧。在部署了LAPS的环境中,本地管理员密码会定期自动更改。这大大降低了域加入计算机被黑客或恶意软件接管的风险,希望这能为您省去许多麻烦。

如果您有任何问题,请随时在Twitter上给我发消息,我的Twitter是@AlexAsplund,或在下方留言。

Source:
https://adamtheautomator.com/microsoft-laps/