构建可扩展的云取证与事件响应基础设施

本文详细介绍了如何利用Azure自动化、PowerShell脚本和虚拟机镜像技术,构建可跨区域扩展的云取证环境,解决传统取证工具在云环境中面临的规模、延迟和安全挑战。

可扩展的调查与事件响应基础设施

本文假设:

  • 您将创建Windows VM的镜像
  • 您在订阅中拥有完全权限
  • 您将在订阅中拥有两个资源组:一个用于模板,一个用于部署的VM

注意:本文重点介绍如何帮助您准备云取证。在适用的情况下,我们会链接到提供背景或更多详细信息的其他文档。

为什么云取证不同…以及一种适应方式

调查人员在将其传统的取证调查工具和能力转换到云环境时面临一些挑战。

  • 规模操作。执行本地和物理调查所需的硬件无法轻松应用于云环境(至少在没有大量时间和带宽下载和上传大量数据的情况下)。
  • 距离。将所有调查资产放在一个位置不利于及时响应。即使调查能力托管在云中,从全球另一端托管的机器获取证据仍会有延迟。
  • 更大暴露。调查机器可能在调查过程中被污染或感染,尤其是在涉及恶意软件分析时。还存在聚合数据的风险,调查机器本身可能因其可能包含的信息量而成为目标。
  • 维护。最后是维护。如果有一批始终开机的机器;这些需要操作系统以及所有软件更新和刷新进行修补和更新。

解决这些挑战的一种解决方案是创建用于调查的VM镜像,并根据需要部署。我们可以在多个区域创建几个调查VM并让它们运行以实现可用性和更新管理,但这将变得昂贵且更难管理。更好的选择是将预构建VM的镜像(最新且预部署工具和应用程序)部署到您需要的每个区域。然后您可以根据需要从每个镜像构建多个机器。该解决方案依赖于使用Azure PowerShell cmdlet、Azure自动化和Runbook。我们将在下一节讨论细节。

设置调查镜像

让我们看看如何设置您的取证环境,从创建工具VM、创建自动化账户、创建runbook、准备脚本和存储、保护凭据、测试和调度。

步骤1:构建和准备VM

我们需要做的第一件事是创建初始VM镜像作为模板。为此,我们将部署一个资源管理的Windows 10虚拟机。遵循标准创建过程并将其部署到您的模板资源组。确保应用了网络安全组,以仅允许端点进行远程访问。

