对很多IT专业人士来说,Powershell的确是Windows系统中一个相当强大的工具,而且微软也有意将PowerShell作为Windows系统的默认命令行工具。但赛门铁克最近的一份报告指出,超过95%的PowerShell脚本实际上都是恶意脚本。
赛门铁克在报告(传送门)中指出,绝大部分恶意PowerShell脚本都是扮演下载的角色。当然PowerShell脚本的终极目标还是要在设备上执行恶意代码,在整个网络传播恶意软件。
绝大多数PowerShell脚本是恶意脚本
由于PowerShell框架极具灵活性,攻击者可以滥用它来下载恶意payload、进行恶意侦查、或者是遍历网络。赛门铁克分析,95.4%的PowerShell脚本为恶意脚本,这个结果表明来自外部的PowerShell脚本程序对企业构成了重大威胁,尤其是在使用shell 框架的企业中。
下载并执行远程文件的简单脚本程序示例
如今的很多针对性攻击均使用了Powershell脚本,无论是Odinaff集团发起的攻击还是Kovter Trojan木马作者编写的脚本(都是采用PowerShell)。PowerShell脚本甚至不需要以文件为载体就能感染目标,因此越来越多银行木马和其他类型的威胁都选择了PowerShell。
比如最近有款名为“August”的恶意程序就采用PowerShell进行感染,而且并没有以文件为载体(传送门):在这次攻击中,恶意脚本企图窃取身份凭证和敏感文件。它通过包含恶意宏的word文档进行传播,一旦打开文档,Powershell命令行就会启动,然后下载并安装最终的payload。
赛门铁克在例证中特别提到了Nemucod downloader——如果你对Locky勒索软件熟的话,应该也很清楚Nemucod用的就是PowerShell。不过实际上,报告中一直在强调,最常与PowerShell匹配的还是Office宏;另外各种Exploit Kits漏洞利用工具也经常采用PowerShell,比如说相当知名的RIG、Neutrino、Magnitude和Sundown。
恶意PowerShell脚本的一些数据
我们接收到的样本数量在2016年急剧增长。赛门铁克在第二季度收到的样本数量是第一季度的14倍,而第三季度更是第二季度的22倍。
基本代码混淆
赛门铁克的这份报告对大量样本进行了观察分析。这些数据均来自赛门铁克恶意软件分析沙盒(Symantec Blue Coat)。在这个沙盒中,仅今年就有49127例PowerShell脚本提交。而且,安全研究员还手动分析了4782例不同的样本,发现其中的111个恶意软件系列存在滥用PowerShell命令行的情况。而在这111例中,仅有8%的恶意软件使用了如大小写混合字母之类的混淆技术;没有脚本会对命令参数做随机化之类的混淆。
研究人员表示,他们观察到目前比较流行的,正在使用PowerShell、三个最常见的恶意软件,分别是W97M.Downloader(在分析样本当中占比9.4%),Trojan.Kotver(占比4.5%)和JS.Downloader(占比4.0%)。
分析样本中,最常用的PowerShell命令行参数是“NOPROFILE”(占比34%),“WindowsStyle”(占比24%)和“ExecutionPolicy”(占比23%)。
研究人员还提到,在今年观察的10797个PowerShell脚本中——也包括那些没有恶意的脚本,55%的脚本是以cmd.exe开始执行的。如果只考虑恶意脚本,95%都是通过cmd.exe执行。不过,绝大部分宏downloader还没运行就已经被系统禁止了,所以都并不需要赛门铁克的行为引擎分析。
针对已经被攻陷的网络,攻击者采用的PowerShell手法注入Invoke-Command、Enter-PSSession、WMI/wmic/Invoke-WMImethod、Task Scheduler,还有PsExe这样一般的工具。而且为了能够保证存在的持久性,PowerShell也会安排任务、替换启动文件夹中的脚本、采用组策略或者WMI、感染本地配置文件,在注册表中存储脚本(如2014年的Trojan.Poweliks)等。
除此之外,赛门铁克的这份报告还详细谈到了黑客针对PowerShell脚本的混淆技术;列出了不少PowerShell恶意程序的相关信息,包括勒索软件,键盘记录器,以及银行和后门木马。有兴趣的可点击这里下载查看完整报告。
如何应对?
防御此类威胁的最好方法是运行最新版本的安全软件以及Powershell。另外,恶意脚本大都是通过电子邮件传播,因此最好是不要打开来自不信任源的脚本、文件或者是链接。
公司内部的IT专业人士需要对企业内部应用对PowerShell的调用进行更加严密的监控,记录PowerShell的活动并通过分析日志来发现异常行为,创建规则,以便在发生异常行为时能够报警。
另外,我们也应该(尤其是安全人士)经常审视PowerShell的命令行,通常合法脚本的内容和目的都很直观,而攻击脚本通常都使用Base64加密命令行,并且经常把各种脚本团塞在一行内,出现这种情况时,我们一眼就能看出端倪。