摘要:我们主要是围绕安全架构设计保证安全落地有法可依,进行威胁建模让安全落地有迹可循、做好隐私和敏感数据保护让安全落地在每一个细节和实处这几个方面进行阐述。

本文分享自华为云社区《DevSecOps软件研发安全实践——设计篇》,作者: 敏捷小智 。

前言

随着DevOps的发展,DevOps大幅提升了企业应用迭代的速度。但同时,安全如果不能跟上步伐,不仅会抵消DevOps变革带来的提升,拖慢企业数字化转型进程,还会导致漏洞与风险不约而至。所以安全能力在全球范围内受到的重视越来越高, 软件开发内生的安全性成为评价企业DevOps成熟度水平的重要指标 。

一直以来,业界长期重视软件上线后的安全防护,而对研发阶段的安全投入不多。2012年,Gartner提出了DevSecOps的理念。DevSecOps 的理念是将安全防护流程有机地融入传统的 DevOps 流程中,为研发安全提供强有力保证,安全工具支撑研发阶段段安全要求落地。

安全设计的重要性

在《DevSecOps领导者指南》一书中,作者Glenn Wilson提出了DevSecOps的三层方法论,安全教育(Security Education)、通过设计保证安全(Secure By Design)、安全自动化(Security Automation)。设计安全是实现DevSecOps非常重要的一环,大量历史经验也表明,越早在架构设计阶段考虑到安全设计的系统,比那些在越晚的开发设计阶段才考虑安全设计的系统,要安全得多。根据美国国家标准与技术研究所(NIST)统计,在发布后执行代码修复,其修复成本相当于在设计阶段执行修复的 30 倍。具体数据如图所示。

DevSecOps 的目标是在软件生命周期的全部阶段,可以更早、更快地发现并处理安全问题。从开始的安全左移到现在的无处不移,都是为了实现这个目标。因此设计安全作为全生命研发周期的排头兵必不可少。

业界的相关安全设计实践

如何做好设计安全,我们先来参考下业界相关机构和企业的做法。

• 安全开发生命周期SDL(Security Development Lifecycle)是微软最早提出,专注在软件开发流程的各个阶段的安全和隐私问题,在系统设计阶段提到了三个方面:安全设计、威胁建模和安全和隐私风险评估。

• OWASP推出了SAMM(Software Assurance Maturity Model),帮助开发者在软件工程的过程中实施安全,在软件构造阶段提出了威胁评估和安全架构。

• 信息通信研究院的研发运营安全体系中,明确给出设计阶段需要进行确定质量安全门禁、受攻击面分析、威胁建模、安全需求设计知识库、安全设计原则。

• 腾讯在设计阶段提出了公司安全规范的建立、安全评估和威胁建模,腾讯构建了自己的隐私保护方法论——用户、控制、数据三位一体的方式。

• 小米提出了设计阶段要制定小米安全手册、构建安全培训体系、进行威胁建模分析。

• 华泰证券在DevSecOps敏捷安全大会2021中发表了《安全内建-通过设计保证安全》,提到了安全架构设计、轻量级威胁建模和安全测试金字塔三个方面。

其他更多内容不在一一列举,关于设计阶段的安全保障大家都有自己独有的特色,下面我们主要是围绕安全架构设计保证安全落地有法可依,进行威胁建模让安全落地有迹可循、做好隐私和敏感数据保护让安全落地在每一个细节和实处这几个方面进行阐述。

安全架构设计

在DevSecOps中,安全设计从应用程序扩展到容器和基础设施,应用程序代码和基础设施代码是抵御恶意行为者的多重威胁的重要防线。将良好的设计原则集成到产品的架构和开发中是编写安全代码的基本要求。当架构与安全控制直接相关时,确保工程师遵守良好的设计原则是非常重要的。安全控制存在于端到端交付的整个价值流中,从开发阶段内置于应用程序中的控制到运行时保存应用程序的控制。这些措施包括保护源代码或者保护应用程序运行时,还扩展到客户与应用程序的交互,如身份验证和授权过程。

