从技术角度深入剖析SolarWinds入侵事件

2021-01-14 5,688

原文地址:https://blog.qualys.com/vulnerabilities-research/2021/01/04/technical-deep-dive-into-solarwinds-breach


近期,许多组织都受到了SolarWinds入侵事件的影响。就各种迹象来看,这似乎是一起针对政府和私人机构的有针对性的攻击。到目前为止,这次攻击的影响范围仍然不是十分清楚,但是已知的是,黑客通过恶意的SolarWinds Orion更新获得了对受害者系统的访问权限,并且,有数千用户下载了这些更新。

 

由于攻击者能够访问SolarWinds软件的开发和交付通道,从而使他们能够将恶意代码添加到名为SolarWinds.Orion.BusinessLayer.dll的SolarWinds Orion平台驱动程序中。对于这种供应链攻击来说,由于受感染的dll具有相应的数字签名,使得恶意软件长时间未被发现,从而对用户造成了巨大的影响。 

 

image.png 

 

技术分析

在这次入侵事件中,被感染的二进制文件是.Net程序集,其中包含Orion框架的许多合法名称空间、类和方法。这样的话,攻击者就能将自己的代码与合法代码融合在一起。同时,恶意代码作为OrionImprovementBusinessLayer类的一部分隐藏其中,而该类可以通过创建线程来执行,以避免中断dll的常规流称。实际上,创建线程的代码是RefreshInternal方法中的一部分,后者是dll中一个被感染的方法。 

 

image.png 

 

分析对抗技术 

 

为了保留文件中的硬编码值,如进程、服务等列表,恶意软件使用了FNV-1a哈希算法的变体,将计算出的字符串哈希值与硬编码值进行XOR处理。

 

image.png 

 

除了以哈希值形式保留硬编码值外,该恶意软件还使用了DEFLATE压缩算法来保留WMI查询、注册表项和令牌等字符串。

 

image.png 

 

在恶意代码开始执行时,会进行各种检查,以确保代码是在合适的环境中运行:

 

image.png 

 

    进程名称为solarwinds.busslayerhost.exe。

    dll至少提前12到14天(288到336小时)写入磁盘。

    通过以下检查来检查系统的域名是否有效:

        不应包含其哈希值保存在文件中的那些字符串。

        不应与规则表达式(?i)([^a-z]|^)(test)([^a-z]|$)或(?i)(solarwinds)相匹配。

 

image.png 

 

    此外,它还会根据文件中以哈希值形式保存的进程、服务和驱动程序列表,对正在运行的进程、驱动程序和服务进行相应的检查。这看起来与检查系统上是否存在安全软件有关。 

 

image.png 

 

如果在系统上找到任何出现在检查列表中的服务,恶意软件就会通过操纵HKLM\SYSTEM\CurrentControlSet\Services下的服务注册表来禁用该服务。为此,它首先会找到一个新的所有者,方法是枚举通过查询“Select * From Win32_UserAccount”获得的用户列表。它会检查用户帐户是否是本地帐户,并且SID是否以S-1-5开头、以-500结尾,以确保它是本地管理员帐户。

 

image.png 

 

找到相应的帐户后,恶意软件通过为其自身授予SeRestorePrivilege和SeTakeOwnershipPrivilege特权,使发现的帐户成为待修改的注册表的所有者。

 

image.png 

 

为了获取已安装的驱动程序,它会使用Select * from Win32_SystemDriver WMI进行查询。 


域名生成算法(DGA 

该恶意软件的核心功能就是一个HTTP后门,它与C&C服务器进行通信,并获得需要执行的命令。为了获取C&C服务器的详细信息,它会解析一个独特的FQDN,结构如下所示: 

 

{subdomain}.domain3.domain2.domain1

domain3 = [eu-west-1, us-west-2, us-east-1, us-east-2]

domain2 = appsync-api

domain1 = avsvmcloud.com

 

image.png 

 

image.png 

 

该恶意软件实现了自己的域名生成算法,以便每次都能生成一个唯一的子域名。该DGA算法使用为系统生成的8字节用户ID和系统的域名来生成子域名。

 

image.png 

 

作为DGA算法的输入之一,系统的用户ID是通过从系统收集到的以下数据生成的:

 

    网络接口的物理地址

    系统的域名

    来自HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Cryptography的MachineGuid注册表值

 

它会将以上三个值连接起来,并计算连接后的字符串的MD5,然后进行自定义的XOR运算,从而生成相应的用户ID。

 

image.png 

 

作为DGA算法的一部分,它用置换表“rq3gsalt6u1iyfzop572d49bnx8cvmkewhj”和随机数对系统的域名进行编码。

 

image.png 

 

在对域名进行编码后,恶意软件就会使用用户ID、随机数和置换表“ph2eifo3n5utg1j8d94qrvbmk0sal76c”生成一个字符串。

 

image.png 

 

然后,它将编码后的用户id与编码后的域名连接起来,从而得到一个子域名。这使得每个恶意软件实例的子域名和FQDN域名都是各不相同的。 

 

image.png 

 

C2通信 

 

该恶意软件会检查生成的FQDN域名是否已被解析,以获取IPAddress结构中的详细信息。此外,它还会检查解析的主机名是否与查询的主机名相同,然后根据IP列表和代码中硬编码的掩码检查解析的IP的地址族。如果不一致的话,则将解析的主机名用作后门的C2主机名。

 

image.png 

 

作为C2通信的一部分,攻击者试图通过使用JSON格式的HTTP通信来模仿SolarWinds通信方法。以下是用于创建JSON格式的代码:

 

image.png 

 

JSON格式: 

 

{

"userId": ,

"sessionID": ,

"steps":

{

{

"Timestamp": "",

"Index":,

"EventType": "Orion",

"EventName": "EventManager",

"DurationMs":,

"Succeeded":true,

"Message": ""

}

}

}

 

HTTP后门会将json数据发送到C2服务器,如果通信成功,服务器就会返回经过编码处理的命令;接到命令后,该后门将使用表达式0-9a-f360-9a-f320-9a-f16解析该命令。

 

image.png 

 

image.png 

 

下面是在代码中硬编码的已解码命令列表。

 

image.png 

 

从命令列表可以看出,这款恶意软件能够收集系统信息,使用注册表,删除磁盘上的另一个文件,并运行它。

 

我们考察了几个受支持命令。其中,CollectSystemDescription命令用于收集域名、用户名、OS版本和网络配置细节等信息。

 

image.png 

 

作为获取网络配置详细信息的一部分,恶意软件使用select * From Win32_NetworkAdapterConfiguration where IPEnabled=true执行WMI查询,并解析以下字段: 

 

Description

MACAddress

DHCPEnabled

DHCPServer

DNSHostName

DNSDomainSuffixSearchOrder

DNSServerSearchOrder

IPAddress

IPSubnet

DefaultIPGateway

 

image.png 

 

为了获取操作系统详细信息,它会执行如下WMI Query,即Select * From Win32_OperatingSystem。

 

image.png 

 

从代码中我们可以看到,它可以删除第二阶段的恶意软件,并执行它。 

 

image.png 

 

小结

最后,我们可以得出如下结论:攻击者在这次入侵中使用的技术非常复杂,其中包括供应链攻击、数据编码以及动态解析,等等。同时,攻击者的重心并不是对受感染的系统进行重创,而是专注于不被安全产品发现踪迹。在今后的日子里,类似攻击将更为常见。 


本文作者:mssp299

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/151497.html

Tags:
评论  (0)
快来写下你的想法吧!

mssp299

文章数:51 积分: 662

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号