云应用程序安全
1 倡导应用程序安全培训和意识
安全软件开发始于安全文化的发展和安全软件开发生命周期(SDLC) 的实施。
1.1 云开发基础知识
1.设计安全(security by design)
安全参与 SLDC 的每个步骤,越早开始越好,可参考构建安全成熟度模型(BSIMM)
2.共享安全责任
安全是组织中每一个人的责任,在云环境中 CSP 与云客户明确责任、有效合作
3.安全即业务目标
了解安全风险并确保其得到环境应被认为是一个关键的业务目标,而不是一个阻碍。
1.2 常见陷阱
- 1.缺乏对云安全责任的理解
- 2.高级管理层对云应用安全计划的支持不足
- 3.未能理解组织文化
- 4.人员配置不足或一人多用
- 5.缺乏安全软件开发框架
- 6.直接削减培训预算
1.3 常见云漏洞
1.CSA Top Threats to Cloud Computing
CSA 定期发布云计算的顶级威胁,最新 2022 年版本名为 Top Threats to Cloud Computing Pandemic Eleven.
- 身份、凭据、访问和密钥管理、特权账号的不足
- 不安全的接口和 API
- 配置不当和变更控制不足
- 缺乏云安全架构和策略
- 不安全的软件开发
- 不安全的第三方资源
- 系统漏洞
- 意外的云数据泄露
- 无服务器和容器工作负载的配置不当和利用
- 有组织的犯罪、黑客和 APT
- 云存储数据泄露
2.0WASP Top 10
最新版本为 2021 年
- 访问控制失效
- 加密失败
- 注入
- 不安全的设计
- 安全配置不当
- 脆弱且过时的组件
- 识别和身份验证失败
- 软件和数据完整性失败
- 安全日志记录和监控失败
- 服务器侧请求伪造
3.SANS CWE Top 25份最危险的软件弱点清单,用于软件安全测试
2 描述安全软件开发生命周期
软件开发生命周期 (SDLC)是指确定一个系统必须满足哪些要求,然后设计、构建、测试和运行该系统的所有必要活动。安全软件开发生命周期 (SSDLC)将生命周期进化为在整个过程中纳入安全活动,也被称为安全左移 (shifting left)。
2.1 NIST 安全软件开发框架
NIST 安全软件开发框架(SSDF)定义并描述了安全软件开发实践,分为以下四组:
- 准备组织:包括人员、流程和技术。
- 保护软件:防止篡改和非授权访问。
- 生产安全可靠的软件:具有最少漏洞的软件。
- 响应漏洞:在未来版本中防止漏洞。
2.2 OWASP软件保障成熟模度型
知道是做评估的即可,实际参考最佳实践
OWASP SAMM 用来评估现有 SDLC 的安全开发现状,并识别提高这些实践成熟度的改进。
- 治理:战略和指标、策略和合规、教育和指南
- 设计:威胁评估、安全需求、安全架构
- 实施:安全构建、安全部署、缺陷管理
- 验证:架构评估、需求驱动测试、安全测试
- 运营:事故管理、环境管理、运营管理
2.3 业务需求
组织将安全开发当做业务需求才能将在 SDLC 中贯彻安全设计
2.4 阶段和方法
1.常见 SDLC 阶段
- 需求:包含可行性研究以及收集业务、功能和安全需求-安全最早融入
- 设计:解决需求以及测试用例
- 开发:编写代码或购买 COTS-商用成品现货
- 测试:根据测试用来进行测试
- 部署:实施软件并确保安全配置
- 运行和维护:软件上线后的运营
2.瀑布
非常严谨的开发方法,适合稳定性要求高的软件开发工作(例如与人身安全有关)
3.敏捷
该方法追求软件交付速度,适应需求变化快的软件开发工作
3应用安全软件开发生命周期
3.1 云特有风险
详见CSA Top Threats to Cloud Computing,要转化成需求
3.2 威胁建模
威胁建模(threat modeling)用于识别潜在的危险和安全漏洞,并作为风险管理的输入
1.STRIDE
STRIDE 用于识别和分类针对软件的安全威胁
- 欺骗:伪造身份获取访问权限。
- 篡改:破坏完整性。
- 否认:无法证明某人做了某事
- 信息披露:信息被未授权访问
- 拒绝服务:破坏可用性。
- 特权提升:非授权获取特权账号
2.DREAD
DREAD 用于量化威胁评估,对威胁的补救进行排序
- 损害:威胁对组织的损害程度。
- 可复制性:威胁有多容易复制
- 可利用性:威胁有多容易实现。
- 受影响用户:威胁的影响面
- 可发现性:威胁多容易发现
3.PASTA
攻击模拟和威胁分析流程 (PASTA) 是基于风险的威胁分析方法。
- 定义目标
- 定义技术范围
- 应用程序分解
- 威胁分析
- 脆弱性分析
- 攻击建模
- 风险和影响分析
4.ATASM
ATASM 是执行威胁建模的流程步骤的缩写
- 架构:对系统架构进行分析
- 威胁:列举所有可能的威胁
- 攻击面:列举系统暴露于攻击的任何部分
- 缓解措施:分析现有环境措施及其有效性
3.3 开发期间规避常见漏洞
- 培训和意识:对开发人员进行培训,以了解常见软件漏洞。
- 文档化过程:记录 SSDLC 并传达给团队所有人。
- 测试驱动开发:基于测试用例开展测试有助于避免已知漏洞
3.4 安全编码
- OWASP 安全编码实践
- OWASP 应用安全验证标准(ASVS)
- SAFECode 安全编码实践
3.5 软件配置管理和版本控制
软件配置管理 (SCM)和版本管理的目的是管理软件资产,重点是确保关键信息系统组件的完整性。
- 软件版本回滚
- 系统更新和补丁发布
- 配置审计
- 配置管理数据库(CMDB)
4 应用云软件保障和验证
软件保障(software assurance)是指软件不存在漏洞并按预期运行的程度,是一种信心水平,无法完全量化,但可通过验证来确定是否符合预期要求
4.1 功能和非功能测试
1.功能测试
- 功能测试(functional testing)用于测试是否满足与系统需求相关的系统功能规范。
- 单元测试:针对单个功能或模块的测试。
- 集成测试:针对多个模块协同工作的测试。
- 可用性测试:在类生产环境中测试,获取用户和系统之间互动的反馈。
2.用户验收测试
用户验收测试 (UAT) 一旦完成,软件即可交付使用。
3.回归测试
回归测试(regression testing)是在软件开发的维护阶段进行的,以确保软件的变更不会影响当前功能、引入新漏洞或之前已修复的漏洞
4.非功能测试
非功能测试(non-functional testing)用于测试与系统主要功能没有直接关系的方面,如性能测试、安全测试、兼容性测试、文档测试、易用性测试等
4.2 安全测试方法
1.测试类型
三种常见测试类型的主要区别在于测试人员可获得的知识水平
- 白盒测试:测试软件的内部结构,涉及所有代码-全知识测试。
- 灰盒测试:了解有限的信息来测试系统,如系统使用的算法、组件、设计文档等
- 黑盒测试:完全不了解软件的情况下测试系统,如模拟用户或黑客
2.应用程序测试
- 静态应用程序安全测试 (SAST):对源代码进行静态分析,属于白盒测试-例如代码审计。
- 动态应用程序安全测试 (DAST) :主要涉及使用漏洞扫描工具,属于黑盒测试
- 交互式应用程序安全测试(IAST):在应用程序内设置代理,对应用程序的性能进行实时分析,检测潜在的安全问题,属于灰盒测试。
- 运行时应用程序自我保护(RASP):属于安全工具,常与 IAST 集成。RASP 拦截所有进出应用程序的调用,并验证所有数据请求,在检测到异常活动后会终止用户会话或关闭应用程序。
3.代码审查和人工测试
代码审查通过审查代码来发现缺陷。同行评审(peer review)指的是由一个开发人员审查另一个开发人员编写的代码。代码审查也可通过自动化工具完成,常用于 CI/CD (持续交付/持续测试)管道。人工测试涉及不由自动化工具执行的任何类型的测试,通常成本较高,但能够发现自动化工具无法发现的问题,如业务逻辑漏洞。
4.软件成分分析
软件成分分析(SCA)旨在提供对软件组件或依赖性风险的可见性,可以识别软件中使用的所有组件以及包含的已知漏洞。SCA 识别的组件清单被称为软件材料清单 (SBOM)。
4.3 质量保障
质量保障(QA)是涉及软件测试、配置管理、版本管理、漏洞管理等,是开发和交付软件过程中的最后一环。
4.4 滥用案例测试
用测用于测试系统是否满足定义的要求,滥用案例 (abuse case)用于测试与预期行为相反的情况,也被称为误用案例 (misuse case),常用于渗透测试和应用程序安全测试。
5 使用经验证的安全软件
5.1 保护应用程序编程接口
应用程序编程接口(API)提供了一种标准化的方式来访问一个系统所提供的特性或能力。API 的安全要求包括加密、访问控制、身份验证、监控和日志记录等,API 应正确配置并定期进行安全测试。
5.2 供应链管理
管理供应链中的风险既要关注运营风险,以确保供应商有能力提供所需的服务,也要关注安全风险,即供应商有足够的风险管理计划来应对他们所面临的风险,可参考 ISO 27036:供应关系。
- 评估供应商
- 评估供应商锁定风险
- 评估供应商的可行性
- 探索托管选项-代码-数据
5.3 第三方软件管理
第三方软件管理主要涉及软件安全性评估和许可管理
5.4 经验证的开源软件
选择使用开源软件(OSS)时,应选择知名产品并进行安全测试
6 理解云应用程序架构的详情
6.0 云应用架构
1.微服务
微服务(microservice)应用程序将复杂的架构设计为服务和数据的集合,遵循高内聚设计原则,每个微服务执行单一业务功能,可以灵活组合形成复杂系统。
2.无服务器
功能即服务
无服务器(serverless)环境使用事件驱动的架构,即无服务器计算仅在触发时进激活所需的功能。
3.云原生
云原生(cloud-native)架构是指部署到云中的应用程序,利用云计算交付模式,可以在任何类型的云环境中运行,并使组织专注于特定的开发任务
4.基于云的架构
基于云的架构适合构建和部署 Web 应用程序。通过使用 API 网关,安全API 是 Web 应用程序的前门,提供对数据和业务逻辑的访问。
6.1 补充性的安全组件
1.Web 应用防火墙
Web 应用防火墙 (WAF)基于签名或启发式方法检测 HTTP/HTTPS 流量,保护Web 应用程序免受常见攻击,如 SQL 注入、跨站脚本(XSS)、跨站请求伪造 (XSRF)等。
2.数据库活动监控
数据库活动监控(DAM)是指一套支持识别和报告数据库中欺诈或可疑行为的工具,能够基于访问数据库的流量或数据库审计日志来发现异常行为,并支持对特权用户的监控。
3.可扩展标记语言防火墙
可扩展标记语言(XML)防火墙检测 HTTP、HTTPS 等流量,检测针对基于 XML 的应用程序和API。
4.应用程序编程接口网关
应用程序编程接口网关 (API gateway)检测应用程序后端服务的流量,支持速率限制、访问记录和授权控制等。
6.2 密码学
1.静止中的数据
静态数据加密通常使用对称加密算法实现,CSP 通常提供加密存储服务作为标准选项。
2.传输中的数据
传输中的数据加密依靠 TLS、HTTPS 或 VPN 来保护,也可以通过先加密数据再传输的方式进行保护。
3.密钥管理
加密依赖密钥的安全性,因此密钥的生命周期管理非常重要。CSP 提供密钥管理服务(KMS),也可以使用第三方密钥管理服务进行职责分离,但对于敏感数据来说,密钥管理应该由组织自己完成。
6.3 沙箱
沙箱(sandbox)是一个限制连接和限制功能的环境,通过隔离潜在的威胁来完成软件安全测试、恶意或可疑软件分析等工作。
6.4 应用程序虚拟化和编排
通过容器(container)进行应用程序虚拟化,可以将一个应用与所有的依赖关系打包在一起,并部署在任何支持所使用的容器技术的系统上,使应用程序更具可移植性。编排(orchestration)工具能够管理容器资源、管理并监控相关配置以满足组织需求。高纬度之上,云编排(cloud orchestration)允许客户以高效和经济的方式集中管理其云资源。
7 设计适当的身份和访问管理解决方案
身份和访问管理(IAM)解决方案包含一系列用于控制访问的过程和工具,涉及账户的注册、身份验证、授权、日志记录、审计、变更、注销等。
7.1 联合身份
联合身份管理(FIM)允许单个数字 ID 跨多个系统进行访问,这些系统可以是同一公司的不同子公司、不同 CSP、不同合作伙伴组织的系统。FIM提供了访问的便利性,但也会导致单点故障问题,即一个数字 ID 被盗,导致多个系统受损
7.2 身份提供者
身份提供者(IdP)提供身份识别和验证,可由 CSP 或第三方提供服务。在联合身份管理中服务提供者(SP)与 IdP 建立身份映射关系,用户访问 IdP 完成身份验证并颁发凭证,再使用凭证访问 SP 提供的服务。
7.3 单点登录
单点登录(SSO)与FIM 提供的能力一样,但更聚焦于简化内部访问管理。
7.4多因素身份认证
类型一:你知道什么
类型二:你有什么
类型三:你是什么
类型四:用户请求特征
7.5云访问安全代理
CASB