【51CTO.com快译】PowerShell是一个巨型的Windows工具箱,它使得Windows管理员能够自动执行各种任务,如:循环日志、部署补丁和管理用户。无论是特定的Windows管理工作还是与安全相关的任务,如:管理证书和寻找攻击活动,PowerShell总有一种方法可是实现。
说到安全,有人可能已经创建了一个PowerShell脚本或是模块来处理其工作。微软拥有一个脚本的社区库,那里提供了处理各种安全事务的脚本,如:渗透测试、证书管理、和网络取证等。
鉴于一些预设好的PowerShell能够减轻Windows管理员的工作负荷,就请随我一起来看看下面的各个模块是如何能提高您的Windows系统和网络安全的吧。
系统加固
一旦进入您的网络,攻击者通常需要一些时间来侦察学习网络的拓扑结构,以发现其它的系统,并通过找到额外的认证凭证来跨过网络去入侵其它的系统。其目标当然是定位最敏感的信息的存储位置并使之漏出。
以下的PowerShell脚本就能使得侦察活动难以执行。
从多台计算机上将多个用户从本地管理员组里删除掉。诚然用户可能因为一些原因被添加到本地管理员组里。例如:一个账户可以被IT用于故障诊断的意图或是为了创建一台机器。但无论如何,在本地管理员组里包括多个用户却是一个安全风险,因为攻击者完全可以窃取这些认证凭证。Remove-LocalAdmins Masive脚本则可以查看所有计算机上的从一个文件中所罗列出的用户信息,并集中到一个指定的文本文件里,且删除这些用户。
该脚本需要用一个具有足够权限的账户来运行,以访问到其它机器上来删除用户。
加固SAM并远程访问Windows 10。攻击者可以通过SAM-Remote协议来远程访问Windows安全帐户管理器(SAM),凭借着域服务器,它能了解所有的域和本地用户组成员以及网络中路由表等信息。默认情况下, 任何在网络中的具有合法身份的用户可以通过SAMR来远程访问SAM。当然Windows 10的年度更新已改为默认只有管理员是限制访问的。
SAMRi10允许管理员修改网络中所有Windows10和Windows Server 2016系统的远程SAM的默认访问权限,其得心应手之处在于:攻击者将不能轻易的获得本地管理员或其他特权帐户的认证凭证。
请注意,SAMRi10只适用于Windows10和Windows Server 2016。同样的改变可以通过Windows10的 1607及其以后版本的组策略来实现,因此该PowerShell模块仅仅提供了另一种方式来完成相同的任务。
将应用程序添加到微软增强缓解体验工具包(Microsoft Enhanced Mitigation Experience Toolkit,简称:EMET)中。EMET不接受文件名通配符,这意味着当一个应用程序的名称发生更改时(例如:每个版本的Adobe Flash Player有包含版本号的不同文件名),EMET就需要更新。管理员使用EMET来保护个人应用程序,并使用Configure_EMET来添加和删除应用程序到其检测列表中。不过,该脚本只适用于Windows 7和8。
加固网络会话枚举。攻击者可以使用网络会话的枚举来检索服务器上建立的会话信息,如:计算机名称、IP地址、用户建立会话的名称、会话存活的秒数。根据这些信息,攻击者便可知道给定用户所登录过的所有计算机。
默认情况下,任何具有合法身份的用户都可以执行NetSessionEnum。Net Cease模块通过移除合法身份的用户组的执行权限和向特定的会话添加权限来变更谁可以使用NetSessionEnum。Net Cease并不干扰防御人员远程调用该方法的能力,而互动/服务/批处理的登录会话仍然能够本地调用之。
Windows的管理
PowerShell使得管理员能够更好且更容易的管理控制Windows系统。虽然这种靠“黑掉”注册表来实现各种操作,且会导致更多的问题并非是一个优雅之举,但PowerShell可以更容易的修改访问控制列表(ACL),添加或远程登录个别主机上的用户,并管理组策略设置——这些只是冰山的一角。
在Windows里,安全的最佳实践是:尽可能使用最小权限帐户的模式。因此,就算一个会话是盗用,攻击者也只能禁锢于该用户的较少特权凭证。而对于需要一些特权访问的情况,管理员则可以使用“以一个进程运行脚本(Run Script as a Process)”的模式来以另一个身份去运行其它的PowerShell脚本。StartScriptAsProcess就能创建一个新的流程并明确告诉操作系统所使用的另一个身份,而不是那个与登录用户相关联的身份。
SHA1证书签名检查。证书管理是一项非常复杂的任务,而将SHA-1证书用更安全的替代方案予以更换已经是迫在眉睫的了。该SHA1CertSigCheck模块将有助于管理员判断证书是否被SHA-1所签发。而该脚本的输出还指明了证书是否是以TLS的方式进行安全的网络通信或是去签发了Windows的可执行文件。
虽然管理员也能够查找非根 CA的证书,但该脚本并不告知其是否为公共CA所签发的证书。由于它只能一次检查一张证书或可执行程序,而且并不主动发现它们,因此管理员仍然必须先人工找到所有的证书。
文件系统安全Powershell模块(版本)4.2.3。用Windows PowerShell管理文件和文件夹的权限并不太容易,但NTFSSecurity模块提供了为NTFS驱动器定制化的cmdlets,例如获取当前的权限列表,添加和删除访问控制项(ACEs),以及设置继承等。还有Windows商店的权限访问控制项(ACEs)就在自主访问控制列表(DACL) 之中。目前脚本中心存储库所链接下载的是几年前的1.3版本,而最新版本4.3.2,可在GitHub托管平台上获得。
备份和恢复文件夹的访问控制列表。跟踪所有访问控制列表的变化可能会相当棘手。有相当多的脚本声称能够在ACL已被修改时予以显示,但Track-NTFSChanges却使用了一个非常简单的方法。它将整个ACL备份为一个XML文件,并在下一次该脚本运行时,会检查对比当前列表和以前的备份是否有变化。如果有,该模块有让管理员恢复旧的权限的功能。
不幸的是,虽然该脚本可以显示已被修改的ACL,它不能告知谁导致了该变化。因此管理员仍然必须通过日志挖掘来发现详细的信息。
捕猎攻击者
PowerShell不仅仅是一种管理语言,管理员们还可以运用PowerShell来执行正则表达式的模式匹配,以发现伪造的恶意文件、监控网络、分析日志中的安全事件。例如:管理员可以为可疑文件创建一个SHA256密码散列,并使用Get-VirusTotalReport模块来查询VirusTotal服务(一个必需的API密匙)以确定该文件是否为一个已知的恶意软件样本。类似的脚本,Verify-AutoRun,查找文件中是否添加了自动运行到系统中,并通过查询VirusTotal来发现潜在的恶意软件样本。它并不自己去获取条目,因为它实际上是一个Autorunsc.exe和SigCheck.exe的包装器,不过,这已经够方便了。
修改本地管理员组。攻击者为了其可以执行一系列活动的目标,会在系统上创建一个本地管理员帐户的。Detect-LocalAdmin脚本定期查询多台计算机并比较本地管理员组的用户列表来发现任何可能的更改。如果找到一个新用户,该脚本将日志记录该事件并发送一封电子邮件通知以提醒管理员可能存在的泄漏。
Kerberos黄金票据检查。黄金票据攻击发生在当攻击者拥有了对活动目录的管理员或当地管理访问权限后,操纵Kerberos票据以获得未经授权的访问权限。攻击者可以执行多种身份验证的任务或是制造Kerberos票据授予类型的票据(TGT)来为用户和并不存在服务账户创建其它的Kerberos票据。GoldenTicketCheck模块检查那些为异常TGT缓存的计算机Kerberos票据,比如说那些生命周期并非为默认10个小时的期限。如果一个异常TGT或服务票证被发现,PowerShell控制台将显示相关的细节并管道输出其结果到一个文本文件里。
Get-LogonLocations。攻击者“寻猎”特权帐户并试图登录到网络中的其它系统。PowerShell的Get-LogonLocations模块搜索所有域控制器上与指定用户相关联的登录事件。其输出可以显示那些攻击者所试图用特权帐户登录的所有电脑。该脚本是比较通用的,因为通过被修改,它可以查看到指定电脑,而非所有域控制器;以及指定的用户,而非所有0层账户组的成员的不同事件日志。尽管该模块能运行在所有新的Windows版本:从Windows 7到10,但貌似它不支持Windows Server 2003,2008,或2012 R2。在GitHub上也有它的一个版本。
脚本化安全
PowerShell使IT能自动化运行一些更为费时或乏味的Windows管理事务。与其它任何从互联网下载,然后盲目的执行的情况相比,使用这样能够处理事务的脚本是非常令人心悦的。您可以在实际运行脚本之前,通过代码逐步审查以确保您能理解其真正含义。如果某些代码不合理,您可以在找出其原因的同时,加以注释或寻找另一个替代的代码。因为可能需要提升特别权限,许多这些脚本会要求您在执行之前进行解禁(unblock)。所以再提醒一次:检查代码是关键!
当然,您应确保自己已经安装了PowerShell。PowerShell是被默认安装在Windows10和Windows 10的年度更新上的。Windows 8和8.1附带的是PowerShell 4。而在Windows 7上,管理员将需要手动安装PowerShell。那些不太习惯使用PowerShell的管理员应该参考Woody Leonard的指南作为开始。
原文标题:10 essential PowerShell security scripts for Windows administrators,作者:Fahmida Y. Rashid
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】