在安全架构设计中,可以以安全三元组和安全设计原则为基准。机密性(Confidentiality)、完整性(Integrity)、可用性(Availability),简称为CIA三元组,是安全的基本原则。机密性指只有授权用户可以获取信息,不可被任何未授权的用户获取。完整性指信息在输入和传输的过程中,不被非法授权修改和破坏,保证数据的一致性。可用性指保证合法用户对信息和资源的使用不会被不正当地拒绝。

业界通用的安全设计原则,主要体现在限制性、简单性和设计性三个方面:

限制性原则

  • 失败-默认安全原则(Fail-Safe Defaults),要有当功能失效后的应急安全机制,还有默认的产品配置就应该是安全状态,不存在安全漏洞。
  • 完全仲裁原则(Complete Mediation),安全检查要覆盖任何一个访问操作。安全机制有能力标识每一个访问操作请求的所有源头。
  • 特权分离原则(Separation of Privilege),将特权进行细分,分配给多个主体,避免一个主体拥有的特权非常多。比如设置系统管理员,配置管理员,安全管理员等不同角色,对应不同特权。
  • 最小权限原则(Least Privilege),每个对象只拥有完成工作所需特权的最小集合,限制由意外或错误所引起的破坏。

简单性原则

  • 经济适用原则(Economy of Mechanism),安全设计尽可能短小精悍,在使用的时候更容易处理。
  • 最少公共机制原则(Least Common Mechanism),公共资源的共享对象应该设置为最少的数量,避免多个对象共享同一个资源的场景。

设计性原则

  • 开放设计原则(Open Design),不要自行设计安全机制,不要自研算法,开发设计更重要。可以通过密钥、口令等来增强系统的安全性,这样有利于安全机制接受广泛的审查。
  • 心理可承受原则(Psychological Acceptability),在心理可承受的前提下,为安全机制设置良好交互性,安全机制可能会为用户增加额外的负担,但是这种负担必须是合理的,用户可承受的。比如多次登录失败后才需要输入验证码。

业界经过多年的发展和总结,又发展引申出其他一些安全原则,例如纵深防御、不要轻信、保护最薄弱环节、提升隐私原则等。

威胁建模

威胁建模是分析应用程序安全性的一种结构化方法,用来识别,量化和解决与应用程序相关的安全风险,通过识别目标和漏洞来优化系统安全,然后定义防范或减轻系统威胁的对策的过程。在设计新产品或者现有产品中功能的时候,工程师需要熟悉攻击者搜索的安全漏洞类型,以便他们能够减轻被利用的风险;需要了解设计中固有的风险,以便在交付生命周期的早期消除或者减轻这些风险。综上所述,威胁建模就是工程师评估产品或功能的设计以识别威胁并确定如何构建针对他们的保护的过程。

威胁建模的过程可以参考微软提供的方法:预设场景->图表化场景/过程->识别威胁->提供给每个威胁的环节措施->验证所有威胁和缓解措施。

一些IT互联网公司,在大量的实践经验基础上,构建了自己的安全威胁库和安全需求库,实现了轻量级威胁建模过程,通过安全评估调查问卷,从系统结构和使用场景去识别将要构建的应用类型,然后匹配对应的威胁库和需求库,确定安全需求基线,最终得出安全设计方案。

业界有许多的威胁建模的方法已经开发出来,如微软的STRIDE、攻击模拟和威胁分析流程PASTA、LINDDUN、通用漏洞评分系统CVSS、攻击树、Persona non Grata、安全卡、VAST建模等方法,可以将它们组合起来以创建更强大、更全面的潜在威胁视图。并不是所有的方法都是全面的,有些是抽象的,有些以人为中心,还有些方法是专门针对风险或者隐私问题,组织应该根据项目的特定需求选择哪种方法。

安全隐私和数据保护

