当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Microsoft Exchange 中发现新的 0day 漏洞

作者:精品下载站 日期:2024-12-14 18:41:11 浏览:16 分类:玩电脑

Microsoft Exchange 中发现新的 0day 漏洞


GTSC 网络安全公司的安全研究人员在 Microsoft Exchange Server 2013/2016/2019 中发现了一个新的零日漏洞,该漏洞已被广泛利用。根据 GTSC 报告,2022 年 8 月初,他们发现关键基础设施受到攻击,特别是他们的 Microsoft Exchange 应用程序。在调查该事件时,他们发现该攻击利用了一个未发布的 Exchange 安全漏洞,即 Microsoft Exchange Server 上的 0day 漏洞。研究人员指出,该漏洞非常严重,允许攻击者在受感染的系统上远程执行代码 (RCE)。

注意:Microsoft 发布了 2022 年 11 月的 Exchange Server 安全更新,修复了这些漏洞。

漏洞信息

GTSC蓝队在向客户提供SOC服务时,在IIS日志中检测到与ProxyShell漏洞格式相同的利用请求:

autodiscover/[email protected]/<Exchange-backend-endpoint>&Email=autodiscover/autodiscover.json%[email protected]

检查其他日志,他们发现攻击者可以在受攻击的系统上执行命令。 这些Exchange服务器的版本号显示已经安装了最新的更新,因此不可能利用Proxyshell漏洞进行利用。

GTSC蓝队分析师可以确认这是一个新的0day RCE漏洞。此信息已发送给 GTSC 红队成员,并进行研究来回答以下问题:

  • 为什么利用请求与 ProxyShell 漏洞的请求相似?

  • RCE是如何实施的?

GTSC红队成功找出了如何使用上述路径访问Exchange后端的组件并执行RCE。然而目前,他们还不想发布该漏洞的技术细节。

注意:这些漏洞影响 Microsoft Exchange Server。 Exchange Online 不受影响。

即将发布的建议

检查零日计划即将发布的公告显示 GTSC 团队存在两个漏洞。

暂时缓解

GTSC 的直接事件响应流程记录了超过 1 个组织成为利用此 0day 漏洞的攻击活动的受害者。此外,他们还担心可能还有很多其他组织被利用但未被发现。

在等待微软官方补丁的同时,GTSC提供了一个临时补救措施,通过在IIS服务器上的URL重写规则模块添加一条规则来阻止带有攻击迹象的请求,并禁用非管理员的远程PowerShell,以减少攻击的漏洞。

请按照以下步骤缓解这两个 CVE:

  • CVE-2022-41040

  • CVE-2022-41082

重要提示:强烈建议所有使用 Microsoft Exchange Server 的组织/企业尽快检查、审查并应用以下临时补救措施,以避免潜在的严重损害。

缓解 CVE-2022-41040

请执行以下步骤来阻止 Exchange Server 上的已知攻击模式并缓解 CVE-2022-41040。

选项 1:阻止已知攻击模式(手动)

步骤 1. 启动 IIS 管理器。单击默认网站,然后双击URL 重写

如果URL Rewrite不可用,则表示Exchange Server 2013/2016/2019上未安装URL Rewrite,您需要安装IIS URL Rewrite模块。

注意:如果按照建议安装 URL 重写模块,则不会对 Exchange 功能产生已知影响。

注意:Exchange Server 2016 CU22 和 Exchange Server 2019 CU11 或更高版本需要 IIS URL 重写模块。建议使用最新的 Exchange Server 累积更新和 Exchange Server 安全更新使 Exchange Server 保持最新状态。

假设您正在运行 Exchange Server 2013,请安装该模块(IIS 将重新启动,Outlook 客户端将失去与 Exchange Server 的连接)。

第 2 步。在右侧的“操作”窗格中,单击添加规则

步骤 3. 选择请求阻止,然后单击确定

第 4 步。 确保选择 URL 路径,添加以下字符串,选择正则表达式,选择中止请求,并单击确定

(?=.*autodiscover)(?=.*powershell)

第 5 步。 展开规则选择具有您在上一步中创建的模式的规则。点击编辑

步骤 6. 将条件输入从 {URL} 更改为 {UrlDecode:{REQUEST_URI}},然后单击确定

选项 2:阻止已知的攻击模式(脚本)

如果由于运行多个 Exchange 服务器而想要加快该过程该怎么办?

