在专用账户中测试 GuardDuty 调查发现 - Amazon GuardDuty

在专用账户中测试 GuardDuty 调查发现

使用本文档运行测试程序脚本,以根据将部署到 AWS 账户中的测试资源生成 GuardDuty 调查发现。如果您想了解和学习某些 GuardDuty 调查发现类型以及调查发现详细信息如何查找您账户中的实际资源,可以执行这些步骤。这种体验不同于生成示例发现结果。要详细了解测试 GuardDuty 调查发现的体验,请参阅注意事项

注意事项

在继续操作之前,请注意以下事项:

  • GuardDuty 建议在专用的非生产 AWS 账户中部署测试程序。这种方法可确保您能够正确识别测试程序生成的 GuardDuty 调查发现。此外,GuardDuty 测试程序会部署各种资源,这些资源可能需要超出其他账户中允许的 IAM 权限。使用专用账户可确保通过明确的账户边界来恰当界定权限范围。

  • 测试程序脚本可生成 100 多个 GuardDuty 调查发现,具有不同的 AWS 资源组合。目前,这并未包括所有 GuardDuty 调查发现类型。有关可使用此测试程序脚本生成的调查发现类型列表,请参阅测试程序脚本可以生成的 GuardDuty 调查发现

  • 为确保 GuardDuty 测试程序按预期运行,需要在部署测试程序资源的账户中启用 GuardDuty。根据将要运行的测试,测试程序会评估是否启用了恰当的 GuardDuty 防护计划。对于任何未启用的防护计划,GuardDuty 将请求启用所需防护计划的权限,以便 GuardDuty 能够执行将生成调查发现的测试。稍后,GuardDuty 将在测试完成后禁用该防护计划。

    首次启用 GuardDuty

    当您在特定区域中首次为专用账户启用 GuardDuty 时,您的账户将自动注册 30 天免费试用期。

    GuardDuty 提供了可选防护计划。在启用 GuardDuty 时,某些防护计划也已启用,并包含在 GuardDuty 的 30 天免费试用期中。有关更多信息,请参阅 使用 GuardDuty 30 天免费试用期

    在运行测试程序脚本之前,已经在您的账户启用了 GuardDuty

    GuardDuty 已经启用时,测试程序脚本将根据参数检查某些防护计划的配置状态以及生成调查发现所需的其他账户级别设置。

    通过运行此测试程序脚本,某些防护计划可能会在您位于某个区域的专用账户中首次启用。该防护计划的 30 天免费试用期将由此开始计算。有关每个防护计划相关的免费试用期的信息,请参阅使用 GuardDuty 30 天免费试用期

测试程序脚本可以生成的 GuardDuty 调查发现

目前,测试程序脚本生成以下与 Amazon EC2、Amazon EKS、Amazon S3、IAM 和 EKS 审计日志有关的调查发现类型:

第 1 步 – 先决条件

要准备测试环境,您需要以下项目:

  • Git:根据您使用的操作系统安装 git 命令行工具。克隆 amazon-guardduty-tester 存储库 将需要此项目。

  • AWS Command Line Interface:是一种开源工具,让您能够在命令行 Shell 中使用命令与 AWS 服务进行交互。有关更多信息,请参阅《AWS Command Line Interface 用户指南》中的 Get started with AWS CLI

  • AWS Systems Manager:要使用 AWS CLI 启动与托管式节点的 Session Manager 会话,您必须在本地计算机上安装 Session Manager 插件。有关更多信息,请参阅《AWS Systems Manager 用户指南》中的为 AWS CLI 安装 Session Manager 插件

  • 节点包管理器(NPM):安装 NPM 以安装所有依赖项。

  • Docker:您必须已经安装 Docker。有关安装说明,请参阅 Docker 网站

    要验证是否已安装 Docker,请运行以下命令并确认是否有与以下输出类似的输出:

    $ docker --version Docker version 19.03.1
  • AWS Marketplace 中订阅 Kali Linux 映像。

第 2 步 – 部署 AWS 资源

本节列出了在专用账户中部署某些 AWS 资源的关键概念和步骤。

概念

