IDA中文网站 > 技术问题 > GoldMax、GoldFinder和Sibot:分析NOBELIUM的分层持久性

GoldMax、GoldFinder和Sibot:分析NOBELIUM的分层持久性

发布时间:2022/10/17 19:17:34

Introducing NOBELIUM

Microsoft威胁情报中心(MSTIC)将针对SolarWinds、SUNBURST后门、TEARDROP恶意软件和相关组件的攻击背后的攻击者命名为NOBELIUM。

 

最近的调查发现NOBELIUM在后期活动中使用了三种新的恶意软件。本博客提供了对这些恶意软件的详细分析,以帮助防御者检测、保护和应对这种威胁。我们将继续与FireEye合作,了解这些威胁并保护我们共同的客户。

微软在一些受感染的客户网络中发现了这些新的攻击者工具和功能,并观察到它们在2020年8月至2020年9月期间一直在使用。进一步的分析表明,这些工具和功能早在2020年6月就已经在受感染的系统上。这些工具是新的恶意软件这是这位演员独有的。它们是为特定网络量身定制的,并且经过评估,将在攻击者通过受损凭证或SolarWinds二进制文件获得访问权限后,以及在使用TEARDROP和其他手动键盘操作横向移动后引入。

 

这些功能不同于以前已知的NOBELIUM工具和攻击模式,并重申了攻击者的复杂性。在攻击的所有阶段,攻击者都展示了对网络中常见的软件工具、部署、安全软件和系统以及事件响应团队经常使用的技术的深入了解。这种知识反映在参与者的操作决策中,从命令和控制(C2)基础设施的选择到用于维护持久性的计划任务的命名。

 

鉴于该攻击者为每个目标使用独特基础设施和工具的既定模式,以及在受感染网络上保持其持久性的操作价值,随着我们对该威胁攻击者行为的调查继续进行,可能会发现其他组件。

 

新的NOBELIUM恶意软件

在获得网络访问权限后,保持持久性对于任何威胁行为者来说都是至关重要的。除了SolarWinds软件中的后门外,还观察到NOBELIUM使用被盗凭据来访问电子邮件和存储等云服务,以及通过虚拟专用网络(VPN)和远程访问工具获取和维护网络访问权限的身份泄露。微软评估说,攻击者使用新出现的恶意软件来保持持久性并在非常具体和有针对性的网络上执行攻击后的操作,甚至在事件响应期间逃避初始检测。

 

GoldMax

GoldMax恶意软件被发现作为计划任务模拟系统管理软件在网络上持续存在。在遇到的实例中,计划任务以环境中存在的软件命名,并指向ProgramData中以该软件命名的子文件夹,具有相似的可执行文件名称。然而,可执行文件是GoldMax植入程序。

 

GoldMax用Go编写,充当演员的命令和控制后门。它使用几种不同的技术来混淆其行为并逃避检测。该恶意软件将一个加密的配置文件写入磁盘,其中文件名和AES-256密码密钥在每个植入物中都是唯一的,并且基于环境变量和有关其运行的网络的信息。

 

GoldMax与其C2建立安全会话密钥,并使用该密钥与C2进行安全通信,防止非GoldMax发起的连接接收和识别恶意流量。C2可以通过伪随机生成的cookie发送要为各种操作启动的命令,包括本机操作系统命令。硬编码的cookie对于每个植入程序都是唯一的,看起来是随机字符串,但映射到受害者和参与者方面的操作。

 

观察到的GoldMax C2域具有高声誉和高流行度,通常从域经销商处获得,以便Whois记录保留其先前注册的创建日期,或可能已被盗用的域。这种策略补充了NOBELIUM的运营安全策略,因为这些域更容易被安全产品和分析师基于他们认为的长期域所有权而忽视。简而言之,我们共享为GoldMax C2域的几个域仅在它们被转售或被盗用后才与NOBELIUM相关联——并且Microsoft已在我们可用的地方提供了该指标上下文。

 

执行后,GoldMax检索系统网络接口列表;如果恶意软件无法这样做或没有配置网络接口,恶意软件就会终止。然后它会尝试确定是否有任何网络接口具有以下硬编码的MAC地址:c8:27:cc:c2:37:5a。如果是,则终止。

图1.HardwareAddr.String()调用、硬编码MAC地址和os.Exit()调用