安全隐私需求分析与设计是服务应用研发运营整个生命周期的源头,在设计阶段应仔细考虑安全和隐私问题,在项目初期确定好安全需求,尽可能避免安全引起的需求变更。

DevSecOps研发运营安全解决方案关注痛点安全问题,如安全要求、合规要求以及目前热点的个人数据和隐私保护等问题,使用安全解决方案可以更好的避免此类安全问题的发生,提升软件应用服务的安全性。

安全隐私需求主要来自于客户安全需求,业界最佳实践如OWASP TOP10、OWASP ASVS,公司安全策略《xxx信息技术管理规范》《xxx数据管理规范》,行业监管要求,以及法律法规《网络安全法》、《个人信息保护规范》、《数据安全法》等。建立明确的安全需求管理流程,能够对安全需求的分析、评审、决策等环节进行有效管理,让需求分解分配可追溯。

华为云安全设计实践

华为有20年研发安全积累,华为的研发安全能力是伴随业务中不断出现的问题逐步形成的。华为将已经开放的运维安全能力,和即将开放的研发安全能力与华为云DevCloud深度融合,为企业带来DevSecOps平台,让企业便捷的落地DevSecOps理念,在软件开发过程中就内置了安全保护,让软件“天生安全,健康成长”,成为企业的竞争力。

安全架构设计

华为在安全设计原则方面,基于业界的规范,构建了自己的基础安全技术与工程能力,形成了安全标准与规范,其中包括安全/隐私需求基线,基础安全设计规范落地,安全编码规范,采购安全要求,开源及第三方软件安全管理策略。

华为云在参考信息技术安全评价通用专责CC的安全功能项、NIST控制集,总结成产品安全架构设计8维度24子项。8维度安全架构设计包括以下几个方面:

以此指导架构设计人员系统、全面地进行安全架构设计,避免架构级安全设计遗漏。

威胁建模

华为有自己的威胁建模工具 SecDesign,在产品设计期就进行威胁建模,识别并消减风险

从痛点问题入手去思考:在系统需求分析和设计阶段,怎样才能使产品更安全?在什么样的子系统、模块、数据流之间考虑安全风险?识别了风险后,怎么消减几个方面进行思考?华为云开放的安全设计域,对STRIDE方法论进行升级,用于系统威胁分析,提供分析维度、参考案例,辅助进行安全设计;根据识别到的安全风险,智能推荐消减措施及测试用例,输出分析报告;长期积累的安全风险识别方案、消减方案、设计方案、测试用例、场景样例与知识,为安全设计提供丰富的华为与业界经验,极大降低企业安全设计门槛。

安全隐私和数据保护

华为云构建了全生命周期的数据安全和隐私保护设计,实现数据隔离、数据加密和数据冗余。

• 数据隔离:隔离机制可避免客户间有意或无意的非授权访问、篡改等行为,降低数据泄露风险。华为云的云硬盘EVS、对象存储服务OBS、弹性文件服务SFS等服务均将客户数据隔离作为重要特性。用户在设计云上业务架构时可利用这些云服务实现数据安全隔离的目标。

• 数据加密:加密可保护静态和传输中的数据。华为云的云硬盘EVS等多个服务均支持与数据加密服务DEW集成,实现密钥管理和数据加密。华为云还采用加密传输通道,保障数据在传输过程的机密性和完整性。用户在设计数据加密功能时,可以充分借鉴华为云已有的实践和能力。

• 数据冗余:冗余设计可以有效防止数据丢失。华为云采用多副本备份和纠删码设计,通过冗余和校验机制来判断数据的损坏并快速进行修复,以确保服务的可靠性。用户在设计云上业务时,可充分利用华为云服务提供的可靠性服务。

