测试和评估 GuardDuty 检测 安全博客
- 12
测试和评估 GuardDuty 检测结果
关键要点
Amazon GuardDuty 是一种威胁检测服务,持续监控和分析 AWS 环境中的数据源和日志。GuardDuty 识别潜在安全问题时,会创建检测结果,提供相关信息及背景。使用开源工具 GuardDuty Tester 可以更好地测试和响应 GuardDuty 检测结果。本文提供了一些使用 GuardDuty Tester 的实用示例,包括手动调查、创建警报和自动响应。Amazon GuardDuty 是一种持续监测的威胁检测服务,能够分析和处理您 AWS 环境中的数据源和日志。GuardDuty 利用威胁情报源,如恶意 IP 地址和域名、文件哈希以及机器学习模型,来识别 AWS 环境中可疑或潜在恶意的活动。当 GuardDuty 识别到潜在的安全问题时,会生成一个 GuardDuty 检测结果,提供有关潜在安全问题、相关资源和关键上下文信息。这些信息对于解决问题至关重要。GuardDuty 通过不断扩展对新兴和常见威胁的检测能力,帮助您监控最新威胁。
无论您是刚接触 GuardDuty 还是长期用户,了解不同的 GuardDuty 检测结果类型 和 检测结果详细信息 都非常重要,建议根据 AWS WellArchitected 中的安全支柱进行实践响应。
在本文中,我将深入探讨用于测试 GuardDuty 检测结果的开源工具,并逐步展示如何使用该工具测试和改善对 GuardDuty 检测结果的响应。
概述
如果您想了解更多关于 GuardDuty 的信息,可以查看 AWS 文档 中的检测结果类型。然而,客户通常希望在他们的环境中获得更真实的检测结果,以了解实际检测结果的样子,并进行动手实践。尽管您可以使用 GuardDuty 创建 示例检测结果,但这些检测结果只是填充了占位符值的近似值,与真实检测结果不同。此外,这些检测结果无法与您账户中的实际资源关联,因此无法进行补救实践。这在您仅想查看检测结果中的详细信息时可能有用,但如果您希望练习真实场景,示例检测结果可能不够用。
为了解决这一用例,并为客户提供一种安全、可靠的方式来测试 GuardDuty 的威胁检测能力,GuardDuty 服务团队推出了一款名为 GuardDuty Tester 的开源项目。GuardDuty Tester 在您的环境中创建基础设施,以模拟不同的安全问题,使您能够测试与实际安全问题相似的 GuardDuty 检测结果,例如加密货币挖矿或在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上创建反向 Shell。GuardDuty Tester 于 2018 年首次以 AWS CloudFormation 模板的形式发布,最初更注重测试调查工作流而非多种检测结果类型。随后 AWS 发布了更新版本,使用 AWS Cloud Development Kit (AWS CDK) 使基础设施代码更易于阅读,并将测试覆盖面扩大到超过 100 种独特的检测结果和资源组合。
能够在如 Amazon EC2、Amazon Simple Storage Service (Amazon S3) 和 Amazon Elastic Kubernetes Service (Amazon EKS) 等多种资源类型上创建检测结果,对于您的安全团队来说是一项独特的资源,使他们能在隔离的基础设施中模拟多种类型的威胁,从而无需妥协已部署的工作负载来改善响应行动和技术。请记住,GuardDuty Tester 并不涵盖所有可能的场景,而是专注于基于威胁情报和规则的检测结果。基于异常的检测结果,要求了解您的环境操作方式,因此未包含在 GuardDuty Tester 中。
开始使用 GuardDuty Tester
GuardDuty Tester 通过 AWS CDK 部署,以创建所需的基础设施和生成 GuardDuty 检测结果的脚本。为了安全起见,AWS 建议您在一个专门用于此目的的非生产环境中部署 GuardDuty Tester。这样,您的安全团队可以区分测试的 GuardDuty 检测结果和正在监控的其他工作负载的检测结果。
在本文中,我不会详细讲解配置 GuardDuty Tester,因为相关内容已经在 GuardDuty 文档 中记录。我将介绍有关 GuardDuty Tester 需要知道的内容以及一些好处。
图 1 展示了 GuardDuty Tester 架构,包括创建各种保护计划如 Amazon S3 存储桶、Amazon EC2 实例和 Amazon EKS 集群所需的资源。该测试器还部署了一个专用的 GuardDuty Tester 实例,您将在其中运行生成 GuardDuty 检测结果所需的脚本。
GuardDuty Tester 的主要特点包括:
广泛的威胁场景模拟:GuardDuty Tester 能够针对 Amazon S3、AWS 身份和访问管理 (IAM)、Amazon Elastic Container Service (Amazon ECS)适用于 Amazon EC2 和 AWS Fargate 托管的工作负载、Amazon EKS 以及 AWS Lambda 创建检测结果,涵盖超过105种威胁场景。这包括 GuardDuty 运行时监控以及其他 GuardDuty 保护计划。通过 AWS Systems Manager 访问:GuardDuty Tester 通过 Systems Manager 提供安全访问,尽量减少对互联网的开放端口,仅允许通过 Systems Manager 访问。模块化脚本:GuardDuty Tester 提供了更多的测试库,接受用户参数来设置运行测试的范围,为不同的测试场景提供了更大的灵活性。设置 GuardDuty Tester 环境非常简单,仅需几个命令。根据 文档 和 仓库中的 README 文件,有若干先决条件需要设置该堆栈。这些先决条件包括 Python 3、git、AWS 命令行界面 (AWS CLI)、AWS Systems Manager 会话管理器插件、npm、Docker 和订阅 Kali Linux 亚马逊 EC2 镜像。您需要在 AWS Marketplace 中订阅 Kali Linux 实例,但仅在 GuardDuty Tester 部署期间收取实例费用。在满足这些先决条件后,您可以克隆代码库,安装软件包,并在您的 AWS 账户中部署 GuardDuty Tester。

