揭开Active PowerShell如何窃取数据之谜
Windows的PowerShell深受管理员的喜爱,它可以让用户有效的在本地和远程系统中进行自动操作和管理任务。然而,它的易用性和广泛性吸引了无数攻击者的目光。
研究人员首先开始证明针对PowerShell的攻击始于2010年,攻击者于2011年底改进了PowerShell,使攻击方法变得更加复杂并且出现了PowerShell攻击工具包。PowerShell中逐渐出现了恶意软件货哦的那个,尽管当时它只是被观察用于完成攻击周期的一些步骤。我们多年来一直在研究PowerShell攻击,你可以在这里获得更多的相关信息。
最近,我们遇到了一些窃取数据的活动,几乎所有的攻击周期的步骤都设计简单有效的PowerShell命令。
其中的一个活动的目标是证书-包括一个看似合法的俄罗斯网站指向一个非常棒的PowerShell脚本。另一个活动的目标也是证书,包括一个德语的RTF文件,可以初始化一系列PowerShell命令。在这两个活动中,保护和回避措施在整个攻击过程中都非常重要。
案例I:一个来自俄罗斯的数据窃取攻击
我们观察到一个Windows的可执行文件会从一看看似合法的俄罗斯网站下载下载一个PowerShell脚本。网站的主页虽然是武术介绍,但是也承载了PowerShell脚本。执行EXE文件时,PowerShell命令会下载另一个PowerShell脚本并初始化。这种隐藏机制确保了用户没法在PowerShell窗口中看到执行PowerShell脚本的过程。同样的道理,执行策略也被设置为不受限制的,以确保脚本利用所需的访问运行。
图1:以隐藏不受限方式命令下载恶意PowerShell脚本
密码窃取
在访问该网站上的主机"74.ps1"时,我们观察到一个目的就是窃取数据的精心编写的PowerShell脚本。脚本从特定的能够按照预期保存用户凭据的被攻击者的文件系统复制文件,如下图所示。举个例子,图2显示了从Chrome文件夹复制"Login Data","Login Data"中包含了用户在Chrome浏览器中使用的用户名和登录站点所用的加密后的密码。
图2:从受害者的系统复制已知凭证文件的命令
系统调查
脚本还可以获取系统的元数据(比如,受害者的用户名、防火墙状态、RAM和硬盘数据等配置细节),这些都被转化成一页HTML,如图3所示。
图3:把系统信息转储为一个HTML文件的命令行
数据提取
恶意软件把所有的被盗数据压缩成一个ZIP压缩包,如图4。
图4:把窃取数据压缩存档
一旦被压缩,被盗数据就准备好通过SMTP相关命令发送给恶意软件作者了。为了发送这些数据,恶意软件作者的email ID和密码就会要求作为传递的参数。我们在分析恶意软件脚本的时候就能看到这些凭证。
图5:通过email把窃取的数据发送给恶意软件作者的命令。
当恶意软件最终停止运行时,恶意软件会声称一个加密的名为"My test report"的加密报告。查看这个报告,我们发现数据被加密了,如图6所示。
图6:一部分已经加密的被盗数据
解密被窃取的数据
作为一个额外的保护层,恶意软件的作者利用PowerShell脚本本身的RC4算法把数据和ZIP文件加密,如图7所示。
图7:PowerShell中的RC4算法
由于恶意软件加密数据没有使用任何公钥基础设施,他的RC4密钥必须是可见的。这些可以通过图8看出来,最终它所成闲的安全措施其实是没用的。
图8:恶意软件作者在脚本中把RC4密钥作为参数传递
分析收集到的数据
我们使用硬编码密钥解密ZIP文件,然后我们解压这个文件,结果如图9所示。
图9:解密、解压后收集到的数据
"chrome"文件包含来自Google Chrome登录列表的信息。"CompInfo" HTML文件包含受害者的元数据,如图10所示。
图10:包含被窃取系统信息的HTML
CREDHIST文件是凭证管理的组成部分,我们在被盗数据中可以看到它。CREDHIST文件包含用户最近和旧的账户凭据。
图11:被盗的credhist文件
案例二:来自德国或奥地利的数据窃取活动
我们观察到一个在德国和奥地利广泛流传德语的RTF文件。这个RTF文件实在用户下载驱动的时候启动的,会导致执行一个会启动一系列PowerShell命令行的payload。在这种情况下,我们必须格外小心这个PowerShell命令保证虚拟化检测。
VM检测(虚拟化检测)
如图12所示,一个由进程检索获取的所有正在进行的进程列表,然后,恶意软件检查涉及到VirtualBox, VMware和Parallels的服务。如果找到相关进程,进程就会被打印到控制台上。
图12:计算和虚拟化相关的进程数的PowerShell脚本
如果这个计数大于0,恶意软件会在虚拟环境中运行。然后仅仅在控制台中打印出结果对恶意软件作者没有任何帮助-他们需要使用这个数据。使用CONOUT参数,传递可执行参数。整个攻击活动的继续或终止取决于数据结果。
被感染数量已达到29000
这个病毒通过访问一个计数网站增加攻击数量。
图13:跟踪感染数量的脚本
目前为止,它已经被访问了29245次,但是这不意味着29245个系统都被感染了-一些访问可能来自网络安全研究者。
图14:感染数量
在虚拟化检测和追踪过后,恶意软件会窃取数据。这个恶意软件使用PowerShell迭代和转储一些数据,cookie是最可能存储文本文件ftshvc.txt的地方。
窃取数据的命令
图15:把窃取的数据转成text文件
优先处理被盗数据
然后,恶意软件作者并没有转储所有的数据。他们通过搜索特定字符串、使用计数器优先处理某些被盗数据。在转储被盗数据时,搜索包括所有来自Fcebook中跟银行信息有关的网站,比如"bankaustria.at"和"credtsuisse.com(一家瑞士银行的网站)"。被盗数据的优先处理命令行如图16所示。
图16:脚本计算某些特定的被盗数据
为新的payload铺路
在完成数据窃取之后,PowerShell脚本为新的payload铺路:Dofoil(一个被用于下载来自恶意网站并通过DownloadFile和ShellExecute命令执行文件的PowerShell命令)。这样可以有效的关闭PowerShell循环窃取数据并引入了一种新的payload,新的payload将连接到一些指令、控制CNC服务器并可以执行其他恶意命令。
图17:下载并执行新的payload的脚本
更多逃避技术
除了反虚拟追中,恶意软件还使用了PowerShell的编码和混淆特性。
举个例子,下面三个命令行都会启动笔记本。
图18:使用PowerShell的三种不同的方式打开记事本
就像一个正常的命令行终端、PS终端在把字符串分割成引用时没有任何问题。当你在键盘中打出"note""pad"时,PS也会推出Notepad。
此外,PowerShell提供了一个-enc(Encoding Command Switch编码命令切换),可以让用户或攻击者使用Base64编码PowerShell命令。
通过加密进行逃脱
下面的PowerShell命令是我们在一个单独的恶意软件中观察到的,它使用了-enc转换来隐藏第一次调用系统睡眠(另一种逃脱技术)活动,然后连接到一个需要的链接。
图19:隐藏模式下的加密的PowerShell执行脚本
Base64解密后的真正的PowerShell命令:
图20:解密后可以被看到的调用睡眠并连接到链接的脚本
通过引用混淆逃脱
在以下情况下,当一个Word宏执行时,它初始化一个PowerShell脚本执行,它本来应该推出一个VBscript。
恶意软件作者把它扩展为"v+bs"。相同的方式被用于命令行参数中,恶意软件作者通过破坏把文件扩展变成引用。
图21:引用混淆来逃避明文字符串
检测
编码和混淆处理来逃避追踪也被观察到用在了连接到宏中切入网络钓鱼的文本文件中,它也使用了PowerShell。被嵌入恶意宏的文件还在不断广泛传播数量在大幅增加,我们可以在这里找到了很多这种文档。
结论
PowerShell是现在经常被使用的攻击手段。在企业中使用PowerShell应该被更好的监测。执行编码和混淆命令行需要额外的监测。因为PowerShell的编码数据能力和混淆数据能力很强,安全团队应该了解PowerShell如何被恶意使用,并培养专业的技术调查PowerShell攻击。
小编说:PowerShell一直是Windows中非常给力的程序保护机制,可是现在PowerShell竟然很容易被攻击了!攻击者利用PowerShell的某些机制盗取我们的数据,千万不要点开邮件中的美女链接,不要下载免费获取的付费软件,及时更新自己的系统!不然,最终受害的还是我们自己。
*原文地址:fireeye, FireFrank编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.com)