• 隐私保护设计:在产品设计过程中考虑隐私,可大幅提高产品的隐私保护能力。华为云在构建云服务时,将隐私保护作为需求落入产品开发设计流程。华为云在个人数据全生命周期贯彻PbD(Privacy by design)的理念,构建具备隐私保护特性的安全云服务。华为云基于PbD原则在设计中考虑隐私,即通过设计来保护个人数据和隐私,将保护个人数据和隐私的理念以技术手段运用到产品和服务的各个环节中。华为云贯彻和落实的七条隐私保护基本原则是合法、正当、透明,目的限制,数据最小化,准确性,存储期限最小化,完整性与保密性,可归责。华为云解读GDPR等法律法规,帮助企业满足合规要求。华为云开放的隐私合规域,根据对GDPR等的解读与业务分析,提供工具,生成隐私合规报告、隐私声明,帮助企业合规设计;根据隐私合规设计方案,自动生成和执行测试用例,最后给出隐私合规验证报告。

后记

DevOps 的基本诉求之一是要“快”,而安全保障却具有“快不起来”的特点。因为安全本身需要更为专业的知识背景,分析更复杂的攻击方式和潜在安全问题。并且,即使使用工具,其技术栈也深于普通的检查工具,这意味着耗时更长。比如,对源代码的静态检查,如果只是检查代码风格,他们可以做到快速扫描;如果需要进行安全编码的自动化检查,那么就需要进行流分析,甚至需要一个专门的编译过程来收集必要信息。未来的路任重道远,实现DevSecOps还有很长的路要走。

参考附录

1.《DevSecOps领导者指南》格伦·威尔逊(GLENN WILSON)翻译:庄飞

2.《研发运营安全白皮书》. 云计算开源产业联盟.

3.《华为云安全白皮书》.华为技术有限公司

4.《安全内建-通过设计保证安全》DevSecOps敏捷安全大会2021.华泰证券.庄飞

5. “安全需要每个工程师的参与”-DevSecOps理念及思考

6. 小米集团的DevSecOps实践_安全_

7. 安全开发流程(SDL)

8. 安全设计原则

9. 安全机制设计原则

10. 产品安全设计十大原则

11. 威胁建模基础

12. 华为可信专业级之—— 可信设计

13. 每天扫描超300亿行代码,DevSecOps在华为的落地与实践_DevOps

本文由DevSecOps专家服务团队出品,了解更多专家服务请戳 https://devcloud.huaweicloud.com/expert?utm_source=blog

点击关注,第一时间了解华为云新鲜技术~

DevSecOps“内置安全保护”,让软件研发“天生健康”的更多相关文章

  1. 深刨显式锁ReentrantLock原理及其与内置锁的区别,以及读写锁ReentrantReadWriteLock使用场景

    13.显示锁 在Java5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile.Java5.0增加了一种新的机制:ReentrantLock.与之前提到过的机 ...

  2. java并发编程(一)可重入内置锁

    每个Java对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁.线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁.获得内置锁的唯一途径就是进入由这个锁保护的同步代码块 ...

  3. JavaScript学习07 内置对象

    JavaScript内置对象 图像对象 导航对象 窗口对象 屏幕对象 事件对象 历史对象 文件对象(重要) 锚点对象 链接对象 框架对象 表单对象(重要) 位置对象 JS Window 窗口对象:ht ...

  4. linux内置的审计跟踪工具------last和lastb

    last是linux的一个内置工具,可以用来查看最后登录服务器的用户.它对于追踪非常有用. last命令显示的是来自/var/log/wtmp文件创建起,所有登录的用户.这个文件是一个二进制文件,不能 ...

  5. 拷贝,集合,函数,enumerate,内置函数

    1.拷贝 字符串和数字.赋值 id一样 import copy #提供拷贝功能 copy.copy() #原来的和现在的一起修改,不用修改时用浅copy,节省内存,复制最外层 copy.deepcop ...

  6. c++内置函数---7

    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 内置函数 调用函数时需要一定的时间和空间的开销.一般,函数调用包括5部分: 1.程序先执行函 数调用之前 ...

  7. 转:【Java并发编程】之一:可重入内置锁

    每个Java对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁.线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁.获得内置锁的唯一途径就是进入由这个锁保护的同步代码块 ...

  8. Spring Security 入门(1-6-2)Spring Security - 内置的filter顺序、自定义filter、http元素和对应的filterChain

    Spring Security 的底层是通过一系列的 Filter 来管理的,每个 Filter 都有其自身的功能,而且各个 Filter 在功能上还有关联关系,所以它们的顺序也是非常重要的. 1.S ...

  9. Vue基础(环境配置、内部指令、全局API、选项、内置组件)

    1.环境配置 安装VsCode 安装包管理工具:直接下载 NodeJS 进行安装即可,NodeJS自带 Npm 包管理工具,下载地址:https://nodejs.org/en/download/安装 ...

  10. day26.面向对象-反射封装内置方法

    封装 隐藏对象的属性和实现细节,近对外提供公共访问方式 广义:代码保护,面向对象思想 狭义:将属性,方法隐藏起来 class Person: __key = 123456 # 私有的静态属性 def ...