部署 GuardDuty Tester 可能需要 2030 分钟,但如果您跟随本文,我假设您已在您的环境中部署了 GuardDuty Tester,并已按照 GuardDuty 文档的第 3 步 A 部分开始您的 Systems Manager 会话。接下来,我将深入讲解第一个测试示例。
手动调查
第一个测试用例是熟悉 GuardDuty 检测结果的外观以及检测结果所提供的详细信息。这可能是您启用 GuardDuty 后的第一步,也可能是为了帮助新团队成员了解 GuardDuty 检测结果而进行的活动。
开始手动调查:在您的 Systems Manager 会话中运行以下命令以查看 GuardDuty Tester 选项。
bashPython3 guarddutytesterpy help
在您的 Systems Manager 会话中运行以下命令以创建第一个测试检测结果。
bashPython3 guarddutytesterpy ec2 runtime only tactics impact
在创建检测结果之前,GuardDuty Tester 会提示您确认允许更改环境中的 GuardDuty 设置。例如,如果您选择创建与 GuardDuty 运行时监控 功能相关的检测结果,但尚未启用此功能,GuardDuty Tester 将为测试启用该功能,然后在测试完成后将其禁用。
注意:这将在此帐户及此 AWS 区域启动启用功能的 30 天试用,即使测试完成后功能被禁用。关于 GuardDuty 定价和免费试用的更多信息,请参阅 GuardDuty 定价页面。
选择 y 表示“是”后,GuardDuty Tester 报告它预期的域声誉检测结果的数量。图 2 显示了预期检测结果的示例。您可以在 GuardDuty 检测结果文档 中了解有关域声誉检测结果的更多信息。在 GuardDuty Tester 完成后,等待几分钟,然后访问 GuardDuty 的 AWS 管理控制台 查看检测结果。在此示例中,确实有四个新的 GuardDuty 检测结果,如步骤 4 所预期且图 3 所示。生成检测结果后,您可以开始手动调查。在前面的图中,您可以看到一些检测结果详细信息,例如动作类型和进程信息,这些信息可以帮助您快速识别引发可疑通信的触发因素。从这里开始,我鼓励您使用此检测结果练习调查和响应的运行手册。例如,您可以先验证和筛选检测结果,然后再转入证据收集和补救。如果您还没有构建事故响应运行手册,可以使用这个检测结果作为入门示例。有多种开源示例可供参考,例如 AWS 事故响应操作手册 和 AWS 客户响应手册。运行手册将帮助您的团队评估 GuardDuty 检测结果提供的信息,并了解他们需要了解有关您特定环境的其他信息,以便正确响应检测结果。例如,您将在检测结果中获得资源和行为者信息,但不包括账户所有者或该账户的安全联系人。
创建警报
下一个用例突出了如何根据 GuardDuty 检测结果创建警报。当使用 Amazon Simple Notification Service (Amazon SNS) 和 Slack 等工具设置警报自动化时,您应使用 GuardDuty Tester 创建一个检测结果,以测试您是否正确配置了警报。有关使用这两种工具创建警报的信息,请参见 创建自定义响应以对 GuardDuty 检测结果进行反应。图 4 显示了一个示例 EventBridge 规则,将 GuardDuty 检测结果发送到 SNS。
对于本文,我假设您已经配置好了 Amazon EventBridge 规则和 Amazon SNS 警报。
测试警报:在您的 Systems Manager 会话中运行以下命令以创建一个特权容器检测结果。
bashPython3 guarddutytesterpy finding PrivilegedEscalationKubernetes/PrivilegedContainer
创建这个检测结果后,您应该会看到基于该检测类型的 SNS 警报。
surfshark国内使用教程如果您已正确配置警报,您将看到类似于图 5 的电子邮件。该邮件演示了 SNS 通知已成功配置并通过 GuardDuty Tester 进行了测试。如果这是新的检测结果,那么在 GuardDuty Tester 生成检测结果后不久,您将收到此 SNS 通知;但如果这是更新的检测结果,则时间将基于 账户中配置的通知频率。
众多客户在他们的环境中使用 GuardDuty 检测结果的方式各不相同。无论您是使用 Amazon SNS 还是其他机制,如聊天应用程序、工单系统,或安全信息和事件管理SIEM解决方案,您都可以利用这个 EventBridge 规则示例和 GuardDuty Tester 测试您的通知管道。
自动响应
对于第三个用例,我展示了如何根据 GuardDuty 检测结果创建自动化操作。在此示例中,我基于一个 EC2 实例连接到比特币挖矿域的检测结果,随后我用 Lambda 给该实例打标签,以帮助在随后的调查步骤中进行识别。尽管这是一个简单的例子,但它展示了如何结合 EventBridge 规则和 Lambda 函数构建自动响应。如果您希望为需要对主机进行修改的 GuardDuty 运行时监控检测结果创建自动响应,可以使用 EventBridge 规则与 AWS Systems Manager Run Command 配合,在线Hosts 上运行命令以修复安全问题。
首先,创建一个 Lambda 函数,该函数将处理 EventBridge 发送的 GuardDuty 事件,从中提取实例 ID 信息,然后将其作为参数放入 createtags API 调用中。请参见以下示例代码:
pythonimport jsonimport boto3import logging
logger = logginggetLogger()loggersetLevel(loggingINFO)
def lambdahandler(event context) try # 提取 GuardDuty 检测结果中的必要信息 instanceid = event[detail][resource][instanceDetails][instanceId] accountid = event[detail][accountId] region = event[detail][region]
# 创建 EC2 客户端 ec2 = boto3client(ec2 regionname=region) # 将 infected 和 cryptomining 标签对添加到实例 ec2createtags( Resources=[instanceid] Tags=[ { Key infected Value cryptomining } ] ) loggerinfo(f已在账户 {accountid} 和区域 {region} 中将实例 {instanceid} 标记为 infected=cryptomining) return { statusCode 200 body 实例标记成功 }except Exception as e loggererror(f标记实例 {instanceid} 时出错:{str(e)}) return { statusCode 500 body f标记实例时出错:{str(e)} }接下来,我创建一个特定于我希望测试的比特币挖矿检测结果的 EventBridge 规则,如图 6 所示。目标设定为我刚刚创建的 Lambda 函数。
![图6:比特币挖矿 GuardDuty 检测结果的 EventBridge 规则](https//d2908q01vomqb2cloudfrontnet/22d200f8670dbdb3e253a90eee5098477c95c23d/2025/01/