以下列表提供了与有助您部署资源的命令相关的关键概念:

  • AWS Cloud Development Kit (AWS CDK):是一个开源软件开发框架,可用于通过 AWS CloudFormation 在代码中定义云基础设施并进行预置。CDK 支持多种编程语言,从而定义称为构造的可重用云组件。您可以将构造组合成堆栈和应用程序。然后,您可以将 CDK 应用程序部署到 AWS CloudFormation 以预置或更新资源。有关更多信息,请参阅《AWS Cloud Development Kit (AWS CDK) 开发人员指南》中的 What is the AWS CDK?

  • 引导:这是位列与 AWS CDK 结合使用而准备 AWS 环境的过程。在将 CDK 堆栈部署到 AWS 环境之前,必须先对环境进行引导。在环境中预置由将使用 AWS CDK 的特定 AWS 资源的过程,是下一节(部署 AWS 资源的步骤)中将执行的步骤的一部分。

    有关引导工作原理的更多信息,请参阅《AWS Cloud Development Kit (AWS CDK) 开发人员指南》中的 Bootstrapping

部署 AWS 资源的步骤

执行以下步骤以开始部署资源:

  1. 除非在 bin/cdk-gd-tester.ts 文件中手动设置了专用账户区域变量,否则请设置 AWS CLI 默认账户和区域。有关更多信息,请参阅《AWS Cloud Development Kit (AWS CDK) 开发人员指南》中的 Environments

  2. 运行以下命令来部署资源:

    git clone https://github.com/awslabs/amazon-guardduty-tester && cd amazon-guardduty-tester npm install cdk bootstrap cdk deploy

    最后一个命令 (cdk deploy) 将代表您创建一个 AWS CloudFormation 堆栈。该堆栈的名称为 GuardDutyTesterStack

    作为此脚本的一部分,GuardDuty 会创建新的资源,以便在您的账户中生成 GuardDuty 调查发现。此外还会向 Amazon EC2 实例添加以下标签键值对:

    CreatedBy:GuardDuty Test Script

    Amazon EC2 实例还包括托管 EKS 节点和 ECS 集群的 EC2 实例。

    实例类型

    GuardDuty 将为所有资源创建 t3.micro,Amazon EKS 节点组除外。由于 EKS 至少需要 2 个核心,因此 EKS 节点具有 t3.medium 实例类型。有关实例类型的更多信息,请参阅《Amazon EC2 实例类型指南》中的可用大小

第 3 步 – 运行测试程序脚本

此过程分为两步,首先需要启动与测试驱动程序的会话,然后运行脚本来生成具有特定资源组合的 GuardDuty 调查发现。

  1. 部署资源后,将区域代码保存到当前终端会话中的某个变量中。使用以下命令,并将 us-east-1 替换为部署资源的区域代码:

    $ REGION=us-east-1
  2. 测试程序脚本只能通过 AWS Systems Manager(SSM)获得。要在测试程序主机实例上启动交互式 Shell,请查询主机 InstanceId

  3. 使用以下命令启动与测试程序脚本的会话:

    aws ssm start-session --region $REGION --document-name AWS-StartInteractiveCommand --parameters command="cd /home/ssm-user/py_tester && bash -l" --target $(aws ec2 describe-instances --region $REGION --filters "Name=tag:Name,Values=Driver-GuardDutyTester" --query "Reservations[].Instances[?State.Name=='running'].InstanceId" --output text)

测试程序脚本是一种基于 Python 的程序,可动态构建 bash 脚本以根据您的输入生成调查发现。您可以灵活地根据一种或多种 AWS 资源类型、GuardDuty 防护计划、威胁目的(战术)、基础数据来源测试程序脚本可以生成的 GuardDuty 调查发现来生成调查发现。

以下列命令示例为参考,然后运行一个或多个命令来生成要探索的调查发现:

python3 guardduty_tester.py python3 guardduty_tester.py --all python3 guardduty_tester.py --s3 python3 guardduty_tester.py --tactics discovery python3 guardduty_tester.py --ec2 --eks --tactics backdoor policy execution python3 guardduty_tester.py --eks --runtime only python3 guardduty_tester.py --ec2 --runtime only --tactics impact python3 guardduty_tester.py --log-source dns vpc-flowlogs python3 guardduty_tester.py --finding 'CryptoCurrency:EC2/BitcoinTool.B!DNS'

