现场有坏人

孩子们,不要怕

路是通的,是他们不跑

林世钰 | 这是凌晨四点零八分的中国(诗一首)

她们生命的最后时光,是在那个屋子里待了一百多天

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

FireEye事件新动态:APT 攻击 SolarWinds 全球供应链(详解)

FireEye 代码卫士 2022-04-06

 聚焦源代码安全,网罗国内外最新资讯!

编译:奇安信代码卫士团队





前几日,火眼公司表示遭某受国家黑客支持的APT组织攻击。昨天,该公司发布调查进展称发现了一起全球性攻击活动,通过软件供应链攻陷了公共和私营组织机构网络。该攻击通过对广泛使用的 IT 基础设施管理软件(SolarWinds 公司生产的 Orion 网络监控产品)实施,其中所展现的高阶运营技术和资源能力和国家威胁组织一致。《华盛顿邮报》将该攻击与疑似俄罗斯国家黑客组织 APT29联系在一起,但火眼公司并未给出这一结论,而是更加中立地将其命名为 “UNC2452”,并将其使用的恶意软件称为 “SUNBURST”。如下是火眼报告联合微软发布的一份技术分析,奇安信代码卫士团队节选编译如下。

火眼公司指出,构成这起全球性攻击活动的攻击之间共享某些常见元素:

  • 使用恶意的 SolarWinds 更新:在 Orion 合法软件更新中插入恶意代码,使得攻击者远程访问受害者环境。

  • 恶意软件指纹较少:通过有限的恶意软件在躲避检测时实现目的。

  • 隐秘性高:竭力观测并融入正常的网络活动中。

  • 高度的 OPSEC:耐心地开展侦察活动,不断隐藏踪迹并使用难以归因的工具


概述


火眼公司发现了一起影响范围广泛的攻击活动并将其称之为 “UNC2452”。该攻击活动的幕后黑手获得对全球很多公共和私营组织机构的访问权限。他们通过 SolarWinds 公司的IT 监控和管理软件Orion 的恶意更新获得对受害者的访问权限。该活动可能早在2020年春就已启动,且目前仍在进行中。该供应链攻陷后的活动包括横向移动和数据窃取。攻击活动源自技术强大的组织,显示出强大的运营安全性。


SUNBURST 后门


SolarWinds.Orion.Core.BusinessLayer.dll 是由 SolarWinds 公司数字签名的 Orion 软件框架的一个组件,其中包含一个后门,经由 HTTP 和第三方服务器通信。火眼将该 SolarWinds Orion 插件的木马版本称为 “SUNBURST”。

经过最长为两周的初始休眠期后,它会检索并执行命令 “Jobs”,其中包含传输文件、执行文件、配置系统、重启机器和禁用系统服务的能力。该恶意软件将其网络流量伪装成 Orion 改进计划(Orion Improvement Program, OIP)协议,并在合法的插件配置文件中存储侦察结果,使其能够融入合法的 SolarWinds 活动。该后门使用多个混淆后的拦截清单来识别作为进程、服务和驱动来运行的取证和反病毒工具。

多个木马版更新的数字签名时间是2020年3月至5月,之后被发布在 SolarWinds 更新网站上,包括:

  • hxxps://downloads.solarwinds[.]com/solarwinds/CatalogResources/Core/2019.4/2019.4.5220.20574/SolarWinds-Core-v2019.4.5220-Hotfix5.msp

该木马版更新文件是一个标准的 Windows Installer Patch 文件,其中包含和更新相关的压缩性资源,如木马版的 SolarWinds.Orion.Core.BusinessLayer.dll 组件。更新一旦安装,恶意 DLL 将由合法的 SolarWinds.BusinessLayerHost.exe 或 SolarWinds.BusinessLayerHostx64.exe(取决于系统高配置)加载。经过最长为两周的休眠期后,该恶意软件将试图解析 avsvmcloud[.]com 的一个子域名。该 DNS 响应将返回一个指向 C2 域名的 CNAME 记录。恶意域名的C2流量旨在模仿正常的 SolarWinds API 通信。火眼公司已在 GitHub 页面发布已知的恶意基础设施:https://github.com/fireeye/sunburst_countermeasures


受害者遍布全球,横跨多个垂直行业