下载 EOMTv2.ps1 PowerShell 脚本并将其放置在 C:\scripts\ 文件夹中。

以管理员身份启动 Windows PowerShell 并运行脚本。

C:\scripts\EOMTv2.ps1

注意:在每台 Exchange Server 上运行该脚本。

输出显示迁移已在 Exchange Server 上完成。

VERBOSE: Checking if EOMTv2 is up to date with https://aka.ms/EOMTv2-VersionsUri
VERBOSE: Starting EOMTv2.ps1 version 22.10.07.2029 on EX01-2019
VERBOSE: EOMTv2 precheck complete on EX01-2019
VERBOSE: Applying mitigation on EX01-2019
VERBOSE: Starting mitigation process on EX01-2019
VERBOSE: IIS URL Rewrite Module is already installed on EX01-2019
VERBOSE: Applying URL Rewrite configuration to EX01-2019 :: Default Web Site
VERBOSE: Mitigation complete on EX01-2019 :: Default Web Site
VERBOSE: EOMTv2.ps1 complete on EX01-2019, please review EOMTv2 logs at
C:\Users\ADMINI~1.EXO\AppData\Local\Temp\EOMTv2\EOMTv2.log and the summary file at C:\EOMTv2Summary.txt

这是 EOMTv2.ps1 PowerShell 脚本完成后在 IIS 中的外观。

选项 3:阻止已知攻击模式 (EEMS)

对于启用了 Exchange 紧急缓解服务 (EEMS) 的客户,Microsoft 发布了针对 Exchange Server 2016 和 Exchange Server 2019 的 URL 重写缓解措施。该缓解措施将自动启用。

缓解 CVE-2022-41082

请执行以下步骤,为非管理员/服务帐户禁用远程 PowerShell 并缓解 CVE-2022-41082 的影响。

选项 1:禁用非管理员的远程 PowerShell

步骤 1. 以管理员身份运行 Exchange 命令行管理程序。

步骤 2. 为所有用户禁用远程 PowerShell。

Get-User -ResultSize Unlimited -Filter 'RemotePowerShellEnabled -eq $true' | Set-User -RemotePowerShellEnabled $false

步骤 3. 验证是否已对所有用户禁用远程 PowerShell。

Get-User -ResultSize Unlimited -Filter 'RemotePowerShellEnabled -eq $true' | ft Name,UserPrincipalName

步骤 4. 为需要的用户启用远程 PowerShell。这很可能是管理员帐户和服务帐户。

Set-User -Identity "userprincipalname" -RemotePowerShellEnabled $true

如果您被锁定并且无法连接 Exchange Management Shell 怎么办?

假设您忘记为管理员帐户启用远程 PowerShell 并且 Exchange Management Shell 不再连接到 Exchange Server,请按照以下步骤操作:

步骤 1. 关闭 Exchange 命令行管理程序

步骤 2. 以管理员身份运行 PowerShell(请注意,这是 PowerShell 而不是 Exchange Management Shell):

步骤 3. 添加 Exchange 管理 PowerShell 管理单元:

Add-PSSnapIn Microsoft.Exchange.Management.PowerShell.Snapin

步骤 4. 为管理员帐户启用远程 PowerShell:

Set-User -Identity "userprincipalname" -RemotePowerShellEnabled $true

第 5 步。启动 Exchange Management Shell,一切都会按您的预期运行。

选项 2:禁用非管理员的远程 PowerShell(脚本)

这是推荐的方法,因为您创建的新用户将启用远程 PowerShell。每晚或每几个小时将以下 PowerShell 脚本作为计划任务运行将确保定义的安全组中的用户帐户明确具有远程 PowerShell 访问权限,并且所有其他用户帐户都禁用远程 PowerShell。

步骤 1. 启动 Active Directory 用户和计算机

步骤 2. 创建一个名为 AllowRemotePS 的安全组。

第3步. 打开AllowRemotePS组,单击常规选项卡并填写描述CVE-2022-41082 >。

步骤 4. 单击成员选项卡并添加需要远程 PowerShell 访问的管理员/服务帐户。单击确定

步骤 5. 下载DisableRemotePS.ps1 PowerShell 脚本并将其放置在C:\scripts\ 文件夹中。

确保文件未被阻止,以防止运行脚本时出现错误。请阅读文章运行 PowerShell 脚本时出现未数字签名错误来了解更多信息。