随机推荐

  1. 码编译安装nginx

    1.解释源码安装nginx软件的预编译,编译以及安装,分别是在做什么,需要注意什么? 预编译(configure): ./configure 00prefix=/usr/local/nginx --u ...

  2. ElectronReactAdmin跨平台管理系统|electron27+react18后台模板EXE

    基于electron27+react18+arco电脑端后台管理程序EXE实例ElectronRAdmin. electron27-react18-admin 基于跨平台技术Electron集成Vit ...

  3. AttributeError: module 'sqlalchemy' has no attribute '__all__'

    升级组件 pip install --upgrade flask-sqlalchemy

  4. 使用单卡v100 32g或更低显存的卡,使用peft工具qlora或lora混合精度训练大模型chatGLM2-6b,torch混合精度加速稳定训练,解决qlora loss变成nan的问题!

    最近新换了工作,以后的工作内容会和大模型相关,所以先抽空跑了一下chatGLM2-6b的demo,使用Qlora或lora微调模型 今天简单写个文档记录一下,顺便也是一个简单的教程,并且踩了qlora ...

  5. 关于XML的总结——Schema和DTD(转)

    XML DTD(XML的文档类型定义)是近几年来XML技术领域所使用的最广泛的一种模式.但是,由于XML DTD并不能完全满足XML自动化处理的要求,例如不能很好实现应用程序不同模块间的相互协调,缺乏 ...

  6. 解决Pycharm运行成功,但无法生成:pytest-html报告

    不生成报告的原因: 用户习惯:使用者习惯于单独执行测试文件.py,调试测试用例: 而编辑器为了方便用户执行测试用例,变调用python test来执行测试用例,这种情况下,执行的只是用例或者套件,不是 ...

  7. React 中常用技术

    可以少去理解一些不必要的概念,而多去思考为什么会有这样的东西,它解决了什么问题,或者它的运行机制是什么? 1. React 中导出和导入 1.1 ES6 解析 ES6 的模块化的基本规则或特点: 每一 ...

  8. 每天5分钟复习OpenStack(十一)Ceph部署

    在之前的章节中,我们介绍了Ceph集群的组件,一个最小的Ceph集群包括Mon.Mgr和Osd三个部分.为了更好地理解Ceph,我建议在进行部署时采取手动方式,这样方便我们深入了解Ceph的底层.今天 ...

  9. 【uniapp】【外包杯】学习笔记day07 | 微信小程序轮播图、分类导航、楼层图的开发与实现

    1.创建home分支 2.配置网络请求 由于平台的限制,现需要建立uni-app中使用第三方包请求网络数据请求 在 uni-app 项目中使用 @escook/request-miniprogram  ...

  10. [AI]生物本能vs机器人工程:谁才有“意识”?

    [AI]生物本能vs机器人工程:谁才有"意识"? 引子 我们已经就人类意识的初级形式和高级形式进行了初步探讨.通过对比分析,我们将初级意识定义为可以无需高级意识参与的本能反应.而高 ...