第17章 安全警报
第17章 安全警报
17.1 保证Shell安全
PowerShell产品的“安全伙伴”是经由微软出版的《编写安全代码》的其中一位作者,该书描写了如何编写不易受攻击者利用的软件。我们可以保证PowerShell与其他产品一样都是安全的——至少默认情况下,都是安全的。当然,你也可以修改这些默认值,但是当你进行操作时,请不要只考虑软件的功能,也要注意安全问题。这也就是本章要帮你完成的事情。
17.2 Windows PowerShell的安全目标
我们需要明确,当谈及安全时,PowerShell会做什么,又不会做什么;最好的办法是列出一些PowerShell的安全目标。
首先,PowerShell不会给被处理的对象任何额外的权限。
其次,PowerShell无法绕过既有的权限。
设计PowerShell安全系统的目的并不是为了阻止用户在正常的权限下输入并运行某些命令。
PowerShell的安全并不是针对恶意软件的防护。
17.3 执行策略和代码签名
PowerShell中第一个安全措施是执行策略。执行策略是用来管理PowerShell执行脚本的一种计算机范围的设置选项。正如本章前面所讲,该策略主要用作防止用户被注入,从而执行一些非法脚本。
17.3.1 执行策略设置
默认设置是Restricted,该策略会阻止正常脚本的运行。也就是说,默认情况下,你可以使用PowerShell进行交互式执行命令,但是你不能使用PowerShell执行脚本。
你可以通过运行Get-ExecutionPolicy
命令来查看当前的执行策略。另外,如果你想修改当前的执行策略,可以采用下面3种方式之一。
- 运行Set-ExecutionPolicy命令。该命令会修改Windwos注册表中的HKEY_lOCAL_MACHINE部分,但是需要在管理员权限下才能执行该命令。
- 使用组策略对象(GPO)。我们可以在”本地计算机策略--用户配置--管理模板--Windows组件--Windows PowerShell中找到PowerShell的设置选项。当通过组策略对象来配置时,组策略中的设定会覆盖本地的任何设置值。实际上,如果你试图运行Set-ExecutionPolicy,命令可以正常执行,但是会返回一个警告。该警告会告知由于组策略覆盖的原因,
- 通过手动运行PowerShell,并且给出-ExecutionPolicy的命令开关参数。如果采用这种方式,那么命令中指定的执行策略会覆盖本地任何设置和组策略中的设置值。
你可以将执行策略设置为5种值(请注意:组策略对象中包含下面列表中的3个选项)。
- Restricted——这是默认选项,除微软提供的一部分配置PowerShell的默认选项的脚本外,不允许执行其他任何脚本。
- AllSigned——经过受信任的证书颁发机构(CA)设计的数字证书签名之后的任意脚本,PowerShell均可执行。
- RemoteSigned——PowerShell可以运行本地任何脚本,同时也可以执行受信任的CA签发的数字证书签名之后的远程脚本。
- Unstricted——可以运行所有脚本。
- Bypass——这个特殊的设定主要是针对应用程序开发人员,他们会将PowerShell嵌入到他们的应用程序中。
微软强烈建议在执行脚本时使用RemoteSigned执行策略,并且仅在需要执行脚本的机器上采用该策略。根据微软的建议,其他计算机应当继续保持Restricted的执行策略。
17.4 其他安全措施
PowerShell包含另外两种总是一直有效的重要安全设置。一般情况下,它们应该保持默认值。
首先,Windwos不会将PS1文件扩展名视为可执行文件。双击打开PS1文件,默认会使用记事本打开进行编辑,而不会被执行。
其次,在Shell中不能通过键入脚本名称执行该脚本。Shell不会在当前目录中搜索脚本,也就是说,如果有一个名为test.ps1的脚本,切换到该脚本路径下,键入test
或者test.ps1
都不会运行该脚本。
你可以键入绝对路径C:\test
或者相对路径.\test
来运行该脚本。