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

[玩转系统] 使用 Azure 自动化检测和报告 Microsoft 365 审核事件

作者:精品下载站 日期:2024-12-14 04:07:42 浏览:13 分类:玩电脑

使用 Azure 自动化检测和报告 Microsoft 365 审核事件


检测和报告重要审计事件

对于那些担心 Exchange 安全的人来说,这是一段忙碌的时光。在本地方面,两个新的零日漏洞的出现再次令人不快地提醒人们,当攻击者找到新方法来渗透管理良好的服务器时,互联网上潜伏着危险。管理不善的本地服务器很容易成为坏人的目标,而且此类服务器仍然有太多。

由于为保护 Microsoft 365 而设置的障碍,Exchange Online 通常不会受到此类攻击。但是,正如我们之前介绍的,受损的 Azure AD 管理员帐户可能会导致攻击者劫持租户中的 Exchange Online。 Microsoft 安全副总裁 Alex Weinert 所说的使用 MFA 保护所有 Azure AD 帐户的重要性对于拥有受感染租户的人来说一定具有特殊意义。

所有这些让我想起了 Microsoft 网络安全团队 (DART) 撰写的一篇文章,他们在其中审查了调查取证信息的重要来源。 DART 喜欢查看 Azure AD 审核日志、Azure AD 登录和 Office 365 审核日志(也称为统一审核日志)以查找恶意活动的痕迹。这引发了撰写有关如何使用 Exchange Online 管理模块 (V3) 中对托管标识的新支持来检查可能揭示问题的审核事件的想法。那么我们开始吧。

Exchange Online、Azure 自动化和托管身份

之前,我介绍了如何将 Exchange Online PowerShell 与 Azure 自动化结合使用。在 V3 之前,用户名和密码等凭据(安全存储在 Azure Key Vault 中)可用于登录管理员帐户并运行 Exchange cmdlet。通过 V3,您可以使用托管标识,就像使用 Microsoft Graph PowerShell SDK 和 Teams 模块一样。

使用托管身份的一大优势是 Azure 负责安全性,无需弄乱密码或证书。相反,Azure 使用分配给与托管标识一起使用的自动化帐户的权限来允许或拒绝对资源的访问。攻击者可能会尝试破坏托管身份,但与破坏用户名/密码组合的可能性相比,这种可能性较低。

Active Directory 的网络安全风险管理

了解如何通过这些网络安全风险管理解决方案预防 AD 攻击并从中恢复。

分配正确的权限

我的想法是编写一个 PowerShell 脚本,该脚本将使用 Azure 托管标识拥有的计划作为 Runbook 执行。该脚本执行以下操作:

  • 定义要监视的高优先级审核事件。最近对 Microsoft 365 租户的攻击允许攻击者创建新的入站连接器和 12 条新的传输规则。然后,攻击者可以利用租户发送大量垃圾邮件。我的脚本检查这些事件。
  • 使用托管标识登录 Exchange Online。必须为托管标识的服务主体分配将 Exchange 作为应用程序管理权限。要了解如何分配权限(只能使用 PowerShell),请阅读本文。
  • 使用 Search-UnifiedAuditLog cmdlet 搜索 Office 365 审核日志。搜索涵盖过去 30 天。对于 Office 365 E3 租户,可以回退 90 天;对于 E5 租户,365 天。我认为 30 是合理的,因为您应该定期检查最近发生的事件。
  • 如果搜索找到一些审核记录,请解析每个记录中的审核数据负载以提取重要信息,例如传输规则或连接器的名称、使用的参数等。负载因事件而异,因此如果您将其他事件添加到搜索中,则必须更新脚本以从这些事件中提取信息。
  • 运行 Get-ExoMailbox cmdlet 以获取执行导致审核事件触发的操作的帐户的显示名称。
  • 创建审核数据的 HTML 报告。
  • 通过电子邮件将报告发送到指定的 SMTP 地址。这可能适用于通讯组列表、Microsoft 365 组、启用邮件的团队渠道或个人。该消息的想法是,该消息是一个号召性用语,提示管理员检查与备受瞩目的审核事件相关的操作是否有效。该脚本使用 Microsoft Graph PowerShell SDK cmdlet 创建和发送消息,因此托管标识的服务主体必须拥有 Graph Mail.ReadWriteMail.Send 应用程序权限。这些权限非常强大(属于攻击者喜爱的类型),因此将它们与应用程序访问策略结合部署非常重要(如下所述)。

其中大部分都很简单,Azure 自动化会及时发送电子邮件以提示管理员查看高优先级审核事件(图 1)。将 Runbook 附加到 Azure 自动化计划将确保租户管理员定期收到通知。

[玩转系统] 使用 Azure 自动化检测和报告 Microsoft 365 审核事件

将图形权限分配给托管身份