配置文件

GoldMax旨在将其配置数据存储在名为features.dat.tmp。文件名在不同版本的GoldMax中有所不同,但在所有观察到的变体中,配置文件带有.tmp文件扩展名,并且与GoldMax位于同一目录中。GoldMax首次运行时,它使用一组嵌入的默认值在磁盘上创建和填充其配置文件。下次GoldMax运行时,它不会使用其嵌入的配置数据,而是从存储在文件系统中的配置文件中加载配置数据。

 

配置文件中的数据通常与GoldMax中嵌入的默认配置数据相匹配,因为嵌入的数据最初用于创建配置文件。但是,GoldMax具有命令和控制功能,允许其操作员动态更新其配置数据。发生这种情况时,GoldMax会使用从其操作员接收到的新配置数据覆盖其配置文件中的现有数据,因此下次运行GoldMax时,它会使用其配置数据的最新版本来初始化其运行时设置。

 

配置数据采用AES-256加密算法,CFB加密方式,加密密钥如下:4naehrkz5alao2jd035zjh3j1v1dvyyc(GoldMax不同版本密钥不同)。对AES加密的配置数据进行Base64编码,ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_然后将其存储在文件系统上的配置文件中。运行时,GoldMax解码(Base64)和解密(AES-256)配置数据以显示自定义数据结构,该结构由以下动态生成和硬编码的值(由“|”分隔)组成:

图2.GoldMax配置数据的数据结构

GoldMax继续解析上面描述的数据结构,并使用其中的值来初始化其运行时设置和不同组件使用的变量。

 

如果不存在配置文件(即第一次运行),GoldMax使用动态生成和嵌入的值来创建和填充上述数据结构。然后它使用相同的AES加密方法来加密数据结构。加密数据结构后,GoldMax继续对加密数据结构进行Base64编码,并从Base64编码字符串中删除所有'='实例。然后它在文件系统上创建一个配置文件(例如features.dat.tmp)并将Base64编码数据存储在配置文件中。

 

激活日期

GoldMax的配置数据包含执行激活/触发日期,存储为ASCII Unix/Epoch时间值,如上面的配置数据部分所示,本质上是作为“在x日期/时间后激活”功能。加载配置数据后,GoldMax会根据配置数据中的激活日期检查受感染系统的当前日期时间值。

图3.当前和激活日期/时间的内联Unix()函数和EPOCH比较

如果在配置数据中指定了激活日期时间值(即,未设置为“0”)并且激活日期时间发生在受感染系统的当前日期时间或之前,则GoldMax开始其恶意活动。否则,GoldMax将终止并继续这样做,直到达到激活日期。如果配置数据中未指定激活日期(即,字段设置为“0”),则恶意软件立即开始其恶意活动。

 

在我们调查期间分析的所有GoldMax版本中,激活日期最初设置为“0”。但是,通过其命令和控制功能,操作员可以使用特定的C2命令动态更新激活日期,在这种情况下,新的激活日期存储在配置文件中,并在每次GoldMax运行时进行检查。

 

诱骗网络流量

GoldMax配备了诱饵网络流量生成功能,允许它用看似良性的流量包围其恶意网络流量。此功能旨在使区分恶意流量和良性流量更具挑战性。如果启用了诱饵网络流量功能(在配置数据中设置为“1”),GoldMax会针对指向合法域名和C2域名混合的URL发出伪随机数量的诱饵HTTP GET请求(最多四个),并且/或IP地址。每个请求的确切URL是从14个硬编码URL列表中伪随机选择的。由14个合法和C2 URL组成的示例URL列表如下所示:

图4.GoldMax从中选择最多四个的硬编码URL来发出HTTP请求

如上所示,一些诱饵URL指向实际C2的域名(例如onetechcompany[.]com)。然而,上述URL中引用的特定HTTP资源(例如style.css、script.js、icon.ico等)被C2称为诱饵资源,在GoldMax和GoldMax之间的常规C2通信中不起任何作用。它的C2。

 

