ESET研究人员分析了与Turla组织相关的新的TTP,Turla使用PowerShell来在内存中运行恶意软件。

背景

Turla也称Snake,是一个著名的监控组织,以其复杂的恶意软件而闻名。为了绕过检测,其运营者近期开始使用PowerShell脚本直接在内存中加载和执行恶意软件可执行文件和库。这样当恶意可执行文件释放到硬盘上的时候就可以绕过检测。

Turla组织从2008年开始活跃,最近它参与到针对德国外交部和法国军方的攻击中。

这并非Turla首次使用PowerShell内存内加载器来增加绕过安全产品的概率。早在2018年,Kaspersky实验室就发布了报告分析Turla PowerShell加载器。几个月后,Turla更新了脚本,目前使用这些脚本来加载大范围的定制恶意软件。

Turla的受害者范围非常集中。研究人员发现东欧的外交机构,以及西欧和中东的一些组织都是其目标。本文主要分析PowerShell脚本和不同的payload。

PowerShell Loader

PowerShell loader有三个主要步骤:驻留、解密、加载嵌入的可执行文件或库到内存中。

驻留

PowerShell脚本并不是简单的释放器,它只加载嵌入的可执行文件到内存中。研究人员发现Turla运营者使用了两种驻留的方法:

  • Windows Management Instrumentation (WMI)事件订阅

  • PowerShell介绍文件修改(profile.ps1文件)

Windows Management Instrumentation

在第一种方法中,攻击者会创建2个WMI事件过滤器和2个WMI事件用户(consumer)。用户就是启动base64编码的PowerShell命令的命令行,会加载保存在Windows注册表中的PowerShell脚本。图1是驻留建立的过程。

图1. 使用WMI完成驻留

这些事件会在15:30:40和系统开始时间在300到400秒钟的时间运行。变量$HL39fjh含有base64编码的PowerShell命令,如图2所示。它会读取加密payload保存的Windows注册表键值,并含有解密payload所需的密码和salt。

图2. WMI consumer PowerShell命令

最后,脚本会将加密的payload保存在Windows注册表钟。攻击者看似会对每个攻击目标使用不同的注册表位置。这样,就很难检测类似的入侵。

Profile.ps1

在第二种情况下,攻击者会修改PowerShell简介。根据微软的文档:

PowerShell简介文件是当PowerShell启动时运行的脚本。用户可以使用profile作为登陆的脚本来定制化环境。可以添加命令、别名、函数、变量、模块和PowerShell驱动。

图3是Turla修改后的PowerShell profile文件。

图3. 劫持的profile.ps1文件

基于base64编码的PowerShell命令与WMI用户使用的命令非常相似。

解密

保存在Windows注册表中的payload是另一个PowerShell脚本。它是用渗透测试框架PowerSploit中的开源脚本Out-EncryptedScript.ps1生成的。此外,使用的变量名都是随机处理过的,以混淆脚本,如图4所示。

图4. 解密路径

Payload是用3DES算法解密的。每个样本的初始向量IV也是不同的。每个脚本的key和salt也是不同的,而且并不保存在脚本中,而是保存在WMI过滤器或profile.ps1文件中。

PE loader

前面步骤中解密的payload是一个PowerShell反射型加载器。也是基于PowerSploit框架的Invoke-ReflectivePEInjection.ps1脚本的。可执行文件是硬编码在脚本中的,并且直接加载到随机选择的系统中正在运行的进程的内存中。

在该样本中,攻击者指定了一些二进制文件不应该注入的可执行文件列表,如图5所示。

图5. 排除的进程列表示例

而这些可执行文件avp.exe, avpsus.exe, klnagent.exe和vapm.exe都是Kaspersky Labs产品的可执行文件。所以,Turla运营者应该是需要避免将其恶意软件注入到kaspersky软件中。

绕过AMSI

在2019年3月以来的样本中,Turla开发者修改了PowerShell脚本来绕过Antimalware Scan Interface (AMSI)。这是允许任何应用集成到已安装的反恶意软件产品的接口,对PowerShell和宏非常有用。

PowerShell脚本会加载一个.NET可执行文件来提取AmsiScanBuffer的地址。然后调用VirtualProtect来允许在提取的地址写内容。

最后,补丁会直接在PowerShell脚本中完成,如图6所示。修改了AmsiScanBuffer开始的内容来返回1(AMSI_RESULT_NOT_DETECTED),这样,反恶意软件产品并不会接收缓冲区,这可以预防扫描内容。

图6. AmsiScanBuffer函数

Payloads

PowerShell脚本是用来加载不同payload的通用模块,比如RPC后门和PowerShell后门。

RPC后门

Turla开发了大量依赖RPC协议的后门集。这些后门被用来执行之后的活动和控制本地网络中其他的机器。

