AppSec Strategy for AWS Cloud SaaS
图片来源: Patrick Tomasso @ Unsplash
作者: Jason Taylor
发布日期: 2021年6月24日
阅读时间: 8分钟
目的
本文档旨在概述针对AWS云SaaS应用程序的应用安全策略和路线图,涵盖应用安全关注点以及AWS特定基础设施。这是一篇清单式文章,旨在帮助启动对话,并提供信息以供进一步研究。文中引用了其他白皮书和进一步阅读材料。
应用安全
一个有效的应用安全程序将减少与代码开发相关的安全风险,同时将对正常SDLC流程的干扰降至最低。理想情况下,这应在促进AppSec专业人员与整个开发团队之间合作与透明的环境中完成。如果整个团队在应用安全目标及实现成熟度的旅程中保持一致,那么安全团队可以作为一个服务组织运作,其目标是赋能,而不是作为一个以治理为目标的警务组织。
应用安全团队做出的每个决策都应符合以下标准:
- 该决策是否符合业务目标?
- 该决策是否与现有文化(或您试图实现的文化)相匹配?换句话说,它是否设定了不良先例或产生不利副作用?
- 该决策是否维护了所有相关方的尊严?
另请参阅:如何扩展应用安全程序
风险评估、分析和减少是这些测试之上的一个层次,最终是您试图实现的目标。然而,目的不能证明手段的正当性,因此AppSec团队可以使用这些问题不仅实现目标,而且以最佳方式实现目标。最小干扰。最大影响。使用胡萝卜,而不是大棒。
每个成功的应用安全程序都由以下支柱组成:
政策和标准
- 政策将业务需求与工程团队的安全要求联系起来。
- 标准(例如架构、编码、SDLC和赋能技术)将政策转化为团队可操作的规范性指导。
教育
- 教育与政策和标准直接相关,因此高度专注于赋能。
- 为团队提供实现这些目标所需的知识和动力。
评估和测量
- 这包括所有评估活动,包括威胁建模、架构审查、代码审查、渗透测试、威胁情报等。
- 使用这些测量来确定是否需要更新政策和标准,然后教育团队这些变化,并继续循环评估。
这些支柱共同创建了一个持续改进的良性循环。
以下策略将这些一般原则转化为基于云的SaaS应用程序的可操作游戏计划。
了解部署的应用程序
- 使查看所有组件部分变得容易。将安全集成到开发人员的工作流程中。尽可能自动化。
了解应用程序部署方法
- 持续可见性。不要依赖调查、电子表格、仪表板。基于依赖关系、互联网暴露、涉及资产自动化服务风险排名。将精力集中在最高风险的服务上。
设置政策和标准
隔离
- 减少攻击面。减少移动敏感数据的需要(例如令牌保险库)。
清理和验证所有输入
- 数据馈送、文件、事件、cookie、用户输入、所有数据存储、命令行、环境变量、系统属性。
- 检查格式、范围、大小、类型。
- 尽可能使用允许列表验证,必要时回退到拒绝列表,但要小心。
永远不要在代码或配置中存储秘密
- 凭据、令牌、密钥等。
- 使用工具扫描,政策强制执行,并找出另一个位置/保险库进行秘密存储。
- 使用保险库服务,如AWS KMS或Hashicorp Vault。
测试第三方和开源代码中的漏洞
- 扫描具有已知漏洞的依赖项。
- 保持依赖项最新。
强制执行安全身份验证
- 定义满足业务需求的安全密码复杂性要求。
- 使用最佳实践存储密码(scrypt或Argon2,具有升级能力)
- 在特别敏感的操作之前重新认证(减少CSRF)。
- TLS客户端身份验证。
强制执行最小权限
- 指定每个角色所需的最少授权量。
- 创建单元测试,尝试使用较低权限角色执行较高权限操作。
保护敏感数据
- 对数据进行分类并了解需要保护的资产。
- 确定数据使用的位置。
- 确定数据暴露的位置(事件日志等)。
- 加密静态敏感数据(哈希密码)。
- 小心内存中的数据(例如,不要在Java中使用不可变数据类型)。
- 加密所有传输中的数据。
- 安全会话数据:使用sessionID并将会话信息存储在服务器上;加密cookie,使用HttpOnly标志拒绝脚本访问,使用Secure标志确保cookie仅通过HTTPS发送,并使用SameSite仅允许访问您的域,并设置过期时间。
- 防范OWASP Top 10。输入验证、HTML编码、参数化查询。
- 安全部署/配置标准和模板。
识别关键漏洞
- 对于对您的平台重要的每个漏洞,创建开发标准和缓解计划。
将安全工程构建到SDLC中
- 将安全目标定义为需求和设计的一部分
- 威胁建模
- 安全和架构设计审查
- 安全代码审查
- 内部和第三方渗透测试
- 安全作为单元测试和集成测试的一部分
- 部署和配置审查
采用持续评估
- 运行SAST。
- 在CI/CD管道中运行内联扫描,但保持简短。
- 每次部署后运行基础设施和DAST扫描。
- 使用云安全态势管理器(CSPM)来发现错误配置,检测过于宽松的账户权限,监控云环境中的政策违规,并获得自动修复某些错误配置的能力。
培训团队安全
- 安全政策
- 架构和代码的安全标准和最佳实践
- 午餐和学习讨论漏洞、利用、缓解、违规
- 代码级缓解指导
- 实践式培训以创建对漏洞影响的情感连接
AWS基础设施安全
以下步骤将支柱转化为AWS基础设施的可操作游戏计划。(改编自:AWS安全成熟度路线图 - Summit Route)
库存
-
识别所有账户。
-
将所有AWS账户集成到AWS组织中。
这有助于合并账单、创建新账户和使用服务控制策略(SCPs)。
-
拥有一个安全AWS账户
用于日志收集。 结果至少有三个账户:业务、安全和一个用于AWS组织。
拥有备份
- 创建定期、离线、受保护的备份,这样您就不会重蹈Code Spaces公司的覆辙。他们在攻击者删除所有数据和备份后倒闭。
- 备份应发送到不同区域的单独AWS账户 - 或完全脱离AWS。
- 使用AWS备份和S3复制策略。
可见性和初始修复
-
打开CloudTrail、GuardDuty和Access Analyzer,将日志发送到安全账户。
可以通过组织根目录完成,以应用于所有账户。
-
在每个账户上创建IAM角色,允许安全账户查看访问权限。
-
运行一次性扫描工具进行战术修复。
CloudMapper、Prowler或ScoutSuite。 查找:包含敏感内容的公共存储桶、公共AWS管理的ElasticSearch服务器、运行应私有的公开可访问服务的EC2(例如ElasticSearch、数据库等)。
-
打开S3阻止公共访问。
禁用存储桶被公开。
-
开发账户初始化脚本和新账户流程。
确保新账户的安全基线。
检测
-
从日志和事件中检测问题。
集成到SIEM中进行监控和警报。 确保您可以:从任何区域任何账户的GuardDuty警报接收通知,对AccessDenied错误发出警报,搜索主体在时间段内采取的所有操作。
-
执行定期扫描和评估。
捕捉您的日志和警报无法捕捉的内容。
-
记录您的安全指南。
确保团队知道他们将被标记的内容。
安全IAM访问
-
使用SSO进行访问。
对所有人类用户使用SSO。允许集中管理,并在受损时能够滚动凭据。 通过您的SSO提供商强制执行强密码和MFA。
-
删除所有IAM用户。
IAM用户密钥永不过期,并且经常最终出现在GitHub或其他可以被发现的地方。改用IAM角色。
-
删除未使用的IAM角色。
审计一段时间内未使用的角色。
-
将服务角色的权限减少到必要的服务。
使用访问顾问确定最小权限。
-
实施预提交钩子进行秘密检测。
检查正在提交到源代码仓库的秘密。 一个解决方案是detect-secrets项目。
减少攻击面并缓解泄露
-
应用SCPs。
限制区域,拒绝根用户访问,并保护重要角色不被删除(例如安全角色)。 参见:https://summitroute.com/blog/2020/03/25/aws_scp_best_practices/
-
没有面向公众的EC2或S3存储桶。
在它们前面使用ELB或CloudFront。 允许使用AWS Shield进行DDoS保护和AWS WAF。
-
在所有EC2上强制执行IMDSv2。
此元数据服务允许EC2获取其IAM角色的凭据信息。V1可能容易受到SSRF攻击。V2通过使用秘密令牌提供对这些攻击的保护,并且更可取。 https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/。
可重复性和所有权
-
使用基础设施即代码(IaC)。
只允许通过IaC(如Terraform或CloudFormation)进行更改。 要求对所有影响基础设施的更改进行代码审查。
-
控制AMI和软件包来源。
记录关于在您的环境中允许哪些Amazon Machine Images的指南(白名单)。 记录允许的实例类型和操作系统。 或者您可以构建自己的AMI,不允许使用公共AMI。
-
应用标记策略。
确保所有资源都标记有所有者。
增强检测
-
部署蜜罐令牌。
创建假访问密钥,使检测攻击者更容易。 https://summitroute.com/blog/2018/06/22/guidance_on_deploying_honey_tokens/
-
实施实时监控。
CloudTrail日志最多需要15分钟才能出现在S3中,因此使用CloudWatch Events进行实时监控。 在每个账户和区域中设置规则,然后聚合事件。
自动修复和权限细化
-
实施自动修复。
这可以包括删除未使用的IAM角色、更改过于开放的安全组、每晚终止测试环境中的EC2等。
-
细化IAM策略。
花时间审查和细化IAM策略以进一步限制它们。
安全网络通信
-
将所有非公共资源移动到私有子网中。
通过代理中继出站流量。
-
限制出口网络流量。
使用AWS PrivateLink限制对资源的访问仅来自某些VPC,并限制对Internet的调用。
事件准备
-
限制爆炸半径。
将服务分解成部分,以便如果一个被泄露,影响将减轻。
-
练习响应。
识别、理解和反应需要多长时间。
请订阅我们的新闻通讯。每月我们发送一份新闻通讯,包含新闻摘要和我们最近几篇文章的链接。不要错过!
另请参阅
分享与讨论
归档于: 领导力, 培训, 指导, 云
Joe Basirico & Jason Taylor © 2023