如何通过AWS Security Hub中的自动化业务上下文验证加速安全发现审查
安全团队需要高效验证和记录AWS Security Hub发现的例外情况,同时保持适当的治理。企业安全团队需要确保安全最佳实践的例外得到适当验证和记录,而开发团队需要简化的流程来实施和验证补偿控制。
挑战
Security Hub提供跨AWS账户的全面安全态势视图。但在实际场景中,会遇到安全最佳实践例外的合法业务原因。例如:
- Amazon GuardDuty未启用:由于替代监控解决方案,组织推迟了Amazon GuardDuty的实施,但需要补偿控制,如Amazon VPC流日志、Amazon CloudWatch警报和组织特定的事件响应程序。
- Amazon S3阻止公共访问未启用:营销团队可能需要公共Amazon S3存储桶用于网站资源,但应实施以下补偿控制:
- Amazon S3前的Amazon CloudFront分发
- 在S3存储桶上启用带有AWS KMS密钥的服务器端加密(SSE-KMS)
- 启用Amazon S3存储桶日志记录
- 启用Amazon S3存储桶版本控制
- 用于可疑访问模式和全面访问日志记录的Amazon CloudWatch警报
管理安全最佳实践的例外可能具有挑战性,通常涉及多个步骤。安全团队花费大量时间审查例外请求、定义和验证补偿控制,开发人员必须随后实施和验证这些控制。必须包含多个团队来创建和管理合规性和审计目的的文档。
解决方案概述
该解决方案提供示例代码和CloudFormation模板,组织可以部署这些模板来自动验证被抑制的Security Hub发现的补偿控制,同时保持安全团队和开发团队之间的适当职责分离。
架构
图1说明了解决方案工作流程,当开发人员将Security Hub发现的工作流状态更改为SUPPRESSED以请求业务合理的安全例外时启动。该过程以解决方案将验证结果作为注释添加到相应的Security Hub发现结束,保持例外请求和验证结果的完整审计追踪。
工作流程包括以下步骤:
- 开发人员将Security Hub发现状态更改为SUPPRESSED
- EventBridge检测到状态更改为SUPPRESSED
- EventBridge规则将事件发送到Amazon SQS队列
- Lambda函数从Amazon SQS队列检索消息
- Lambda函数从DynamoDB补偿控制表获取补偿控制
- Lambda函数使用适当的AWS服务API验证每个控制
- 为每个验证收集证据并存储在DynamoDB中
- 发现验证结果和时间戳存储在DynamoDB Findings表中
- 发现验证尝试的版本历史记录存储在DynamoDB History表中
- 如果安全团队提供的控制通过验证,发现保持SUPPRESSED,并在相应的Security Hub发现中添加带有调整严重性信息的注释。如果这些控制之一验证失败,发现状态更改为NOTIFIED,并在相应的Security Hub发现中添加失败控制的注释。
工作原理
该解决方案专门由组织安全团队部署和管理。只有安全团队应具有部署AWS CloudFormation堆栈、修改Lambda验证代码、添加/修改补偿控制或访问四个DynamoDB表(Controls、Findings、History、Evidence)的权限。
开发人员仅限于两个特定操作:抑制Security Hub发现和读取补偿控制要求。这种严格的角色分离有助于适当的治理,并有助于防止绕过安全验证逻辑。
工作方式:
-
安全团队定义控制:安全团队为特定Security Hub发现类型建立补偿控制,并将其存储在DynamoDB表中。这有助于确保批准的例外遵循安全批准的指南并保持合规标准。
-
支持的验证类型:解决方案支持13种验证方法以适应不同的安全要求:
| 验证类型 | 描述 | 示例用例 |
|---|---|---|
| CONFIG_RULE | 使用AWS Config规则验证 | 对于GuardDuty未启用发现:vpc-flow-logs-enabled Config规则有助于确保监控网络流量 |
| API_CALL | 使用直接AWS API调用验证 | 对于Amazon S3公共访问发现:API调用验证CloudFront分发存在于S3存储桶前 |
| SECURITY_HUB_CONTROL | 使用Security Hub控制状态验证 | 对于GuardDuty未启用发现:CloudTrail.1控制通过确认全面的API日志记录 |
| CLOUDWATCH | 使用CloudWatch警报验证 | 对于GuardDuty未启用发现:监控可疑API调用和网络流量模式的警报 |
| CLOUDTRAIL | 验证CloudTrail配置 | 对于GuardDuty未启用发现:具有日志验证和CloudWatch集成的多区域CloudTrail |
- 开发人员实施控制:当Security Hub发现被抑制时,开发人员必须实施安全团队定义的所需补偿控制。
部署和配置
您可以使用提供的脚本部署解决方案:
|
|
部署脚本创建包含必要资源的CloudFormation堆栈:
- 用于控制、发现、历史和证据的DynamoDB表
- 用于验证和Security Hub更新的Lambda函数
- 用于捕获发现状态更改的EventBridge规则
- 用于消息处理的Amazon SQS队列和死信队列(DLQ)
- 具有最小权限的IAM角色
测试解决方案
要测试解决方案,您可以使用以下示例场景验证GuardDuty发现的补偿控制:
开发人员希望获得Security Hub发现GuardDuty.1的安全例外:应启用GuardDuty,由于成本限制,开发人员的组织未实施GuardDuty,并请求其组织安全团队的安全例外。
安全团队提供的补偿控制包括:
- 必须启用Amazon VPC流日志以进行网络监控
- 启用CloudWatch警报以监控可疑活动
测试步骤:
- 安全团队使用
add-controls-role-based.sh实用程序创建补偿控制 - 开发人员实施所需的控制
- 开发人员将Security Hub发现工作流状态更改为SUPPRESSED
- 自动验证过程开始
- 查看Lambda函数日志和Security Hub发现注释中的验证结果
清理
为避免产生持续费用,使用以下命令清理为此文章创建的资源:
|
|
此部署过程旨在简单直接,并保持安全最佳实践,如加密、最小权限和职责分离。
结论
在本文中,我们展示了如何实施一个解决方案,安全团队可以使用该解决方案为AWS Security Hub发现定义补偿控制并自动验证其实施。我们介绍了管理安全例外的挑战,并演示了此解决方案如何帮助弥合安全要求与实际实施之间的差距。
该解决方案提供了一个结构化的工作流程,安全团队在其中定义可接受的补偿控制,开发人员实施这些控制,自动化系统验证其有效性。支持13种不同的验证类型,从AWS Config规则到流程文档,该解决方案为各种安全场景提供全面覆盖。