微软开发的一款PowerShell是微软专门为管理员,开发人员和高级用户提供的命令行界面。尽管已经存在8年之久了但企业公司也只是最近才开始在Windows 7和Windows 2008环境中广泛应用。
当然了,使用PowerShell的APT攻击者、恶意软件制作者也越来越多了。
PowerShell很强大
PowerShell是个很强大很强大的命令行,可以在Windows环境下做几乎所有的东西。有什么理由让我们不喜欢?
默认安装为操作系统的一部分 提供类似于SSH远程命令的PowerShell远程 在Server 2012中默认启用远程处理能力 PowerShell V5将内置SSH客户端和服务器 完整的.NET框架访问 Win32 API和本机代码访问 可访问注册表,文件,WMI,然后更改设置。 可以访问和管理大多数操作系统组件 可反射性注入代码 加密的网络流量。。。。。。
听起来很赞吧!
但是这也导致越来越多地被攻击者滥用有效负载。
于是,大波使用PowerShell的攻击随之而来的,其中最著名的一个是Empire,其本质上是创建类似基于PowerShell环境的Metasploit。
攻击出现
在这里我们把Empire作为例子。
从PowerShell流行起,很多常见的基于PowerShell有效负载的攻击框架开始出现了,比如Metasploit、SET、Cobalt Strike等。
所以,我们能做些什么来应对这些攻击呢?
其实PowerShell并没有提供太多的安全保护措施,它自身的ExecutionPolicy就会限制哪些脚本可以运行哪些不可以。其实它也不允许用户双击打开一个脚本,但由于微软的PowerShell可以通过-ExecutionPolicy Bypass命令行选项打开powershell.exe,所以这个限制并没有什么大碍。你还可以标记可执行脚本,不过这也取决于ExecutionPolicy。
另外,可以点击此处了解更多绕过方法。
如何检测
我们再来看看检测,最重要的一步就是启用扩展的PowerShell日志记录。
不过Windows 7和2008 R2服务器并不支持默认的PowerShell 2.0,因此你需要升级到PowerShell 3.0或更高版本,这样才能够获得有一个扩展的日志。找到Windows管理框架包(KB2819745),然后手动安装该软件包。
然后,我们可以看到使用PowerShell的企业组别中在setting下的Module Logging选项。
查看途径:
Computer Configuration→Policy→Administrative Templates→Windows Components→Windows Powershell
这个日志选项可以让你知道CMDLET运行及输出的详细信息。另外,你还可以获得脚本的完整源代码,因此,即使攻击者会在攻击后删除这些表面的记录,日志也会永远地保存样本。但是,由于使用日志的地方很多并会产生大量的事件,你需要将这些内容存储到其他地方,否则重要线索会很快被其他内容覆盖。
在日志中生成4个活动的片段:
这仅仅是Empire运行几分钟后的结果。
正如你所看到的,2406个事件被生成。
当然,也有其他方法可以替代来获得信息,例如通过修改全局配置文件信息。但通过NoProfile选项调用PowerShell的方法不怎么可靠。
那么,我们该如何发现坏东西?
如果你并没有在你的系统中使用PowerShell,那就找找曾经使用PowerShell的迹象,如预读文件,PowerShell进程,PowerShell的缓存条目以及wsmprovhost进程。
另一种办法是使用-enc选项运行PowerShell然后检测新的进程。每一个恶意的有效负载是都是以base64编码的脚本的形式出现的。
Powershell Empire有效负载:
你也可以使用-NoP或-NoProfile选项,-ExecutionPolicy Bypass和-W Hidden。这显然需要命令行选项日志记录。因此-enc选项会是最稳定的。
另一个选择是寻找下载功能。
就记录的所有有效负载而言,除了最多的PowerShell有效负载,最常见的就是下载功能。这完全取决于你的环境。
Powershell Empire平台下载:
先寻找.NET WebClient API是一个好的开端。
接下来,我们要找到所有调用.NET API的本地代码,比如添加型命令或调用System.Reflection和System.Runspace.InteropServices命名空间以及任何调用外部DLL(任何和dll有关的名称,如LoadLibraryA、kernel32.dll)。调用本地代码是发现恶意软件和黑客工具的一个简单方法。同样,这也取决于你的环境。
Empire PowerDump模版
另外的一个方法则是搜索诸如与Mimkatz或Empire工具相关的常见关键词。
调用的mimikatz输出
恶意PowerShell的另一个表示是对FromBase64String函数的使用,因为攻击者常常以base64的形式存储代码或以编码形式传递数据。虽然使用base64并不一定是恶意的,但很多这种恶意PowerShell工具都会使用base64快速搜索这个函数。可以在github上搜索,你会发现有很多进攻的PowerShell工具。
结论
PowerShell的优点在于提供了灵活的、强大可信的环境,可这也让攻击者也开始猖獗起来并不被发现。我们能做的就是在使用PowerShell的同时时刻小心这种潜在的危险!
*参考来源:dfirblog,编译/ 江湖小吓,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)