系统管理员钟爱的Windows PowerShell使得用户能够有效地在本地或远程系统上执行自动化管理任务。然而,虽然它易于使用,但是也非常吸引攻击者的目光。
2010年,研究人员就首次展示了针对PowerShell的攻击。而在2011年底,他们制作出了更复杂精妙的PowerShell的攻击方法和工具包。渐渐地,PowerShell开始被当做恶意软件使用,尽管在当时,它只是在攻击期间被用于完成某些中间步骤。我们已经研究了PowerShell多年了,你可以在这里阅读到更多关于攻击PowerShell的内容。
我们最近在一些数据窃行动中观察到,几乎在所有攻击期间,都会用到简洁高效的PowerShell命令。
比如其中一个——针对目标认证信息的行动——是一个看起来是合法的俄罗斯网站的一个编写精巧的PowerShell脚本导致的。另一个行动,也是针对认证信息的,牵扯一个内容为德语的RTF文件和一个包含一系列PowerShell命令的脚本文件。
在这两个活动中,保护措施和隐蔽措施都做的很到位。
案例分析:一个针对俄罗斯的数据窃取行动
我们曾发现一个不太引人注目的Windows可执行文件会从一个看起来非常正规的域名网站下载一个PowerShell脚本。这个网站的首页是描述军事技术的,不过存储了这个PowerShell脚本,当EXE可执行文件执行时,一条PowerShell命令会下载另一个PS1(PowerShell)脚本并执行。Hidden选项保证了在执行PowerShell脚本时,在PowerShell窗口中不会让受害者明显地察觉。类似的,执行策略也被设置成了不限制,这是为了保证脚本能够如预期效果运行。
图1:下载恶意PowerShell脚本和不受限制模式命令。
密码窃取
在观察这个网站上的74.PS1时,我们观察到一个写得很好的PowerShell脚本明显试图窃取数据。脚本会从受害者机器上的特定目录复制文件,试图想掌握用户的凭证,如下面图2所示,脚本试图从Chrome目录下复制包记录有用户名和密码的”Login Data”文件。
图2:从受害者的系统中复制已知的凭证文件的命令
系统监视
这个脚本也会获取系统的元数据(例如,受害者的用户名,防火墙状态和配置细节,还有内存和硬盘大小等),将其转换为HTML页面如图3所示。
图3:命令转储系统元数据到HTML文件中
数据窃取
恶意软件将窃取到的数据打包成一个ZIP文件,如图4所示。
图4:将数据压缩到一个存档
一旦数据被亚索,被盗的数据就可以通过SMTP相关指令发送到恶意软件作者手中。要发送它,需要一个电子邮件地址和密码作为参数传递。在分析恶意脚本时,我们可以看到这些数据。
图5:恶意软件通过电子邮件发送被盗数据的命令
当恶意软件终止运行,它会生成一个加密报告,标题为“My test report”,审查其中的内容发现数据进行了加密,如图6所示。
图6:一段加密的被盗信息
被盗数据的解密
作为一个附加保护层,你可以在图7中看到,恶意软件作者已经在这个PowerShell脚本中实现了RC4算法,并且把整个ZIP都进行了加密处理。
图7:在PowerShell中实现的RC4算法
由于恶意软件对数据进行了加密,所以不能使用任何公共秘钥进行解密,不过它对RC4密钥可见。这可从图8中看到,最终可以让这个附加保护措施失效。
收集资料分析
我们使用了硬编码来解密这个ZIP文件,并解压缩了这个恶意软件收集的信息,结果如图9所示。
图9:解密和解压缩后的数据
这个”Chrome”文件包含了谷歌浏览器的登录表信息。“CompInfo”HTML文件包含了受害者的元数据。如图10所示。
图10:包含被窃取的系统信息数据HTML
这个CREDHIST文件是证书管理的一个组成部分,这也是从窃取来的数据中观察到的。CREDHIST文件包含了最近或老的账户凭据。
图11:被盗的CREDHIST文件
研究案例二:德国/奥地利的数据窃取行动
我们在德国和奥地利发现了一样个包含德语内容的RTF文件。RTF下载并启动一个驱动,导致一些列的PowerShell命令被有效地执行。在这种情况下,PowerShell还进行了虚拟化检测。
虚拟机检测
如图12所示,通过获取进程,检索所有正在运行的进程列表。恶意软件会在这些进程中检索所有与诸如VirtualBox、VMware和Parallels相关的服务。如果找到,那么就会在控制台中打印出来。
图12:PowerShell脚本检索与虚拟化程序相关的进程
如果计数大于0,那么就表明恶意软件运行于虚拟环境中。然而,仅仅在控制台输出并没多大作用——他们将真正用到这些数据。使用CONOUT参数,可以将信息传递到可执行文件中。根据这些输出的信息,可以决定行动是否应该继续或者结束。
感染技术估值29000
通过访问一个计数网站,这个恶意软件达到攻击数量计数的功能。
图13:脚本跟踪感染计数
到目前为止,它已经被访问了29245次,不过这并不代表有29245个系统被感染了,还有一些可能是来自网络安全研究人员。
图14:感染计数
在虚拟化的检查和跟踪之后,恶意软件开始窃取数据。恶意软件使用PowerShell去迭代扒取一些尽可能获取的本地数据,如本地存储的Cookies之类的,并保存到文件“ftshvc.txt”中。
窃取数据命令
图15:扒数据到一个文本文件
然而,这个作者也并不是对所有数据都感兴趣。他通过搜索字符串来对这些窃取过来的数据进行了一个优先级的排列。通过搜索包含诸如Facebook信息、银行信息,比如“bankaustria.at”和“credit-suisse.com”(一个瑞士银行网站)等。被盗数据的优先级显示在图16中。
图16:通过脚本计算特定被盗的数据计数
为新的木马造路
完成数据窃取后,PowerShell脚本所做的将是为了新的有效载体:dofoil(又是一个,PowerShell命令用于从恶意软件的网站上下载一个文件并通过ShellExecute命令运行)。这有效地关闭了PowerShell的数据窃取周期,并驻入一个新的载荷,它将连接到CNC服务器并执行其他的恶意命令。
图17:下载并执行新的有效载荷脚本
更多逃避技术
除了反虚拟机技巧,恶意软件同样要使用PowerShell的一些其它功能,比如使用混淆编码。例如,下面显示的三个命令将启动记事本。
图18:通过PowerShell,使用三种不同的方式打开记事本
如一个正常的命令行终端,如果字符串被分解成银行,则是没有问题的。即使Notepad被打成了”note””pad”,PowerShell都可以正确执行。
此外,PowerShell提供了一个-ENC(编码指令开关),能使用户/攻击者基于Base64 Evasion 进行编码。
一下是从一个恶意软件观察到的PowerShell指令,它使用一个-ENC隐藏开关,首先让系统睡眠,然后再连接到所需的链接(另一种逃避技术)。
图19:PowerShell在隐藏模式执行脚本
解密后的PowerShell真面目。
图20:通过解码后的脚本可以看到调用睡眠并连接到一个链接
通过引用混淆躲藏
在下列情况下,当一个Word宏被执行,它将启用一个PowerShell脚本,再通过这个脚本去启用一个VB脚本。
该恶意软件作者破开了扩展名如“V”+”bs”。被同样地专递进了参数中,这是作者试图绕过后缀名检测的另一个尝试。
图21:混淆引用,逃避明文字符串检测
编码和混淆的逃避手法也被观察到的邮件钓鱼的附加文件中发现到了,也是使用了PowerShell。
结论
PowerShell是现在常用的攻击手法。使用PowerShell的,特别是在企业环境中,应该严格监控和调节,并增强日志检查。由于PowerShell可以进行编码和模糊数据,所以安全团队应该意识到PowerShell可以被恶意使用,并且学习和接受PowerShell攻击培训。
发表评论
您还未登录,请先登录。
登录