每个诱饵HTTP请求的Referer值也是从四个合法域名列表中伪随机选择的。例如,我们已经看到以下各种组合构成四个域的列表:www[.]mail[.]com、www[.]bing[.]com、www[.]facebook[.]com、www[.]google[.]com,www[.]twitter[.]com,www[.]yahoo[.]com等。出于演示目的,下面包含一个诱饵HTTP GET请求示例(连接和用户-代理HTTP标头及其值由GoldMax手动添加到每个请求中,并且在所有诱饵HTTP请求中保持相同,无论目标URL是什么):

图5.示例诱饵HTTP GET请求

RSA会话密钥

执行周期的下一步涉及在GoldMax与其C2服务器之间建立安全会话密钥。GoldMax首先通过发送HTTP GET请求从其C2服务器请求会话密钥,该请求包含每个植入物唯一的自定义HTTP Cookie值。Cookie值由以下动态生成和硬编码的值组成:

图6.HTTP GET请求中的HTTP Cookie值

包含自定义Cookie值的示例请求如下所示:

图7.带有自定义Cookie值的HTTP GET请求示例

上面的User-Agent和Connection值在HTTP请求中是硬编码的。Referer值是从使用以下各种组合的四个合法域名列表中伪随机选择的:www[.]mail[.]com、www[.]bing[.]com、www[.]facebook[。]com、www[.]google[.]com、www[.]twitter[.]com、www[.]yahoo[.]com等。

 

作为对上述请求的响应,GoldMax期望收到一个HTTP 200响应,其中包含一个非常具体且硬编码的ASCII字符串(例如,“uFLa12nFmKkjrmjj”)。看似随机的字符串通常有10-16个字节长(在删除所有前导和尾随空格之后)。最好将其描述为C2和每个单独的植入物之间的“共享秘密”(字符串在不同版本的GoldMax中有所不同)。它作为C2服务器已收到GoldMax对新会话密钥的请求的确认。如果GoldMax没有收到预期的字符串,它会随机休眠一段时间并(无限期地)重复上述过程以从其C2服务器获取预期的字符串,或者直到GoldMax进程终止。

 

在收到预期的字符串后,GoldMax会休眠长达14秒,然后再继续。如果在配置数据中启用了诱饵流量选项,GoldMax会发出伪随机数量的HTTP GET请求(如上文诱饵网络流量部分所述)。GoldMax然后向其C2服务器发出一个新的HTTP GET请求,其中包含一组新的硬编码Cookie值。

 图8.显示硬编码Cookie值的HTTP GET请求示例

第一个和第二个HTTP GET请求之间唯一观察到的区别是上面突出显示的第二个Cookie的值(示例值:iC0Pf2a48来自第一个请求的J4yeUYKyeuNa2)。作为对该请求的响应,GoldMax收到一个加密的RSA会话密钥(Base64编码)。GoldMax的每个版本都包含一个RSA私钥,GoldMax继续解码(使用pem.Decode())和解析(使用x509.ParsePKCS1PrivateKey())。GoldMax使用rsa.DecryptOAEP()和解析的私钥来解密(使用RSA-OAEP)从其C2服务器接收到的RSA加密会话密钥。从此时起,会话密钥用于加密GoldMax与其C2服务器之间发送的数据。

 

C2命令

建立会话密钥后,GoldMax会联系其C2服务器来接收、解密(AES-256)、解析和执行命令。为了从其C2服务器检索加密的C2命令,GoldMax发送一个HTTP GET请求。此HTTP GET请求仅包含一个Cookie值,该值与会话密钥建立过程中使用的Cookie值匹配(用户代理和连接标头和值是硬编码的,如前所述):

图9.包含单个Cookie值的示例HTTP GET请求

为响应上述请求,GoldMax接收到加密(AES-256)和编码(使用自定义Base64字母表的Base64)C2命令。该命令使用GoldMax与其C2服务器之间建立的会话密钥进行加密。在对C2命令进行解码和解密后,GoldMax继续解析C2命令。

 

C2命令表示为看似随机的字母数字ASCII字符串(例如,“KbwUQrcooAntqNMddu4XRj”),这些字符串对于每个植入物都是唯一的,但对于C2服务器来说是已知的。C2命令允许操作员在受感染的系统上下载和执行文件,将文件从受感染的系统上传到C2服务器,在受感染的系统上执行操作系统命令,生成命令shell,并动态更新GoldMax的配置数据。这些对Goldmax配置数据的动态更新能够设置新的激活日期、替换现有的C2 URL和User-Agent值、启用/禁用诱饵网络流量功能以及更新其PRNG使用的数字范围。

 

