Skip to content

云应用程序安全

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份最危险的软件弱点清单,用于软件安全测试

image-20230727153643020

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,要转化成需求

image-20230731143504132

3.2 威胁建模

威胁建模(threat modeling)用于识别潜在的危险和安全漏洞,并作为风险管理的输入

1.STRIDE

STRIDE 用于识别和分类针对软件的安全威胁

  • 欺骗:伪造身份获取访问权限。
  • 篡改:破坏完整性。
  • 否认:无法证明某人做了某事
  • 信息披露:信息被未授权访问
  • 拒绝服务:破坏可用性。
  • 特权提升:非授权获取特权账号

2.DREAD

DREAD 用于量化威胁评估,对威胁的补救进行排序

  • 损害:威胁对组织的损害程度。
  • 可复制性:威胁有多容易复制
  • 可利用性:威胁有多容易实现。
  • 受影响用户:威胁的影响面
  • 可发现性:威胁多容易发现

3.PASTA

攻击模拟和威胁分析流程 (PASTA) 是基于风险的威胁分析方法。

  • 定义目标
  • 定义技术范围
  • 应用程序分解
  • 威胁分析
  • 脆弱性分析
  • 攻击建模
  • 风险和影响分析

4.ATASM

ATASM 是执行威胁建模的流程步骤的缩写

  • 架构:对系统架构进行分析
  • 威胁:列举所有可能的威胁
  • 攻击面:列举系统暴露于攻击的任何部分
  • 缓解措施:分析现有环境措施及其有效性

3.3 开发期间规避常见漏洞

  • 培训和意识:对开发人员进行培训,以了解常见软件漏洞。
  • 文档化过程:记录 SSDLC 并传达给团队所有人。
  • 测试驱动开发:基于测试用例开展测试有助于避免已知漏洞

3.4 安全编码

  • OWASP 安全编码实践

image-20230731145105453

  • 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