美国、新西兰和英国的网络安全机构建议正确配置和监控PowerShell,而不是完全删除或禁用PowerShell。这将受益于PowerShell可以启用的安全功能,同时降低恶意行为者在获得对受害者网络的访问权限后不被发现地使用它的可能性。以下建议将帮助防御者检测和防止恶意网络行为者的滥用,同时允许管理员和防御者合法使用。这份来自国家安全局(NSA)、网络安全和基础设施安全局(CISA)、新西兰国家网络安全中心(NZNCSC)和英国国家网络安全中心(NCSC-UK)的网络安全信息表提供了信息关于使用PowerShell?及其安全措施的详细信息。PowerShell?是一种脚本语言和命令行工具,包含在MicrosoftWindows?中。与Linux?等开源操作系统上的Bash类似,PowerShell将用户体验扩展为操作系统的界面。PowerShell是在WindowsVista?中引入的,并随着每个Windows版本的发展而发展。PowerShell可以通过启用取证工作、改进事件响应以及允许常见或重复任务的自动化来帮助防御者管理Windows操作系统。在Microsoft的云平台Azure?中,PowerShell可以帮助管理Azure资源,允许管理员和防御者构建自动化工具和安全措施。然而,PowerShell的可扩展性、易用性和可用性也为恶意网络参与者提供了机会。许多公开承认的网络入侵,包括勒索软件参与者的网络入侵,都使用PowerShell作为后期开发工具。这种技术并不新鲜,因为恶意行为者经常会想方设法瞄准或使用合法的系统软件。PowerShell目前的防御环境PowerShell7.2是最新版本,但更早的5.1版本已包含在Windows10中。7.2版本由微软管理并开源。在正确配置的Windows10+中,PowerShell7.2与为版本5.1创建的所有组件完全集成并可??访问,允许继续使用现有脚本、模块和命令。5.0版之前的恶意PowerShell使用促使公众努力检测这些有针对性的PowerShell操作。最近的PowerShell版本(参见表1)包括增强的安全措施,例如以下部分详述的预防、检测和身份验证功能。作者建议在Windows10+上明确禁用和卸载已弃用的第二版PowerShell(即版本2),以防止绕过下述防御措施。PowerShell减少滥用的方法PowerShell中提供的内置Windows安全功能可以减少网络攻击者的滥用。作者建议在可行的情况下使用这些功能。PowerShellRemoting期间的凭据保护PowerShellRemoting是一项Windows功能,它使管理员、网络安全分析师和用户能够在Windows主机上远程执行命令。WindowsRemoteManagement(WinRM)是PowerShell远程处理使用的基础协议,并使用Kerberos或NewTechnologyLANManager(NTLM)作为默认身份验证协议。这些身份验证协议不会将实际凭据发送到远程主机,从而避免直接暴露凭据以及通过泄露凭据被盗的风险。PowerShellRemoting的网络保护远程连接可用于强大的远程管理功能,因此应正确配置端点上的Windows防火墙规则以控制允许的连接。Windows的客户端和服务器版本包括PowerShell远程处理,它在从Windows2012R2开始的Windows服务器上默认启用。默认情况下,使用PowerShell远程访问端点需要请求的用户帐户在目标位置具有管理权限。在专用网络上启用PowerShell远程处理将引入Windows防火墙规则以接受所有连接。权限要求和Windows防火墙规则可自定义,以将连接限制为仅受信任的端点和网络,以减少横向移动的机会。组织可以在可行的情况下执行这些规则,以加强网络安全。反恶意软件扫描接口(AMSI)集成反恶意软件扫描接口功能首先在Windows10上可用,已集成到不同的Windows组件中。它支持使用在Windows注册的防病毒产品扫描内存和动态文件内容,并为应用程序提供一个接口来扫描潜在的恶意内容。PowerShell、VBScript和JScript?等内置脚本语言使用AMSI,以便脚本可以被注册和支持的防病毒软件扫描。此功能需要支持AMSI的防病毒产品,例如WindowsDefender、McAfee和Symantec。具有应用程序控制的受限PowerShell配置AppLocker或WindowsDefender应用程序控制(WDAC)以阻止Windows主机上的操作将导致PowerShell在受限语言模式(CLM)下运行,从而限制PowerShell操作,除非管理员定义了托管策略。此功能纠正了AppLocker脚本实施的一个缺点,该缺点会阻止脚本中的PowerShell命令,但允许将相同的命令以交互方式输入到PowerShell命令控制台中。在Windows10+上正确配置WDAC或AppLocker有助于防止恶意执行人员获得对PowerShell会话和主机的完全控制。通过控制脚本和模块的来源和执行,您可以提高组织内的安全要求和代码签名管道。还可以通过称为执行策略的PowerShell安全功能强制执行签名要求。但是,执行策略并不限制所有PowerShell内容的执行。PowerShell滥用方法记录PowerShell活动可以记录网络威胁何时利用PowerShell,并且持续监控PowerShell日志可以检测并警告潜在的滥用行为。默认情况下,深度脚本块日志记录、模块日志记录和越肩监听被禁用。作者建议在可行的情况下启用这些功能。深度脚本块日志记录(DSBL)和模块日志记录深度脚本块日志记录在Windows事件日志中记录每个PowerShell命令,从而能够在集中存储和分析平台上进行额外分析。DSBL甚至记录隐藏的恶意PowerShell活动和执行的命令,例如命令调用和部分脚本。同样,模块日志记录捕获PowerShell的管道执行详细信息,目的是记录PowerShell操作。虽然可能不会记录完整的详细信息和输出,但这些模块日志和事件日志可防止PowerShell命令被防御者隐藏(例如,混淆或加密)。Over-the-Shoulder(OTS)转录记录在PowerShell5中执行的所有活动的能力可以应用于Windows7及更高版本,用于即时记录保存和有限的安全跟踪。OTS记录每个PowerShell输入和输出,无论有效与否,以使防御者能够破译预期的操作。PowerShell5.0扩展了转录以通过组策略启用企业范围的配置。提供身份验证的PowerShell过程PowerShell中的多种身份验证方法允许在非Windows设备上使用。通过SSH远程处理除了支持WinRM连接外,PowerShell7还允许通过SecureShell(SSH)进行远程连接。为了方便和安全,这允许通过PowerShell对计算机进行公钥身份验证和远程管理。PowerShell中新的SSH远程处理功能可以在不使用安全超文本传输??协议(HTTPS)和安全套接字层/传输层安全性(SSL/TLS)证书的情况下建立远程连接。通过SSH的PowerShell不需要受信任的主机,就像在域外通过WinRM进行远程处理时一样。这允许通过SSH进行安全的远程管理,而无需为所有命令和连接设置密码,并在Windows和Linux主机之间启用PowerShell远程处理。PowerShell版本和安全功能可用性下表列出了使用特定版本的PowerShell时可用的功能:表1:每个版本和操作系统可用的PowerShell功能PowerShellVersion(v)OperatingSystemAMSICLMCLMwithAppLockerandWDACDSBL?v5Windows10??????v5Windows11??????v7Windows10???????v7Windows11???????v7Linux?????结论PowerShell对于保护Windows操作系统至关重要,尤其是因为较新的版本通过更新和增强解决了以前的限制和问题。删除或不正确地限制PowerShell将阻止管理员和防御者利用PowerShell来协助系统维护、取证、自动化和安全。PowerShell及其管理能力和安全措施应该得到很好的管理和采用。