有两个问题值得额外关注。首先,将 Mail.ReadWrite 之类的图形权限分配给与托管身份一起使用的自动化帐户是另一项只能在 PowerShell 中进行的操作。这是我使用的代码:

$ManagedIdentity = Get-MgServicePrincipal -ServicePrincipalId d5469aa1-070f-4008-863b-e69b6646203a
$GraphApp = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'" # Microsoft Graph
$Role = $GraphApp.AppRoles | Where-Object {$_.Value -eq 'Mail.ReadWrite'}

$AppRoleAssignment = @{
     "PrincipalId" = $ManagedIdentity.Id
     "ResourceId" = $GraphApp.Id
     "AppRoleId" = $Role.Id }
# Assign the Graph permission
New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $ManagedIdentity.Id -BodyParameter $AppRoleAssignment

代码中的步骤是:

  • 使用服务主体标识符获取托管标识的自动化帐户的服务主体。您可以通过在 Azure AD 管理中心的企业应用程序部分选择托管标识并查看其属性来获取此信息。
  • 定义 Microsoft Graph 企业应用程序的标识符。该值始终为“00000003-0000-0000-c000-000000000000”。
  • 检索我要授予的权限的应用程序角色。过滤器提取 Mail.ReadWrite 角色的角色。
  • 使用获取的信息来构建新分配的参数。
  • 运行 New-MgServicePrincipalAppRoleAssignment cmdlet 将角色分配给自动化帐户的服务主体。分配角色即表示同意使用所请求的权限。

保护邮箱免受应用程序的攻击

其次,自动化帐户现在拥有 Mail.ReadWriteMail.Send 应用程序权限。 Microsoft Graph 将允许自动化帐户运行的代码访问租户中的任何邮箱并代表任何邮箱发送电子邮件。建立一个强大的工具来发送电子邮件可以让开发人员变得更容易,但这可能是一场安全噩梦。这就是应用程序访问策略的用武之地。

应用程序访问策略控制应用程序对邮箱的访问。在我们的场景中,我们可能只希望自动化帐户运行的代码能够访问有限数量的邮箱,甚至可能只有一个。为了使邮箱组易于维护,您可以创建通讯组列表来定义可访问邮箱组。

例如,此代码创建一个启用安全性的通讯组列表(无法使用正常通讯组列表)并向该列表添加一个邮箱。

New-DistributionGroup -Alias ManagedMailbox.Restrict -PrimarySmtpAddress [email protected] -Description "Restrict Access for Managed Mailboxes - used with Application Policy" -DisplayName "Restrict Access to Managed Mailbox" -IgnoreNamingPolicy -Name ManagedMailbox.Restrict -Type Security

Set-DistributionGroup -Identity ManagedMailbox.Restrict -ManagedBy Tony.Redmond -HiddenFromAddressListsEnabled $True

Add-DistributionGroupMember -Identity ManagedMailbox.Restrict -Member "[email protected]"

现在,我可以创建应用程序访问策略,以将自动化帐户限制为通讯组列表中定义的邮箱集。该策略激活后,Exchange Online 会立即将自动化帐户(包括使用托管标识的 Runbook)限制为分配的邮箱。

New-ApplicationAccessPolicy -AccessRight RestrictAccess -AppId "b977a222-3534-4625-980d-e2f864d3a2d5" -Description "Restrict Mailbox Access to Managed Identity" -PolicyScopeGroupId ManagedMailbox.Restrict

ScopeName        : Restrict Access to Managaed Mailbox
ScopeIdentity    : ManagedMailbox.Restrict
Identity         : a662313f-14fc-43a2-9a7a-d2e27f4f3478\b977a222-3534-4625-980d-e2f864d3a2d5:S-1-5-21-458367025-2064581115-2950179075-49778371;e33e4a0e-149d-4949-8c51-0c849df7b9ea
AppId            : b977a222-3534-4625-980d-e2f864d3a2d5
ScopeIdentityRaw : S-1-5-21-458367025-2064581115-2950179075-49778371;e33e4a0e-149d-4949-8c51-0c849df7b9ea
Description      : Restrict Mailbox Access to Managed Identity
AccessRight      : RestrictAccess
ShardType        : All
IsValid          : True
ObjectState      : Unchanged

策略的范围由上面创建的通讯组列表设置。代码中使用的 AppId 值是自动化帐户的应用程序标识符,您可以通过检查帐户的属性在 Azure AD 管理中心找到该标识符(图 2)。

[玩转系统] 使用 Azure 自动化检测和报告 Microsoft 365 审核事件

您可以从 GitHub 下载 Runbook 代码。

预定的自动化就是好的自动化

保护租户需要艰苦的工作和持续不断的努力。使用 Azure 自动化运行计划的 Runbook 来发现异常是确保没有人忘记检查情况的绝佳方法。现在,Exchange Online 管理模块支持托管标识,因此提供了一组新的可能性。大胆试试吧!

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

取消回复欢迎 发表评论:

关灯