另一种选择是将以下代码复制并粘贴到记事本中。将其命名为 DisableRemotePS.ps1 并将其放置在 C:\scripts\ 文件夹中。

# Load Exchange Management Shell PowerShell Snap-In
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

# Allow Remote PowerShell Group
$AllowRPSGroup = "AllowRemotePS"

# Get all users with enabled Remote PowerShell
$AllUsers = Get-User -ResultSize Unlimited -Filter 'RemotePowerShellEnabled -eq $true' | select SamAccountName, RemotePowerShellEnabled

# Get all users from AllowRPSGroup
$AllowUsers = Get-ADGroupMember $AllowRPSGroup -Recursive | ForEach-Object { Get-User -Identity $_.SamAccountName | select SamAccountName, RemotePowerShellEnabled }

# Enable Remote PowerShell for allowed users
foreach ($AllowUser in $AllowUsers) {
    if ($AllowUser.RemotePowerShellEnabled -eq $false) {
        Set-User $AllowUser.SamAccountName -RemotePowerShellEnabled $true
    }
}

# Disable Remote PowerShell for all users
foreach ($User in $AllUsers) {
    if ($AllowUsers.SamAccountName -notcontains $User.SamAccountName) {
        Set-User $User.SamAccountName -RemotePowerShellEnabled $false
    }
}

步骤 6. 以管理员身份运行 Exchange 命令行管理程序并运行脚本。

C:\scripts\DisableRemotePS.ps1

步骤 7. 验证是否为 AllowRemotePS 安全组用户启用了远程 PowerShell。

Get-User -ResultSize Unlimited -Filter 'RemotePowerShellEnabled -eq $true' | ft Name,UserPrincipalName

第 8 步。 创建计划任务,以便脚本每晚或每几个小时运行一次。

注意:您应该在将来将此脚本作为计划任务运行,因为这会减少攻击者的规模。

验证缓解措施

验证您是否成功应用了缓解措施总是好的。

打开 Web 浏览器并插入调整后的自动发现 URL。

https://mail.domain.com/Autodiscover/autodiscover.json@PowerShell

这是缓解之前的样子(这是):

这是缓解后的样子():

使用 PowerShell 进行验证并运行以下命令:

Invoke-WebRequest https://mail.domain.com/Autodiscover/autodiscover.json@PowerShell

它应该回复底层连接已关闭:接收时发生意外错误

Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a receive.
At line:1 char:1
+ Invoke-WebRequest https://mail.domain.com/Autodiscover/autodiscover.js ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

检测

为了帮助组织检查其 Exchange 服务器是否已被此错误利用,GTSC 发布了指南和扫描 IIS 日志文件的工具。

方法1:使用PowerShell命令:

Get-ChildItem -Recurse -Path <Path_IIS_Logs> -Filter "*.log" | Select-String -Pattern 'powershell.*autodiscover\.json.*\@.*200'

在我们的示例中,IIS 日志位于路径 C:\inetpub\logs\LogFiles\ 中,PowerShell 命令将如下所示:

Get-ChildItem -Recurse -Path "C:\inetpub\logs\LogFiles\" -Filter "*.log" | Select-String -Pattern 'powershell.*autodiscover\.json.*\@.*200'

方法2:使用GTSC开发的工具。

基于漏洞签名,GTSC 开发了一种工具来自动执行任务,而不是进行搜索,所需时间比使用 Powershell 短得多。

结论

立即缓解 Exchange 服务器的问题。您必须应用这两种缓解措施,阻止已知的攻击模式 (CVE-2022-41040) 并禁用非管理员的远程 PowerShell (CVE-2022-41082)。

CVE-2022-41040: 仅在 IIS 中保留一项缓解规则处于活动状态,并且不要使用多条规则。之后,验证缓解措施是否已成功应用。最后,检测您的 Exchange 服务器是否被利用。

CVE-2022-41082:首先为所有用户禁用远程 PowerShell。之后,为需要的管理员/服务帐户启用远程 PowerShell。

等待微软发布补丁(他们正在努力)。

假设您拥有 Microsoft 365/Office 365 中的所有邮箱,那么您应该将自动发现 URL 更改为 Exchange Online。之后,删除 Exchange Server 防火墙端口,以便 Exchange Server 不会发布到 Internet。请阅读文章“保留组织中的最后一个 Exchange Server”以了解更多信息。

