揭秘GhostContainer后门:针对亚洲高价值组织的Exchange服务器攻击

本文详细分析了GhostContainer后门,这是一种针对Microsoft Exchange服务器的定制恶意软件,利用开源项目构建多功能后门,通过虚拟页面注入和Web代理实现隐蔽通信与控制。

GhostContainer后门:针对亚洲高价值组织的Exchange服务器攻击

在一次事件响应(IR)案例中,我们发现了一种高度定制化的恶意软件,针对政府环境中的Exchange基础设施。对检测日志和样本内线索的分析表明,Exchange服务器可能是通过已知的N-day漏洞被攻破的。我们对恶意软件的深入分析揭示了一个复杂的、多功能的、可通过下载额外模块动态扩展功能的后门。值得注意的是,攻击者利用了几个开源项目来构建此后门。一旦加载,后门便赋予攻击者对Exchange服务器的完全控制,允许他们执行一系列恶意活动。为了逃避安全产品的检测,恶意软件采用了多种规避技术,并伪装成常见的服务器组件以融入正常操作。此外,它还能作为代理或隧道,可能将内部网络暴露给外部威胁,或促进从内部设备窃取敏感数据。我们的遥测数据表明,这种恶意软件可能是针对亚洲高价值组织(包括高科技公司)的APT活动的一部分。我们的团队目前正在调查这些攻击活动的范围和程度,以更好地了解威胁态势。

GhostContainer:后门

  • MD5: 01d98380dfb9211251c75c87ddb3c79c
  • SHA1: 2bb0a91c93034f671696da64a2cf6191a60a79c5
  • SHA256: 87a3aefb5cdf714882eb02051916371fbf04af2eb7a5ddeae4b6b441b2168e36
  • 链接时间: 1970-01-01 12:00 AM UTC
  • 文件类型: PE32可执行文件(EXE)(CLI)Intel 80386,用于MS Windows Mono/.Net程序集
  • 文件大小: 32.8 KB
  • 文件名: App_Web_Container_1.dll

该文件名称为App_Web_Container_1.dll。顾名思义,它充当一个“容器”。它包含三个关键类(Stub、App_Web_843e75cf5b63和App_Web_8c9b251fb5b3)和一个实用工具类(StrUtils)。一旦文件被Exchange服务加载,Stub类首先执行。它充当C2命令解析器,能够执行shellcode、下载文件、运行命令和加载额外的.NET字节码。最显著的功能之一是它创建了App_Web_843e75cf5b63的实例,该实例通过虚拟页面注入器充当Web代理类(App_Web_8c9b251fb5b3)的加载器。

Stub:C2解析器和调度器

在执行开始时,Stub类尝试绕过AMSI(反恶意软件扫描接口)和Windows事件日志。这是通过覆盖amsi.dll和ntdll.dll中的特定地址来实现的,从而规避AMSI扫描和Windows事件记录。

接下来,它从ASP.NET配置中检索机器密钥,特别是验证密钥,并将其转换为字节数组。用于生成验证密钥的代码直接复制自开源项目machinekeyfinder-aspx。验证密钥随后使用SHA-256进行哈希处理以确保其长度为32字节,生成的字节数组用于AES加密和解密(以保护攻击者和Exchange服务器之间传输的数据)。

恶意软件的主要功能是接收来自攻击者的请求并按以下方式解析:

  1. 从攻击者的请求数据中获取x-owa-urlpostdata的值,然后将其解码为Base64。
  2. 使用上述生成的AES密钥对解码后的数据进行AES解密。解码数据的前16字节用作初始化向量(IV)。
  3. 解压解密后的数据,并根据命令ID(第一个字节)调度操作。

为了执行命令,Stub检查当前用户是否为系统账户。如果不是,则尝试通过使用存储在应用程序域数据存储中的令牌来模拟用户。这允许应用程序以不同身份执行操作。

C2命令和功能

命令ID 描述
0 获取架构类型(例如x86或x64)
1 将接收到的数据作为shellcode运行
2 执行命令行
3 在子线程中加载.NET字节码
4 发送GET请求
5 下载并保存文件
6 将提供的原始数据保存到文件
7 删除文件
8 读取文件内容
9 执行.NET程序并输出结果
10 调用虚拟页面注入器(创建App_Web_843e75cf5b63类的实例)
11 迭代并删除定义文件夹及其子目录中包含App_Global的文件
14 并发执行多个URL的HTTP POST请求

每次命令执行时,都会生成一个XML格式的响应,包含执行结果或返回值。XML中的value元素以硬编码字符串/wEPDwUKLTcyODc4开头,该字符串在另一个开源项目ExchangeCmdPy.py中用于利用Exchange漏洞CVE-2020-0688。

1
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTcyODc4[BASE64_ENCODED_RESULT]" />

通过进一步比较GhostContainer与开源项目ExchangeCmdPy.py的代码,我们观察到它们的入口函数结构和关键字字符串高度相似。这使我们推测Stub类的代码是基于该开源项目开发的。我们怀疑Exchange攻击中利用的漏洞可能与CVE-2020-0688相关。

