早在11月23日,研究人员就收到了一位合作伙伴发出的关于德国Gootkit攻击复发的警报。 Gootkit是一个功能强大的银行木马,自2014年起就存在了,并且具有许多功能,例如旨在窃取与财务相关的信息的按键或视频记录。
在最新的活动中,攻击者通过使用诱饵论坛模板来诱骗用户下载恶意文件,从而依靠受到攻击的网站对用户进行社交工程。
在分析复杂的恶意软件加载程序时,研究人员找到了一个令人惊讶的发现。受害者会收到Gootkit本身,或者在某些情况下会收到REvil(Sodinokibi)勒索软件。在对犯罪基础设施进行检查之后,决定是否提供一个有效载荷。
在德国观察到的Gootkit攻击样本
安全研究人员TheAnalyst于11月首次公开使用复杂的加载程序公开识别一个活跃的Gootkit攻击样本,该加载程序最终将幕后的主使者指向了Gootkit,此前Gootkit已经沉寂了好长一段时间了。德国的计算机紧急响应小组DFN-CERT后来证实,受到攻击的网站已成为此次攻击的目标。
大约在同一时间,研究人员开始从一些合作伙伴及其ISP收到有关Gootkit相关流量的报告。研究人员能够在遥测范围内确认所有位于德国的Gootkit检测。
德国的Gootkit攻击情况
几天后,研究人员修复了600多台遭到破坏的计算机。
网站上的虚假论坛模板
初始加载程序通过被黑客攻击的网站传播,使用一种有趣的搜索引擎优化(SEO)技术定制虚假模板,试图欺骗用户下载文件。
该模板模仿一个论坛主题,在该主题中,用户以德语询问有关特定主题的帮助,并收到一个答案,该答案似乎正是他们所寻找的。值得注意的是,托管此模板的被黑网站不是德语(只有模板);它们只是很容易受到攻击,并被用作攻击基础设施的一部分。
受攻击网站会加载诱饵模板来欺骗受害者
如果正确的受害者浏览了受攻击的网站,则攻击者会有条件地动态创建此虚假的论坛帖子。脚本从DOM中删除合法的网页内容,并添加自己的内容(该模板显示指向要下载的文件的链接)。
诱饵模板后面的HTML代码视图
每次访问页面之前,都要进行服务器端检查,以确定是否已经向用户提供了假模板,在这种情况下,Web服务器将返回合法内容。
无文件执行和模块安装
一旦受害者执行了他们刚刚下载的zip存档中的恶意脚本,攻击过程就开始了。
严重模糊处理的恶意脚本
此脚本是导致执行最终有效载荷的几个阶段中的第一个阶段。下图就是一个综述:
攻击流程
阶段1:第一个JavaScript
第一个JavaScript模块必须由受害者手动执行的,为了隐藏其真实意图,它被模糊处理了。模糊处理由三层组成,上一层解码下一层的内容。
第一阶段就是对下一个元素进行解码:
第一阶段脚本
解码后的输出是一个逗号分隔的JavaScript块数组:
用逗号分隔的脚本数组
数组中有四个元素由它们的索引引用,例如,索引为0的元素表示“构造函数”,1是另一个JavaScript代码块,2是空的,3是导致调用提供代码的包装器。
块1负责读取/写入“HKEY_CURRENT_USER\SOFTWARE\
第三层JavaScript
此代码段负责连接到C2,它从列表中获取域,并逐个尝试它们。如果得到响应,它将继续运行。
上面的下载器脚本是加载过程的第一阶段,在功能方面,它在所有被删除的文件中几乎是相同的。变体之间的区别将从下一部分开始,下一部分是从C2服务器获取的另一个JavaScript。
阶段2:第二个JavaScript(从C2下载)
服务器的预期响应是一个十进制字符串,其中包含用于验证的伪随机标记,需要在进一步处理之前将其移除,标记由 “@[request argument]@”组成。
使用C2服务器的GET请求
转换为ASCII后,将显示下一个JavaScript,并执行代码。该JavaScript带有嵌入式PE有效载荷,该载荷可能是Gootkit的加载程序,也可能是REvil勒索软件的加载程序。用于去模糊化的算法也存在一些差异。
Gootkit变体示例
下载的JavaScript
下载的代码块负责安装持久性攻击元素,它还运行一个Powershell脚本,该脚本读取存储,对其进行解码并进一步运行。
阶段3:存储的有效载荷和解码Powershell
开发者还多样化了编码和存储有效载荷的方法,在研究人员的测试中,他们观察到了两种编码方式。在其中一种格式中,PE存储为Base64编码的字符串,而在另一种格式中存储为十六进制字符串,通过用模式替换特定的数字来模糊处理。
有效载荷通常存储为注册表项列表,但是研究人员还观察到了一种变体,其中类似的内容被写入TXT文件中。
存储在文件中的有效载荷示例:
有效载荷作为磁盘上的文件
该文件的内容是一个模糊处理的Powershell脚本,该脚本运行另一个Base64模糊处理的层,该层最终对.NET有效内容进行解码。
用于对文件进行模糊处理的Powershell脚本示例:
- "C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Bypass -windowstyle hidden -Command "IEX (([System.IO.File]::ReadAllText('C:\Users\[username]\bkquwxd.txt')).Replace('~',''));"
下面研究人员将研究加载程序的两个示例:一个导致执行REvil勒索软件,另一个导致执行Gootkit。
示例1:加载REvil勒索软件
下面的示例显示了将PE文件编码为模糊处理的十六进制字符串的变体,在分析的案例中,整个流程导致了REvil勒索软件的执行。
执行第二阶段JavaScript将导致有效载荷以密钥列表的形式写入注册表。内容被编码为十六进制,并略微模糊处理。
存储在注册表中的有效载荷片段,编码为使用模式模糊处理的十六进制字符串
编写密钥后,JavaScript会部署一个PowerShell命令,该命令负责解码和运行存储的内容。
JS组件使用Base64编码脚本部署PowerShell
脚本的解码内容:
解码后的内容
它从注册表项中读取内容,并通过替换模式来对其进行模糊处理。在给定的示例中,将十六进制字符串中的模式 “!@#” 替换为“1000”,然后在.NET Reflection的帮助下对PE进行解码和加载。
下一阶段的PE文件(.NET):
REvil加载程序:(0e451125eaebac5760c2f3f24cc8112345013597fb6d1b7b1c167001b17d3f9f)
.NET加载程序带有一个硬编码的字符串,该字符串是下一阶段的PE:最终的恶意载荷。 PowerShell脚本调用的Setup函数负责解码和运行下一个PE:
硬编码字符串(PE)
部署有效载荷
加载程序借助Process Hollowing法(PE注入的经典方法之一)进入下一阶段。
REvil赎金记录
示例2:加载Gootkit
在另一个常见变体中,有效载荷另存为Base64。注册表项以以下格式组成一个PowerShell脚本:
- $Command =[System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String("[content]")); Invoke-Expression $Command;Start-Sleep -s 22222;
存储有效载荷的注册表项
解码base64编码的内容后,研究人员得到另一个PowerShell脚本:
更多的PowerShell
它还附带了另一个base64编码的片段,该片段在Reflection Assembly的帮助下进一步解压缩和加载。它是.NET二进制文件,与上一个类似。
Gootkit加载程序:(973d0318f9d9aec575db054ac9a99d96ff34121473165b10dfba60552a8beed4)
该脚本从.NET模块调用函数“Install1”。此函数加载另一个PE,该PE作为base64编码的缓冲区嵌入其中:
另一个缓冲区
部署有效载荷
这次,加载程序使用另一种PE注入方法,即手动加载到父进程中。
显示的有效载荷是Gootkit的第一阶段二进制文件:60aef1b657e6c701f88fc1af6f56f93727a8f4af2d1001ddfa23e016258e333f。该PE用Delphi编写。在其资源中,研究人员可以找到另一个PE(327916a876fa7541f8a1aad3c2270c2aec913bc8898273d545dc37a85ef7307f),该文件已通过XOR进行了单字节模糊处理,它被第一个文件进一步加载。
总结
此活动背后的攻击者使用了非常聪明的加载程序,就像是俄罗斯套娃一样。该加载程序执行了许多步骤来逃避检测。鉴于有效载荷是使用随机命名的密钥存储在注册表中的,因此许多安全产品将无法检测到并删除它。
但是,在某些情况下该加载程序会负责下载REvil勒索软件。研究人员曾经能够在实验室中重现此流程,但大多数时候研究人员都发现的是Gootkit。
REvil组织对新成员有非常严格的规定,他们必须通过测试并必须为俄罗斯人。在研究人员收集到的REvil样本中,他们注意到的一件事是,赎金记录仍指向cryptoror.top而不是cryptoror.cc,这表明这可能是一个较旧的样本。
银行木马是一种与勒索软件截然不同的商业模式。勒索软件在过去几年中蓬勃发展,部分得益于知名受害者的巨额赎金。研究人员已经看到,银行恶意软件(即Emotet)变成了勒索软件的加载程序,在这些加载程序中,不同的攻击者可以专门研究其最擅长的领域。时间会告诉我们Gootkit的回归到底意味着什么,以及它将如何发展。
检测与保护
Malwarebytes通过不同的保护层来防止、检测和删除Gootkit和REvil。当研究人员收集到了攻击指标后,就能够阻止传播网站,使用户不下载初始加载程序。
当JavaScript通过WinRar或7-Zip等压缩文件应用打开时,研究人员基于行为的反利用层也可以阻止恶意加载程序,而不会产生任何签名。
阻止脚本执行
如果系统已经攻击了Gootkit,Malwarebytes可以通过清理Gootkit隐藏的注册表项来补救:
检测隐藏在注册表中的有效载荷
最后,研究人员还会检测并终止REvil(Sodinokibi)勒索软件:
REvil勒索软件被阻止
攻击指标
本文翻译自:https://blog.malwarebytes.com/threat-analysis/2020/11/german-users-targeted-with-gootkit-banker-or-revil-ransomware/如若转载,请注明原文地址。