对Gootkit加载程序的调查研究
2021-03-21 11:15:00 Author: www.4hou.com(查看原文) 阅读量:152 收藏

Gootkit恶意软件自2014年曝光之后,已经持续活跃6年。它利用Node.JS库执行一系列恶意任务,并且通过不断更新代码库多次升级和迭代,运用加密、混淆、反调试等手法对软件进行保护,增加其逆向过程中的复杂度,并且检测其运行环境,如果碰到可疑环境,沙箱检测则立即停止运行。凭借以上优势,其恶意代码也是在各大杀软平台查杀率最低的恶意软件之一,一度成为现今最活跃和复杂的木马之一。

经过分析,Gootkit与过去的Cobalt Strike以及其他勒索软件攻击有关联。最近的一些受害者后来遭受了SunCrypt勒索软件的攻击,不过尚不清楚这是由于Gootkit的攻击,还是因为访问权限被卖给了其他攻击者。

自2020年10月以来,我们看到针对德国用户的Gootkit案例数量增加。我们研究了整个开发过程,发现Gootkit加载程序现在能够进行复杂的行为,这使得它能够偷偷地将自己加载到受影响的系统上,从而使得分析和检测更加困难。

此功能用于部署DLL文件,过去,Gootkit与Cobalt Strike以及其他勒索软件攻击有关联。最近的一些受害者后来遭受了SunCrypt勒索软件的攻击,不过尚不清楚这是由于Gootkit的攻击,还是因为访问权限被卖给了其他攻击者。

感染媒介:恶意搜索引擎结果

在我们看到的例子中,Gootkit加载程序最初是通过从网站下载的压缩文件到达的。这些恶意网站可以在恶意搜索引擎的结果中找到,如下所示:

fig1 - gootkit.png

恶意搜索引擎结果

在这个特殊的例子中, fifa manager kostenlos 可以翻译成 fifa manager free。请注意,使用的搜索词可能有很大差异,我们只是用这个搜索词作为例子。我们还遇到了其他情况,其中搜索词是Aldi Talk postident coupon和Control Center 4 download。

点击链接进入合法网站的页面,但是,该网站已被盗用并用于托管恶意页面。上述页面看起来合法:

fig2 - gootkit.png

恶意页面

这看起来像一个合法的论坛,其帖子包含指向与搜索引擎查询相关的文件的链接。然而,这个特殊的链接比看起来更复杂。尝试从同一主机/计算机从同一URL重新下载相同文件失败,但是,从另一个文件执行此操作会成功,但是下载的文件具有与原始文件不同的哈希值。这意味着服务器会根据需要生成该文件,并且每次下载尝试都是唯一的。

分析下载的文件

下载的文件是一个ZIP文件,其中包含一个经过严格编码的JS文件,除了扩展名,该文件与ZIP文件共享相同的文件名,我们能够使用JSNice生成人类可读的代码:

fig3 - gootkit.png

混淆的代码

函数“MT71”包含一个内容很长的变量,尝试使用在线运行时(如Ideone)运行脚本失败,并显示以下错误:

fig4 - gootkit.png

错误消息

通过错误可以明显看出WScript.Shell对象正在尝试执行的操作:

fig5 - gootkit.png

部分去混淆和美化的代码

创建一个新对象(“WScript.Shell”),该对象尝试读取注册表项" HKCU\SOFTWARE\nTpm\ "。如果这个注册表项不存在,它执行以下操作:

1.空值的项将被写入HKCU\SOFTWARE\nTpm;

2.“bE50”的值将被设置为32;

如果项已经存在,则由于未设置“bE50”,脚本的执行将失败。很明显,此项被用作标记,以检查初始加载程序是否已在受感染的主机上执行。

为了对此脚本进行沙箱化,我们使用了来自HynekPetrak的malwarei-jail。必须添加一行以将bE50的变量定义为32;否则由于需要访问注册表项,脚本将失败。malware-jail是使用nodejs编写的一个沙盒,目前实现了wscript(Windows脚本宿主)和部分浏览器上的环境。不过至少有一部分恶意软件是通过wscript传播的,通过该沙盒我们可以分析恶意软件的行为并对其进行监控和查看。

