2021 年,我们注意到几个攻击者在利用 Microsoft Exchange 服务器中的一个 ProxyLogon 类型漏洞后在 IIS 中部署后门的趋势。将 IIS 模块作为后门释放,使攻击者能够保持对目标组织的 IT 基础设施的持久、延缓更新和相对隐蔽的访问;无论是收集电子邮件、更新进一步的恶意访问,还是秘密管理可被用作恶意基础设施的受感染服务器。
2022 年初,研究人员发现了一个这样的 IIS 后门:SessionManager。 2022 年 4 月下旬,研究人员发现的大多数样本仍未在流行的在线文件扫描服务中标记为恶意,目前SessionManager 仍部署在 20 多个组织中。
至少从 2021 年 3 月开始,SessionManager 已被用于针对非洲、南美、亚洲、欧洲、俄罗斯和中东的非政府组织、政府、军事和工业组织。由于类似的受害者,以及使用常见的 OwlProxy 变体,研究人员认为恶意 IIS 模块可能已被 GELSEMIUM 攻击者利用,作为间谍活动的一部分。
SessionManager 是用 C++ 开发的,是一个恶意的原生代码 IIS 模块
SessionManager 是用 C++ 开发的,是一个恶意的原生代码 IIS 模块,其目的是被一些 IIS 应用程序加载,以处理不断发送到服务器的合法 HTTP 请求。
此类恶意模块通常期望来自其操作员的看似合法但经过专门设计的 HTTP 请求,根据操作员的隐藏指令(如果有)触发操作,然后将请求以明文形式传递给服务器,以便像任何其他请求一样对其进行处理。
因此,这些模块不容易被通常的监控实践发现:它们不一定向外部服务器发起可疑通信,通过 HTTP 请求接收命令到专门暴露于此类进程的服务器,并且它们的文件经常被放置在被忽视的包含许多其他合法文件的位置。
恶意 IIS 模块处理请求
SessionManager 提供以下功能,当结合使用时,可以使其成为一个轻量级的持久初始访问后门:
读取、写入和删除受感染服务器上的任意文件;
从受感染的服务器执行任意二进制文件,也称为“远程命令执行”;
建立与受感染服务器可以访问的任意网络终端的连接,以及在此类连接中进行读写。
研究人员已经确定了 SessionManager 模块的几个变体,所有变体都包括其开发环境(PDB 路径)的剩余部分以及与观察到的活动时间范围一致的编译日期。这表明了后门一直在不断更新:
V0:研究人员发现的最早的样本(MD5 5FFC31841EB3B77F41F0ACE61BECD8FD)的编译日期是2021年3月。样本包含一个开发路径(PDB路径):“C:\Users\GodLike\Desktop\t\t4\StripHeaders-master\x64 \Release\sessionmanagermodule.pdb”。这表明 SessionManager 开发人员可能已经使用 StripHeaders IIS 模块的公共源代码作为模板来首先设计 SessionManager。
V1:更高版本的示例(MD5 84B20E95D52F38BB4F6C998719660C35)的编译日期为 2021 年 4 月,PDB 路径设置为“C:\Users\GodLike\Desktop\t\t4\SessionManagerModule\x64\Release\sessionmanagermodule.pdb”。
V2:另一个示例(MD5 4EE3FB2ABA3B82171E6409E253BDDDB5)的编译日期为 2021 年 8 月,PDB 路径与之前的 V1 相同,只是项目文件夹名称为“SessionManagerV2Module”。
V3:最后,研究人员发现的最后一个样本 (MD5 2410D0D7C20597D9B65F237F9C4CE6C9) 日期为 2021 年 9 月,项目文件夹名称设置为“SessionManagerV3Module”。
SessionManager 命令和控制协议详细信息
SessionManager 通过在 IIS 响应 HTTP 请求之前检查 HTTP 数据,将自身挂接到 Web 服务器的 HTTP 通信处理中。在 HTTP 处理的这个特定步骤中,SessionManager 可以检查来自客户端(操作员)的 HTTP 请求的全部内容,并修改服务器发送给客户端的答案(包括后门活动的结果)。
加载时 Web 服务器中的 SessionManager 注册
命令使用特定的 HTTP cookie 名称从操作员传递到 SessionManager。后门对操作员的回答通常会插入服务器 HTTP 响应的正文中。如果在来自客户端的 HTTP 请求中没有找到预期的 cookie 名称和值格式,则后门将不执行任何操作,并继续处理,就好像恶意模块不存在一样。
由 SessionManager 检查的特定 HTTP cookie 名称在 V2 之前的变体中是“SM_SESSIONID”(不包括在内),在 V2 之后是“SM_SESSION”。格式化确切的命令名称和参数还取决于后门变体:
在 V2(不包括V2)之前,大部分命令和相关参数都作为所需的 SessionManager HTTP cookie 的值传递,例如对于文件读取命令:
远程执行和文件写入功能需要在 HTTP 请求正文中传递额外的命令数据。
在 V2(包括V2)之后,仅命令名称作为所需 SessionManager HTTP cookie 的值传递。命令参数使用附加 cookie 的名称和值传递,而某些命令仍然需要在 HTTP 正文中传递数据。例如,文件读取命令的 HTTP cookie 定义如下所示:
执行命令的结果在 HTTP 响应中作为正文数据返回。在 V2(不包括V2)之前,SessionManager 没有加密或混淆命令和控制数据。从 V2(包含V2)开始,额外的“SM_KEY”cookie 可以包含在操作员的 HTTP 请求中:如果是这样,它的值将用作 XOR 键来对 SessionManager 发送的结果进行编码。
SessionManager 最新变体的完整命令列表如下所示:
SessionManager 操作员的部署后活动
一旦部署完毕,操作员将利用 SessionManager 进一步分析目标环境、收集内存密码并部署其他工具。值得注意的是,在 2021 年 3 月至 2021 年 4 月期间,运营商使用 SessionManager 远程执行命令中的 Powershell WebClient 功能从服务器 IP 地址 202.182.123[.]185 下载,例如:
操作员尝试从 SessionManager 下载和执行的其他工具包括用于 Mimikatz DLL、Mimikatz SSP、ProcDump 的基于 PowerSploit 的反射加载器,以及来自 Avast 的合法内存转储工具 (MD5 36F2F67A21745438A1CC430F2951DFBC)。后者已被 SessionManager 操作员滥用以尝试读取 LSASS 进程的内存,这将启用受感染服务器上的身份验证秘密收集。运营商还尝试利用 Windows 内置的 Minidump 功能来做同样的事情。
为了避免被安全产品检测到(在我们的案例中显然失败了),SessionManager 操作员有时会通过 Windows 服务管理器命令行运行启动器脚本来尝试额外的恶意执行。从 2021 年 11 月开始,运营商试图利用自定义 PyInstaller 打包的 Python 脚本来混淆命令执行尝试。这种 Python 脚本源代码如下所示:
因此,通过该工具执行命令的次数如下:
在 2021 年 12 月的一个案例中,SessionManager 操作员试图执行一个我们很遗憾无法检索的附加工具。该工具设置为与 IP 地址 207.148.109[.]111 进行通信,这很可能是运营商基础设施的一部分。
SessionManager 目标
我们设法识别出被 SessionManager 变体入侵的 34 台服务器,它们属于阿根廷、亚美尼亚、中国、吉布提、赤道几内亚、斯威士兰、香港、印度尼西亚、肯尼亚、科威特、马来西亚、尼日利亚、巴基斯坦、波兰、俄罗斯联邦、沙特阿拉伯、泰国、土耳其、英国和越南。
通常,每个组织只能识别出一台受感染的服务器,每个位置只能识别出一个受感染的组织;但越南是例外,因为在那里可以识别出来自多个组织的几台受感染的服务器。在已确定的组织中,有20个组织直到2022年6月仍在运行一个被入侵的服务器。
此外,研究人员还设法确定2021年3月中旬在老挝的一个未与SessionManager攻击的相同活动的较早目标。
大多数受感染的服务器属于政府或军事组织,但也发现了国际和国家非政府组织、电子设备制造商、造船公司、医疗保健和手术集团、当地公路运输公司、国有石油公司,一家国家电力公司等。
总结
首先,研究人员发现了一个额外的恶意二进制文件(MD5 5F15B17FA0E88D40D4E426E53CF94549,编译日期设置为 2020 年 4 月),它与 SessionManager 样本共享一个公共 PDB 路径部分(“C:\Users\GodLike\Desktop\t\”)。此二进制文件是一个密码窃取程序,旨在在更改 Windows 用户密码时获取它们。它是从一个名为 Hook-PasswordChangeNotify 的中文文档的公共源代码编译而来的。不幸的是,研究人员无法检索到有关此二进制利用的任何其他详细信息,但它可能是由与 SessionManager 相同的开发人员开发的。
然后在 2021 年 3 月中旬,也就是研究人员第一次检测到 SessionManager 前不久,他们注意到攻击者利用 ProxyLogon 类型的漏洞针对老挝的 Exchange Server 部署 Web shell 并使用相同的 Mimikatz SSP 和 Avast 内存转储工具进行恶意活动。不仅工具样本相同,而且其中一个是从 SessionManager 操作员利用的登台服务器 (202.182.123[.]185) 下载的。因此,我们相信这些恶意活动是由 SessionManager 背后的同一攻击者进行的。
有趣的是,攻击者试图在老挝的受感染服务器上下载并执行两个名为 OwlProxy 的 HTTP 服务器类型后门样本。调查发现,至少有一个 OwlProxy 样本在 2021 年 3 月下旬从至少两台 SessionManager 受损的服务器上的 202.182.123[.]185 下载。检索到的样本的特定 OwlProxy 变体仅被记录为 GELSEMIUM 活动的一部分。我另外, SessionManager 目标与 GELSEMIUM 受害者部分重叠。因此, SessionManager 可能由 GELSEMIUM 操作,但不一定只有 GELSEMIUM。
IIS 恶意模块防御
自 2021 年 3 月以来,ProxyLogon 类型的漏洞已被广泛用于部署相对简单但非常有效的持久性服务器访问,例如 SessionManager 后门。
虽然有安全公司记录了一些 ProxyLogon 漏洞利用,但 SessionManager 一年来都没有被很好地检测到。面对大规模且史无前例的服务器端漏洞利用,大多数网络安全参与者都在忙于调查和应对首次发现的违规行为。因此,在数月或数年后仍有可能发现相关的恶意活动,而且这种情况可能会持续很长时间。
可以使用 IIS 管理器为正在运行的 IIS 实例列出加载的 IIS 模块GUI,或从 IIS appcmd 命令行。如果发现恶意模块,可以机芯以下操作:
在执行 IIS 的当前运行系统上拍摄易失性内存快照。如果需要,请向取证和事件响应专家寻求帮助。
停止 IIS 服务器,并在理想情况下断开底层系统与公共可访问网络的连接。
备份 IIS 环境中的所有文件和日志,以保留数据以进行进一步的事件响应。检查备份是否可以成功打开或提取。
使用 IIS 管理器或 appcmd 命令工具,从应用程序和服务器配置中删除已识别模块的每个引用。手动检查相关的 IIS XML 配置文件以确保已删除对恶意模块的任何引用,否则手动删除 XML 文件中的引用。
更新 IIS 服务器和底层操作系统,以确保没有已知漏洞仍然暴露给攻击者。
重新启动 IIS 服务器并使系统重新联机。
建议根据已准备好的内存快照和备份继续进行恶意模块分析和事件响应活动,以便了解已识别的恶意工具是如何被操作人员利用的。
本文翻译自:https://securelist.com/the-sessionmanager-iis-backdoor/106868/如若转载,请注明原文地址