App_Web_843e75cf5b63:虚拟页面注入器

该类基于另一个开源项目PageLoad_ghostfile.aspx,旨在使用VirtualProvider等类创建幽灵页面。它包含几个继承自多个系统类的类,这些类负责创建虚拟ASPX页面并重写其某些方法。它将使用提供的两个参数(fakePageName和fakePath)创建虚拟页面。此方法的目的是运行.NET反射加载器(假页面——参见附录II)并绕过文件检查。加载器作为Base64编码的.aspx源代码硬编码到程序中。

此假页面用于在当前域中定位Web代理类App_Web_8c9b251fb5b3并执行其静态方法AppWebInit。一旦创建,攻击者开始向其发送请求,这些请求随后由App_Web_8c9b251fb5b3接收和解析。

App_Web_8c9b251fb5b3:Web代理

App_Web_8c9b251fb5b3是GhostContainer样本中的一个核心组件,通常通过假页面(App_Web_843e75cf5b63)间接加载。该类包括Web代理、Socket转发和隐蔽通信功能,是结合Web代理和隧道模块的典型示例。

当创建此类的实例时,静态值utcDate初始化为当前日期和时间。为了识别当前版本的类,假页面选择并调用具有最大utcDate值的类。

此类中只有两个函数。AppWebInit()函数作为模块的实际入口点,通过假.aspx页面中的反射动态调用。在函数StrTr中,它在解码Base64编码字符串之前实现自定义字符串转换机制。

再次,我们将此算法链接到开源项目Neo-reGeorg。函数名称StrTr及其代码完全相同。通过比较代码,可以清楚地看出该类是Neo-reGeorg的高度定制版本。

模块的主要行为集中在解析攻击者发送到假网页的请求。接收请求时,它首先检查标头。其进一步行为可能因识别的标头而异:

  • Qprtfva标头:标识代理转发请求。
  • Dzvvlnwkccf标头:标识Socket通信请求。
  • 其他情况:恶意软件将响应字符串<!-- 5lxBk9Zh7MDCyVAaxD8 -->

如果标头是Qprtfva,恶意软件通过完成以下步骤建立Web代理:

  1. 解码Base64编码字符串以获取目标URL。
  2. 克隆原始请求内容(除Qprtfva外的标头和正文)。
  3. 将请求转发到解码的目标地址。
  4. 将目标响应内容作为本地响应返回。

如果标头是Dzvvlnwkccf,恶意软件在互联网和内部网络之间建立或管理长寿命的TCP隧道连接。为了同时识别和维护不同的Socket对象,它为每个Socket对象定义一个名称,然后将该名称与Socket对象成对保存在全局存储中。Socket的名称包含在标头Dzvvlnwkccf值的前22字节中。确切的活动包含在请求的命令部分,从第23字节开始。模块接受以下Socket通信命令。

命令 描述
1iGBIM1C5PmawX_1McmR7StamYn23jpfQoENPlm19cH42kceYkm8ch4x2 从加密标头提取IP和端口,尝试连接并保存Socket。
vfhafFQZ4moDAvJjEjplaeySyMA 关闭Socket并从全局存储中移除。
M4LubGO0xaktF_YgZpsiH3v1cJ4dloAPOZKdG8AK4UxM 将HTTP请求正文内容转换为Socket数据并发送到内部主机。
NYIJVBf2PXRn7_BWxFyuheu1O0TuE9B0FtF0O 从内部网络接收数据,编码后作为HTTP响应正文返回给攻击者。

StrUtils:字符串和XML格式处理类

StrUtils看起来像是一个用于拆分和修剪字符串以及拆分、提取和取消转义XML元素的实用工具类。然而,目前只有少数函数被其他三个类引用,即负责以下功能的函数:

  • 将接收到的数据拆分为多个部分
  • 修剪文件路径的关闭字符

我们在任何类中都没有找到对XML取消转义函数的引用。

基础设施

GhostContainer后门不建立与任何C2基础设施的连接。相反,攻击者从外部连接到受感染的服务器,其控制命令隐藏在正常的Exchange Web请求中。因此,我们尚未识别出任何相关的IP地址或域名。

受害者

到目前为止,我们已经确定了此活动的两个目标:一个关键政府机构和一个高科技公司。两个组织均位于亚洲地区。

归因

此APT攻击中使用的样本与任何已知恶意软件没有结构相似性。它合并了多个开源项目的代码,这些项目公开可访问,可能被全球黑客或APT组织利用。因此,基于代码相似性的归因不可靠。根据我们的遥测数据,该攻击无法与其他攻击活动关联,因为攻击者未暴露任何基础设施。

结论

基于所有进行的分析,显然攻击者非常擅长利用Exchange系统并利用各种与渗透IIS和Exchange系统相关的开源项目。他们对Exchange Web服务的运作方式有深入的理解,并在组装和扩展公开可用代码以创建和增强复杂间谍工具方面表现出卓越的专业知识。我们认为这是一个成熟且高度专业的团队。我们继续跟踪他们的活动。

入侵指标(IoC)

  • 01d98380dfb9211251c75c87ddb3c79c - App_Web_Container_1.dll
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计