fig6 - gootkit.png

修改后的脚本

然后使用以下命令在malware-jail中运行JS文件:

7.png

每当Javascript文件在执行时发送请求时,该命令都会返回一个404错误。它创建了以下输出文件:

8.png

testurls.json的内容,显示了恶意代码试图访问的URL

9.png

fifa_out.json的部分内容包含一些有趣的工件

查看输出的JSON文件,可以看到变量“qI27”是一个由三个域组成的数组:

www.adpm.com[.]br
windowp[.]org
www.ai-tech[.]paris

将“qI61”整行转换为可读格式,将显示以下代码块:

10.png

qI61行的内容,依次尝试连接三个目标域

该代码段定义了以下流程,并针对存储在QI27中的至少一个URL运行以下代码:

1.“Og13”将被设置为一个随机数,最大长度为100;

2.查询本地用户的DNS域:如果计算机加入了一个域,“Og13”末尾将添加278146;

3.将使用子参数启动对第1步中选择的URL的web请求:search.php?gqhncrqossifzp={the number in the variable of Og13};

4.它检查web请求a的返回码,如果不是200 (ok),脚本将进入睡眠状态,然后尝试下一个URL。

5.如果web请求是200(收到响应),则将响应存储在变量“zI11”中;

6.它检查来自服务器的响应文本是否包含“Og13”值,如果没有,它将进入睡眠状态,然后尝试下一个URL;

7.如果该值在响应中,则从“zI11”中删除“Og13”值;

8.它用变量“KT44”函数的响应替换括号中的两位数,例如(12),这个变量在这个阶段未知;

9.然后它调用另一个函数“Nm34”(目前还不知道),传递新的“va67”变量。

通过上面的信息,我们现在知道通过在搜索参数的末尾添加“278146”,则这个加载程序在域主机和非域主机之间所不同。

我们可以通过wscript.js文件更改环境变量,由于恶意脚本正在寻找环境变量“ UserDNSDomain”,它被添加到配置中,我们还更改了默认用户名:

11.png

修改后的脚本

在更改wscript.js参数以提供域之后,重新运行脚本将显示以下URL的请求:

12.png

请求的URL

基于此观察,我们现在可以在不使用--t404选项但使用--down = y选项的情况下运行jailme.js。这使我们能够发送查询并下载任何请求的文件。默认情况下,jailme.js将在60秒后停止执行脚本。现在,查询的URL的结果包括所有三个已标识的域,如下所示,并包括响应:

13.png

URL和响应

虽然我们收到HTTP 200响应,但这些响应都不包括脚本继续执行所需的随机字符串。使用我们收到的两个样本都是如此,虽然我们不确定为什么会这样,但可以肯定地说的是,如果以这种方式进行分析,则服务器当前不提供要由Gootkit下载的文件。

注册表分析

我们可以使用Gootkit已知的注册表项来测试它是否已部署在受影响的系统上。在测试计算机上,我们能够验证创建的注册表项是否存在:

14.png

创建的注册表项

可以将最后一个注册表项中的注册表值合并到PowerShell脚本中:

15.png

PowerShell脚本

该脚本大部分已编码;对其进行解码将导致以下结果:

16.png

解码后的代码

默认情况下,此代码被加载到内存中。如果将此代码保存到文件中,则证明该文件是.NET DLL文件,此特定文件被检测为Trojan.Win32.DELF.WLDT。

在.NET反编译器中打开这个特定文件会显示它还包含更多已编码的代码,使用类似的技术将内容转储到文件中表明这也是一个可执行文件。该文件被检测为Trojan.Win32.MALREP.THJBGBO,我们认为这是该加载程序传播到受影响系统的有效载荷。

总结

这个特殊的攻击突出了当今提供恶意软件的加载程序的复杂性,在没有启用任何安全解决方案的系统中,几乎没有任何攻击迹象,这使得分析和删除更加困难。

本文翻译自:https://www.trendmicro.com/en_us/research/20/l/investigating-the-gootkit-loader.html如若转载,请注明原文地址:


文章来源: https://www.4hou.com/posts/qDw0
如有侵权请联系:admin#unsafe.sh