部署后,我们连接到VM并将其配置到所需状态。接下来,我们运行Sysprep以删除所有用户账户和基于用户的自定义,使其成为通用镜像。(注意,如果您正在删除或更新Windows应用商店应用程序,在尝试运行Sysprep时可能会出错。有关更多信息,请参阅此支持文章:删除或更新包括内置Windows镜像的Microsoft应用商店应用程序后Sysprep失败

1
C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown /quiet

注意:要准备Linux VM进行镜像,请遵循此处的文档

步骤2:创建自动化账户

为了实现此解决方案的自动化方面,我们需要向“模板”资源组添加一个自动化账户。添加一个自动化账户,提供一个相关名称,并确保“创建Azure运行方式账户”设置为“是”。

有关自动化账户及其创建的更多详细信息,请参阅创建Azure自动化账户

要启用我们将创建的runbook中某些cmdlet的使用,首先在将执行脚本的自动化账户中导入/启用模块。选择新创建的自动化账户,然后确保存在以下模块。如果不存在;使用“添加模块”命令添加它们。

  • Azure
  • Azure.Storage
  • AzureRM.Automation
  • AzureRM.Compute
  • AzureRM.KeyVault
  • AzureRM.Network
  • AzureRM.Profile
  • AzureRM.Resources
  • AzureRM.Sql
  • AzureRM.Storage

步骤3:创建Runbook

现在我们需要创建runbook,即自动化账户将执行的PowerShell脚本。要创建runbook,请浏览到自动化账户的Runbooks部分。资源组 > 自动化账户 > Runbooks,然后选择“创建新runbook”。

要执行这些脚本,您需要创建一个PowerShell Runbook,但可以创建更多类型的runbook。我们需要创建总共五个runbook,涵盖我们想要自动化的操作。这些脚本都在我们的GitHub仓库中:

  1. Build New Template to Update.ps1
    此脚本将从我们的一个镜像部署VM,准备更新。

  2. Invoke Updates.ps1
    此脚本将在部署的VM上运行自定义脚本扩展,使其下载并执行“2a. WindowsUpdate.ps1”。

  3. Invoke Sysprep.ps1
    此脚本将在部署的VM上运行自定义脚本扩展,使其下载并执行“3a. sysprep.ps1”。

  4. Snapshot and Move to SAs.ps1
    此脚本将获取更新和通用化VM磁盘的快照。它将在每个可用的Azure区域创建存储账户,并将快照复制到每个存储账户。(可以修改以限制到所需区域)

  5. Create all Images and Cleanup
    此脚本从复制到每个区域的快照创建VM镜像,然后删除在此过程中创建的所有内容,因为它们不再需要。

每个脚本都已剥离所有变量名称,因此您需要更新它们并保存runbook后才能运行。每个变量旁边的注释应提供每个所需内容的描述。

有关创建runbook和访问runbook教程的更多信息,请参阅创建Azure自动化runbook

步骤4:创建存储账户和脚本

为了在VM上运行脚本,我们需要使脚本可用,并位于可以独立于VM更新的位置。为此,我们将创建一个存储账户,该账户将由“2. Invoke Updates.ps1”和“3. Invoke Sysprep.ps1”访问。

在模板资源组中,创建一个存储账户,在此存储账户的“blobs”部分创建一个容器,为其命名如“scripts”,并从GitHub上传以下两个PowerShell文件:

  1. 2a. WindowsUpdate.ps1
    此脚本将下载所有可用的Windows更新,并在需要时重新启动VM(参考链接)。

  2. 3a. sysprep.ps1
    此脚本将使用“generalize”和“OOBE”(开箱即用体验)标志执行Sysprep,然后关闭VM。

由于这些脚本在存储账户中而不在VM上,您可以随时更新它们以包含新功能,例如更新、安装或删除应用程序。

步骤5:安全存储凭据

为了管理从这些镜像部署的VM的机密和凭据,我们将利用Azure中的Key Vault功能。我们需要在我们正在使用的两个资源组中创建Key Vault:“模板”和“部署的VM”。在两个密钥保管库的创建过程中,我们需要确保将步骤2中创建的自动化账户作为主体添加到访问策略中,其权限为机密管理。

步骤6:测试过程

此时,您应该已经构建并sysprep了一个VM,一个启用了相关模块的自动化账户,五个包含所有自动化的runbook(变量已填充),一个包含要执行以更新模板的PowerShell脚本的存储账户,以及两个用于存储机密的密钥保管库。

在继续之前,是时候测试(并在需要时调试)您到目前为止所做的工作。导航到模板资源组,并按顺序执行以下runbook:

  1. 启动runbook“Snapshot and Move to SAs”
    检查“所有日志”以获取有关执行的信息。

  2. 等待2-3小时复制/移动完成。

  3. 启动runbook“Create all Images and Cleanup”
    检查“所有日志”以获取有关执行的信息。

  4. 等待完成约10分钟。

  5. 在Azure门户中,选择您刚刚创建的镜像,并按照向导从镜像部署VM。

  6. 等待5-10分钟VM部署。

  7. 连接到VM并验证一切是否按预期工作。

  8. 删除您创建和测试的VM及相关资源(NSG、vNet等)。

  9. 启动runbook“Build New Template to Update”
    检查“所有日志”以获取有关执行的信息。

  10. 等待VM部署约5-10分钟。

  11. 启动runbook“Invoke Updates”
    检查“所有日志”以获取有关执行的信息。
    如果您想检查这是在VM上运行的,可以检查并查看C:\UpdateLogs中的日志文件。

  12. 启动runbook“Invoke sysprep”
    检查“所有日志”以获取有关执行的信息。

  13. 等待Sysprep完成约15-20分钟。
    您的VM应关闭,并且您应该在VM图中看不到活动,这将确认Sysprep工作正常。

  14. 最后删除VM及相关资源(NSG、vNet等)。

如果您收到错误或失败,请调试runbook并重新测试。

步骤7:调度过程

现在您已经将VM镜像部署到所有所需区域,您可以设置自动化的最后一部分:配置调度以自动运行此过程。为此,请导航到自动化账户和调度。在这里,添加多个调度以定义每个任务的调度。为了最小化对最终用户的干扰,选择低使用时间,例如周六晚上和周日早上。无论您选择哪一天,我们建议保持顺序和等待期相同。例如:

名称 开始日期/时间 时区 重复
Deploy_Sat_PM 05/01/2019 23:00 UTC 每月第二个周六
Update_Sun_AM_1 06/01/2019 00:00 UTC 每月第二个周日
Update_Sun_AM_2 06/01/2019 01:00 UTC 每月第二个周六
Sysprep_Sun_AM 06/01/2019 02:00 UTC 每月第二个周六
CopyToSAs_Sun_AM 06/01/2019 04:00 UTC 每月第二个周六
ImageAndCleanup_Sun_AM 06/01/2019 07:00 UTC 每月第二个周六

将相关runbook分配给我们刚刚创建的调度:

调度名称 关联Runbook
Deploy_Saturday_PM DeployTemplateVM
Update_Sunday_AM_1 InvokeUpdate
Update_Sunday_AM_2 InvokeUpdate
Sysprep_Sunday_AM InvokeSysprep
CopyToSAs_Sunday_AM SnapshotAndCopy
ImageAndCleanup_Sunday_AM ImageAndCleanup

现在开始调查

我们刚刚创建的自动化将确保部署到所有Azure区域的VM镜像都是最新的并准备好使用。

要构建其中一个VM,请运行PowerShell脚本“CreateVM.ps1”(在分发之前需要配置变量)。这将要求您输入要部署到的区域和VM的唯一ID。部署后,您可以使用脚本中配置的用户名和“部署的VM”密钥保管库中的相应密码登录。当您完成VM后,可以使用DeleteVM.ps1和VM的唯一ID删除它(及其相关资源)。

您现在已经设置了VM工具箱,并需要用它做点什么。在本系列的下一篇博客中,我们将解释如何获取用于调查的VM。

Scott Miller, 高级服务工程师, MSRC

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