实现的特征也都比较基础,包括文件上传、文件下载、通过cmd.exe或PowerShell执行命令。但恶意软件也支持添加新的插件。

RPC后门被分为2个部分:服务端和客户端。当服务端组件存在时,运营者使用客户端组件来执行位于其他机器上的命令,命令总结如图7所示。

图7. RPC后门使用

比如,SHA-1哈希值EC54EF8D79BF30B63C5249AF7A8A3C652595B923对应的样本就是一个客户端版本。组件会通过函数RpcStringBindingComposeW和协议序列ncacn_np打开名为\\pipe\\atctl的管道。然后样本可以通过调用NdrClientCall2函数来发送命令。负责分析参数的HandlerW表明可以尝试伪装成匿名token或尝试窃取其他进程的token来执行命令。

服务端首先检查注册表值HKLM\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters\NullSessionPipes是否含有atctl,如果是,服务器就通过SetSecurityInfo函数将pipe对象安全描述符设置为S:(ML;;NW;;;S-1-16-0),这样即使不可信或匿名级的用户都可以访问该pipe。

下图是对应的MIDL stub描述符和相似的语法以及端口ID。

图8. RPC后门客户端MIDL(左),服务器(右)

该后门还支持加载插件。服务器会创建一个线程来搜索与模式lPH*.dll匹配的文件。如果存在这样的文件,就加载并调用那个导出函数ModuleStart。研究人员定位的不同插件中,有的可以从USB中窃取最近的文件。

该RPC后门的很多变种也仍然在使用。其中研究人员发现本地代理和新版本中嵌入了PowerShellRunner可以在不使用powershell.exe的情况下执行运行脚本。

RPC欺骗服务器

研究人员研究发现嵌入pdb路径为C:\Users\Devel\source\repos\RPCSpoofer\x64\Release_Win2016_10\RPCSpoofServerInstall.pdb(SHA-1: 9D1C563E5228B2572F5CA14F0EC33CA0DEDA3D57)的可移动可执行文件。

该工具的主要目的就是提取已经注册了接口的进程的RPC配置信息。为了找出这类进程,它会通过GetTcpTable2函数在TCP Table中循环寻找,直到找到打开了特定端口的进程PID或提取出打开特定名pipe的进程PID。找到PID后,该工具会读取远程进程的内存并尝试提取注册的RPC接口。代码如图9所示。

图9. 搜索远程进程中的rpcrt4.dll的data部分代码

首先我们不清楚提取的信息是如何使用的,因此研究人员分析了样本(SHA-1:B948E25D061039D64115CFDE74D2FF4372E83765)。如图10所示,样本会提取RPC接口,重新设置标记为RPC_IF_ALLOW_SECURE_ONLY,使并用WriteProcessMemory函数来对内存中的dispatch table打补丁。这些操作允许样本将RPC函数添加到已有的RPC接口上。研究人员相信重用已有RPC接口要比创建定制RPC接口更加隐蔽。

图10. 提取当前进程RPC disptach的代码段

PowerStallion

PowerStallion是使用Microsoft OneDrive作为C2服务器的轻量级PowerShell后门。凭证硬编码在脚本的初始位置,如图11所示。

图11. PowerStallion脚本中的OneDrive凭证

研究人员发现Turla运营者再次使用了免费的邮件服务提供商GMX,在攻击中的邮箱地址中使用了目标组织真实员工的名字。

然后用net use命令来连接到网络驱动。然后检查命令是否可用,如图12所示。后门只能执行其他的PowerShell脚本,然后将命令执行的结果写入另一个OneDrive子文件夹并用XOR key 0xAA加密。

图12. PowerStallion后门的主循环

脚本还会修改本地日志文件的修改日期、访问时间和创建时间(MAC)来与合法文件的时间相匹配,比如图13的desktop.ini

图13. 对本地日志文件的MAC进行修改

研究人员相信该后门是一个恢复访问工具,以防Turla后门被清除或其运营者无法再访问被黑的计算机。研究人员还发现其运营者将后门用作以下用途:

  • 监控反恶意软件日志。

  • 监控Windows进程列表。

  • 安装Turla第二阶段木马ComRAT v4。

结论

在2018年的分析文章中,研究任意预测Turla会使用更加通用的工具。最新研究确认这一预测,并表明Turla开始使用开源渗透测试框架来执行入侵活动。但这并不影响归属于Turla的活动。攻击者倾向于配置和修改开源工具来更好地适应其需求。这样就可能将不同的攻击活动分割开来。最后,使用开源工具并不意味着Turla已经停止使用其定制的工具。PowerShell脚本分发的payload、RPC后门和PowerStallion其实都是高度定制化的。对Turla LightNeuron的分析也表明Turla仍在开发复杂的自定义恶意软件。

本文翻译自:https://www.welivesecurity.com/2019/05/29/turla-powershell-usage/

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