
一个用于在 Azure 和 O365 数据上运行威胁狩猎剧本的 PowerShell 模块,适用于云取证目的。
为了能够对 UnifiedAuditLog 拥有只读访问权限,需要在 Exchange Online 中具备以下角色:View-Only Audit Logs 或 Audit Logs。
默认情况下,这些角色已分配给 Exchange 管理中心中的 Compliance Management 角色组。
注意:如果您是安全分析师、事件响应人员或威胁猎人,并且您的组织没有授予您对这些审计日志的只读访问权限,那么您需要严肃质疑他们的检测和响应策略!
更多信息:
注意:管理员可以通过在 Azure 租户云 shell 或连接到 Azure 的本地 PowerShell 实例中运行
Get-ManagementRoleEntry "*\Search-UnifiedAuditLog"来验证这些要求。
请确认您已安装 ExchangeOnlineManagement(EXOv2)。您可以在网上找到安装说明,或直接前往我在 the soc analyst scrolls 的小知识库查看。
Import-Module .\source\AzureHunter.psd1只需执行以下操作:
Install-Module AzureHunter -Scope CurrentUser
Import-Module AzureHunter
统一审计日志包含在 Microsoft 365 管理中心或 Azure 管理门户中执行的用户、组、应用程序、域和目录活动。有关 Azure AD 事件的完整列表,请参阅 RecordTypes 列表。
UnifiedAuditLog 是云取证信息的极好来源,因为它包含关于多种类型云操作的大量数据,如 ExchangeItems、SharePoint、Azure AD、OneDrive、数据治理、数据丢失防护、Windows Defender 警报和隔离事件、Microsoft Defender for Office 365 中的威胁情报事件,等等,不一而足!
AzureHunter 实现了一些有用的逻辑,以确保从 Azure 和 O365 审计日志中挖掘和导出最高的日志密度。为此,每个周期(批次)执行两项不同的操作:

建议在运行任何 AzureHunter 命令之前先运行 Connect-ExchangeOnline。该程序会检查是否存在活动的远程会话并尝试连接,但某些版本的 PowerShell 不允许这样做,无论如何您都需要自行连接。
AzureHunter 有两个主要命令:Search-AzureCloudUnifiedLog 和 Invoke-AzHunterPlaybook。
Search-AzureCloudUnifiedLog 的目的是实现复杂的逻辑,以确保从 Azure 中挖掘到最高百分比的 UnifiedAuditLog 记录。默认情况下,它会将提取并去重后的记录导出到 CSV 文件。
Invoke-AzHunterPlaybook 的目的是为存储在 playbooks 文件夹中的狩猎剧本提供灵活的接口。这些剧本设计为任何人都可以贡献自己的分析和想法。到目前为止,只开发了两个非常简单的剧本:AzHunter.Playbook.Exporter 和 AzHunter.Playbook.LogonAnalyser。Exporter 负责对数据应用去重和排序操作后导出记录。LogonAnalyser 处于测试模式,提取 Operations 属性为 UserLoggedIn 的事件。它是一个展示如何通过剧本实现功能以及构建剧本的简单程度的示例。
运行 Search-AzureCloudUnifiedLog 时,您可以传入一个剧本列表,以便在每个日志批次上运行。Search-AzureCloudUnifiedLog 会通过 Invoke-AzHunterPlaybook 将批次传递给剧本。
最后,Invoke-AzHunterPlaybook 也可以独立使用。如果您有 UnifiedAuditLog 记录的导出文件,可以将其加载到 PowerShell 数组中,然后传递给此命令并指定相应的剧本。
Search-AzureCloudUnifiedLog -StartDate "2020-03-06T10:00:00" -EndDate "2020-06-09T12:40:00" -TimeInterval 12 -AggregatedResultsFlushSize 5000 -Verbose
此命令将:
AggregatedResultsFlushSize 参数指定下游剧本将处理的记录批次。我们在此告诉 AzureHunter,一旦总记录数达到 5000,就处理该批次。这样,您可以即时获取结果,而无需等待数小时直到大量记录被导出到 CSV 文件。我们假设您已将 UnifiedAuditLog 记录导出到 CSV 文件,然后可以执行以下操作:
$RecordArray = Import-Csv .\my-exported-records.csv
Invoke-AzHunterPlaybook -Records $RecordArray -Playbooks 'AzHunter.Playbook.UAL.LogonAnalyser'
您可以通过逗号分隔运行多个剧本,它们将按顺序执行:
$RecordArray = Import-Csv .\my-exported-records.csv
Invoke-AzHunterPlaybook -Records $RecordArray -Playbooks 'AzHunter.Playbook.UAL.Exporter', 'AzHunter.Playbook.UAL.LogonAnalyser'
我们假设您已将电子发现摘要报告导出到 CSV 文件,然后可以执行以下操作:
$eDiscoReportFile = .\eDisco-Summary-Report-PersonOfInterest.csv
Invoke-AzHunterPlaybook -Records $eDiscoReportFile -Playbooks 'AzHunter.Playbook.eDisco.SummaryReportCleaner'
或者,我们可以向剧本传递一些参数,如下所示:
$eDiscoReportFile = .\eDisco-Summary-Report-PersonOfInterest.csv
Invoke-AzHunterPlaybook -Records $eDiscoReportFile -Playbooks 'AzHunter.Playbook.eDisco.SummaryReportCleaner' -PlayBookParameters @{"CsvRecordsBatchSize" = 700}
参数 "CsvRecordsBatchSize" 将告诉剧本以每批 700 条记录的方式将记录刷新到磁盘。
自从 SolarWinds 供应链攻击 之后,许多工具从网络取证专家的深层熔炉中涌现出来,由网络安全忍者精心开发。这些工具通常帮助您在 Azure 中执行云取证。我开发 AzureHunter 的目的不是给这个拥挤的空间增加更多噪音,但我发现自己需要解决一些我观察到的该领域某些工具存在的差距(我可能错了,因为目前工具泛滥,我并非全都了解……):
Playbooks。我想提出一个简单的框架,帮助社区创建和共享新的剧本,以从相同数据中提取不同类型的信息。然而,如果您正在寻找功能更丰富、更成熟的 Azure 云取证应用程序,我建议您查看以下由网络安全专家创建的出色应用程序:
我相信还有更多的工具列表,但这些是我能想到的。请随时提出更多建议。
有关更多信息
感谢所有支持本项目和其它开源项目的人!你们正在帮助像我这样的人走上 网络战士之路,并向社区交付高质量的工具制品 :)