目录导航
攻击者越来越多地将 Internet 信息服务[Internet Information Services] (IIS) 扩展用作服务器的隐蔽后门,这些后门隐藏在目标环境的深处,并为攻击者提供了持久性控制机制。虽然之前已经发表了关于特定事件和变体的研究,但对于攻击者如何利用 IIS 平台作为后门通常知之甚少。
恶意 IIS 扩展在针对服务器的攻击中很少遇到,攻击者通常只使用脚本Web shell作为第一阶段的有效负载。与脚本 Web shell 相比,这导致恶意 IIS 扩展的检测率相对较低。IIS 后门也更难检测,因为它们大多与目标应用程序使用的合法模块位于相同的目录中,并且它们遵循与干净模块相同的代码结构。在大多数情况下,实际的后门逻辑很少,如果不更广泛地了解合法 IIS 扩展的工作原理,就不能将其视为恶意,这也使得确定感染源变得困难。
通常,攻击者首先利用托管应用程序中的一个关键漏洞进行初始访问,然后再将脚本 Web shell 作为第一阶段有效负载。稍后,攻击者会安装一个 IIS 后门,以提供对服务器的高度隐蔽和持久的访问。正如我们在 2022 年 1 月至 2022 年 5 月期间针对 Exchange 服务器的活动以及我们之前对自定义 IIS 后门ScriptModule.dll和App_Web_logoimagehandler.ashx.b6031896.dll的研究中观察到的那样,攻击者还可以安装定制的 IIS 模块以满足他们的目的. 一旦注册到目标应用程序,后门就可以监控传入和传出的请求并执行其他任务,例如在用户对 Web 应用程序进行身份验证时在后台运行远程命令或转储凭据。
由于我们预计攻击者将继续越来越多地利用 IIS 后门,因此事件响应者必须了解这些攻击如何发挥作用以成功识别和防御它们的基础知识。组织可以通过以下方式进一步提高防御能力微软 365Defender,其保护能力来自此类研究以及我们对服务器攻击和妥协的独特可见性。借助威胁和漏洞管理以及防病毒功能等关键保护功能,微软 365Defender 为组织提供了一个全面的解决方案,可以协调跨域、跨电子邮件、身份、云和端点的保护。
在这篇博文中,我们详细介绍了 IIS 扩展的工作原理,并深入了解攻击者如何将它们用作后门。我们还分享了我们在过去一年中对 IIS 威胁形势的一些观察,以帮助防御者识别和防御这种威胁,并为更大的安全社区做好准备,以应对任何日益复杂的问题。更具体地说,该博客涵盖以下主题:
- 了解 IIS 扩展
- 使用自定义 IIS 后门的攻击流程
- 命令执行
- 凭证访问
- 远程访问
- 数据窃取
- IIS 后门的类型
- 基于 Web shell 的变体
- 开源变体
- IIS 处理程序
- 凭证窃取者
- 改进对服务器入侵的防御
了解 IIS 扩展
IIS 是一种灵活的通用 Web 服务器,多年来一直是 Windows 平台的核心部分。作为用于托管网站、服务和应用程序的易于管理、模块化和可扩展的平台,IIS 为众多组织提供关键业务逻辑。IIS 的模块化架构允许用户根据自己的需要扩展和定制 Web 服务器。这些扩展可以采用本机 (C/C++) 和托管 (C#、VB.NET) 代码结构的形式,后者是我们在这篇博文中的重点。扩展可以进一步分类为模块和处理程序。
IIS 管道是由 ASP.NET 运行时启动以处理请求的一系列可扩展对象。IIS 模块和处理程序是 .NET 组件,它们充当管道中的主要可扩展点。每个请求在由单个 IIS 处理程序处理之前由多个 IIS 模块处理。就像一组构建块一样,添加了模块和处理程序来为目标应用程序提供所需的功能。此外,可以配置处理程序以响应请求中的特定属性,例如 URL、文件扩展名和 HTTP 方法。例如,Aspnet_isapi.dll是一个用于常见.aspx扩展的预配置 IIS 处理程序。
创建自定义托管 IIS 模块
要创建托管 IIS 模块,代码必须实现IHttpModule接口。IHttpModule接口有两个具有以下签名的方法:Init()和Dispose()。

在Init()中,模块可以与请求管道中可用的任意数量的 HTTP 事件同步,此处按顺序列出:
- BeginRequest
- AuthenticateRequest
- AuthorizeRequest
- ResolveRequestCache
- AcquireRequestState
- PreRequestHandlerExecute
- PostRequestHandlerExecute
- ReleaseRequestState
- UpdateRequestCache
- EndRequest
- PreSendRequestHeaders
- PreSendRequestContent
然后应将新创建的扩展与目标应用程序映射以完成注册。通常,有几种方法可用于出于合法目的映射托管模块。另一方面,我们观察到攻击者在攻击过程中使用以下技术注册恶意 IIS 扩展:
向全局程序集缓存 (GAC) PowerShell API 注册:每个具有公共语言运行时 (CLR) 的设备都托管一个设备范围的缓存,称为全局程序集缓存 (GAC)。GAC 存储专门指定为由设备上的多个应用程序共享的程序集。GacInstall()是一个 PowerShell API,用于将模块添加到全局缓存中。安装后,该模块在路径%windir%\Microsoft.NET\assembly下可用,并使用appcmd.exe映射到 IIS ( w3wp.exe ) 。

使用appcmd.exe注册:Appcmd.exe是用于管理 IIS 的单一命令行工具。所有关键方面,例如添加或删除模块和处理程序,都可以使用该实用程序执行。在这种情况下,攻击者会将恶意扩展程序放在目标应用程序的/bin文件夹中,并使用add module命令对其进行映射。

使用gacutil.exe注册:Gacutil.exe是 Visual Studio 提供的 .NET GAC 实用程序。该工具允许用户查看和操作 GAC 的内容,包括使用-I选项安装新模块。

使用web.config注册:将模块放入应用程序的/bin文件夹后,攻击者还可以编辑目标应用程序的web.config或全局配置文件applicationHost.config来注册模块。

成功注册后,该模块在 IIS 管理器应用程序中可见。

使用自定义 IIS 后门的攻击流
在 2022 年 1 月至 2022 年 5 月期间,我们与 IIS 相关的检测发现了一个针对 Microsoft Exchange 服务器的有趣活动。Web shell通过ProxyShell 漏洞被释放在路径%ExchangeInstallPath%\FrontEnd\HttpProxy\owa\auth\中。
经过一段时间的侦察、转储凭据和建立远程访问方法后,攻击者在文件夹C:\inetpub\wwwroot\bin\中安装了一个名为FinanceSvcModel.dll的自定义 IIS 后门。后门具有执行 Exchange 管理操作的内置功能,例如枚举已安装的邮箱帐户和导出邮箱以进行渗透,如下所述。
命令执行
PowerShDLL工具包是一个无需调用powershell.exe即可运行 PowerShell 的开源项目,用于运行远程命令。攻击者避免在 Exchange 应用程序池 ( MSExchangeOWAAppPool ) 的上下文中调用常见的非本地二进制文件 (LOLBins),例如cmd.exe或powershell.exe ,以规避相关检测逻辑。

凭证访问
攻击者启用了 WDigest 注册表设置,强制系统使用 WDigest 协议进行身份验证,导致lsass.exe在内存中保留用户明文密码的副本。此更改允许攻击者窃取实际密码,而不仅仅是哈希。后来,Mimikatz 运行以转储本地凭据并执行DCSYNC攻击。

远程访问
攻击者使用plink.exe,一个命令行连接工具,如 SSH。该工具允许攻击者绕过网络限制并通过隧道 RDP 流量远程访问服务器。

数据窃取
攻击者通过发送带有 cookie EX_TOKEN的特制POST请求来调用 IIS 后门。该模块提取 cookie 值并使用提供的过滤器启动邮箱导出请求。

该值解码为:ep,06/21/2022,06/21/2022,C:\Windows\Web,Administrator,其中ep是启动邮箱导出请求的命令,过滤器确定开始和结束日期,后跟导出路径。最终命令具有以下语法:


下表详细说明了后门中的所有命令:
命令 | 描述 |
test | 尝试加载 Exchange 命令行管理程序 (EMS) – Add-PSSnapin Microsoft.Exchange.Management.Powershell.SnapIn |
box | 列出所有UserPrincipalNames- foreach ($name in Get-Mailbox -ResultSize unlimited){ Write-Output $name.UserPrincipalName} |
ep | 使用提供的邮箱名称、开始和结束日期以及导出路径作为筛选器运行New-MailboxExportRequest cmdlet。 |
gep | 获取与导出请求关联的任务 ID |
ruh | 篡改 Exchange 日志 |
IIS 后门的类型
回顾过去一年观察到的恶意托管 (.NET) IIS 扩展,我们根据各种因素(例如类似的功能和来源)对这些扩展进行了分组,下文将对此进行进一步详述。
基于 Web shell 的变体
像 China Chopper 这样的Web Shell已被广泛用于众多有针对性的攻击。随着中国菜刀的使用量逐年增加,检测次数也在增加。结果,攻击者进化并添加了这些 Web Shell 的基于 IIS 模块的版本,它们保持相同的功能。该模块使用与脚本版本中用于运行代码的相同eval()技术。虽然大多数防病毒解决方案会检测单行 web shell,例如< %@page language=js%><%eval(request.item(<password>),”unsafe”);%>,但将相同的代码嵌入IIS 模块会产生较低的检测率。
在模块版本中,攻击者发起的POST请求包含代码以及参数z1和z2中的参数,就像基于脚本的版本一样。


在不同的版本中,该模块在 DLL 中硬编码后门逻辑,并且只等待参数z1 和 z2。参数kfaero将命令显示为“A-Q”中的顺序字母表。

与脚本版本一样,IIS 模块具有类似的功能,例如列出和创建目录、下载和上传文件、使用 SQL 适配器运行查询以及运行命令。为了运行命令,攻击者发起的POST请求包含命令“ M”以及参数。

Antsword 是另一种流行的 Web Shell,广泛用于各种针对性攻击。在野外观察到受 Web shell 代码启发的自定义 IIS 模块,其中包括类似的架构和功能。这些恶意模块的有趣新功能包括无文件执行 C# 代码和通过 TCP 套接字连接进行远程访问。

根据请求,模块可以采用两种代码路径之一。在/server-status的情况下,从自定义标头Lhposzrp中的值启动套接字连接。
命令 | 描述 |
FSoaij7_03Ip3QuzbIhvuilKIsoM9a48DTkvQKdwtKNA | Socket连接 |
8CDztbQb4fsQeU5AAuBs9OmRokoyFJ7F5Z | 关闭连接 |
31FKvk8VDcqZMA3iAq3944wjg | 发送数据 |
TU_LDzOsv | 接收数据 |
对于任何其他 URL,该模块遵循 China Chopper 风格的命令架构,范围从“ A”到“ R ”。附加的“ R ”命令允许攻击者反射性地运行 C# 代码。

开源变体
为 IIS 创建后门的 GitHub 项目已经有一段时间了。尽管主要是为了教育红队社区而分享的,但威胁参与者也对这些项目感兴趣并删除了代码。以一个被攻击者积极利用的公共项目为例,原始代码包括以下能力:
命令 | 执行 |
cmd | 通过cmd.exe /c运行命令 |
powershell | 通过RunspaceFactory.CreateRunspace()运行 powershell |
shellcode | 将提供的 shellcode 注入userinit.exe |
在这种情况下,在野变体会更改 cookie 名称,保持其余代码不变:

在向后门提供whoami命令时,生成的 cookie 具有以下格式:
Cookie: BDUSS=P6zUsk/1xJyW4PPufWsx5w==
后门使用 base64 封装的 AES 加密 blob 进行响应。解码后的输出格式如下:

IIS处理程序
如前所述,IIS 处理程序与请求管道中的模块具有相同的可见性。处理程序可以配置为响应某些扩展或请求。要创建托管 IIS 处理程序,代码必须实现 IHttpHandler 接口。IHttpHandler接口具有一个方法和一个属性, 具有以下签名:

可以通过直接编辑web.config文件或使用appcmd实用程序来注册处理程序。处理程序配置采用一些重要字段,例如path指定处理程序应响应的 URL 或扩展名,以及verb指定 HTTP 请求类型。在下面的示例中,处理程序仅响应以 .gif 扩展名结尾的图像请求:

成功安装后,处理程序在 IIS 管理器应用程序中可见:

分析的大多数处理程序都相对简单,仅包括运行命令的能力:

有趣的是,响应Content-Type设置为image/gif或image/jpeg,当浏览图像 URL 时显示默认图像,输出隐藏在<pre>标记中。造成这种情况的一个可能原因可能是绕过网络检查,因为图像文件通常被认为是非恶意的,并且会根据扩展名进行过滤和识别。
凭证窃取者
此模块子集监控传出请求中的登录模式,并以加密格式转储提取的凭据。即使检测到主后门,被盗的凭据允许攻击者在环境中保持持久性。
模块监视特定请求以确定登录活动,例如/auth.owa OWA 应用程序的默认 URL。在检查请求时,模块将凭证转储到.dat文件中。内容使用带有硬编码值的 XOR 进行加密,并使用 base64 编码进行包装。下图描绘了解码后的样本输出:


在另一个变体中,该模块查找用于传递不同 ASP.Net 应用程序中使用的凭据的通用占位符变量。转储的凭据经过 AES 加密并使用 Base64 编码进行包装,位于%programdata%\log.txt 中。


改进对服务器入侵的防御
由于我们预计会观察到更多使用 IIS 后门的攻击,因此组织必须确保遵循安全实践来帮助保护其服务器。
应用最新的安全更新
识别并修复影响服务器的漏洞或错误配置。部署最新的安全更新,尤其是在 Exchange 等服务器组件可用时立即部署。使用 Microsoft Defender 漏洞管理 定期审核这些服务器的漏洞、错误配置和可疑活动。
保持启用防病毒和其他保护
使用Windows 防病毒软件 和防火墙保护和 MFA 等其他安全解决方案 保护服务器至关重要 。在Microsoft Defender 防病毒软件中打开云提供的保护 和自动样本提交,以使用人工智能和机器学习来快速识别和阻止新的和未知的威胁。使用 攻击面减少规则 自动阻止凭据盗窃和可疑使用 PsExec 和 Windows Management Instrumentation (WMI) 等行为。开启 防篡改 功能,防止攻击者停止安全服务。
如果您担心这些安全控制会影响性能或中断运营,请与 IT 专业人员联系以帮助确定这些设置的真正影响。安全团队和 IT 专业人员应协作应用缓解措施和适当的 设置。
查看敏感角色和组
查看具有高度特权的组,例如管理员、远程桌面用户和企业管理员。攻击者将帐户添加到这些组中以在服务器上站稳脚跟。定期检查这些组是否有可疑的添加或删除。 若要识别特定于 Exchange 的异常,请使用Exchange PowerShell 中的Get-ManagementRoleAssignment cmdlet查看具有敏感角色的用户列表,例如 邮箱导入导出 和 组织管理。
访问限制
实践最小特权原则并保持良好的凭证卫生。避免使用域范围的管理员级服务帐户。强制 使用强随机、即时的本地管理员密码 并启用 MFA。使用Microsoft Defender for Identity 的 本地管理员密码解决方案 (LAPS)等工具。
对 IIS 中的虚拟目录设置访问控制列表限制。此外,当仅用于 Exchange 混合环境中的收件人管理时,删除本地 Exchange 服务器的存在。
优先警报
服务器入侵的独特模式有助于检测恶意行为并通知安全运营团队快速响应入侵的初始阶段。注意并立即调查表明服务器上存在可疑活动的警报。在探索阶段捕获攻击,即攻击者在获得访问权限后花费数天探索环境的时期,是关键。 优先处理与来自 w3wp.exe的net.exe、 cmd.exe等进程相关的警报 。
检查配置文件和 bin 文件夹
定期检查目标应用程序的web.config和ApplicationHost.config以识别任何可疑的添加,例如图像文件的处理程序——如果不是完全恶意的话,它本身就是可疑的。此外,定期扫描应用程序的bin目录和默认 GAC 位置等安装路径。还建议使用appcmd.exe或gacutil.exe实用程序定期检查已安装模块的列表。
附录
Microsoft Defender 防病毒软件将这些威胁和相关行为检测为以下恶意软件:
Backdoor:MSIL/SuspIISModule.G!gen
Backdoor:MSIL/SuspIISModule.H!gen
Backdoor:MSIL/SuspIISModule.K!gen
Backdoor:MSIL/OWAStealer.B
Backdoor:MSIL/OWAStealer.C
Behavior:Win32/SuspGacInstall.B
端点检测和响应 (EDR)
Suspicious IIS AppCmd Usage
狩猎查询
要查找与可疑 IIS 模块注册相关的恶意活动,请运行以下查询:
可疑的 IIS 模块注册
DeviceProcessEvents
| where ProcessCommandLine has “appcmd.exe add module”
| where InitiatingProcessParentFileName == “w3wp.exe”
DeviceProcessEvents
| where InitiatingProcessFileName == “powershell.exe”
|where ProcessCommandLine has ” system.enterpriseservices.internal.publish”
| where InitiatingProcessParentFileName == “w3wp.exe”
DeviceProcessEvents
|where ProcessCommandLine has ” \\gacutil.exe /I”
| where InitiatingProcessParentFileName == “w3wp.exe”
侵害指标(IOCs)
文件名 | SHA-256 |
HttpCompress.dll | 4446f5fce13dd376ebcad8a78f057c0662880fdff7fe2b51706cb5a2253aa569 |
HttpSessionModule.dll | 1d5681ff4e2bc0134981e1c62ce70506eb0b6619c27ae384552fe3bdc904205c |
RewriterHttpModule.dll | c5c39dd5c3c3253fffdd8fee796be3a9361f4bfa1e0341f021fba3dafcab9739 |
Microsoft.Exchange.HttpProxy. HttpUtilities.dll | d820059577dde23e99d11056265e0abf626db9937fc56afde9b75223bf309eb0 |
HttpManageMoudle.dll | 95721eedcf165cd74607f8a339d395b1234ff930408a46c37fa7822ddddceb80 |
IIS_backdoor.dll | e352ebd81a0d50da9b7148cf14897d66fd894e88eda53e897baa77b3cc21bd8a |
FinanceSvcModel.dll | 5da41d312f1b4068afabb87e40ad6de211fa59513deb4b94148c0abde5ee3bd5 |
App_Web_system_web.ashx.dll | 290f8c0ce754078e27be3ed2ee6eff95c4e10b71690e25bbcf452481a4e09b9d |
App_Web_error.ashx.dll | 2996064437621bfecd159a3f71166e8c6468225e1c0189238068118deeabaa3d |
转载请注明出处及链接