DevSecOps 软件安全开发实践
本文分享自华为云社区《DevSecOps软件研发安全实践——开发篇》,作者: 敏捷小智 。
前言
随着 DevOps 的发展,DevOps 大幅提升了企业应用迭代的速度。但同时,安全如果不能跟上步伐,不仅会抵消 DevOps 变革带来的提升,拖慢企业数字化转型进程,还会导致漏洞与风险不约而至。所以安全能力在全球范围内受到的重视越来越高, 软件开发内生的安全性成为评价企业 DevOps 成熟度水平的重要指标 。
一直以来,业界长期重视软件上线后的安全防护,而对研发阶段的安全投入不多。2012 年,Gartner 提出了 DevSecOps 的理念。DevSecOps 的理念是将安全防护流程有机地融入传统的 DevOps 流程中,为研发安全提供强有力保证,安全工具支撑研发阶段安全要求落地。
安全开发的重要性
安全与开发质量息息相关,如果开发过程控制良好,后期修补缺陷的费用会急剧减少。研发验证是安全前置实践的关键所在,研发阶段安全是整体安全左移实现关键,所以要做好关注代码程序安全,避免风险引入。
代码是软件应用服务开发的最初形态,其缺陷或漏洞是导致安全问题的直接根源,做好安全编码,尽早发现源码缺陷能够大大降低安全问题的修复成本。根据美国国家标准与技术研究所(NIST)统计,编码阶段的修复成本远远低于发布后执行代码修复的成本。具体数据如图所示。
业界的相关安全开发实践
如何做好安全开发,我们先来参考下业界相关机构和企业的做法。
• 信息通信研究院的研发运营安全体系中提出,在开发阶段要做好安全编码,对开源及第三方组件进行风险管理,变更管理,搭配安全工具确保编码实际安全 。
• Gartner 在 2019 年经过调研和分析之后给出了一个比较全面的实践清单,在编码阶段提出了 IDE 安全插件。各类的安全漏洞扫描、开源组件版本检查甚至是代码质量代码风格等的工具可以让研发人员在编码时就发现和消除一些潜在的安全风险。
• Baidu 的 DevSecOps 工具链中提出,在开发阶段要做好源码漏洞安全检查,仓库安全检查,供应链安全检查,高危框架检查和安全编码规范检查。
• Vmware 研发运营全生命周期安全管理中提出要明确产品中开源及第三方组件中的安全漏洞,在发布前期进行修复,通过静态代码分析与漏洞扫描等手段保证研发阶段的安全性。
• 思科研发运营全生命周期安全管理中提出,要利用工具了解潜在的第三方软件安全威胁,不断更新已知第三方软件威胁和漏洞列表,对于产品团队进行告警。建立内部的安全编码标准,维护经过审核的通用安全模块。
• 微软的研发运营全生命周期安全管理中提出,在开发阶段要做好第三方组件的安全管理,使用经过安全性检查,认可的工具,执行静态应用程序。
• 腾讯的 DevSecOps 工具链中提出,在开发编码环节使用的工具/机制有安全开发库,安全相关的基础设施 &框架机制,IDE 中的代码质量工具,代码 review,安全加固的统一编译构建环境,安全加固的腾讯软件源。
其他更多内容不在一一列举,关于开发阶段的安全保障大家都有自己独有的特色,这里面我们重点从使用安全的工具,安全编码和对开源和第三方组件进行管理三个方面来看一下。
使用安全的工具
工欲善其事,必先利其器。工具的安全性是进行开发前首先要保证的关键一环,开发团队使用的编辑器、链接器等相关工具,可能会涉及一些安全相关的环节,因此在使用工具的版本上,需要提前与安全团队进行沟通,使用经过安全性检查,认可的工具,安全加固的编译构建环境,确保编码实际安全。
安全编码
安全编码对保证产品和服务的安全性至关重要,缺陷,错误和逻辑缺陷始终是导致可被普遍利用的软件漏洞的主要原因。安全编码是开发实践中重要的一环,通过遵循已建立的威胁模型可以降低与安全相关的脆弱性、漏洞数量和集成错误,防止意外引入安全漏洞。
建立内部的安全编码标准,维护经过审核的通用安全模块。提供安全编码规范,制定相关的基于安全基础库的安全编码规范,要求业务摒弃一些危险的编码习惯,比如各种拼接写法、调用不安全的默认 API 等,使用安全 SDK 中的 API 实现相关的功能,从而降低写出漏洞的风险。对全员做好安全编码规范的培训,逐渐培养大家的安全意识。
编码后执行代码 Review 和自动代码扫描,通过代码质量检查、代码风格检查,仓库安全检查,高危框架检查、静态代码分析与漏洞扫描等手段保证研发阶段的安全性。同时将编码规范检查也集成在研发工具链中,保证检查的高效高质量。
对开源和第三方组件进行管理
软件开源日趋盛行,开源软件成为现代软件开发最基础的原材料。混源软件开发已经成为现代应用主要软件开发交付方式,对它的全面风险审查应考虑从第三方开源组件缺陷及后门、自研代码通用漏洞、自研代码业务逻辑漏洞、潜藏恶意代码等维度综合审计。
要了解潜在的第三方软件安全威胁,不断更新已知第三方软件威胁和漏洞列表,对于产品团队进行告警,保证软件供应链的安全。
华为云安全开发实践
华为有 20 年研发安全积累,华为的研发安全能力是伴随业务中不断出现的问题逐步形成的。华为将已经开放的运维安全能力,和即将开放的研发安全能力与华为云 DevCloud 深度融合,为企业带来 DevSecOps 平台,让企业便捷的落地 DevSecOps 理念,在软件开发过程中就内置了安全保护,让软件“天生安全,健康成长”,成为企业的竞争力。
安全编码
华为有自己的有安全编码检查平台 SecSolar 华为云严格遵从华为对内发布的安全编码规范,构建了安全编码知识库,安全编码缺陷库,安全编码能力库。为防止、检测和消除可能危及软件安全的错误,华为云服务研发和测试人员在上岗前均通过了对应规范的学习和考试。
为保证服务始终具备高安全性,华为云在安全编码的同时,引入了静态代码扫描工具每日检查,其结果数据进入云服务持续集成和持续部署(CI/CD – Continuous Integration, Continuous Deployment)工具链,通过质量门限进行控制,以评估云服务产品的质量。所有云产品、云服务在发布前,均需完成静态代码扫描的告警清零,有效降低上线时编码相关的安全问题。华为云研发的代码检查 CodeCheck 提供近 2000 条华为典型检查规则,支持多种主流开发语言,可以在开发阶段识别大部分安全问题,实现安全风险前置,有效管控代码质量。
第三方软件安全管理
华为云基于严进宽用的原则,保障开源及第三方软件的安全引入和使用。华为云对引入的开源及第三方软件制定了明确的安全要求和完善的流程控制方案,在选型分析、安全测试、代码安全、风险扫描、法务审核、软件申请、软件退出等环节,均实施严格的管控。例如在选型分析环节,增加开源软件选型阶段的网络安全评估要求,严管选型。在使用中,须将第三方软件作为服务或解决方案的一部分开展相应活动,并重点评估开源及第三方软件和自研软件的结合点,或解决方案中使用独立的第三方软件是否引入新的安全问题。
华为云将网络安全能力前置到社区,在出现开源漏洞问题时,依托华为云对开源社区的影响力,第一时间发现漏洞并修复。漏洞响应时,须将开源及第三方软件作为服务和解决方案的一部分开展测试,验证开源及第三方软件已知漏洞是否修复,并在服务的 Release notes 里体现开源及第三方软件的漏洞修复列表。
后记
各类的安全漏洞扫描、开源组件版本检查甚至是代码质量代码风格等的工具,可以让研发人员在编码时就发现和消除一些潜在的安全风险。在 DevSecOps 时代,这个需要大力的投入,如果做的好,可以大大减轻后续环节的工作量。不过这里也面临一些挑战,比如针对源码静态分析的误报率问题,再比如某些安全漏洞准确的检测方案极度依赖编译或构建过程等等。由此可见,DevSecOps 未来之路任重道远。
参考附录
1.《华为云安全白皮书》.华为技术有限公司
2.《研发运营安全白皮书》. 云计算开源产业联盟.
3. “安全需要每个工程师的参与”-DevSecOps 理念及思考
4. DevSecOps in Baidu
5. 每天扫描超 300 亿行代码,DevSecOps 在华为的落地与实践_DevOps
本文由 DevSecOps 专家服务团队出品,了解更多专家服务请戳 https://devcloud.huaweicloud.com/expert?utm_source=blog
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/2a674198baa133bebd5b17b01】。文章转载请联系作者。
评论