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