软件研发落地实践,要从设计就开始
本文分享自华为云社区《DevSecOps研发安全实践——设计篇》,作者:华为云 PaaS 小助手。
前言
随着 DevOps 的发展,DevOps 大幅提升了企业应用迭代的速度。但同时,安全如果不能跟上步伐,不仅会抵消 DevOps 变革带来的提升,拖慢企业数字化转型进程,还会导致漏洞与风险不约而至。所以安全能力在全球范围内受到的重视越来越高, 软件开发内生的安全性成为评价企业 DevOps 成熟度水平的重要指标 。
安全设计的重要性
在《DevSecOps 领导者指南》一书中,作者 Glenn Wilson 提出了 DevSecOps 的三层方法论,安全教育(Security Education)、通过设计保证安全(Secure By Design)、安全自动化(Security Automation)。设计安全是实现 DevSecOps 非常重要的一环,大量历史经验也表明,越早在架构设计阶段考虑到安全设计的系统,比那些在越晚的开发设计阶段才考虑安全设计的系统,要安全得多。根据美国国家标准与技术研究所(NIST)统计,在发布后执行代码修复,其修复成本相当于在设计阶段执行修复的 30 倍。具体数据如图所示。
![](https://static001.geekbang.org/infoq/5c/5ca2bd0a495d908bee719386c0879b2e.png)
DevSecOps 的目标是在软件生命周期的全部阶段,可以更早、更快地发现并处理安全问题。从开始的安全左移到现在的无处不移,都是为了实现这个目标。因此设计安全作为全生命研发周期的排头兵必不可少。
如何做好安全设计
如何做好设计安全,我们主要是围绕安全架构设计保证安全落地有法可依,进行威胁建模让安全落地有迹可循、做好隐私和敏感数据保护让安全落地在每一个细节和实处这几个方面进行阐述。
安全架构设计
在 DevSecOps 中,安全设计从应用程序扩展到容器和基础设施,应用程序代码和基础设施代码是抵御恶意行为者的多重威胁的重要防线。将良好的设计原则集成到产品的架构和开发中是编写安全代码的基本要求。当架构与安全控制直接相关时,确保工程师遵守良好的设计原则是非常重要的。安全控制存在于端到端交付的整个价值流中,从开发阶段内置于应用程序中的控制到运行时保存应用程序的控制。这些措施包括保护源代码或者保护应用程序运行时,还扩展到客户与应用程序的交互,如身份验证和授权过程。
在安全架构设计中,可以以安全三元组和安全设计原则为基准。机密性(Confidentiality)、完整性(Integrity)、可用性(Availability),简称为 CIA 三元组,是安全的基本原则。机密性指只有授权用户可以获取信息,不可被任何未授权的用户获取。完整性指信息在输入和传输的过程中,不被非法授权修改和破坏,保证数据的一致性。可用性指保证合法用户对信息和资源的使用不会被不正当地拒绝。
业界通用的安全设计原则,主要体现在限制性、简单性和设计性三个方面:
• 限制性原则
1.失败-默认安全原则(Fail-Safe Defaults),要有当功能失效后的应急安全机制,还有默认的产品配置就应该是安全状态,不存在安全漏洞。
2.完全仲裁原则(Complete Mediation),安全检查要覆盖任何一个访问操作。安全机制有能力标识每一个访问操作请求的所有源头。
3.特权分离原则(Separation of Privilege),将特权进行细分,分配给多个主体,避免一个主体拥有的特权非常多。比如设置系统管理员,配置管理员,安全管理员等不同角色,对应不同特权。
4.最小权限原则(Minimum Privilege),每个对象只拥有完成工作所需特权的最小集合,限制由意外或错误所引起的破坏。
• 简单性原则
1.经济适用原则(Economy of Mechanism),安全设计尽可能短小精悍,在使用的时候更容易处理。
2.最少公共机制原则(Minimum Common Mechanism),公共资源的共享对象应该设置为最少的数量,避免多个对象共享同一个资源的场景。
• 设计性原则
1.开放设计原则(Open Design),不要自行设计安全机制,不要自研算法,开发设计更重要。可以通过密钥、口令等来增强系统的安全性,这样有利于安全机制接受广泛的审查。
2.心理可承受原则(Psychological Acceptability),在心理可承受的前提下,为安全机制设置良好交互性,安全机制可能会为用户增加额外的负担,但是这种负担必须是合理的,用户可承受的。比如多次登录失败后才需要输入验证码。
业界经过多年的发展和总结,又发展引申出其他一些安全原则,例如纵深防御、不要轻信、保护最薄弱环节、提升隐私原则等。
威胁建模
威胁建模是分析应用程序安全性的一种结构化方法,用来识别,量化和解决与应用程序相关的安全风险,通过识别目标和漏洞来优化系统安全,然后定义防范或减轻系统威胁的对策的过程。在设计新产品或者现有产品中功能的时候,工程师需要熟悉攻击者搜索的安全漏洞类型,以便他们能够减轻被利用的风险;需要了解设计中固有的风险,以便在交付生命周期的早期消除或者减轻这些风险。综上所述,威胁建模就是工程师评估产品或功能的设计以识别威胁并确定如何构建针对他们的保护的过程。
威胁建模的过程可以参考微软提供的方法:预设场景->图表化场景/过程->识别威胁->提供给每个威胁的环节措施->验证所有威胁和缓解措施。
![](https://static001.geekbang.org/infoq/10/1037162b67713c9a48bf7599085bf004.png)
一些 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 维度安全架构设计包括以下几个方面:
![](https://static001.geekbang.org/infoq/b8/b87e3c9d72adc7142b6b7d949ef67423.png)
以此指导架构设计人员系统、全面地进行安全架构设计,避免架构级安全设计遗漏。
威胁建模
华为有自己的威胁建模工具 SecDesign,在产品设计期就进行威胁建模,识别并消减风险
从痛点问题入手去思考:在系统需求分析和设计阶段,怎样才能使产品更安全?在什么样的子系统、模块、数据流之间考虑安全风险?识别了风险后,怎么消减几个方面进行思考?华为云开放的安全设计域,对 STRIDE 方法论进行升级,用于系统威胁分析,提供分析维度、参考案例,辅助进行安全设计;根据识别到的安全风险,智能推荐消减措施及测试用例,输出分析报告;长期积累的安全风险识别方案、消减方案、设计方案、测试用例、场景样例与知识,为安全设计提供丰富的华为与业界经验,极大降低企业安全设计门槛。
安全隐私和数据保护
华为云构建了全生命周期的数据安全和隐私保护设计,实现数据隔离、数据加密和数据冗余。
• 数据隔离:隔离机制可避免客户间有意或无意的非授权访问、篡改等行为,降低数据泄露风险。华为云的云硬盘 EVS、对象存储服务 OBS、弹性文件服务 SFS 等服务均将客户数据隔离作为重要特性。用户在设计云上业务架构时可利用这些云服务实现数据安全隔离的目标。
• 数据加密:加密可保护静态和传输中的数据。华为云的云硬盘 EVS 等多个服务均支持与数据加密服务 DEW 集成,实现密钥管理和数据加密。华为云还采用加密传输通道,保障数据在传输过程的机密性和完整性。用户在设计数据加密功能时,可以充分借鉴华为云已有的实践和能力。
• 数据冗余:冗余设计可以有效防止数据丢失。华为云采用多副本备份和纠删码设计,通过冗余和校验机制来判断数据的损坏并快速进行修复,以确保服务的可靠性。用户在设计云上业务时,可充分利用华为云服务提供的可靠性服务。
• 隐私保护设计:在产品设计过程中考虑隐私,可大幅提高产品的隐私保护能力。华为云在构建云服务时,将隐私保护作为需求落入产品开发设计流程。华为云在个人数据全生命周期贯彻 PbD(Privacy by design)的理念,构建具备隐私保护特性的安全云服务。华为云基于 PbD 原则在设计中考虑隐私,即通过设计来保护个人数据和隐私,将保护个人数据和隐私的理念以技术手段运用到产品和服务的各个环节中。
华为云贯彻和落实的七条隐私保护基本原则是合法、正当、透明,目的限制,数据最小化,准确性,存储期限最小化,完整性与保密性,可归责。
华为云解读 GDPR 等法律法规,帮助企业满足合规要求。华为云开放的隐私合规域,根据对 GDPR 等的解读与业务分析,提供工具,生成隐私合规报告、隐私声明,帮助企业合规设计;根据隐私合规设计方案,自动生成和执行测试用例,最后给出隐私合规验证报告。
后记
DevOps 的基本诉求之一是要“快”,而安全保障却具有“快不起来”的特点。因为安全本身需要更为专业的知识背景,分析更复杂的攻击方式和潜在安全问题。并且,即使使用工具,其技术栈也深于普通的检查工具,这意味着耗时更长。比如,对源代码的静态检查,如果只是检查代码风格,他们可以做到快速扫描;如果需要进行安全编码的自动化检查,那么就需要进行流分析,甚至需要一个专门的编译过程来收集必要信息。未来的路任重道远,实现 DevSecOps 还有很长的路要走。
参考附录
1.《DevSecOps 领导者指南》格伦·威尔逊(GLENN WILSON)翻译:庄飞
2.《研发运营安全白皮书》.云计算开源产业联盟.
3.《华为云安全白皮书》.华为技术有限公司
4.华为可信专业级之—— 可信设计
5. 每天扫描超 300 亿行代码,DevSecOps 在华为的落地与实践_DevOps
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/45a61cc9c0bdfdeac5c205db0】。文章转载请联系作者。
评论