Turla组织PowerShell使用情况

2019-06-11 约 4400 字 预计阅读 9 分钟

声明:本文 【Turla组织PowerShell使用情况】 由作者 angel010 于 2019-06-11 08:38:00 首发 先知社区 曾经 浏览数 125 次

感谢 angel010 的辛苦付出!

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/

关键词:[‘安全技术’, ‘技术讨论’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now