流行网管软件厂商SolarWinds供应链攻击事件
高度逃避的攻击者利用SUNWINRST后门利用SolarWinds供应链来损害多个全球受害者
12月13日 Fireeye发布公告
一、SUNBURST后门
SolarWinds.Orion.Core.BusinessLayer.dll是Orion软件框架的SolarWinds数字签名组件,其中包含一个后门,该后门通过HTTP与第三方服务器进行通信。该木马即SUNBURST。
该插件被执行后经过长达两个星期的初始休眠期后,它会检索并执行称为“作业”的命令,这些命令包括传输文件,执行文件,对系统进行配置文件,重新引导计算机以及禁用系统服务的功能。该恶意软件伪装成Orion改进程序(OIP)协议的网络流量,并将侦察结果存储在合法的插件配置文件中,从而使其能够与合法的SolarWinds活动融合。后门使用多个混淆的阻止列表来识别作为进程,服务和驱动程序运行的取证和防病毒工具。

木马更新文件是标准的Windows Installer补丁文件,其中包括与更新相关联的压缩资源,其中包括木马SolarWinds.Orion.Core.BusinessLayer.dll组件。一旦安装了更新,恶意DLL将由合法的SolarWinds.BusinessLayerHost.exe或SolarWinds.BusinessLayerHostx64.exe加载(取决于系统配置)。在长达两周的休眠期后,该恶意软件将尝试解析avsvmcloud . com的子域。DNS响应将返回指向命令和控制(C2)域的CNAME记录。到恶意域的C2流量旨在模拟正常的SolarWinds API通信。已知恶意基础结构的列表可在FireEye的GitHub页面上找到。
二、跨越多个行业的全球受害者
FireEye已在全球多个实体中检测到此活动。受害者包括北美,欧洲,亚洲和中东的政府,咨询,技术,电信和采掘实体。我们预计在其他国家和地区也将有更多的受害者。FireEye已通知所有已知受影响的实体。
三、入侵后的活动和检测机会
我们目前正在跟踪软件供应链危害和相关的UNC2452入侵后活动。获得初始访问权限后,该小组在侧向移动时会使用各种技术来掩饰其操作(图2)。该参与者更喜欢保持较小的恶意软件覆盖范围,而更喜欢使用合法的凭据和远程访问来访问受害者的环境。

