2022-09-25 如何使用AWS Securityhub快速
写写我的个人学习心德,本文仅为个人学习心德,与AWS无关
使用AWS Securityhub快速建立安全态势聚合分析场景
内容简介
许多企业为了维护系统的安全稳定,可能有许多功能强大的安全工具,从防火墙和终端节点保护到漏洞与合规性扫描程序,不一而足。但您的团队每天要处理数成千上万的安全警报,这通常会让数量本就很少的安全人员手忙脚乱地在这些工具之间来回切换。而长期面对大量且纷乱的安全告警,会使人不知所措,很容易产生“告警疲劳”而放弃分析和响应,即使花了大价钱购买或部署的SIEM(Security information and event management )工具也被束之高阁。空留大屏幕上的显示数字,却不去处理告警,解决不了安全隐患。
Amazon Security Hub是亚马逊云科技提供的可以集中查看和管理安全警报并自动执行安全检查的服务。
本文将带您实践一种基于Security Hub自动化安全事态分析的方案,并提供自动化部署cloudformation template和示例CLI命令行
先决条件
- 安装最新版本的AWS Command Line Interface (CLI)
- 打开Amazon Security Hub服务
- 自定义场景(use cases),下文中提供一个示例场景,需要开启Amazon Config和Amazon Guardduty
架构与工作原理
- 架构一
如下图左侧部分所示,此种架构是将自定义的场景条件的告警(finding)写入DynamoDB中,再由Lambda对DynamoDB进行聚合条件的查询,如果符合就生成一条Critical的Security Hub Finding。此由方案的问题在于每当您有一个新的user case时都需要将聚合逻辑作为一个function写入Lambda中,代码量会越来越大,对安全人员本身的开发能力要求高,更多细节和相关代码请详见 correlate-security-findings-with-aws-security-hub-and-amazon-eventbridge https://aws.amazon.com/cn/blogs/security/correlate-security-findings-with-aws-security-hub-and-amazon-eventbridge/ - 架构二
如下图右侧部分所示,采用Security Hub自带的insight替代架构一的DynamoDB和lambda的聚合逻辑部分,只需要使用一个非常简单的lambda。更新user case时无须修改lambda代码,部署user case操作简单方便,对于安全人员无写代码的负担,节省安全的时间。
部署方法
让我们使用第二种架构一起来部署一个示例user case:S3数据丢失。
场景聚合条件为:
-S3存储桶没有开启Versioning https://docs.aws.amazon.com/AmazonS3/latest/userguide/versioning-workflows.html
-Guardduty产生报警Impact:S3/AnomalousBehavior.Delete
https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-s3.html#:~:text=S3%20Bucket.-,Impact%3AS3/AnomalousBehavior.Delete,-An%20IAM%20entity
当上述条件同时被触发时,说明S3中的数据可能无法恢复面临永久损失的风险,安全人员应立刻响应。因此lambda会自动生成一条Critical级别的Security Hub finding。
第一步 新建两个custom insight
region=(部署的AWS区域,例如:us-east-1)
insight1='s3versioning'
insight2='guarddutys3delete'
arn1=$(aws securityhub create-insight \
--filters \
'{"RecordState": [{ "Comparison": "EQUALS", "Value": "ACTIVE"}], "WorkflowStatus": [{"Comparison": "EQUALS", "Value": "NEW"}],"ProductName": [{"Comparison": "EQUALS", "Value": "Config"}], "ComplianceStatus": [{"Comparison": "EQUALS", "Value": "FAILED"}]}' \
--group-by-attribute "ResourceId" \
--name $insight1 \
--query 'InsightArn' --output text --region=$region)
echo $arn1
arn2=$(aws securityhub create-insight \
--filters \
'{"RecordState": [{ "Comparison": "EQUALS", "Value": "ACTIVE"}], "WorkflowStatus": [{"Comparison": "EQUALS", "Value": "NEW"}],"ResourceType": [{"Comparison": "EQUALS", "Value": "AwsS3Bucket"}], "Type": [{"Comparison": "EQUALS", "Value": "TTPs/Impact:S3-AnomalousBehavior.Delete"}]}' \
--group-by-attribute "ResourceId" \
--name $insight2 \
--query 'InsightArn' --output text --region=$region)
echo $arn2
第二步 运行Cloudformation Stack
请将附录提供的模板文件保存至本地CLI运行目录,以下为参数说明:
stackname=(CloudFormation stack的名字,例如'usercase-s3dataloss')
templatename=(附录中保存的cloudformation yaml文件,例如'blogtemplate.yaml')
findingtype=(生成的finding的类型,需要遵照security hub的标准规定,本例中请使用 'Effects/Data Exposure/S3DataLost')
title=(生成的finding title, 例如'SIEM Alert-S3 data lost')
resourcetype=(生成的finding中resource的类型,本例中请使用'AwsS3Bucket')
运行以下CLI示例命令行
stackname='usercase-s3dataloss'
templatename='blogtemplate.yaml'
findingtype='Effects/Data Exposure/S3DataLost'
title='SIEM Alert-S3 data lost'
resourcetype='AwsS3Bucket'
aws cloudformation create-stack --stack-name $stackname --template-body file://$templatename \
--parameters \
ParameterKey=arn1,ParameterValue=$arn1 \
ParameterKey=arn2,ParameterValue=$arn2 \
ParameterKey=findingtype,ParameterValue=$findingtype \
ParameterKey=title,ParameterValue=$title \
ParameterKey=resourcetype,ParameterValue=$resourcetype \
--capabilities CAPABILITY_IAM \
--region=$region
查看结果
满足场景的触发条件后,在Security Hub控制台中可以看到由lambda自动生成的一条Critical的告警,如下图所示:
user case告警示例
小结
在这篇博文中,我介绍了如何使用亚马逊云科技的原生服务Securityhub和lambda实现了快速聚合安全事态实现自动分析告警的方法。示例中的user case是由两个条件组成,您也可以扩展使用三个或四个条件。在安全运营过程中,部署5-10个聚合场景,可以帮忙您的安全团队节省人工分析少量日志的时间,将精力更加集中于处理真正紧急和高风险的安全事件中去。
附录
Cloudformation template示例