更多信息

  • GTSC团队

  • 微软研究中心

  • CVE-2022-41040

  • CVE-2022-41082

最新更新

更新 1: Microsoft 尚未发布任何信息。我会及时更新文章以了解最新的更改。

更新 2:Microsoft 正在调查两个报告的影响 Microsoft Exchange Server 2013、2016 和 2019 的零日漏洞。Microsoft 已确认URL 重写指令阻止用于远程 PowerShell 的端口(如本文所示)成功打破了当前的攻击链。

更新 3:通过更简单的演练更新了 IIS 缓解步骤。

更新 4: Microsoft 正在开发修复/补丁。

更新 5:添加了安装 IIS URL 重写模块所需的信息(如果您拥有最新的 Exchange Server 2016/2019,则应安装此模块)。但是,如果您有 Exchange Server 2013,且系统上尚不可用,则需要先安装它,然后才能应用缓解措施。

更新 6:添加了有关如何阻止 Exchange Server 上的 PowerShell 远程处理的演练。

更新7:在 IIS 中创建规则时使用“正则表达式”而不是“通配符”。

更新 8:将请求阻止规则(如何阻止)从发送 HTTP 403(禁止)响应更改为中止请求

更新 9:调整了手动缓解措施以应用于默认网站,而不是仅应用于默认网站/自动发现目录,使用官方 Microsoft 脚本进行自动缓解,并添加了 EEMS 缓解措施。

更新10:MSRC(微软安全响应中心)和GTSC团队提供的用于检测/防止Exchange 0day的URL模式很容易被绕过。

GTSC 团队于 2022 年 3 月 10 日提供了更新:收到 Jang (@testanull) 的信息后,我们注意到重写规则中使用的正则表达式可以被绕过。 GTSC 团队更新了规则中的新正则表达式。

将文章更新为以下更新模式:

.*autodiscover\.json.*Powershell.*

注意: Microsoft 尚未使用新模式更新其脚本。所以你现在必须手动添加它(参见文章)。一旦微软调整其脚本,我就会更新这篇文章。

更新 11:Microsoft 更新了自动应用的 EEMS 规则。 EOMTv2 脚本已更新,包含 URL 重写改进。确保您拥有版本 22.10.03.1829 或更高版本。

更新 12:虽然用于检测/防止 Exchange 0day 的第一个 URL 模式已被绕过并修复,但现在还有一个第二个 URL 模式。

将文章更新为以下更新的条件输入,以成功缓解绕过问题:

{UrlDecode:{REQUEST_URI}}

更新 13:GTSC 团队已确认可以绕过最新的缓解措施,并表示他们已将条件输入字段中的值从 {REQUEST_URI} 更新为 {网址解码:{REQUEST_URI}}

更新 14:从文章中删除了阻止 PowerShell 远程处理部分。如果您确实在防火墙中添加了入站规则来阻止端口 HTTP: 5985HTTPS: 5986,则应将其删除,因为它们与此没有任何关系。

更新 15: 添加了有关如何为非管理员禁用远程 PowerShell 的部分。执行以下步骤以缓解 CVE-2022-41082 的影响。

更新 16:Microsoft 更新了自动应用的 EEMS 规则。 EOMTv2 脚本已更新,包括条件输入字段的改进。确保您拥有版本 22.10.05.2304 或更高版本。

更新 17:开发 PS 脚本,以便更轻松地缓解 CVE-2022-41082。

更新 18:添加了有关为管理员帐户启用远程 PowerShell 的分步说明(如果您错误地禁用了它并且无法使用 Exchange 命令行管理程序连接到 Exchange Server)。

更新 19: 添加了针对 CVE-2022-41082 的 DisableRemotePS.ps1 PowerShell 脚本,包括步骤。这是推荐的方法。

更新 20:Microsoft 于 2022 年 10 月 7 日改进了 URL 重写规则。

将文章更新为以下更新模式:

(?=.*autodiscover)(?=.*powershell)

EEMS 服务正在自动接收新规则。 EOMTv2 脚本已更新(脚本在连接互联网的计算机上自动更新,更新版本为 22.10.07.2029)。

更新 21:Microsoft 发布了 2022 年 11 月 Exchange Server 安全更新,修复了这些漏洞。

订阅时事通讯并了解最新的 IT 提示和技巧。

这篇文章对你有帮助吗?与您的网络分享这篇文章并帮助他们。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