值得注意的是,所有观察到的GoldMax版本都是使用Go编译器版本1.14.2(2020年4月发布)编译的。

 

Sibot

实现的两用恶意软件VBScript。它旨在在受感染的机器上实现持久性,然后从远程C2服务器下载并执行有效负载。VBScript文件被赋予一个模拟合法Windows任务的名称,并且要么存储在受感染系统的注册表中,要么以模糊格式存储在磁盘上。然后通过计划任务运行VBScript。

 

Sibot会访问一个合法但被入侵的网站,将DLL下载到System32。在观察到的情况下,DLL被下载到C:\windows\system32\drivers\,使用.sys扩展名重命名,然后由rundll32。计划任务通过混淆脚本调用MSHTA应用程序来运行Sibot。这种简单的实现可以减少参与者的占用空间,因为他们可以下载和运行新代码,而无需更改受感染的端点,只需更新托管的DLL。用于托管DLL的受感染网站对于每个受感染网络都不同,包括医疗设备制造商和IT服务提供商的网站。

 

我们观察到了该恶意软件的三个变种,所有变种都被混淆了:

●变体A是三者中最简单的。下的默认注册表值中安装第二阶段脚本HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\sibot。

●变体B注册一个名为Sibot的计划任务并编程为每天运行。此任务由Windows保存在文件C:\Windows\System32\Tasks\Microsoft\Windows\WindowsUpdate\sibot中,每天运行以下命令行:

此命令行中引用的注册表项包含第二阶段脚本。

●变体C是第二阶段脚本的独立版本。但是,虽然变体A的第二阶段脚本设计为从注册表执行,但此变体设计为从文件运行。

图10.矛变种

第二阶段脚本

第二阶段脚本的目的是从远程服务器下载和运行有效负载。可以使用以下参数自定义脚本:

●用于运行有效负载的命令行

●安装有效负载的目录

●包含要下载的有效负载的C2服务器的URL

●用于下载的HTTP请求(例如,GET)

 

运行时,脚本所做的第一件事是通过利用WMI类Root\Microsoft\Homenet\HNet_Connection。如果LAN连接不可用,则脚本默认为硬编码GUID。此GUID稍后会传达给C2。威胁行为者可能使用此GUID来验证威胁是否在理想环境中运行,即具有可用LAN连接的真实机器。第二阶段脚本的下一步是检查机器是否配置为使用代理,如果是,则获取代理的地址。该脚本使用StdRegProv WMI类从注册表项HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer并提取有效的代理服务器。

 

此时,脚本与C2服务器建立HTTP连接。它将用户代理和连接GUID设置为HTTP标头变量,然后发送HTTP请求。在脚本的两个版本中,请求都是GET。如果服务器响应仅包含恶意软件发送的相同GUID,则脚本会自行删除。对于变体A中的第二阶段脚本,该脚本会删除安装它的注册表项。对于变体C,脚本会删除正在运行的文件。相反,如果服务器使用GUID以外的任何数据进行响应,则第二阶段脚本会解密数据并将其保存为文件。在第二阶段脚本的两个变体中,有效负载是一个扩展名为.SYS的DLL,并保存在%windir%\system32\drivers文件夹中。最后,该脚本使用Win32_Process WMI类通过rundll32.exe实用程序执行有效负载DLL。

 

当脚本在脚本宿主进程(例如wscript.exe)的上下文中运行时,通过WMI接口执行的操作源自WMI宿主进程(WmiPrvSe.exe)。这有效地中断了操作的起源(脚本宿主)和它的执行(WMI宿主)之间的过程链,使得追溯事件的真实起源变得更加困难。第二阶段脚本的执行与它通过WMI执行的事件之间缺乏相关性也阻碍了取证分析。

 

以下Python脚本可用于解码在本报告分析的Sibot样本中观察到的编码字符串。

 

 Python

 encoded='

 decoded=''

 i=0

 while i

 a=int(chr(ord(encoded)-17))

 i+=1

 b=int(chr(ord(encoded)-17))

 if a*10+b<32:

 i+=1

 c=int(chr(ord(encoded)-17))

 decoded+=chr(a*100+b*10+c)

 else:

 decoded+=chr(a*10+b)

 i+=1

 print(decoded)

 

