一个只读的PowerShell模块,用于检测Azure AD中的UNC2452及其他威胁行为者痕迹,审计联合域、服务主体、应用程序和邮箱权限以发现入侵指标。
本仓库包含一个 PowerShell 模块,用于检测可能指示 UNC2452 及其他威胁行为者活动的痕迹。某些痕迹是“高置信度”的入侵指标,而其他痕迹则属于所谓的“双重用途”痕迹。双重用途痕迹可能与威胁行为者活动有关,也可能与合法功能有关。需要对这些痕迹进行分析和验证。有关 UNC2452 所用技术的详细说明,请参阅我们的博客。
此工具为只读工具。它不会对 Microsoft 365 环境进行任何更改。
总之,该模块将:
它不会:
借助社区反馈,该工具在检测 IOC 方面可能会更加全面。如有问题、想法或反馈,请提交 issue、提交 PR 或联系作者。
该模块使用 MS Online PowerShell 来查找和审计 Azure AD 中的联合域。所有联合域将输出到文件 federated domains.csv。
any.sts 作为颁发者 URI 的联合域发出警报。这表明使用了 Azure AD Backdoor 工具。考虑执行取证调查以确定更改方式并识别其他入侵证据。!! Evidence of AAD backdoor found. Consider performing a detailed forensic investigation Domain name: foobar.com Domain federation name: Federation issuer URI: http://any.sts/16B45E3B
:bangbang: 该脚本已识别到一个域名已与一个颁发者URI联合,该URI是[Azure AD后门](https://github.com/Gerenios/AADInternals/blob/master/FederatedIdentityTools.ps1)的指标。后门默认将颁发者URI设置为hxxp://any.sts。建议进行取证调查,以确定更改是如何发生的,并识别任何其他入侵证据。```
!! A token signing certificate has a validity period of more than 365 days.
This may be evidence of a signing certificate not generated by AD FS.
Domain name: foobar.com
Federation issuer uri: http://sts.foobar.com
Signing cert not valid before: 1/1/2020 00:00:00
Signing cert not valid after: 12/31/2025 23:59:59
⚠️ 脚本识别出一个联合域,其令牌签名证书的有效期超过标准的 365 天。请咨询管理员,确认该令牌签名证书是否由人工管理,且其所述有效期是否符合预期。如果非预期情况,请考虑执行取证调查。
此模块使用 Azure AD PowerShell 查找并审计 Azure AD 中的服务主体。
!! Identified first-party (Microsoft published) Service Principals with added credentials. Only in rare cases should a first-party Service Principal have an added credential. Verify that the added credential has a legitimate use case and consider further investigation if not
Object ID : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx App ID : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Display Name : Office 365 Exchange Online Key Credentials :
CustomKeyIdentifier : EndDate : 12/9/2017 2:10:29 AM KeyId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx StartDate : 12/9/2015 1:40:30 AM Type : AsymmetricX509Cert Usage : Verify Value :
:warning: 此脚本已识别出一个第一方(微软)服务主体添加了凭据。第一方服务主体通常不应添加凭据,除非在极少数情况下。曾处于或目前处于混合模式的环境可能已为 Exchange Online、Skype for Business 及 AAD 密码保护代理服务主体添加了凭据。这也可能是您环境中 UNC2452 活动的痕迹。请咨询您的管理员并搜索审核日志以验证该凭据是否合法。您还可以使用 Azure AD 登录边栏中的“服务主体登录”选项卡,搜索使用此服务主体对您租户进行的身份验证。```
!! Identified Service Principals with high-risk API permissions and added credentials.
Verify that the added credential has a legitimate use case and consider further investigation if not
Object ID : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
App ID : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Display Name : TestingApp
Key Credentials :
CustomKeyIdentifier :
EndDate : 1/7/2025 12:00:00 AM
KeyId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
StartDate : 1/7/2021 12:00:00 AM
Type : Symmetric
Usage : Verify
Value :
Password Credentials :
Risky Permissions : Domain.ReadWrite.All
⚠️ 脚本已识别出一个具有高风险API权限且已添加凭据的服务主体。这可能是预期的,因为某些第三方或自定义构建的应用程序需要添加凭据才能运行。这也可能是您环境中UNC2452活动的痕迹。请与管理员协商并搜索审计日志以验证该凭据是否合法。您也可以使用Azure AD登录边栏选项卡中的“服务主体登录”选项卡,搜索使用此服务主体对您的租户进行的身份验证。
此模块使用Azure AD PowerShell查找和审计Azure AD中的应用程序。
!! High-privileged Application with credentials found. Validate that the application needs these permissions. Validate that the credentials added to the application are associated with a legitimate use case.
ObjectID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx AppID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx DisplayName: Acme Test App KeyCredentials: PasswordCredentials:
CustomKeyIdentifier : EndDate : 12/22/2021 4:01:52 PM KeyId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx StartDate : 12/22/2020 4:01:52 PM Value :
CustomKeyIdentifier : EndDate : 12/21/2021 6:32:54 PM KeyId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx StartDate : 12/21/2020 6:33:16 PM Value :
Risky Permissions: Mail.Read (Read mail in all mailboxes) Directory.Read.All (Read all data in the organization directory)
:warning: 该脚本已识别出一个具有高风险 API 权限并添加了凭据的应用程序。这可能在意料之内,因为某些第三方或自定义构建的应用程序需要添加凭据才能正常运行。这也可能是环境中 UNC2452 活动的迹象。请咨询您的管理员并搜索审核日志以验证该凭据是否合法。
### 云解决方案提供商计划 (Invoke-MandiantGetCSPInformation)
此模块检查租户是否由 CSP 或合作伙伴管理,以及是否启用了委派管理。委派管理允许 CSP 以与全局管理员相同的权限访问客户租户。尽管 CSP 计划对合作伙伴的租户实施了强大的安全控制,但攻陷 CSP 的威胁行为者仍可能能够访问客户环境。组织应验证其合作伙伴是否需要委派管理权限,如果不需要则将其移除。如果合作伙伴必须保留委派管理权限,请考虑实施条件访问策略以限制其访问。
组织可以通过导航到 [管理中心](https://admin.microsoft.com),在左侧菜单栏中选择 `设置` -> `合作伙伴关系` 来检查和管理的伙伴关系。
### 邮箱文件夹权限 (Get-MandiantMailboxFolderPermissions)
此模块审核租户中所有邮箱是否存在可疑的文件夹权限。具体来说,该模块将检查每个邮箱中的“顶层信息存储”和“收件箱”文件夹,并检查分配给“默认”和“匿名”用户的权限。任何非“无”的值都将导致该邮箱被标记为需要分析。通常情况下,“默认”和“匿名”用户不应拥有对用户收件箱的权限,因为这将允许任何用户读取其内容。某些组织可能会发现共享邮箱拥有此权限,但这并非推荐的做法。
### 应用程序模拟 (Get-MandiantApplicationImpersonationHolders)
此模块输出持有 ApplicationImpersonation 角色的用户和组列表。该命令输出中的任何用户或组成员都可以使用模拟“充当”并访问租户中任何其他用户的邮箱。组织应审核此命令的输出,以确保仅包含预期的用户和组,并在可能的情况下进一步限制范围。
### Purview 审核(原高级审核)(Invoke-MandiantCheckAuditing)
此模块将枚举租户中所有已获得 Purview 审核邮件访问权限许可的许可用户。它会生成一个 CSV 报告,记录该功能是否已在符合条件的邮箱上启用。组织应过滤那些符合邮件访问条件但未启用该功能的邮箱,并验证这是否是故意的。
### 统一审核日志 (Get-MandiantUnc2452AuditLogs)
此模块是一个辅助脚本,用于搜索统一审核日志。搜索统一审核日志存在许多容易忽略的技术细节。此模块通过实施最佳实践来处理这些细节并处理一些常见错误,从而简化搜索过程。
默认情况下,该模块将搜索可能记录 UNC2452 技术的日志条目。这些日志记录也可能捕获合法的管理员活动,需要进行验证。
* **更新应用程序** - 记录更新应用注册的操作。
* **设置域身份验证** - 记录域身份验证设置的更改,包括创建联合领域对象。这些事件应在环境中很少发生,可能表明威胁行为者正在配置 Azure AD 后门。
* **设置联合设置** - 记录域联合领域对象的修改。这些事件应在环境中很少发生,可能表明威胁行为者正准备执行 Golden SAML 攻击。
* **更新应用程序证书和机密** - 记录向应用注册添加机密或证书的操作。
* **PowerShell 邮箱登录** - 记录客户端应用程序为 PowerShell 的邮箱登录操作。
* **更新服务主体** - 记录对现有服务主体进行的更新。
* **添加服务主体凭据** - 记录向服务主体添加机密或证书的操作。
* **添加应用角色分配** - 记录添加应用角色(应用程序权限)的操作。
* **用户的应用程序角色分配** - 记录向用户分配应用角色的操作。
* **PowerShell 身份验证** - 记录用户使用 PowerShell 客户端向 Azure AD 进行身份验证的操作。
* **新的管理角色分配** - 记录创建新的管理角色分配的操作。这对于识别新的 ApplicationImpersonation 授权非常有用。
## 用法
### 所需模块
此 PowerShell 模块需要安装三个 Microsoft 365 PowerShell 模块。
* AzureAD
* MSOnline
* ExchangeOnlineManagement
* Microsoft.Graph
安装模块:
1. 以本地管理员身份打开 PowerShell 窗口(右键单击,然后选择“以管理员身份运行”)
2. 运行命令 `Install-Module <MODULE NAME HERE>` 并按照提示操作
### 所需的用户权限
此 PowerShell 模块必须使用分配了特定权限的 Microsoft 365 帐户运行。
* Azure AD 门户中的 `全局管理员` 或 `全局读取者` 角色
* Exchange 控制面板中的 `仅查看审核日志` 权限
* `User.Read.All` 和 `Directory.Read.All` 范围。`全局读取者` 角色持有者应能够自动使用这些范围。
授予帐户 Exchange 控制面板中的 `仅查看审核日志` 权限:
1. 导航到 https://outlook.office365.com/ecp 并以全局管理员或 Exchange 管理员身份登录(注意:如果您在替代云中,具体 URL 可能不同)
2. 在仪表板中点击 `管理员角色`,或者如果您使用新 UI,则展开左侧的 `角色` 选项卡并点击 `管理员角色`
3. 通过点击 `+` 号或点击 `添加新角色组` 来创建新的管理员角色
4. 为您的角色指定一个名称和默认写入范围
5. 向该角色添加 `仅查看审核日志` 权限
6. 将用户添加到该角色
**注意** 此角色生效最多可能需要一个小时
### 运行工具
1. 将此工具下载为 ZIP 并解压缩,或将存储库克隆到您的系统
2. 打开 PowerShell 窗口
3. 将目录更改为该模块的位置 `cd C:\path\to\the\module`
4. 导入此模块 `Import-Module .\MandiantAzureADInvestigator.psd1` 您应该会收到以下输出```
Mandiant Azure AD Investigator
Focusing on UNC2452 Investigations
PS C:\Users\admin\Desktop\mandiant>
Connect-MandiantAzureEnvironment -UserPrincipalName <your username here> 连接到 Azure AD。您应该会收到登录提示,并且 PowerShell 窗口会输出指示连接已建立的信息。注意:如果遇到问题,您可能需要通过运行 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned 来更改执行策略。这可能需要管理员权限。```The module allows access to all existing remote PowerShell (V1) cmdlets in addition to the 9 new, faster, and more reliable cmdlets.
|--------------------------------------------------------------------------| | Old Cmdlets | New/Reliable/Faster Cmdlets | |--------------------------------------------------------------------------| | Get-CASMailbox | Get-EXOCASMailbox | | Get-Mailbox | Get-EXOMailbox | | Get-MailboxFolderPermission | Get-EXOMailboxFolderPermission | | Get-MailboxFolderStatistics | Get-EXOMailboxFolderStatistics | | Get-MailboxPermission | Get-EXOMailboxPermission | | Get-MailboxStatistics | Get-EXOMailboxStatistics | | Get-MobileDeviceStatistics | Get-EXOMobileDeviceStatistics | | Get-Recipient | Get-EXORecipient | | Get-RecipientPermission | Get-EXORecipientPermission | |--------------------------------------------------------------------------|
To get additional information, run: Get-Help Connect-ExchangeOnline or check https://aka.ms/exops-docs
Account Environment TenantId TenantDomain
[email protected] AzureCloud xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx test.onm...
5. 运行所有检查 `Invoke-MandiantAllChecks -OutputPath <path\to\output\files>`。您也可以使用特定 cmdlet 运行单个检查。
6. 在屏幕上查看输出以及写入的 CSV 文件。
## 延伸阅读
有关 Mandiant 关于 UNC2452 的更多信息,请参阅:
* [高度规避的攻击者利用 SolarWinds 供应链通过 SUNBURST 后门入侵多个全球受害者](https://www.mandiant.com/resources/evasive-attacker-leverages-solarwinds-supply-chain-compromises-with-sunburst-backdoor)
* [针对 Microsoft 365 的补救和强化策略以防御 UNC2452](https://www.mandiant.com/resources/remediation-and-hardening-strategies-for-microsoft-365-to-defend-against-unc2452)
对 UNC2452 的应对措施是安全行业的一次重大努力,这些博客大量引用了其他贡献,这些贡献对本工具的用户将很有价值。我们建议阅读这些文章中的链接材料,以最好地了解您环境中的活动。一如既往,Mandiant 团队可以通过[在此联系我们](https://www.mandiant.com/report-incident)来回答后续问题或进一步协助调查。