JEA 可减少计算机上的永久管理员数,从而帮助你改善安全状况。 JEA 使用 PowerShell 会话配置为用户创建新的入口点来管理系统。 需要提升但不受限制地访问计算机以执行管理任务的用户可以被授予对 JEA 终结点的访问权限。 由于 JEA 允许这些用户在没有完全管理员访问权限的情况下运行管理命令,因此你可以从高特权安全组中删除这些用户。
Run-As 帐户
每个 JEA 终结点都有一个指定的运行身份帐户,在该帐户下执行连接用户的操作。 此帐户在 会话配置文件中可配置,你选择的帐户对终结点的安全性有重大影响。
虚拟帐户 是配置 运行方式 帐户的建议方法。 虚拟帐户是一次性临时本地帐户,这些帐户是为连接用户在 JEA 会话期间使用的。 一旦会话终止,虚拟帐户就会被销毁,并且不再可用。 连接用户不知道虚拟帐户的登录凭据。 虚拟帐户不能用于通过远程桌面或不受约束的 PowerShell 终结点等其他方式访问系统。
默认情况下,虚拟帐户是计算机上的本地 管理员 组的成员。 此成员身份授予他们管理系统上的任何内容的完整权限,但无权管理网络上的资源。 当用户从 JEA 会话连接到其他计算机时,用户上下文是本地计算机帐户而不是虚拟帐户。
域控制器是一种特殊情况,因为没有本地 管理员 组。 相反,虚拟帐户属于 域管理员 ,并且可以管理域控制器上的目录服务。 域标识仍然受到限制,仅供在被实例化 JEA 会话的域控制器上使用。 任何网络访问似乎都来自域控制器计算机对象。
在这两种情况下,可以将虚拟帐户分配给特定的安全组,尤其是在任务可以不具有本地或域管理员权限的情况下完成时。 如果已为管理员定义了安全组,请向该组授予虚拟帐户成员身份。 虚拟帐户的组成员身份仅限于工作站和成员服务器上的本地安全组。 在域控制器上,虚拟帐户必须是域安全组的成员。 将虚拟帐户添加到一个或多个安全组后,它不再属于默认组(本地或域管理员)。
下表汇总了虚拟帐户的可能配置选项和结果权限:
计算机类型 | 虚拟帐户组配置 | 本地用户上下文 | 网络用户上下文 |
---|---|---|---|
域控制器 | 违约 | 域用户,属于 <DOMAIN>\Domain Admins 的成员 |
计算机帐户 |
域控制器 | 域组 A 和 B | 域用户,属于<DOMAIN>\A 、<DOMAIN>\B 的成员 |
计算机帐户 |
成员服务器或工作站 | 违约 | 本地用户,是 BUILTIN\Administrators 的成员 |
计算机帐户 |
成员服务器或工作站 | 本地组 C 和 D | 本地用户,<COMPUTER>\C 和 <COMPUTER>\D 的成员 |
计算机帐户 |
查看安全审核和应用程序事件日志时,可以看到每个 JEA 用户会话都有唯一的虚拟帐户。 此独特帐户有助于将用户在 JEA 终结点中的操作追溯到运行该命令的原始用户。 虚拟帐户名称遵循以下格式WinRM Virtual Users\WinRM_VA_<ACCOUNTNUMBER>_<DOMAIN>_<sAMAccountName>
。例如,如果域 Contoso 中的用户 Alice 重新启动 JEA 终结点中的服务,则与任何服务控制管理器事件关联的用户名将是WinRM Virtual Users\WinRM_VA_1_contoso_alice
。
当成员服务器需要访问 JEA 会话中的网络资源时,组托管服务帐户(gMSA)非常有用。 例如,当 JEA 终结点用于控制对托管在不同计算机上的 REST API 服务的访问时。 编写函数以调用 REST API 很容易,但需要使用网络标识通过 API 进行身份验证。 使用组托管服务帐户可使第二个跃点成为可能,同时保持对哪些计算机可以使用该帐户的控制。 gMSA 的安全组(本地或域)成员身份定义了 gMSA 帐户的有效权限。
当 JEA 终结点配置为使用 gMSA 时,所有 JEA 用户的操作似乎都来自同一个 gMSA。 唯一可以追溯操作到特定用户的方法是识别 PowerShell 会话记录中运行的一组命令。
如果未指定运行方式帐户,则会使用直通凭据。 PowerShell 使用连接的用户的凭据在远程服务器上运行命令。 若要使用直通凭据,必须授予连接用户对特权管理组的直接访问权限。 不建议将此配置用于 JEA。 如果连接用户已有管理员权限,则可以绕过 JEA 并使用其他访问方法管理系统。
标准运行账户允许您指定用于运行整个 PowerShell 会话的任何用户账户。 使用固定 运行方式 帐户(带 -RunAsCredential
参数)的会话配置无法识别 JEA。 角色定义不再按预期工作。 有权访问终结点的每个用户分配相同的角色。
不应在 JEA 终结点上使用 RunAsCredential,因为很难将操作跟踪回特定用户,并且缺少用户与角色之间的映射支持。
WinRM 终结点 ACL
与常规 PowerShell 远程处理终结点一样,每个 JEA 终结点都有一个单独的访问控制列表(ACL),用于控制谁可以使用 JEA 终结点进行身份验证。 如果配置不当,受信任的用户可能无法访问 JEA 终结点,并且不受信任的用户可能具有访问权限。 WinRM ACL 不会影响用户与 JEA 角色之间的映射。 映射由用于注册终结点的会话配置文件中的 RoleDefinitions 字段控制。
默认情况下,当 JEA 终结点具有多个角色功能时,WinRM ACL 配置为允许访问所有映射的用户。 例如,使用以下命令配置的 JEA 会话授予对 CONTOSO\JEA_Lev1
和 CONTOSO\JEA_Lev2
完全访问权限。
$roles = @{ 'CONTOSO\JEA_Lev1' = 'Lev1Role'; 'CONTOSO\JEA_Lev2' = 'Lev2Role' }
New-PSSessionConfigurationFile -Path '.\jea.pssc' -SessionType RestrictedRemoteServer -RoleDefinitions $roles -RunAsVirtualAccount
Register-PSSessionConfiguration -Path '.\jea.pssc' -Name 'MyJEAEndpoint'
可以使用 Get-PSSessionConfiguration cmdlet 审核用户权限。
Get-PSSessionConfiguration -Name 'MyJEAEndpoint' | Select-Object Permission
Permission
----------
CONTOSO\JEA_Lev1 AccessAllowed
CONTOSO\JEA_Lev2 AccessAllowed
若要更改哪些用户有权访问,请运行 Set-PSSessionConfiguration -Name 'MyJEAEndpoint' -ShowSecurityDescriptorUI
交互式提示或 Set-PSSessionConfiguration -Name 'MyJEAEndpoint' -SecurityDescriptorSddl <SDDL string>
更新权限。 用户至少需要 调用 权限才能访问 JEA 终结点。
可以创建一个 JEA 终结点,该终结点不会将定义的角色映射到有权访问的每个用户。 这些用户可以启动 JEA 会话,但只能访问默认 cmdlet。 可以通过运行 Get-PSSessionCapability
来审核 JEA 终结点中的用户权限。 有关详细信息,请参阅 JEA 的审核和报告。
最低特权角色
设计 JEA 角色时,请务必记住,后台运行的虚拟和组托管服务帐户可以不受限制地访问本地计算机。 JEA 角色功能有助于限制可在该特权上下文中运行的命令和应用程序。 设计不当的角色可能会允许执行危险命令,使用户能够突破 JEA 边界或获取敏感信息的访问权限。
例如,请考虑以下角色功能条目:
@{
VisibleCmdlets = 'Microsoft.PowerShell.Management\*-Process'
}
此角色功能允许用户从 Microsoft.PowerShell.Management 模块运行具有名词进程的任何 PowerShell cmdlet。 用户可能需要访问 cmdlet,例如 Get-Process
查看系统上正在运行的应用程序,并 Stop-Process
终止未响应的应用程序。 但是,此条目还允许 Start-Process
,它可用于启动具有完全管理员权限的任意程序。 无需在系统上本地安装该程序。 连接的用户可以从文件共享启动程序,该共享为用户提供本地管理员权限、运行恶意软件等。
此相同角色功能的更安全版本如下所示:
@{
VisibleCmdlets = 'Microsoft.PowerShell.Management\Get-Process',
'Microsoft.PowerShell.Management\Stop-Process'
}
避免在角色功能中使用通配符。 请务必定期审核有效的用户权限,以查看哪些命令可供用户访问。 有关详细信息,请参阅 JEA 审核和报告文章的“检查有效权限”部分。
最佳做法建议
下面是确保 JEA 终结点安全性的最佳做法建议:
限制 PowerShell 提供程序的使用和功能
查看允许的提供程序如何用于确保不会在配置的会话中创建漏洞。
警告
不允许 FileSystem 提供商。 如果用户可以写入文件系统的任何部分,则可以完全绕过安全性。
不允许 证书 提供者。 启用提供程序后,用户可以访问存储的私钥。
不允许可以创建新的运行空间的命令。
警告
cmdlet *-Job
可以创建新的运行空间,但不受限制。
不允许 Trace-Command
cmdlet。
警告
使用 Trace-Command
将所有跟踪的命令引入会话。
不要为 受限命令创建自己的代理实现。
PowerShell 有一组针对受限命令方案的代理命令。 这些代理命令可确保输入参数无法损害会话的安全性。 以下命令具有受限的代理:
Exit-PSSession
Get-Command
Get-FormatData
Get-Help
Measure-Object
Out-Default
Select-Object
如果创建这些命令的自己的实现,则可能无意中允许用户运行 JEA 代理命令禁止的代码。
JEA 不会防范管理员
JEA 的核心原则之一是,它允许非行政人员执行一些管理任务。 JEA 不会防范已有管理员权限的用户。 属于 域管理员、本地 管理员或其他高特权组的用户可以通过其他方式规避 JEA 的保护。 例如,他们可以使用 RDP 登录、使用远程 MMC 控制台或连接到不受约束的 PowerShell 终结点。 此外,系统上的本地管理员可以修改 JEA 配置以添加更多用户或更改角色功能,以扩展用户在 JEA 会话中可以执行的作的范围。 请务必评估 JEA 用户的扩展权限,看看是否有其他方法来获得对系统的特权访问。
除了使用 JEA 进行日常维护外,通常还有一个实时特权访问管理系统。 这些系统仅允许指定用户完成记录其使用这些权限的工作流后,才暂时成为本地管理员。