火眼公司在全球多个实体中检测到了这起攻击活动,受害者包括政府、咨询、技术、电信和冶炼实体,遍布北美、欧洲、亚洲和中东地区。报告指出,其它国家和垂直行业也有受害者。目前,火眼公司已通知这些受影响实体。


攻陷后活动和检测机会


报告指出,获得初始访问权限后,UNC2452 组织使用多种技术在横向移动的同时伪装其行动。它偏向于维持一个轻量的恶意软件指纹而不是合法的凭据和远程访问权限来访问受害者环境。如下将详细阐述值得注意的技术和潜在的检测机会。


所使用的 TEARDROP 和 BEACON 恶意软件

报告指出,目前已恢复多个 SUNBURST 样本,它们负责交付不同的 payload。在至少一个实例中,攻击者部署了一个此前未出现过的内存模式的释放器,火眼将其称为“TEARDROP”,来部署 Cobalt Strike BEACON。

TEARDROP 是一个内存模式的释放器,它以服务形式运行,生成一个线程并从文件 “gracious_truth.jpg” 中读取,而该文件很可能具有一个虚假的 JPG 标头。接着,它检查 HKU\SOFTWARE\Microsoft\CTF 是否存在,解码使用自定义滚动 XOR 算法的嵌入式payload,并手动在内存中加载使用自定义的类似 PE 文件格式的嵌入式 payload。TEARDROP 和之前的恶意软件之间并不存在代码重合。火眼研究员认为这样做是为了执行一个定制化的 Cobalt Strike BEACON。

缓解措施:火眼公司已在 GitHub提供用于检测 TEARDROP 的两个YARA规则。

攻击者主机名匹配受害者环境

威胁组织在命令和控制基础设施上设置了主机名,以匹配在受害者环境中找到的一个合法主机名。这就导致攻击者可以融入该环境、避开嫌疑并躲避检测。

检测机会

攻击者基础设施在 RDP SSL 证书中泄露了已配置的主机名,而该证书可从互联网扫描数据中识别。这就为防御人员提供了检测机会:查询互联网扫描数据来源中组织机构的主机名,披露可能伪装成某组织机构的恶意 IP 地址(注意:IP 扫描历史经常显示在默认主机名(WIN-*)和受害者主机名之间转换的 IP 地址)。交叉引用在互联网扫描数据中的 IP 列表和远程访问日志可能会识别出环境中该组织存在的证据。有可能每个 IP 地址对应一个账户。

位于受害者国家的 IP 地址

攻击者所选择的 IP 地址也是为了躲避检测。攻击者主要使用仅位于受害者所在国家使用 VPS 的 IP 地址。

检测机会

如果受陷账户由合法用户以及来自不同 IP 地址的攻击者使用,则用于远程访问的地理位置 IP 地址可能会出现一种不可能存在的移动速度。攻击者为每个 VPS 提供商使用多个 IP 地址,因此一旦发现异常 ASN 的恶意登录信息,则查看该 ASN 的所有登录信息有助于检测到其它恶意活动。在对用于合法远程访问的 ASN 的基线化和正常化时,这样做有助于识别可疑活动。

使用不同凭据进行横向移动

攻击者通过受陷凭据获得对网络的访问权限后,可能会使用多个不同的凭据进行横向移动。用于横向移动的凭据和用于远程访问的凭据总是不同。

检测机会

组织机构可以勾画出所有的登录活动并分析源系统和账户之间存在一对多关系的系统。这样会识别出以多个账户认证到多个系统的任何单一系统,这在正常的业务活动中是一种相对不常见的情况。

临时的文件替换和临时的任务修改

攻击者使用一种临时的文件替换技术远程执行工具:以恶意工具替换合法工具,执行 payload,之后存储合法的原始文件。同样,它们通过更新现有的合法任务的方式操纵已调度任务,执行其工具,之后将已调度任务返回给原始的配置。它们定期删除工具,如实现合法的远程访问后删除后门。

检测机会

防御人员可查看 SMB 会话日志,日志显示对合法目录的访问并在短时间内遵循删除-创建-删除-创建的模式。另外,防御人员可以监控现有的已调度任务中是否存在临时更新,通过频率分析识别异常的任务修改情况。也可监控任务,查看合法的 Windows 任务是否执行新的或未知的二进制。

