在专用账户中测试 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 资源的步骤
执行以下步骤以开始部署资源:
-
除非在
bin/cdk-gd-tester.ts
文件中手动设置了专用账户区域变量,否则请设置 AWS CLI 默认账户和区域。有关更多信息,请参阅《AWS Cloud Development Kit (AWS CDK) 开发人员指南》中的 Environments。 -
运行以下命令来部署资源:
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 调查发现。
-
部署资源后,将区域代码保存到当前终端会话中的某个变量中。使用以下命令,并将
us-east-1
替换为部署资源的区域代码:$ REGION=
us-east-1
-
测试程序脚本只能通过 AWS Systems Manager(SSM)获得。要在测试程序主机实例上启动交互式 Shell,请查询主机 InstanceId。
-
使用以下命令启动与测试程序脚本的会话:
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 --tacticsdiscovery
python3 guardduty_tester.py --ec2
--eks
--tacticsbackdoor
policy
execution
python3 guardduty_tester.py --eks
--runtime
only python3 guardduty_tester.py --ec2
--runtime
only --tacticsimpact
python3 guardduty_tester.py --log-sourcedns
vpc-flowlogs
python3 guardduty_tester.py --finding 'CryptoCurrency:EC2/BitcoinTool.B!DNS
'
如需有关有效参数的更多信息,您可以运行以下帮助命令:
python3 guardduty_tester.py --help
选择一种您偏好的方法,以便查看账户中生成的调查发现。
第 4 步 – 清理 AWS 测试资源
当测试程序脚本结束时,在第 3 步 – 运行测试程序脚本期间进行的账户级别设置和其他配置状态更新都将回到原始状态。
运行测试程序脚本后,您可以选择清理 AWS 测试资源。您可以选择通过以下方法之一来完成此操作:
-
运行以下命令:
cdk destroy
-
删除名为 GuardDutyTesterStack 的 AWS CloudFormation 堆栈。有关这些步骤的信息,请参阅通过 AWS CloudFormation 控制台删除堆栈。
常见问题疑难解答。
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 资源,请执行以下步骤:-
选择一种您偏好的方法,确定哪些可用区支持您的实例类型:
-
尝试重新部署 AWS 资源并指定支持一个您的首选实例类型的可用区。
重新尝试部署 AWS 资源
-
在
bin/cdk-gd-tester.ts
文件中设置默认区域。 -
要指定可用区,请使用
amazon-guardduty-tester/lib/common/network/vpc.ts
文件。 -
请将在此文件中的
maxAzs: 2,
替换为必须为您的实例类型指定可用区的availabilityZones: ['
。us-east-1a
', 'us-east-1c
'], -
继续完成部署 AWS 资源的步骤下剩余的步骤。
-
-