ESET研究人员分析了与Turla组织相关的新的TTP,Turla使用PowerShell来在内存中运行恶意软件。
Turla也称Snake,是一个著名的监控组织,以其复杂的恶意软件而闻名。为了绕过检测,其运营者近期开始使用PowerShell脚本直接在内存中加载和执行恶意软件可执行文件和库。这样当恶意可执行文件释放到硬盘上的时候就可以绕过检测。
Turla组织从2008年开始活跃,最近它参与到针对德国外交部和法国军方的攻击中。
这并非Turla首次使用PowerShell内存内加载器来增加绕过安全产品的概率。早在2018年,Kaspersky实验室就发布了报告分析Turla PowerShell加载器。几个月后,Turla更新了脚本,目前使用这些脚本来加载大范围的定制恶意软件。
Turla的受害者范围非常集中。研究人员发现东欧的外交机构,以及西欧和中东的一些组织都是其目标。本文主要分析PowerShell脚本和不同的payload。
PowerShell loader有三个主要步骤:驻留、解密、加载嵌入的可执行文件或库到内存中。
PowerShell脚本并不是简单的释放器,它只加载嵌入的可执行文件到内存中。研究人员发现Turla运营者使用了两种驻留的方法:
Windows Management Instrumentation (WMI)事件订阅
PowerShell介绍文件修改(profile.ps1文件)
在第一种方法中,攻击者会创建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注册表钟。攻击者看似会对每个攻击目标使用不同的注册表位置。这样,就很难检测类似的入侵。
在第二种情况下,攻击者会修改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
文件中。
前面步骤中解密的payload是一个PowerShell反射型加载器。也是基于PowerSploit框架的Invoke-ReflectivePEInjection.ps1
脚本的。可执行文件是硬编码在脚本中的,并且直接加载到随机选择的系统中正在运行的进程的内存中。
在该样本中,攻击者指定了一些二进制文件不应该注入的可执行文件列表,如图5所示。
图5. 排除的进程列表示例
而这些可执行文件avp.exe, avpsus.exe, klnagent.exe和vapm.exe都是Kaspersky Labs产品的可执行文件。所以,Turla运营者应该是需要避免将其恶意软件注入到kaspersky软件中。
在2019年3月以来的样本中,Turla开发者修改了PowerShell脚本来绕过Antimalware Scan Interface (AMSI)
。这是允许任何应用集成到已安装的反恶意软件产品的接口,对PowerShell和宏非常有用。
PowerShell脚本会加载一个.NET可执行文件来提取AmsiScanBuffer
的地址。然后调用VirtualProtect来允许在提取的地址写内容。
最后,补丁会直接在PowerShell脚本中完成,如图6所示。修改了AmsiScanBuffer
开始的内容来返回1(AMSI_RESULT_NOT_DETECTED
),这样,反恶意软件产品并不会接收缓冲区,这可以预防扫描内容。
图6. AmsiScanBuffer函数
PowerShell脚本是用来加载不同payload的通用模块,比如RPC后门和PowerShell后门。
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
的情况下执行运行脚本。
研究人员研究发现嵌入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是使用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/