GoldFinder

另一个用Go编写的工具GoldFinder很可能用作自定义HTTP跟踪器工具,用于记录数据包到达硬编码C2服务器所经过的路由或跃点。启动时,恶意软件会发出一个对硬编码IP地址的HTTP请求(例如hxxps://185[.]225[.]69[.]69/)并将HTTP响应记录到明文日志文件(例如loglog.txt在当前工作目录中创建)。GoldFinder使用以下硬编码标签将请求和响应信息存储在日志文件中:

●目标:C2 URL

●StatusCode:HTTP响应/状态码

●标头:HTTP响应标头及其值

●数据:来自C2的HTTP响应的数据

 

使用示例日期的示例日志条目如下所示:

如果响应不是HTTP 200(OK)响应并且包含HTTP Location字段(指示重定向),GoldFinder会递归跟踪并记录重定向,直到它收到HTTP 200响应,此时它会终止。如果响应中存在Location标头并且Location值以字符串“http”开头,GoldFinder会提取Location URL(即重定向URL)并为重定向URL发出新的HTTP GET请求。它再次将请求及其响应记录在纯文本日志文件中:

如果GoldFinder收到响应上述请求的HTTP 200状态代码,表明不再有重定向,它就会终止。否则,它会递归地跟踪重定向最多99次,或者直到它收到HTTP 200响应,以先发生者为准。

 

启动后,GoldFinder可以识别所有HTTP代理服务器和其他重定向器,例如HTTP请求通过网络内外到达预期C2服务器的网络安全设备。当在受感染的设备上使用时,GoldFinder可用于通知参与者潜在的发现点或记录他们的其他操作,例如与GoldMax的C2通信。

 

Ramin Nafisi微软威胁情报中心

Andrea Lelli Microsoft 365 Defender研究团队

微软威胁情报中心(MSTIC)

Microsoft Defender威胁情报

 

原文地址:https://www.microsoft.com/security/blog/2021/03/04/goldmax-goldfinder-sibot-analyzing-nobelium-malware/

标签:IDA

读者也访问过这里:
IDA
反汇编程序软件
立即咨询
官方交流群:623715825 立即加群
400-8765-888 kefu@makeding.com
热门文章
IDA一些常用到的功能及其快捷键
通常情况下,我们使用反编译工具是为了在没有源代码的情况下促进对程序的了解,以便于我们分析软件的漏洞、分析编译器生成的代码,以验证编译器的性能和准确性,同时也可以用来分析软件是否带有恶意程序,提高安全性。
2021-05-17
IDA反汇编流程视图的常用基本操作设置
IDA中反汇编窗口中有两种不同的形式,分别是列表模式和图形模式,IDA默认打开是图形模式,就是反汇编流程视图,可以用来分析程序函数的具体运行情况。
2021-06-15
IDA反编译界面之流程预览、函数窗口介绍
在上节《IDA反编译界面之工具栏、导航栏、输出栏介绍》中,我们已经认识了IDA主界面六大窗口中的前三个窗口,接下来我们还需要认识余下的三大窗口,分别是主视图窗口、流程预览窗口和函数窗口。
2021-03-16
IDA的初始使用说明和界面简介
IDA能帮助我们分析恶意软件、分析系统漏洞、验证编译器的性能,其支持在Mac系统、Windows系统、Linux系统中使用,是一款非常优秀的反编译软件。
2021-03-16
使用IDA数据库搜索功能搜索内容
IDA提供了专用的搜索工具,多种不同的搜索方式,帮助我们在IDA数据库中快速搜索内容,并导航到页面上的指定位置。该软件设计了许多类型的数据显示来总结特定类型的信息(如字符串、名称),以方便我们查找这些信息。
2021-03-18
如何在IDA反编译窗口中编辑函数
IDA是一款用于多个平台系统上的文件反编译软件,它通过递归下降的方式帮我们在加载文件的同时自动分析反编译文件,并将结果写入到对应生成的数据库中,供多方查看编辑。
2021-03-18
最新文章
2022-10-15
2022-10-15

微信公众号

欢迎加入 IDA 产品的大家庭,立即扫码关注,获取更多软件动态和资源福利。

咨询热线

在线咨询

限时折扣