如需有关有效参数的更多信息,您可以运行以下帮助命令:

python3 guardduty_tester.py --help

选择一种您偏好的方法,以便查看账户中生成的调查发现。

GuardDuty console
  1. 登录 AWS Management Console,打开 GuardDuty 控制台:https://console.aws.amazon.com/guardduty/

  2. 在导航窗格中,选择 调查发现

  3. 从调查发现表中,选择要查看详细信息的调查发现。这时将打开调查发现详细信息面板。有关信息,请参阅了解和生成 Amazon GuardDuty 调查发现

  4. 如果要筛选这些调查发现,请使用资源标签键和值。例如,要筛选为 Amazon EC2 实例生成的调查发现,请将 CreatedBy:GuardDuty Test Script 作为实例标签键实例标签键的标签键值对。

API
AWS CLI
  • 运行以下 AWS CLI 命令查看生成的调查发现,并将 us-east-112abc34d567e8fa901bc2d34EXAMPLE 替换为适当的值:

    aws guardduty list-findings --region us-east-1 --detector-id 12abc34d567e8fa901bc2d34EXAMPLE

    要查找您账户和当前区域的 detectorId,请查看 https://console.aws.amazon.com/guardduty/ 控制台中的设置页面,或者运行 ListDetectors API。

    要详细了解可用于筛选调查发现的参数,请参阅《AWS CLI 命令参考》中的 list-findings

第 4 步 – 清理 AWS 测试资源

当测试程序脚本结束时,在第 3 步 – 运行测试程序脚本期间进行的账户级别设置和其他配置状态更新都将回到原始状态。

运行测试程序脚本后,您可以选择清理 AWS 测试资源。您可以选择通过以下方法之一来完成此操作:

常见问题疑难解答。

GuardDuty 确定了若干常见问题并提供了故障排除步骤建议:

  • Cloud assembly schema version mismatch:将 AWS CDK CLI 更新到与所需云程序集版本兼容的版本,或更新到最新可用版本。有关更多信息,请参阅 AWS CDK CLI compatibility

  • Docker permission denied:将专用账户用户添加到 docker-users 中,以便专用账户可以运行命令。有关这些步骤的更多信息,请参阅 Docker access denied

  • Your requested instance type is not supported in your requested Availability Zone:某些可用区不支持特定的实例类型。要确定哪些可用区支持您的首选实例类型并重新尝试部署 AWS 资源,请执行以下步骤:

    1. 选择一种您偏好的方法,确定哪些可用区支持您的实例类型:

      Console
      识别支持首选实例类型的可用区
      1. 登录到 AWS Management Console 并打开 Amazon EC2 控制台(https://console.aws.amazon.com/ec2/)。

      2. 使用页面右上角的 AWS 区域选择器,选择要启动实例的区域。

      3. 在导航窗格中的实例下,选择实例类型

      4. 实例类型表中,选择一个首选实例类型。

      5. 联网下,查看可用区下列出的区域。

        根据此信息,您可能需要选择一个能够部署相关资源的新区域。

      AWS CLI

      运行以下命令来查看可用区列表。务必要指定首选实例类型和区域 (us-east-1)。

      aws ec2 describe-instance-type-offerings --location-type availability-zone --filters Name=instance-type,Values=Preferred instance type --region us-east-1 --output table

      有关此命令的更多信息,请参阅《AWS CLI 命令参考》中的 describe-instance-type-offerings

      如果您在运行此命令时遇到错误,请确认您使用的是最新版本的 AWS CLI。有关更多信息,请参阅《AWS Command Line Interface User Guide》中的 Troubleshooting

    2. 尝试重新部署 AWS 资源并指定支持一个您的首选实例类型的可用区。

      重新尝试部署 AWS 资源
      1. bin/cdk-gd-tester.ts 文件中设置默认区域。

      2. 要指定可用区,请使用 amazon-guardduty-tester/lib/common/network/vpc.ts 文件。

      3. 请将在此文件中的 maxAzs: 2, 替换为必须为您的实例类型指定可用区的 availabilityZones: ['us-east-1a', 'us-east-1c'],

      4. 继续完成部署 AWS 资源的步骤下剩余的步骤。