该攻击的攻陷后活动高度遵循运营安全性,在很多情况下,每次入侵会利用专门的基础设施。这是火眼公司见过的最佳运营安全案例之一,它专注于躲避和利用内在信任。然而,研究员也可通过持续性防御措施检测到这些活动。


详细分析


SolarWinds.Orion.Core.BusinessLayer.dll 是由 SolarWinds 公司数字签名的 Orion 软件框架的一个组件,其中包含一个后门,经由 HTTP 和第三方服务器通信。火眼将该 SolarWinds Orion 插件的木马版本称为 “SUNBURST”。


独特能力

  • 执行子域 DomainName Generation Algorithm (DGA),区分 DNS 请求

  • CNAME 响应指向恶意软件连接的 C2 域名中

  • A 记录响应的 IP 块控制恶意软件行为

  • 命令和控制流量伪装成合法的 Orion 改进计划(OIP)

  • 代码使用虚假的变量名称并输入合法组件,隐藏在明网站中


交付和安装

授权系统管理员通过由 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 的后门。加载 Inventory Manager 插件时,在逻辑上不相关的例程 SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.InventoryManager.RefreshInternal 中的代码调用后门代码。


初始化

执行恶意的

SolarWinds.Orion.Core.BusinessLayer.OrionImprovementBusinessLayer.Initialize 方法时,样本验证了值 17291806236368054941的小写的进程名称哈希。该哈希值计算为标准的 FNV-1A 64 位哈希,并带有计算 FNV-1A 之后的附加的异或运算 6605813339339102567。该哈希匹配名为 “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 方法,而该方法是该样本的核心事件循环。


DGA 和块列表

后门判断使用 DGA 的 C2 服务器,以构建并解析 avsvmcloud[.]com 的子域。Update 方法负责初始化加密帮助器以生成这些随季节的 C2 子域。这些子域和如下其中之一进行拼接,以创建用于解析的主机名称:

  • .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-la + XOR 算法哈希每个值以及对照硬编码块列表进行检查。分析过程已经暴力逆向了这些哈希,显示这些例程正在扫描分析工具和反病毒引擎组件。如果块列表进程发现 Update 例程存在,则样本将继续在块列表通过之前尝试执行该例程。将块列表的注册表项 HKLM\SYSTEM\CurrentControlSet\services\<service_name>\Start 设置为值4(已禁用)阻止块列表。服务列表中的某些条目如果位于系统上,则从生成的值来看,可能会影响 DGA 算法。随后将已停止服务的列表打包到样本配置文件的 appSettings 条目的 ReportWatcherPostpone 密钥中。如果将任意服务转换为禁用,则 Update 方法退出并稍后重试。该样本通过 WMI 查询语句 Select * From Win32_SystemDriver 检索驱动列表。如果看到任意块列表驱动,则 Update 方法退出并重试。如果通过所有的块列表测试,则样本尝试解析 api.solarwinds.com,测试网络连接情况。


网络命令和控制 (C2)

如果所有的块列表和连接检查都通过,则该样本开始通过 DGA 在 while 循环中生成域名。该样本将在域名生成过程中延迟随机的时间间隔;该间隔可能是随机值,范围是1到3分钟、30分钟到120分钟,或者在出错条件下将达到420分钟到540分钟你(9小时)。所生成域名的 DNS A 记录将对照硬编码的 IP 地址块列表(控制恶意软件的行为)进行检查。如下范围的记录将终止该恶意软件并将配置密钥 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 响应中成功检索到域名,则样本将生成一个新的执行线程,调用 HttpHelper.Initialize 方法。该方法负责所有的 C2 通信和分派。HTTP 线程开始时会延迟由 SetTime 命令控制的可配置时间。在调出之间将存在最低1分钟的延迟。当请求数据时,该恶意软件将使用 HTTP GET 或 HEAD 请求,而当将 C2 输出数据发送给服务器时,恶意软件将使用 HTTP PUT 或 HTTP POST 请求。当 payload 小于10000字节时,使用 PUT 方法,否则使用 POST 方法。If-None-Match HTTP 标头保存了先前计算出的 userID 的 XOR 编码表示并附加了具有相同长度的随即字节数组。

