网站调查程序-对 Gootkit 加载器的调查

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

经过分析,Gootkit 与过去的 CobaltStrike 和其他恐吓软件攻击有关。 最近的一些受害者后来受到了 SunCrypt 恐吓软件的攻击,但尚不清楚这是由于 Gootkit 攻击还是其他攻击者获得了访问权限。

自 2020 年 10 月以来,我们发现针对美国用户的 Gootkit 案例数量有所减少。 我们研究了整个开发过程,发现 Gootkit 加载程序现在能够执行复杂的行为,这使其能够秘密地将自身加载到受影响的系统上,从而使分析和测量变得更加困难。

此功能用于部署 DLL 文件。 过去,Gootkit 与 CobaltStrike 和其他恐吓软件攻击有关。 最近的一些受害者后来受到了 SunCrypt 恐吓软件的攻击,但尚不清楚这是由于 Gootkit 攻击还是其他攻击者获得了访问权限。

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

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

恶意搜索引擎结果

在这种特殊情况下,fifamanagerkostenlos 可以翻译为 fifamanagerfree。 请注意,所使用的搜索词可能有很大差异,我们仅使用此搜索词作为反例。 我们还遇到过其他搜索词为 AldiTalkpostidentcoupon 和 ControlCenter4download 的情况。

单击该链接会将您带到合法网站上的一个页面,该页面已被盗并用于托管恶意页面。 上面的页面看起来合法:

恶意页面

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

分析下载的文件

下载的文件是一个 ZIP 文件,其中包含严格编码的 JS 文件,而不仅仅是扩展名,该文件与 ZIP 文件共享相同的文件名,因此我们可以使用 JSNice 生成人类可读的代码:

混淆代码

函数“MT71”包含一个非常长的变量网站调查程序,尝试使用在线运行时(例如 Ideone)运行脚本失败,并出现以下错误:

错误信息

WScript.Shell 对象试图执行的操作通过以下错误显而易见:

部分去混淆和美化代码

创建一个尝试读取注册表项“HKCUSOFTWAREnTpm”的新对象(“WScript.Shell”)。 如果此注册表项不存在,它将执行以下操作:

1. 值为空的项将被写入HKCUSOFTWAREnTpm;

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

如果该条目已存在,则脚本执行将失败,因为未设置“bE50”。 值得注意的是,这用作检测初始加载程序是否已在受感染主机上执行的标志。

为了对该脚本进行沙箱处理,我们使用了 HynekPetrak 的恶意软件监狱。 必须添加一行将 bE50 的变量定义为 32; 否则脚本将失败,因为它需要访问注册表项。 Malware-jail是一个使用nodejs编译的沙箱。 目前它在一些浏览器上实现了wscript(Windows脚本宿主)和环境。 然而,至少有一些恶意软件是通过 wscript 传播的。 通过这个沙箱,我们可以分析恶意软件的行为并对其进行监控和查看。

改变了脚本

然后使用以下命令运行恶意软件监狱中的JS文件:

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

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

fifa_out.json 的部分内容包含一些有趣的漏洞

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

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

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

qI61 行的内容尝试按顺序连接到三个目标域。

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

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

2、查询本地用户的DNS域:如果计算机加入域,则“Og13”末尾添加278146;

3. 将使用子参数发起对步骤 1 中选择的 URL 的 Web 请求:search.php?gqhncrqossifzp={thenumberinthevariableofOg13};

4. 检测Web请求的返回码如果不是 200(正常),脚本将进入睡眠状态,然后尝试下一个 URL。

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

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

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

8、将括号中的两位数字替换为变量“KT44”函数的响应,如(12),现阶段未知;

9. 然后它调用另一个函数“Nm34”(尚未知),传递新的“va67”变量。

根据前面的信息,我们现在知道该加载程序在域主机和非域主机之间有所不同,方法是在搜索参数末尾添加“278146”。

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

改变了脚本

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

请求网址

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

URL 和响应

网站调查程序-对 Gootkit 加载器的调查

实际上我们得到了 HTTP200 响应,但这些响应都不包含脚本继续执行所需的随机字符串。 我们收到的两个样本都是如此,尽管我们不确定为什么会出现这种情况,但可以肯定地说,如果以这些方式剖析,服务器当前不提供由 Gootkit 下载的文件。

注册表剖析

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

已创建注册表项

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

PowerShell 脚本

脚本大部分是经过编码的; 对其进行解码将得到以下结果:

解码后的代码

默认情况下,此代码被加载到视频内存中。 如果将此代码保存到文件中,则证明该文件是.NETDLL文件,并且该特定文件被识别为Trojan.Win32.DELF.WLDT。

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

总结

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 网站程序 网站调查程序-对 Gootkit 加载器的调查 https://www.wkzy.net/game/196104.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务