微软开发的一款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。

有关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)

源链接

Hacking more

...