主要发现
- DOORME 是一种恶意 IIS 模块,它提供对受控网络的远程访问。
- SIESTAGRAPH 与 Microsoft 的 GraphAPI 交互,以使用 Outlook 和 OneDrive 进行命令和控制。
- SHADOWPAD 是一种后门程序,已在多个归因于具有非货币动机的区域威胁组织的活动中使用。
- REF2924 分析更新,其中包含第三方和以前未公开的事件,将 REF2924 对手与 Winnti Group 和 ChamelGang 联系起来,并提供技术、战术和受害者目标信息。
序言
这项研究重点介绍了两个名为“DOORME”和“SIESTAGRAPH”的后门程序以及一个名为“SHADOWPAD”的后门程序的功能和观察结果,Elastic 在 2022 年 12 月披露了该后门程序。DOORME 是一个 IIS(Internet Information Services)后门模块,它部署在运行 IIS 软件的 Web 服务器上。SIESTAGRAPH 是一个 .NET 后门程序,它利用 Microsoft Graph 接口,这是一组用于访问各种 Microsoft 服务的 API。SHADOWPAD 是一种正在积极开发和维护的模块化远程访问工具包。
DOORME、SIESTAGRAPH 和 SHADOWPAD 各自实现了不同的功能,这些功能可用于获得和维持对环境的未授权访问。这些功能的具体细节将在本研究出版物中进一步详细描述。需要注意的是,这些后门程序可用于窃取敏感信息、破坏运营以及在受害者环境中获得持久存在。
此外,我们将讨论 REF2924 与同一威胁组织、入侵组或两者进行的另外三起入侵之间的关系。这些关联是使用第一方观察结果和第三方报告进行的。这些关联使我们有中等程度的信心声明,SIESTAGRAPH、DOORME、SHADOWPAD 以及 REF2924 的其他元素都归因于具有非货币动机的区域威胁组织。
有关 REF2924 入侵组的更多信息有关此入侵组的更多信息,包括我们的初始披露以及有关针对东盟成员国外交部的活动的信息,请查看我们之前对 REF2924 的研究。
DOORME 代码分析
后门 IIS 模块简介
IIS 由 Microsoft 开发,是一个可扩展的 Web 服务器软件套件,充当在 Windows 环境中托管网站和服务器端应用程序的平台。在 7.0 版本中,Microsoft 为 IIS 配备了模块化架构,允许动态包含或排除模块以满足各种功能要求。这些模块对应于服务器可以利用来处理传入请求的特定功能。
例如,一个后门模块覆盖 OnGlobalPreBeginRequest 事件,可用于执行各种恶意活动,例如捕获提交给网页的敏感用户信息、将恶意代码注入到提供给访问者的内容中,或者为攻击者提供对 Web 服务器的远程访问。恶意模块可能会在请求传递到服务器之前拦截并修改请求,添加包含恶意代码的 HTTP 标头或查询字符串参数。当服务器处理修改后的请求时,可能会执行恶意代码,从而允许攻击者获得未经授权的访问权限或控制服务器及其资源。
IIS 后门的危险之处在于,它们可能是隐蔽的,组织可能不知道它们已遭到入侵。许多公司没有资源或专业知识来定期监控和测试其 IIS 模块的漏洞和恶意代码,这使得检测和修复后门变得困难。为了减轻这些风险,组织应维护所有 IIS 模块的综合清单,并实施网络和端点保护解决方案,以帮助检测和响应恶意活动。Elastic 安全实验室发现,这种持久性机制与防御规避相结合的使用有所增加,这可能会对那些在本地服务器上运行 IIS 的组织造成不成比例的影响。
DOORME IIS 模块简介
DOORME 是一个本机后门模块,它被加载到受害者的 IIS 基础设施中,用于提供对目标基础设施的远程访问。我们首次讨论了我们在 2022 年 12 月观察到的针对东盟成员国外交部的 DOORME 样本。
DOORME 使用 RegisterModule 函数,该函数是恶意 C++ DLL 模块的导出,负责加载模块并设置事件处理程序方法。它还会动态解析稍后将使用的 API 库。后门的主要功能在 CGlobalModule 类及其事件处理程序 OnGlobalPreBeginRequest 中实现。此事件处理程序被 DOORME 覆盖,允许它在 Web 请求进入 IIS 管道之前加载。后门的核心功能(包括 cookie 验证、解析命令和调用底层命令函数)都位于此事件处理程序中。DOORME 使用多种混淆方法、身份验证机制、AES 加密实现以及一系列专门构建的命令。
此图说明了攻击者尝试连接到后门 IIS 服务器与合法用户只是尝试访问网页之间的对比。
混淆
字符串混淆
DOORME 使用 XOR 加密字符串以逃避检测。然后,这些加密的字符串存储在内存堆栈上。由于原始纯文本被隐藏,这种字符串混淆使安全软件或研究人员更难以理解字符串的目的或含义。恶意软件使用每个加密 Blob 的第一个字节来 XOR 解密字符串。
反汇编技术
该恶意软件采用了一种技术,可能会导致反汇编程序错误地拆分代码中的函数,从而导致生成不正确的汇编图。这项技术会使分析人员更难以理解恶意软件的行为并创建有效的防御措施。
控制流混淆
该恶意软件还采用了一种名为控制流混淆 (CFO) 的技术来使对其行为的分析复杂化。CFO 是一种故意操纵代码中的指令流的技术,目的是让安全软件和研究人员更难以理解恶意软件的功能。
该恶意软件使用 CFO 来使分析过程复杂化,但值得注意的是,这种技术并非应用于整个代码库。从分析的角度来看,这告诉我们这些字符串对于恶意软件作者来说尤其重要,可能是为了阻挠特定的安全工具。以下示例演示了恶意软件如何在堆栈字符串 XOR 解密的环境中使用 CFO 来隐藏其功能。
动态导入表解析混淆
动态导入表解析是恶意软件使用的一种技术,目的是逃避安全软件的检测。它涉及在运行时解析恶意软件需要运行的 Windows API 的名称,而不是在恶意软件的导入表中硬编码这些 API 的地址。
DOORME 首先解析 LoadLibraryA 和 GetProcAddress Windows API 的地址,方法是解析 kernel32.dll 模块的导出表,然后使用 GetProcAddress 函数,通过指定 API 的名称和包含该 API 的 DLL 模块的名称来定位模块内的所需 API。
执行流程
身份验证
恶意的 IIS 模块后门通过查找传入的 HTTP 请求的特定 Cookie 中的字符串 “ 79cfdd0e92b120faadd7eb253eb800d0”(一个不雅字符串的 MD5 哈希值)来运行,如果找到,它将解析请求的其余部分。
GET 请求处理
GET 请求用于执行状态检查:恶意软件返回字符串 “ It works!”,后跟受感染机器的 username 和 hostname。 这可以作为恶意软件确认其在受感染机器上存在的一种手段。
POST 请求处理
后门操作员通过 HTTP POST 请求将命令作为双重加密的数据发送给恶意软件。命令是经过 AES 加密,然后进行 Base64 编码的,DOORME 后门会对其进行解密。
Base64 实现
恶意软件对 Base64 的实现使用了与默认 Base64 编码 RFC 不同的索引表。恶意软件使用的特定索引表是 "VZkW6UKaPY8JR0bnMmzI4ugtCxsX2ejiE5q/9OH3vhfw1D+lQopdABTLrcNFGSy7",而 Base64 算法使用的标准索引表是 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"。这种偏离标准索引表的行为使得解码编码数据更加困难,并突出了 DOORME 恶意软件作者为阻挠分析而采用的其他自定义混淆技术。
AES 算法实现
恶意软件使用 CBC (Cipher Block Chaining) 模式的 AES(高级加密标准) 来加密和解密数据。它使用身份验证哈希值 " 79cfdd0e92b120faadd7eb253eb800d0" 的前 16 个字节的 MD5 哈希值作为 AES 密钥。该算法的初始化向量 (IV) 是 AES 密钥的 MD5 哈希值。
在我们的例子中,AES 密钥是 “ 5a430ab45c7e142c70018b99fe0d2da3”,AES IV 是 “ 57ce15b304a97772”。
命令处理表
后门能够执行四种不同的命令,每种命令都有自己的一组参数。为了指定要运行的命令并传递必要的参数,后门的操作员使用特定的语法。命令 ID 及其参数用“管道”符号 ( | ) 分隔。
命令 ID 0x42
实现的第一个命令的 ID 为 0x42,并通过调用 API CoCreateGuid 生成一个全局唯一标识符 (GUID)。用于识别受感染的机器,这有助于跟踪受感染的机器,并允许攻击者专注于特定的高价值环境。
命令 ID 0x43
另一个命令,ID 0x43,尤其值得注意,因为它允许攻击者在同一进程的内存中执行 shellcode。此功能是通过利用 Windows 原生函数 NtAllocateVirtualMemory 和 NtCreateThreadEx 实现的。
NtAllocateVirtualMemory 函数用于在同一进程中为 shellcode 分配内存,而 NtCreateThreadEx 函数则在刚刚分配的内存中创建带有 shellcode 的执行线程。
命令 ID 0x63
命令 ID 0x63 允许攻击者以块的形式发送一个 shellcode blob,恶意软件会将其重新组合以执行。它的工作原理是发送此命令 ID 并将 shellcode 块作为参数。当服务器传达的 shellcode 大小与预期不同时,植入程序可以检测到 shellcode 已完全接收。这种方法允许恶意软件处理具有最小验证的大型 shellcode 对象。
命令 ID 0x44
命令 ID 0x44 提供了一种与在受感染系统上执行的 shellcode 交互的方式。攻击者可以向 shellcode 发送输入,并通过命名管道检索其输出。这允许攻击者控制 shellcode 的执行并接收反馈,这可能有助于捕获通过 DOORME 植入部署在环境中的工具的输出。
DOORME 总结
总而言之,DOORME 提供了一种危险的功能,允许攻击者通过面向 Internet 的 IIS Web 服务器获得对受害者内部网络的未授权访问权限。它包含多种用于逃避检测的混淆技术,以及执行其他恶意软件和工具的能力。恶意软件作者越来越多地利用 IIS 作为隐藏在系统深处的隐蔽后门。为了防范这些威胁,必须持续监控 IIS 服务器的任何可疑活动、IIS 工作进程 ( w3wp.exe ) 生成的进程以及新可执行文件的创建。
SIESTAGRAPH 代码分析
SIESTAGRAPH 植入程序简介
该植入程序利用 Microsoft Graph API 来访问 Microsoft 365 邮件和 OneDrive 以进行其 C2 通信。它使用预定的租户标识符和刷新令牌来获取访问令牌。该植入程序使用合法的 OneDriveAPI 库,该库简化了与 Microsoft API 交互的过程,并允许有效管理访问和刷新令牌。该植入程序在多个位置利用睡眠计时器作为防御规避技术。这导致了植入程序的名称:SIESTAGRAPH。
执行流程
SIESTAGRAPH 启动并进入其主函数,该函数将设置所需的参数以访问 Microsoft GraphAPI,方法是根据硬编码的刷新令牌请求访问令牌。
![SIESTAGRAPH 的初始设置](/assets/images/update-to-the-REF2924-intrusion-set-and-related-campaigns/image26.jpg
在设置阶段,恶意软件使用 Microsoft Office GUID ( d3590ed6-52b3-4102-aeff-aad2292ab01c )。这对于提供对 Microsoft 365 邮件和 OneDrive 的访问权限是必需的。
身份验证
SIESTAGRAPH 作者利用预定的租户标识符和刷新令牌来获取访问令牌。这两个要素对于请求访问令牌都至关重要。请务必注意,访问令牌的有效期有限,但是,可以根据需要利用刷新令牌来请求新的访问令牌。
为了方便此过程,攻击者利用了一个名为 OneDriveAPI 的第三方合法库。该库简化了与 Microsoft API 交互的过程,并允许有效管理访问和刷新令牌。应该指出的是,尽管 OneDriveAPI 等第三方库可以提供与 API 交互的便捷方式,但不应将其视为恶意的。
恶意软件利用 GetAccessTokenFromRefreshToken 方法请求身份验证令牌。然后,此令牌用于所有后续 API 请求。
刷新令牌的 有效期为 90 天。因此,虽然访问令牌正被 Graph API 用于 C2,但在有效期内没有使用需要生成新访问令牌的刷新令牌。刷新令牌是在 2022-11-01T03:03:44.3138133Z 生成的,并于 2023-01-30T03:03:44.3138133Z 过期。这意味着在生成新的访问令牌之前需要一个新的刷新令牌。由于刷新令牌已硬编码到恶意软件中,因此如果 SIESTAGRAPH 打算在未来使用,我们可以预期它会使用新的刷新令牌进行更新。
命令和控制
会话令牌 ( sessionToken ) 是通过连接进程 ID、机器名称、用户名和操作系统创建的。会话令牌稍后用于检索旨在用于此特定植入程序的命令。
在获取身份验证和会话令牌后,恶意软件会收集系统信息并使用名为 sendSession 的方法将其外泄。
检查 sendSession 方法,我们看到它会创建一封电子邮件并将其保存为草稿。使用草稿邮件是常见的 C2 技术,是一种避免电子邮件拦截和检查的方法。
在将会话信息发送给攻击者后,该植入程序会进入一个循环,在循环中它会检查是否有新命令。默认情况下,此信标间隔为每 5 秒,但是,攻击者可以随时调整此间隔。
当接收到命令时,该植入程序将使用 getMessages 方法来检查是否有任何包含攻击者命令的草稿电子邮件。
每次调用联系 Graph API 时,SIESTAGRAPH 都会接收当前的身份验证令牌 ( authToken )。然后,此令牌在 HTTP 请求标头中使用,遵循 Authorization: Bearer ( “Authorization”, “Bearer “ + authToken )。
每次调用此方法都会包含 sessionToken 、命令和命令参数,这些参数用冒号 ( : ) 分隔 ( <sessionToken>:<Command>:<command arguments>
)。
如果命令有多个参数,它们将用管道 ( | ) 分隔。例如, rename 命令的源名称和目标名称是用管道分隔的。
我们已经确定了以下命令
命令文本 | 描述 |
---|---|
C | 运行命令 |
N | 更新二进制文件在两次签入之间休眠的时间量 |
D | 将文件上传到 OneDrive |
U | 从 OneDrive 下载项目 |
UU | 检查是否存在 Core.bin,然后从 OneDrive 下载项目 |
ListDrives | 发送逻辑驱动器的列表 |
GetDirectories | 发送给定子目录的列表 |
GetFiles | 发送给定目录中文件的列表 |
Del | 删除给定的文件 |
Rename | 重命名给定的文件或目录 |
P | 获取正在运行的进程列表 |
E | 结束二进制文件的执行 |
K | 杀死给定的进程 ID |
S | 更新二进制文件在两次签入之间休眠的时间量(与 N 相同) |
NET | 获取网络信息 |
SS | 截取屏幕截图 |
一些命令是不言自明的(ListDrives,Rename 等),但是运行命令、更新休眠计时器、上传和下载文件以及截取屏幕截图更有趣,可以更好地了解 SIESTAGRAPH 的功能。
C - 运行命令
当收到 C 命令时,恶意软件将运行 runCommand 方法。此方法接收 cmd.exe 的名称、要运行的命令行以及等待新进程退出的毫秒数。
如果命令参数不为空或空,则该方法将继续创建 System.Diagnostics.Process 类的新实例,该实例用于启动和与新进程交互。它设置进程实例的 StartInfo 属性的属性,该属性属于 ProcessStartInfo 类,例如 FileName 属性设置为传递给该方法的 cmd 参数的 cmd,Arguments 属性设置为 /c 与命令参数连接,并且还设置了 UseShellExecute,RedirectStandardInput,RedirectStandardOutput,RedirectStandardError 和 CreateNoWindow 属性。由于此方法仅使用 cmd 参数的硬编码值 cmd 调用,因此生成的命令将始终为 cmd /c <要运行的命令>
。如果没有直接访问交互式 shell,这是一种运行命令的常见方法。
![runCommand 方法](/assets/images/update-to-the-REF2924-intrusion-set-and-related-campaigns/image26.jpg
N - 休眠计时器更新
休眠命令是单个指令。如果该命令的参数大于 1000,则 SleepTimer 变量的值将被更新。此变量稍后用于确定进程在两次签入之间休眠的时间长度。
D - 上传到 OneDrive
D 命令是从攻击者的角度发出的,因此当他们从 OneDrive“下载”时,主机正在“上传”到 OneDrive
该方法接收 filePath 以及身份验证和会话令牌。然后,它会将请求的文件上传到 OneDrive。如果文件成功上传,则使用格式 OK|C:\foo\file.txt 向攻击者发送响应消息。
如果上传不成功,攻击者将收到错误消息 OK|<错误消息>
。
虽然此方法可能看起来很简单,但它通过使用通用库来避免检测,同时实现从受害者提取数据的目标。虽然未得到证实,但这可能是威胁行动者如何收集 导出的 Exchange 邮箱的方式。
U - 从 OneDrive 下载
下载函数类似于上传函数。同样,从攻击者的角度来看,U 命令表示上传。因为文件是由植入程序从 OneDrive 下载的,但由攻击者上传的。
NET - 收集网络信息
NET 命令将收集网络信息并将其发送回攻击者。为了收集信息,二进制文件首先从 DLL、Ws2_32.dll (Windows 套接字 API) 和 iphlpapi.dll (Windows IP 帮助程序 API) 中解析两个函数。
NET 命令从系统的 TCP 表中收集有关打开的 TCP 连接的信息。然后,它循环遍历所有打开的连接,并将信息存储在发送回攻击者的数组中。此代码有助于攻击者更好地了解系统中在网络中的用途。例如,如果端口 587、993 和 995 有打开的连接,则该主机可能是 Microsoft Exchange 服务器。
SS - 截取屏幕截图
为了查看受害者的桌面,SIESTAGRAPH 可以调用名为 TakeScreenShot 的方法,该方法会截取主监视器的屏幕截图,并将屏幕截图作为 Base64 编码的字符串返回。
此函数创建一个新的 Bitmap 对象,其宽度和高度与主屏幕的边界相同。然后,它从 Bitmap 对象创建一个新的 Graphics 对象,并使用 CopyFromScreen 函数截取屏幕截图并将其复制到 Graphics 对象。
然后,它创建一个新的 MemoryStream 对象,并使用 Bitmap 对象的 Save 方法将屏幕截图作为 PNG 图像保存到内存流中。然后,使用 Convert.ToBase64String 方法将内存流中的图像转换为 Base64 编码的字符串。然后,通过将其保存为电子邮件草稿将生成的 Base64 字符串发送回攻击者。
SIESTAGRAPH 总结
SIESTAGRAPH 是一个专门构建且功能齐全的植入程序,充当威胁行动者的代理。SIESTAGRAPH 不仅仅是一个通用的植入程序,它使用合法和常见的但由对手控制的基础设施来在受感染的主机上提供远程功能。
SHADOWPAD 加载器代码分析
log.dll 简介
当 Elastic Security Labs 在 2022 年 12 月 披露 REF2924 时,我们观察到一个未知的 DLL。此后,我们收集并分析了 DLL,得出结论它是 SHADOWPAD 恶意软件家族的加载程序。
在两个域控制器上观察到 DLL,log.dll,并且它是由 11 年前的 Bitdefender 崩溃处理程序(编译名称:BDReinit.exe)侧加载的,在我们的示例中,该处理程序名为 13802 AR.exe。执行后,SHADOWPAD 会将自身复制到 C:\ProgramData\OfficeDriver 作为 svchost.exe,然后在将其安装为服务。加载 log.dll 后,它将生成 Microsoft Windows Media Player (wmplayer.exe) 和 dllhost.exe,并将其注入其中,这会触发 Elastic Defend 的内存 shellcode 检测。
在运行时,log.dll 会查找 log.dll.dat 文件,其中包含要执行的 shellcode。然后,log.dll 将加密并将 shellcode 存储在注册表中,并粉碎原始的 log.dll.dat 文件。如果该文件不存在,它将跳过此部分。
然后,该示例将从注册表中加载 shellcode,RWX 映射它,并从内存中执行它。如果注册表项不存在,则该示例将崩溃。
执行流程
我们的 SHADOWPAD DLL 版本希望由 11 年前且易受攻击的 BitDefender BDReinit.exe 二进制文件侧加载。在易受攻击的应用程序中,跳转指令的跳转地址是硬编码的,这意味着该示例是为这个确切版本的 BitDefender 二进制文件量身定制的 (386eb7aa33c76ce671d6685f79512597f1fab28ea46c8ec7d89e58340081e2bd)。Positive Technologies 此前 报告 了这种侧加载行为。
为了进行分析,我们修补了 log.dll,使其可以在没有 BitDefender 侧加载要求的情况下执行。
功能
混淆
log.dll 使用两个诱饵函数来绕过自动分析。
我们将诱饵函数定义为良性的,与恶意软件功能无关,而是旨在逃避防御、混淆恶意软件的真实功能并阻碍分析。它们可能会通过在耗尽沙箱的分析间隔的同时展示良性行为来欺骗时间受限的沙箱分析。
log.dll 采用代码分散混淆技术来阻止静态分析,但是,这并不能保护二进制文件免受动态分析。
该技术涉及将代码碎片化为 gadget 并将这些 gadget 分布在整个二进制文件中。每个 gadget 都实现为一个指令,后跟对“解析器”函数的调用。
每个调用的解析器函数解析下一个 gadget 的地址并传递执行。
混淆模式很简单,可以使用跟踪来恢复原始指令
**result = []
for i, x in enumerate(trace):
if "ret" in x:
result.append(trace[i + 1])**
API 加载
该示例使用常见的 Ldr 爬取技术 来查找 kernel32.dll 的地址。
接下来,log.dll 解析 kernel32.dll 的导出以获取 LoadLibraryA 和 GetProcAddress 函数的地址。它根据需要使用 GetProcAddress 解析导入。
持久性
该示例期望使用 FindFirstFile 和 FindNextFile API 在其根目录中找到名为 log.dll.dat 的文件。找到 log.dll.dat 后,会将其加载、加密并存储在注册表的 HKEY\_LOCAL\_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\\{1845df8d-241a-a0e4-02ea341a79878897\}\D752E7A8\}
注册表值下。
此注册表值似乎是硬编码的。如果找不到该文件并且硬编码的注册表项不存在,则应用程序会崩溃。
一旦 log.dll.dat 的内容被加密并嵌入到注册表中,原始文件将被删除。在后续运行中,shellcode 将直接从注册表项中加载。
Shellcode
为了执行 shellcode,该示例将使用 VirtualAlloc Windows API 分配一个 RWX 保护的内存区域,然后将 shellcode 写入内存区域,并通过 ESI 指令调用将执行传递给它。
其他 SHADOWPAD 研究
在研究共享代码和技术时,Elastic Security Labs 发现 SecureWorks 的 CTU 发布了一篇描述 BitDefender 侧加载漏洞的文章。此外,SecureWorks 还分享了描述文件 log.dll.dat 功能的信息,这与我们的观察结果一致。Positive Technologies ETC 团队还发布了关于 SHADOWPAD 的 详细研究,这与我们的研究一致。
SHADOWPAD 总结
SHADOWPAD 是一个恶意软件家族,SecureWorks CTU 已将其与 BRONZE UNIVERSITY 威胁组织关联,Positive Technologies ETC 已将其与 Winnti 组织关联。
活动和对手建模
我们对 Elastic 遥测数据的分析,结合公开来源并与第三方报告进行比较后得出结论,很可能是一个与国家相关的威胁组织应对此负责。我们识别出涉及共享恶意软件、技术、受害者以及观察到的攻击者优先事项的关系。我们的置信度评估因来源和收集的保真度而异。
在研究 DOORME、SIESTAGRAPH 和 SHADOWPAD 植入程序时,我们发现 Positive Technologies ETC 和 SecureWorks CTU 的工作存在显著重叠,并认为这些是相关的活动集群。
在下面的分析中,我们将讨论我们与此入侵活动相关的四个活动,包括来源、交叉点,以及每个活动如何支持我们在所有活动中的归因。
- Winnti - Positive Technologies 报告,2021 年 1 月
- 未公开的 REF,Winnti - Elastic Security Labs 观察到,2022 年 3 月
- REF2924,ChamelGang,Winnti - Elastic Security Labs 报告,2022 年 12 月
- 未公开的 REF,ChamelGang - Elastic Security Labs 观察到,2022 年 12 月
Winnti
2021 年 1 月,Positive Technologies ETC 团队发布了一项研究,该研究与我们对 REF2924 的观察结果相重叠;特别是使用文件名 log.dll 和 log.dll.dat 部署的 SHADOWPAD 恶意软件,并使用我们观察到的同一 BitDefender 样本作为 DLL 注入工具。
尽管 Positive Technologies ETC 的研究涵盖了不同的活动集群,但攻击者部署了类似的 SHADOWPAD 变体,使用了类似的文件命名方法,并利用了类似的程序级功能;这些一致性促使我们得出结论,即 REF2924 是相关的。在上面的图形中,我们使用虚线来表示第三方共识和中等置信度,因为虽然报告看起来很详尽且合理,但我们无法独立验证所有发现。
未公开的 REF,Winnti
2022 年初,Elastic 观察到对阿富汗一家电信提供商的短暂入侵。通过代码分析和事件抽样,我们在内部将这些观测结果归因于 WINNTI 恶意软件植入,并且外部研究与 Winnti Group 的研究重叠。我们将继续跟踪此入侵活动,独立于并与 REF2924 的观测结果相关联。
REF2924,ChamelGang,Winnti
2022 年 12 月初,我们观察到用于从东南亚国家联盟 (ASEAN) 成员国的外交部互联网连接的 Microsoft Exchange 服务器收集和导出邮箱的 Powershell 命令。我们的研究发现存在 DOORME 后门、SHADOWPAD 和一种我们称为 SIESTAGRAPH 的新恶意软件植入(在上面的 SIESTAGRAPH 代码分析部分讨论)。
在研究 REF2924 事件时,我们认为它们与 Positive Technologies 对 ChamelGang 的研究中指出的细节一致,并且可能代表一个具有共同目标的团体的行动。
未公开的 REF,ChamelGang
使用我们在研究 REF2924 时收集的 DOORME IIS 后门,我们开发了一个扫描程序,该扫描程序识别出阿富汗第二家电信提供商的互联网连接的 Exchange 服务器上存在 DOORME。
活动关联
在事件之间建立关联,尤其是在依赖第三方报告时,是在从特定观察结果中提取价值和抑制循环报告中的噪音之间保持微妙的平衡。研究团队报告的包含原子指标、技术、程序和功能的详细信息为发现活动集群之间的关联提供了巨大的价值。通过循环报告多次重复的证据要素可能会导致该证据被过度加权。在分析这些活动集群时,我们有来自遥测数据的特定观察结果(主机工件、功能、功能和攻击者技术)以及与我们发现结果一致的第三方报告。
我们使用第三方报告作为支持性而非事实性证据,以增加对我们特定观察结果的背景信息。可能可以验证第三方是否亲眼目睹了威胁,但这是一种罕见的奢侈。我们在适当的情况下使用估算性语言来建立关联。
为了揭示这些活动之间的潜在关联,我们更重视主机工件、工具和 TTP,而不是诸如哈希值、IP 地址和域名之类的瞬时原子指标。
我们将在下一节讨论值得注意的(非详尽的)重叠。
活动 1 和 3
活动 1 (Winnti) 和 3 (REF2924,ChamelGang,Winnti) 通过以下几个要素相关联:SHADOWPAD 恶意软件系列的使用、特定文件名(log.dll 和 log.dll.dat)以及使用同一 BitDefender 哈希的注入技术。
活动 3 和 4
活动 3 (REF2924,ChamelGang,Winnti) 和 4 (未公开的 REF,ChamelGang) 通过一个特别配置的 DOORME 后门以及攻击者的共同国家战略利益相关联。
使用针对大约 18 万个公开可访问的 Exchange 服务器的网络扫描结果,以及在对 REF2924 的 DOORME 样本进行逆向工程时发现的特定身份验证元素,我们能够在阿富汗的第二家电信提供商处识别出相同的 DOORME 配置。这是一个与活动 2(未公开的 REF,Winnti)不同的受害者。
虽然 DOORME IIS 后门并非广泛流行,但仅在您的环境中拥有 DOORME 并不能提供足够强有力的数据点来建立关联。与 18 万个其他 Exchange 服务器的搜索以及国家战略利益的中等置信度相比,此 DOORME 配置的存在使我们能够以高置信度将活动 3 和 4 联系在一起,并且活动 4 也是同一威胁组织的一部分。
总结
DOORME 允许威胁行为者通过在互联网连接的服务器上使用后门 IIS 模块来访问目标网络。DOORME 包括收集有关受感染主机的信息、上传 shellcode 代码块以逃避检测以及在内存中执行 shellcode 代码的功能。
SIESTAGRAPH 是 Elastic Security Labs 发现的一种植入程序,它使用 Microsoft Graph API 进行命令和控制。Graph API 用于与 Microsoft Office 365 进行交互,因此 C2 通信将在很大程度上被合法的网络流量所掩盖。Elastic Security Labs 已向 Microsoft 报告了硬编码到 SIESTAGRAPH 中的租户 ID。
根据我们的代码分析以及 DOORME 和 SIESTAGRAPH 有限的互联网存在,我们认为此入侵活动集由有限分发或单一威胁行为者使用。
SHADOWPAD 是一个模块化的恶意软件系列,用作将 shellcode 加载和执行到受害者系统的方法。虽然自 2017 年以来一直在跟踪它,但 SHADOWPAD 仍然是一个功能强大且流行的远程访问和持久性工具。
REF2924 入侵活动集,使用 SIESTAGRAPH、DOORME、SHADOWPAD 和系统二进制代理执行技术(以及其他技术)代表了一个攻击组织,该组织似乎专注于其优先级,当在各个活动中观察时,这些优先级与赞助的国家战略利益相符。
检测
狩猎查询
狩猎查询用作潜在恶意事件的起点,但由于每个环境都不同,因此应完成调查。
以下 KQL 查询可用于搜寻与 SIESTAGRAPH 相关的其他行为。此查询查找正在向 graph.microsoft.com 发出 DNS 查询的进程,其中该进程没有受信任的代码签名证书,或者该进程不是由 Microsoft 签名的。
dns.question.name : "graph.microsoft.com" and (process.code_signature.trusted : “false” or not (process.code_signature.subject_name : "Microsoft Windows" or process.code_signature.subject_name : "Microsoft Windows Publisher" or process.code_signature.subject_name : "Microsoft Corporation")) and process.name : *
签名
YARA 规则
DOORME IIS 模块
rule Windows_Trojan_DoorMe {
meta:
author = "Elastic Security"
creation_date = "2022-12-09"
last_modified = "2022-12-15"
os = "Windows"
arch = "x86"
category_type = "Trojan"
family = "DoorMe"
threat_name = "Windows.Trojan.DoorMe"
license = "Elastic License v2"
strings:
$seq_aes_crypto = { 8B 6C 24 ?? C1 E5 ?? 8B 5C 24 ?? 8D 34 9D ?? ?? ?? ?? 0F B6 04 31 32 44 24 ?? 88 04 29 8D 04 9D ?? ?? ?? ?? 0F B6 04 01 32 44 24 ?? 88 44 29 ?? 8D 04 9D ?? ?? ?? ?? 0F B6 04 01 44 30 F8 88 44 29 ?? 8D 04 9D ?? ?? ?? ?? 0F B6 04 01 44 30 E0 88 44 29 ?? 8B 74 24 ?? }
$seq_copy_str = { 48 8B 44 24 ?? 48 89 58 ?? 48 89 F1 4C 89 F2 49 89 D8 E8 ?? ?? ?? ?? C6 04 1E ?? }
$seq_md5 = { 89 F8 44 21 C8 44 89 C9 F7 D1 21 F1 44 01 C0 01 C8 44 8B AC 24 ?? ?? ?? ?? 8B 9C 24 ?? ?? ?? ?? 48 89 B4 24 ?? ?? ?? ?? 44 89 44 24 ?? 46 8D 04 28 41 81 C0 ?? ?? ?? ?? 4C 89 AC 24 ?? ?? ?? ?? 41 C1 C0 ?? 45 01 C8 44 89 C1 44 21 C9 44 89 C2 F7 D2 21 FA 48 89 BC 24 ?? ?? ?? ?? 8D 2C 1E 49 89 DC 01 D5 01 E9 81 C1 ?? ?? ?? ?? C1 C1 ?? 44 01 C1 89 CA 44 21 C2 89 CD F7 D5 44 21 CD 8B 84 24 ?? ?? ?? ?? 48 89 44 24 ?? 8D 1C 07 01 EB 01 DA 81 C2 ?? ?? ?? ?? C1 C2 ?? }
$seq_calc_key = { 31 FF 48 8D 1D ?? ?? ?? ?? 48 83 FF ?? 4C 89 F8 77 ?? 41 0F B6 34 3E 48 89 F1 48 C1 E9 ?? 44 0F B6 04 19 BA ?? ?? ?? ?? 48 89 C1 E8 ?? ?? ?? ?? 83 E6 ?? 44 0F B6 04 1E BA ?? ?? ?? ?? 48 8B 4D ?? E8 ?? ?? ?? ?? 48 83 C7 ?? }
$seq_base64 = { 8A 45 ?? 8A 4D ?? C0 E0 ?? 89 CA C0 EA ?? 80 E2 ?? 08 C2 88 55 ?? C0 E1 ?? 8A 45 ?? C0 E8 ?? 24 ?? 08 C8 88 45 ?? 41 83 C4 ?? 31 F6 44 39 E6 7D ?? 66 90 }
$str_0 = ".?AVDoorme@@" ascii fullword
condition:
3 of ($seq*) or 1 of ($str*)
}
SIESTAGRAPH 植入程序
rule Windows_Trojan_SiestaGraph {
meta:
author = "Elastic Security"
creation_date = "2022-12-14"
last_modified = "2022-12-15"
os = "windows"
arch_context = "x86"
category_type = “Trojan”
family = “SiestaGraph”
threat_name = "Windows.Trojan.SiestaGraph"
license = "Elastic License v2"
strings:
$a1 = "downloadAsync" ascii nocase fullword
$a2 = "UploadxAsync" ascii nocase fullword
$a3 = "GetAllDriveRootChildren" ascii fullword
$a4 = "GetDriveRoot" ascii fullword
$a5 = "sendsession" wide fullword
$b1 = "ListDrives" wide fullword
$b2 = "Del OK" wide fullword
$b3 = "createEmailDraft" ascii fullword
$b4 = "delMail" ascii fullword
condition:
all of ($a*) and 2 of ($b*)
}
SHADOWPAD 恶意软件系列
rule Windows_Trojan_ShadowPad_1 {
meta:
author = "Elastic Security"
creation_date = "2023-01-23"
last_modified = "2023-01-31"
description = "Target SHADOWPAD obfuscation loader+payload"
os = "Windows"
arch = "x86"
category_type = "Trojan"
family = "ShadowPad"
threat_name = "Windows.Trojan.ShadowPad"
license = "Elastic License v2"
strings:
$a1 = { 87 0? 24 0F 8? }
$a2 = { 9C 0F 8? }
$a3 = { 03 0? 0F 8? }
$a4 = { 9D 0F 8? }
$a5 = { 87 0? 24 0F 8? }
condition:
all of them
}
rule Windows_Trojan_Shadowpad_2 {
meta:
author = "Elastic Security"
creation_date = "2023-01-31"
last_modified = "2023-01-31"
description = "Target SHADOWPAD loader"
os = "Windows"
arch = "x86"
category_type = "Trojan"
family = "Shadowpad"
threat_name = "Windows.Trojan.Shadowpad"
license = "Elastic License v2"
strings:
$a1 = "{%8.8x-%4.4x-%4.4x-%8.8x%8.8x}"
condition:
all of them
}
rule Windows_Trojan_Shadowpad_3 {
meta:
author = "Elastic Security"
creation_date = "2023-01-31"
last_modified = "2023-01-31"
description = "Target SHADOWPAD payload"
os = "Windows"
arch = "x86"
category_type = "Trojan"
family = "Shadowpad"
threat_name = "Windows.Trojan.Shadowpad"
license = "Elastic License v2"
strings:
$a1 = "hH#whH#w" fullword
$a2 = "Yuv~YuvsYuvhYuv]YuvRYuvGYuv1:tv<Yuvb#tv1Yuv-8tv&Yuv" fullword
$a3 = "pH#wpH#w" fullword
$a4 = "HH#wHH#wA" fullword
$a5 = "xH#wxH#w:$" fullword
$re1 = /(HTTPS|TCP|UDP):\/\/[^:]+:443/
condition:
4 of them
}
参考
- https://elastic.ac.cn/security-labs/siestagraph-new-implant-uncovered-in-asean-member-foreign-ministry
- https://www.microsoft.com/en-us/security/blog/2022/07/26/malicious-iis-extensions-quietly-open-persistent-backdoors-into-servers/
- https://malpedia.caad.fkie.fraunhofer.de/details/win.shadowpad
- https://www.ptsecurity.com/ww-en/analytics/pt-esc-threat-intelligence/higaisa-or-winnti-apt-41-backdoors-old-and-new/
- https://www.secureworks.com/research/shadowpad-malware-analysis
- https://www.secureworks.com/research/threat-profiles/bronze-university
- https://www.ptsecurity.com/upload/corporate/ww-en/pt-esc/winnti-2020-eng.pdf
- https://www.ptsecurity.com/ww-en/analytics/pt-esc-threat-intelligence/new-apt-group-chamelgang/
指标
工件可从先前发布的 REF2924 研究中获得。