图2 入侵后的活动
使用了TEARDROP和BEACON恶意软件
已恢复了多个SUNBURST样本,可提供不同的有效载荷。在至少一个实例中,攻击者部署了一个以前看不见的纯内存删除程序,我们将其称为TEARDROP来部署Cobalt Strike BEACON。
TEARDROP是作为服务运行的仅内存删除程序,它产生一个线程并从文件“ gracious_truth.jpg”读取,该文件可能具有伪造的JPG标头。接下来,它检查是否存在HKU \ SOFTWARE \ Microsoft \ CTF,使用自定义滚动XOR算法解码嵌入式有效负载,并使用类似于PE的自定义文件格式将嵌入式有效负载手动加载到内存中。TEARDROP的代码与任何以前看到的恶意软件都没有重叠。我们认为,这是用来执行定制的Cobalt Strike BEACON。
缓解措施:FireEye提供了两个Yara规则来检测GitHub上可用的TEARDROP 。防御者应从FireEye HX查找以下警报:MalwareGuard和WindowsDefender:
攻击者主机名匹配受害者环境
角色在其命令和控制基础结构上设置主机名,以匹配在受害者环境中找到的合法主机名。这使对手可以融入环境中,避免怀疑并逃避检测。
检测机会
攻击者基础结构会在RDP SSL证书中泄漏其已配置的主机名,这可以在Internet范围内的扫描数据中识别出来。这为防御者提供了一个检测机会-在Internet范围内的扫描数据源中查询组织的主机名可以发现可能伪装成组织的恶意IP地址。(注意:“ IP扫描历史记录”通常显示IP在默认(WIN- *)主机名和受害者主机名之间的切换。)将Internet扫描数据中标识的IP列表与远程访问日志进行交叉引用可能会在环境中识别该参与者的证据。每个IP地址可能只有一个帐户。
位于受害者国家的IP地址
攻击者对IP地址的选择也进行了优化,以逃避检测。攻击者主要利用虚拟专用服务器使用与受害者来自同一国家的IP地址。
检测机会
这也提供了一些检测机会,因为如果合法用户和攻击者使用来自不同IP地址的受损帐户,则用于远程访问的IP地址地理定位可能显示出不可能的传输速度。攻击者为每个VPS提供程序使用了多个IP地址,因此一旦识别出来自异常ASN的恶意登录,查看来自该ASN的所有登录可以帮助检测其他恶意活动。这可以与用于合法远程访问的ASN的基线确定和规范化一起完成,以帮助识别可疑活动。
使用不同凭证的横向移动
攻击者使用受到破坏的凭据访问网络后,便使用多个不同的凭据横向移动。用于横向移动的凭据始终与用于远程访问的凭据不同。
检测机会
组织可以使用HX的LogonTracker模块绘制所有登录活动的图形,并分析显示源系统和帐户之间一对多关系的系统。这将揭露对具有多个帐户的多个系统进行身份验证的任何单个系统,这在正常业务运营期间相对罕见。
临时文件替换和临时任务修改
攻击者使用临时文件替换技术来远程执行实用程序:他们用实用程序替换了合法实用程序,执行了有效负载,然后还原了合法原始文件。他们通过更新现有合法任务以执行其工具,然后将计划任务返回其原始配置,来类似地操纵计划任务。他们例行地删除了他们的工具,包括一旦实现合法的远程访问就删除了后门。
检测机会
防御者可以检查显示了对合法目录的访问权限的SMB会话的日志,并在很短的时间内遵循delete-create-execute-delete-create模式。此外,防御者可以使用频率分析来识别任务的异常修改,从而监视现有的计划任务以进行临时更新。还可以监视任务,以监视执行新二进制文件或未知二进制文件的合法Windows任务。
此活动的入侵后活动在高度重视运营安全性的情况下进行,在许多情况下,每次入侵都利用专用的基础架构。这是FireEye在网络攻击中观察到的最佳操作安全性,重点在于逃避和利用固有信任。但是,可以通过持久防御来检测到它。
四、深入恶意软件分析
SolarWinds.Orion.Core.BusinessLayer.dll(b91ce2fa41029f6955bff20079468448)是Orion软件框架中由SolarWinds签名的插件组件,其中包含经过混淆的后门,该后门通过HTTP与第三方服务器进行通信。经过长达两周的初始休眠期后,它会检索并执行称为“作业”的命令,这些命令包括传输和执行文件,对系统进行配置文件以及禁用系统服务的功能。后门的行为和网络协议与合法的SolarWinds活动融为一体,例如伪装成Orion改进程序(OIP)协议并将侦察结果存储在插件配置文件中。后门使用多个阻止列表,以通过进程,服务和驱动程序识别取证和防病毒工具。
l 独特能力
执行子域域名生成算法(DGA)以更改DNS请求
CNAME响应指向恶意软件要连接到的C2域
A记录响应的IP块控制恶意软件的行为
DGA编码的机器域名,用于有选择地针对受害者
指挥和控制假装为合法的Orion改进程序
通过使用伪造的变量名并绑定到合法组件中,代码隐藏在纯站点中
l 交付和安装
授权的系统管理员可以通过SolarWinds网站分发的软件包获取并安装对SolarWinds Orion的更新。更新包CORE-2019.4.5220.20574-SolarWinds-Core-v2019.4.5220-Hotfix5.msp(02af7cec58b9a5da1c542b5a32151ba1)包含此报告中描述的SolarWinds.Orion.Core.BusinessLayer.dll。安装后,Orion软件框架将执行.NET程序SolarWinds.BusinessLayerHost.exe来加载包括SolarWinds.Orion.Core.BusinessLayer.dll在内的插件。该插件包含许多在Orion框架内实现功能的合法名称空间,类和例程。清晰可见的类SolarWinds.Orion.Core.BusinessLayer.OrionImprovementBusinessLayer实现了基于HTTP的后门。逻辑上不相关的例程SolarWinds.Orion.Core.BusinessLayer中的代码。
SolarWinds.Orion.Core.BusinessLayer.dll由SolarWinds签名,使用序列号为0f:e9:73:75:20:22:a6:06:ad:f2:a3:6e:34:5d:c0的证书: ed。该文件于2020年3月24日签署。
l 初始化
在执行恶意的SolarWinds.Orion.Core.BusinessLayer.OrionImprovementBusinessLayer.Initialize方法后,该示例将验证其小写进程名称的哈希值是否为17291806236368054941。此哈希值计算为标准FNV-1A 64位哈希,并带有附加值计算FNV-1A之后,通过6605813339339102567进行XOR。此哈希与名为“ solarwinds.businesslayerhost”的进程匹配。
仅当程序集的文件系统写入时间比当前时间至少早12到14天时才执行该示例;否则,将仅执行该示例。确切的阈值是从一个间隔中随机选择的。该示例将继续检查此时间阈值,因为它是由合法的定期后台任务运行的。一旦达到阈值,该示例就会创建命名管道583da945-62af-10e8-4902-a8f205c72b2e,以保护只有一个实例在运行,然后再从磁盘读取SolarWinds.Orion.Core.BusinessLayer.dll.config并检索磁盘。 XML字段appSettings。appSettings字段的密钥是合法值,恶意逻辑将这些合法值重新用作持久配置。密钥ReportWatcherRetry必须为3以外的任何其他值,示例才能继续执行。
该示例检查计算机是否已加入域,并在继续执行之前检索域名。通过计算已启动且不是回送设备的所有网络接口MAC地址,域名和注册表值HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography \ MachineGuid的MD5来生成userID。在计算MD5之后,通过自定义XOR方案对userID进行编码。然后从SolarWinds.Orion.Core.BusinessLayer.dll.config中读取appSettings的ReportWatcherPostpone项,以检索初始的合法值。执行此操作是因为后面的采样位将标志打包到该字段中,并且必须知道初始值才能读出位标志。然后该示例调用方法Update,该方法是示例的核心事件循环。
l DGA和阻止列表
后门使用域生成算法(DGA)确定其C2服务器,以构造和解析avsvmcloud .com的子域。Update方法负责初始化用于生成这些随机C2子域的加密助手。子域是通过将受害者userId与受害者本地计算机域名的可逆编码串联在一起而生成的。攻击者可能利用DGA子域来改变对受害者的DNS响应,以此作为控制恶意软件针对性的手段。这些子域与以下其中一项串联在一起,以创建要解析的主机名:
.appsync-api.eu-west-1 . avsvmcloud. com
.appsync-api.us-west-2.avsvmcloud .com
.appsync-api.us-east-1 .avsvmcloud. com
.appsync-api.us-east-2. avsvmcloud.com
获得进程名称,服务名称和驱动程序路径列表,并通过FNV-1a + XOR算法对每个值进行哈希处理,如前所述,并对照硬编码的阻止列表进行检查。在分析过程中,其中的一些哈希值已被蛮力逆转,表明这些例程正在扫描分析工具和防病毒引擎组件。如果找到阻止列表的进程,则Update例程将退出,并且示例将继续尝试执行该例程,直到阻止列表通过为止。通过将被禁用列表服务设置为HKLM \ SYSTEM \ CurrentControlSet \ services \ <service_name> \ Start注册表项,可以将其停止。如果在系统上找到了服务列表中的某些条目,则可能会根据生成的值影响DGA算法的行为。然后将已停止服务的列表打包到示例配置文件的appSettings条目的ReportWatcherPostpone项中。如果将任何服务转换为禁用,则Update方法将退出并稍后重试。该示例通过WMI查询检索驱动程序列表。选择* From Win32_SystemDriver。如果看到任何列入黑名单的驱动程序,则Update方法将退出并重试。如果所有阻止列表测试都通过,则该示例将尝试解析api.solarwinds.com以测试网络的连接性。
网络命令和控制(C2)
如果所有阻止列表和连接性检查均通过,则示例将通过其DGA在while循环中开始生成域。样本将延迟域生成之间的随机间隔;此时间间隔可以是1到3分钟,30到120分钟或在错误条件下最长420到540分钟(9小时)范围内的任意随机值。将对照控制恶意软件行为的IP地址块的硬编码列表检查生成的域的DNS A记录。以下范围内的记录将终止恶意软件,并将配置密钥ReportWatcherRetry更新为阻止进一步执行的值:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
224.0.0.0/3
fc00 ::-fe00 ::
fec0 ::--ffc0 ::
ff00 ::-ff00 ::
20.140.0.0/15
96.31.172.0/24
131.228.12.0/22
144.86.226.0/24
一旦在CNAME DNS响应中成功检索到域,该示例将产生一个新的执行线程,调用该方法负责所有C2通信和调度的HttpHelper.Initialize方法。HTTP线程首先将延迟由SetTime命令控制的可配置时间。两次调用之间,HTTP线程将至少延迟1分钟。该恶意软件使用HTTP GET或HTTP POST请求。如果样本尝试发送出站数据,则内容类型HTTP标头将设置为“ application / octet-stream”,否则设置为“ application / json”。
JSON有效负载适用于所有HTTP POST和PUT请求,并且包含键“ userId”,“ sessionId”和“ steps”。“步骤”字段包含具有以下键的对象列表:“时间戳”,“索引”,“事件类型”,“事件名称”,“持续时间”,“成功”和“消息”。JSON密钥“ EventType”被硬编码为值“ Orion”,而“ EventName”被硬编码为“ EventManager”。将发送到服务器的恶意软件响应消息进行DEFLATE压缩和单字节XOR编码,然后在“步骤”数组的“消息”字段之间进行拆分。每个“消息”值均经过Base64编码。并非“步骤”数组中的所有对象都构成了恶意软件消息–“时间戳”字段中的整数必须设置为0x2位,以指示恶意软件消息中使用了“消息”字段的内容。
隐写术
在观察到的流量中,这些HTTP响应主体试图看起来像与.NET程序集相关的良性XML,但是命令数据实际上分布在存在的许多GUID和HEX字符串中。通过使用以下正则表达式搜索HEX字符串,从HTTP响应主体中提取命令:“ \ {[0-9a-f-] {36} \}” |“ [[0-9a-f] {32}” |“ [0-9a-f] {16}”。命令数据分布在多个字符串中,这些字符串伪装成GUID和HEX字符串。响应中的所有匹配子字符串都将针对非HEX字符进行过滤,合并在一起并进行HEX解码。第一个DWORD值显示消息的实际大小,紧随其后的是消息,其后是可选的其他垃圾字节。使用消息的第一个字节对提取的消息进行单字节XOR解码,然后将其解压缩。第一个字符是ASCII整数,它映射到JobEngine枚举,并带有由空格字符分隔的可选附加命令参数。
背景知识
域名生成算法(DGA)基础总结
域名生成算法(DGA)
僵尸网络正在威胁着互联网网民的安全。僵尸网络中受到恶意软件感染的僵尸主机由僵尸控制者通过C&C主机进行控制。僵尸主机常常利用DNS授权服务器来解析域名,目的是为了跟C&C服务器创建通信通道,然后获取控制命令,从而进行网络恶意活动。
在早期,僵尸主机通产采用轮询的方法访问硬编码的C&C域名或IP来访问服务器获取域名,但是这种方式在安全人员进行逆向之后会得到有效的屏蔽。目前,黑客攻击者为了防止恶意域名被发现,会使用Domain Flux或者IP Flux来快速生成大量的恶意域名。Domain Flux是通过不断变换域名,指向同一个IP,IP Flux是只有一个域名,不断变换IP,一个域名可以使用多个IP。域名生成算法(Domain Generation Algorithm),是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检测的技术手段。
DGA运行方式
攻击者端(bot-master)
使用种子运行DGA生成大量域名,随机选择少量的域名进行注册(可能生成了5000个只注册1-2个),攻击者将该域名注册并指向其C&C服务器。
受害者端(bot)
使用同样的种子运行DGA,生成大量域名,逐个访问这些域名,检测是否存在,如果该域名未注册,程序继续检测其他域名,如果该域名已注册【如果某生成域名发生了被抢注的情况该怎么办?不处理,因为那些域名并不能发攻击指令,看设计方案是否要继续进行轮询】,那么恶意软件将选择使用该域名联系C&C服务器。
DGA使用的种子有很多种类,包含日期、社交网络搜索热词、随机数或字典,生成一串字符前缀,添加TLD(如com、org等)后得到最终生成域名AGD(Algorithmically Generated Domain) 。
【怎样确定同样的种子?在程序中内嵌。但是安全人员逆向了之后仍旧不能确定种子是什么,因为并不能知道攻击者究竟以什么字段作为种子】
DGA的危害
DGA每天可以生成成千上万的恶意域名,但仅选择一小部分作为后续的攻击域名,相对于传统硬编码的恶意域名,更难检测。
DGA的优缺点
DGA的优点
1、使用DGA的僵尸网络有较为健壮的寻址方式,可对抗域名黑名单屏蔽、静态声望系统以及特征码检测系统。
2、DGA是一种理想的备用信道,可作为back up手段恢复僵尸网络控制,如Zeus v3。
DGA的缺点
1、需要逐一便利AGD,寻址效率低。
2、大量NXDomain流量导致通信易被检测发现。
3、如果AGD数量过多,出于时间和金钱成本开销,攻击者难以全部注册,防御人员可以抢注并通过sinkhole手段测量或劫持僵尸网络。
DGA分类
根据种子性质分类
1、根据种子是否依赖于时间分为两类:依赖于时间的和不依赖于时间的。
时间来源于被入侵主机的系统时间,或HTTP响应报文中的日期字段。
2、种子是否确定:确定的和不确定的。
大多数DGA的种子都是确定的,即可以预测该DGA未来使用的种子和以此产生的域名。
一些DGA的种子是不确定的,
上述两种方法将DGA划分为四个类别:
TID、TDD、TDN、TIN
根据生成算法分类
1、基于算术(Arithmetic-based)的DGA:
计算一系列的数值,这些值能根据ASCII码直接表示成域名,或者这些值作为偏移值,指向在DGA在DGA中硬编码的字符表中的一个字符。大部分DGA都属于这一类。
2、基于哈希(Hash-based)的DGA:
使用十六进制表示的哈希值生成AGD。这DGA常使用SHA256和MD5两种哈希值。
3、基于单词表(Wordlist-based)的DGA:
从一个或多个单词表中选择单词并连接成一个域名,这样的域名更具有迷惑性。
4、基于置换(Permutation-based)的DGA:

浙公网安备 33010602011771号