所有的 HTTP POST 和 PUT 请求中均存在一个 JSON payload 并包含密钥 “userId”、“sessionId” 和 “steps”。”steps” 字段包含具有如下密钥的对象清单:“Timestamp”、 “Index”、 “EventType”、 “EventName”、 “DurationMs”、 “Succeeded” 和 “Message”。JSON 密钥 “EventType” 被硬编码到值 “Orion” 中,而 “EventName” 被硬编码到 “EventManager” 中。发送给服务器的恶意软件响应信息通过 DEFLATE 压缩并用 single-byte-XOR 编码,之后在 “steps” 数据中的 ”Message” 字段中分开。每个 “Message” 值都分别用 Base64 编码。数组 “steps” 中并非所有的对象都体现在恶意软件信息中—— “Timestamp” 字段中的一个整数必须设置 0x2 位以提示 “Message” 字段中的内容用于恶意软件信息中。位 0x2清楚地位于时间戳字段的 Step 对象包含随机数据,当汇编恶意软件响应时,随机数据被丢弃。


隐写术

在所观测到的流量中,这些 HTTP 响应主体试图看似和 .NET 汇编相关的非恶意 XML,但实际上命令数据在很多 GUID 和 HEX 字符串之间传播。使用如下正则表达式 "\{[0-9a-f-]{36}\}"|"[0-9a-f]{32}"|"[0-9a-f]{16}" 搜索 HEX 字符串,从 HTTP 响应主体中提取命令。命令数据在伪装成 GUID 和 HEX 字符串中的多个字符串中传播。响应中的所有已匹配子字符串过滤非 HEX 字符、连接在一起并通过 HEX 进行解码。第一个 DWORD 值显示了该信息的真实大小,直接跟在信息之后,之后是可选的其它垃圾字节。所提取的信息是使用该信息第一个字节解码的单字节 XOR,之后通过 DEFLATE 解压。第一个字符是一个 ASCII 整数,映射到 JobEngine enum,具有可选的其它由空格字符定界的命令参数。

之后根据如下所述的命令值将命令分派到 JobExecutionEngine。


缓解措施


SolarWinds 建议所有客户立即更新至 Orion Platform 版本2020.2.1 HF 1。此外,SolarWinds 还发布了其它缓解措施:https://www.solarwinds.com/securityadvisory

如果用户无法采用 SolarWinds 提供的建议,则可采取如下临时i环节技术,检查环境中可能存在木马化的 SolarWinds 软件风险。如在环境中发现攻击者活动,则建议开展全面调查,涉及并执行相应的缓解措施。

  • 确保已隔离/处理 SolarWinds 服务器,并开展进一步的审计和调查活动。其中应包括拦截源自 SolarWinds 服务器的所有互联网出口

  • 如 SolarWinds 基础设施未隔离,则考虑采取如下措施:

  • 限制从 SolarWinds 服务器到端点的连接范围,尤其是哪些被视作 Tier 0 / crown jewel 的资产

  • 限制在 SolarWinds 服务器上具有本地管理员权限的账户范围

  • 通过 SolarWinds 软件拦截来自服务器或其它端点的互联网出口。

  • (至少)考虑更改能够访问 SolarWinds 服务器/基础设施的账户密码。根据进一步的审计/调查,可能需要其它的修复措施。

  • 如使用 SolarWinds 管理网络基础设施,则考虑审计网络设备配置,查看是否存在异常/未授权修改。注意,这种措施是因 SolarWinds 功能而推出的主动措施,并非基于调查结果。

受支持的命令如下:





推荐阅读
FireEye 红队失窃工具大揭秘之:分析复现 Confluence路径穿越漏洞 (CVE-2019-3398)FireEye 红队失窃工具大揭秘之:分析复现 Atlassian RCE (CVE-2019-11580)
请君入瓮:火眼自称遭某 APT 国家黑客组织攻击




原文链接

https://www.bleepingcomputer.com/news/security/sophos-fixes-sql-injection-vulnerability-in-their-cyberoam-os/


题图:Pixabay License


本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。


奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的

产品线。

    觉得不错,就点个 “在看” 或 "” 吧~


文章有问题?点此查看未经处理的缓存