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

[玩转系统] 保护受限 PowerShell 远程会话的安全

作者:精品下载站 日期:2024-12-14 02:59:05 浏览:15 分类:玩电脑

保护受限 PowerShell 远程会话的安全


在某些情况下,您希望托管 PowerShell 会话,出于安全原因,该会话仅限于 PowerShell 命令的子集。

根据定义,受限会话是不允许使用 Import-Module 的会话。可能还有其他限制,但这是主要要求。如果用户可以导入模块,那么他们就可以运行他们想要的任何东西。

受限会话的示例包括:

  • 充足管理 (JEA)
  • 自定义受限远程处理实现,例如 Exchange 和 Teams 模块

对于大多数系统管理员来说,JEA 提供了创建受限会话的最佳体验,应该是您的首选。有关 JEA 的更多信息,请参阅 JEA 概述。

自定义会话实现的建议

如果您的场景需要自定义实现,那么您应该遵循这些建议。

限制 PowerShell 提供程序的使用和功能

检查如何使用允许的提供程序以确保您不会在受限会话实现中创建漏洞。

警告

不允许文件系统提供程序。如果用户可以写入文件系统的任何部分,则有可能完全绕过安全性。

不允许证书提供商。启用该提供程序后,用户可以获得对存储的私钥的访问权限。

不允许可以创建新运行空间的命令

警告

*-Job cmdlet 可以不受限制地创建新的运行空间。

不允许使用 Trace-Command cmdlet。

警告

使用 Trace-Command 将所有跟踪的命令带入会话中。

不要为受限命令创建您自己的代理实现

PowerShell 有一组用于受限命令场景的代理命令。这些代理命令确保输入参数不会损害会话的安全性。以下命令具有受限代理:

    Exit-PSSession
    Get-Command
    Get-FormatData
    Get-Help
    Measure-Object
    Out-Default
    Select-Object

    如果您创建自己的这些命令的实现,则可能会无意中允许用户运行 JEA 代理命令禁止的代码。

    您可以运行以下命令来获取受限命令列表:

    $commands = [System.Management.Automation.CommandMetadata]::GetRestrictedCommands(
        [System.Management.Automation.SessionCapabilities]::RemoteServer
    )
    

    您可以使用以下命令检查受限代理命令:

    $commands = [System.Management.Automation.CommandMetadata]::GetRestrictedCommands(
        [System.Management.Automation.SessionCapabilities]::RemoteServer
    )
    $getHelpProxyBlock = [System.Management.Automation.ProxyCommand]::Create($commands['Get-Help'])
    

    配置会话以使用 NoLanguage 模式

    PowerShell NoLanguage 模式完全禁用 PowerShell 脚本语言。您无法运行脚本或使用变量。您只能运行本机命令和 cmdlet。

    有关语言模式的更多信息,请参阅 about_Language_Modes。

    不允许在会话中使用调试器

    默认情况下,PowerShell 调试器以 FullLanguage 模式运行代码。将 SessionState 中的 UseFullLanguageModeInDebugger 属性设置为 false。

    有关详细信息,请参阅UseFullLanguageModeInDebugger。

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

    取消回复欢迎 发表评论:

    关灯