Microsoft威胁情报中心(MSTIC)将Actor的攻击者SolarWinds,SunBURST,TEARDROP恶意软件以及相关组件命名为NOBELIUM。
最近的调查发现,NOBELIUM在后期活动中使用了三种新的恶意软件。本文提供了对这些恶意软件菌株的详细分析,以帮助防御者检测,保护和应对这种威胁。在某些受感染的客户网络中发现了这些新的攻击者工具和功能,并观察到它们将于2020年8月至2020年9月投入使用。进一步的分析表明,这些攻击工具和功能最早可能在2020年6月就已在受感染的系统上使用。这些工具是恶意软件的新片段。它们是针对特定网络量身定制的,经过评估,将在参与者通过受到破坏的凭据或SolarWinds二进制文件获得访问权之后,以及在使用TEARDROP和其他手动键盘操作进行横向移动之后引入。
这些功能不同于以前已知的NOBELIUM工具和攻击模式,并重申了参与者的先进性。在攻击的所有阶段,参与者都表现出对网络中常见的软件工具,安全软件和系统以及事件响应团队经常使用的技术的深入了解。从选择命令和控制(C2)基础结构到命名用于维护持久性的计划任务,该知识反映在参与者的操作决策中。
保持持久性对于获得网络访问权限的任何威胁参与者都是至关重要的。除了SolarWinds软件中的后门程序外,人们还观察到NOBELIUM使用被盗的凭据访问电子邮件和存储等云服务,并使用身份受损以通过虚拟专用网络(VPN)和远程访问工具获取和维护对网络的访问。
发现GoldMax恶意软件作为模拟系统管理软件的计划任务在网络上持续存在。在遇到实例的情况下,计划任务以环境中存在的软件命名,并指向ProgramData中以该软件命名的子文件夹,并具有类似的可执行文件名称。
用Go语言编写的GoldMax充当了参与者的命令和控制后门。它使用几种不同的技术来混淆其动作并逃避检测。该恶意软件将加密的配置文件写入磁盘,其中文件名和AES-256密码密钥对于每个植入物都是唯一的,并基于环境变量和有关其运行网络的信息。
GoldMax与其C2建立一个安全的会话密钥,并使用该密钥与C2安全地进行通信,从而防止非GoldMax发起的连接接收和识别恶意流量。C2可以通过伪随机生成的cookie发送要启动的用于各种操作的命令,包括本机OS命令。硬编码的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中有所不同)。然后,使用自定义Base64字母“ ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_ ”对AES加密的配置数据进行Base64编码,然后再将其存储在文件系统上的配置文件中。运行时,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地址。从14个硬编码URL列表中伪随机选择每个请求的确切URL。由14个合法URL和C2 URL组成的URL列表示例如下所示:
图4 硬编码的URL,GoldMax最多从中选择四个以发出HTTP请求
如上所示,某些诱骗URL指向实际C2的域名(例如,onetechcompany [。] com)。但是,C2知道上述URL中引用的特定HTTP资源(例如style.css,script.js,icon.ico等)是诱饵资源。
每个诱骗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请求示例
执行周期的下一步涉及在GoldMax及其C2服务器之间建立安全的会话密钥。GoldMax首先通过发送包含每个植入物唯一的自定义HTTP Cookie值的HTTP GET请求,从其C2服务器请求会话密钥。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 示例HTTP GET请求显示硬编码的Cookie值
第一和第二HTTP GET请求之间的唯一观察到的差异是上文所强调的第二cookie的值(例如值:iC0Pf2a48从与所述第一请求J4yeUYKyeuNa2从上面的第二个请求)。响应该请求,GoldMax接收一个加密的RSA会话密钥(Base64编码)。每个版本的GoldMax都包含一个RSA私钥,GoldMax会对其进行解码(使用pem.Decode())和解析(使用x509.ParsePKCS1PrivateKey())。GoldMax使用rsa.DecryptOAEP()使用解析后的私钥解密(使用RSA-OAEP)从其C2服务器接收到的RSA加密会话密钥。从那时起,会话密钥将用于加密GoldMax及其C2服务器之间发送的数据。
建立会话密钥后,GoldMax到达其C2服务器以接收,解密(AES-256),解析和执行命令。为了从其C2服务器检索加密的C2命令,GoldMax发送HTTP GET请求。此HTTP GET请求仅包含一个Cookie值,该值与会话密钥建立过程中使用的Cookie值相匹配(如前所述,对User-Agent和Connection标头和值进行了硬编码):
图9 包含单个Cookie值的示例HTTP GET请求
响应以上请求,GoldMax接收加密的(AES-256)和编码的(使用自定义Base64字母的Base64)C2命令。使用在GoldMax及其C2服务器之间建立的会话密钥对命令进行加密。在解码和解密C2命令之后,GoldMax继续解析C2命令。
C2命令表示为看似随机的字母数字ASCII字符串(例如,“ KbwUQrcooAntqNMddu4XRj ”),它们对于每个植入物都是唯一的,但对于C2服务器是已知的。C2命令允许操作员在受感染的系统上下载和执行文件,将文件从受感染的系统上载到C2服务器,在受感染的系统上执行OS命令,生成命令外壳,并动态更新GoldMax的配置数据。这些对Goldmax配置数据的动态更新使您能够设置新的激活日期,替换现有的C2 URL和User-Agent值,启用/禁用诱骗网络流量功能以及更新其PRNG使用的数字范围。
值得注意的是,所有观察到的GoldMax版本均使用Go编译器版本1.14.2(于2020年4月发布)进行编译。在所有观察到的版本中,GoldMax的主要Go源代码文件位于以下目录中:/ var / www / html / builds /。GoldMax编译过程中使用的Go软件包和库大多位于/ var / www / html / go / src /目录(例如/var/www/html/go/src/net/http/http.go)下)。
Sibot是在VBScript中实现的两用恶意软件。它旨在在受感染的计算机上实现持久性,然后从远程C2服务器下载并执行有效负载。VBScript文件的名称可以模拟合法的Windows任务,并且可以存储在受感染系统的注册表中,也可以以混淆的格式存储在磁盘上。然后,通过预定任务运行VBScript。
Sibot接触到一个合法但受到感染的网站,将DLL下载到System32下的文件夹中。在观察到的情况下,DLL被下载到C:\ windows \ system32 \ drivers \,以.sys扩展名重命名,然后由rundll32执行。计划任务通过混淆脚本调用MSHTA应用程序以运行Sibot。这种简单的实现方式可以减少参与者的负担,因为参与者可以通过更新托管的DLL来下载和运行新代码,而无需更改受感染的端点。对于每个受感染的网络,用于承载DLL的受感染网站都是不同的,并且包括医疗设备制造商和IT服务提供商的网站。
我们已经观察到此恶意软件的三种变体,所有变体都被混淆了:
l 变体A是三个中最简单的一个。它仅将第二阶段脚本安装在注册表项HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ sibot下的默认注册表值中。
l 变体B注册了一个名为Sibot的计划任务,并编程为每天运行。该任务由Windows保存在文件C:\ Windows \ System32 \ Tasks \ Microsoft \ Windows \ WindowsUpdate \ sibot中,每天运行以下命令行:
此命令行中引用的注册表项包含第二阶段脚本。
l 变体C是第二阶段脚本的独立版本。但是,虽然变体A的第二阶段脚本被设计为从注册表中执行,但此变体被设计为从文件中运行。
图10 Sibot变体
第二阶段脚本的目的是从远程服务器下载并运行有效负载。可以使用以下参数来自定义脚本:
l 用于运行有效负载的命令行
l 有效负载的安装目录
l 包含要下载的有效负载的C2服务器的URL
l 用于下载的HTTP请求(例如GET)
运行时,脚本要做的第一件事是利用WMI类Root \ Microsoft \ Homenet \ HNet_Connection提供的接口来检索与计算机上存在的LAN连接关联的GUID 。如果没有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执行的事件之间缺乏相关性,也阻碍了司法分析。
GoldFinder的另一种用Go语言编写的工具最有可能用作自定义HTTP跟踪器工具,用于记录数据包到达硬编码C2服务器所需的路由或跃点。启动后,恶意软件会发出对硬编码IP地址的HTTP请求(例如hxxps:// 185 [。] 225 [。] 69 [。] 69 /),并将HTTP响应记录到纯文本日志文件(例如loglog)中。 .txt在当前工作目录中创建)。GoldFinder使用以下硬编码标签将请求和响应信息存储在日志文件中:
l 目标:C2 URL
l StatusCode:HTTP响应/状态码
l 标头:HTTP响应标头及其值
l 数据:来自C2的HTTP响应数据
下面显示了使用示例日期的示例日志条目:
图11 样本日志条目
如果响应不是HTTP 200(OK)响应,并且包含HTTP Location字段(指示重定向),则GoldFinder会递归地跟踪并记录重定向,直到它收到HTTP 200响应为止,然后终止。如果响应中存在Location标头,并且Location值以字符串“ http”开头,则GoldFinder提取Location URL(即,重定向URL)并针对重定向URL发出新的HTTP GET请求。它再次将请求及其响应记录在纯文本日志文件中:
图12 样本日志文件
如果GoldFinder响应上述请求而收到HTTP 200状态代码,指示不再进行任何重定向,则它将终止。否则,它将以递归方式将重定向最多执行99次,或者直到接收到HTTP 200响应为止(以先发生者为准)。
启动后,GoldFinder可以识别所有HTTP代理服务器和其他重定向器,例如HTTP请求在网络内部和外部传播以到达目标C2服务器的网络安全设备。在受损设备上使用时,GoldFinder可以用于通知参与者潜在的发现点或记录其其他操作,例如与GoldMax的C2通信。
GoldFinder是使用2020年4月发布的Go 1.14.2从名为finder.go的Go文件中编译的,该文件具有以下路径:/tmp/finder.go。GoldFinder编译过程中使用的Go软件包和库大多位于/ var / www / html / go / src /目录(例如/var/www/html/go/src/net/http/http.go)下)。
复杂的NOBELIUM攻击需要全面的事件响应来识别,调查和响应。 Microsoft Defender防病毒软件检测到此文中讨论的新NOBELIUM组件为以下恶意软件:
Trojan:Win64 / GoldMax.A!dha
TrojanDownloader:VBS / Sibot.A!dha
木马:VBS / Sibot.B!dha
Trojan:Win64 / GoldFinder.A!dha
行为:Win32 / Sibot.C
在Microsoft Defender Antivirus上启用云提供的保护和自动示例提交功能可确保人工智能和机器学习可以快速识别并阻止新的未知威胁。篡改保护功能 可防止攻击者停止安全服务。减少攻击面的规则,尤其是阻止可执行文件运行(除非它们符合普遍性,年龄或受信任的列表条件)的规则,可以帮助阻止威胁参与者引入的新恶意软件和攻击者工具。
图13 威胁和漏洞管理中的安全建议
Microsoft Defender安全中心将Microsoft Defender防病毒软件检测到的新恶意软件报告为警报。此外,Microsoft Defender for Endpoint中的端点检测和响应功能会检测与这些NOBELIUM组件相关的恶意行为,这些恶意行为以带有以下标题的警报形式出现:
l GoldMax恶意软件
l Sibot恶意软件
l GoldFinder恶意软件
对于这些NOBELIUM组件,还提出了以下警报,指示已检测到与广泛攻击相关的行为:
l 与远程服务的可疑连接
l 可疑Rundll32进程执行
l 可疑的PowerShell命令行
l 可疑文件或脚本访问了恶意注册表项