近些年来,随着云计算、微服务和容器技术的快速普及,不仅IT基础架构发生了巨大的变化,政企组织的业务交付模式也迎来巨大变迁,传统的开发模式向敏捷开发和持续交付模式迁移,在业务应用交付规模不断扩大、交付速度不断提高、开发运营场景一体化的大环境下,安全问题你真的重视么?
1 “漏洞”带来安全隐患
近年来,随着软件开源化趋势成为主流,开源软件已经成为软件供应链的重要环节,是软件生态不可或缺的组成部分,可开源软件的安全问题却是很多组织所忽略和不知晓的。
Gartner的调查显示,99%的组织在其信息系统中使用了开源软件。Sonatype公司对3000家企业的开源软件使用情况展开过调查,结果表明每年每家企业平均下载5000多个开源软件。随着开源技术快速形成生态,企业用户引入开源软件已成大势所趋,无法避免,不仅如此,随着大型软件开发过程中,开源组件的占比越来越高,加之软件开发人员往往只关注自己开发的那部分代码的安全性,忽视了采用的开源组件的安全质量,最终导致成型软件产品的系统安全问题越来越多。
所以在这样的大时代背景下,开源软件和工具已经影响到了整个软件行业,一旦具有大规模用户基础的开源软件存在安全漏洞,后果和影响是无法想象的。
在非100%自研发的今天,开源软件的漏洞已然成为了软件生态中安全漏洞的“罪魁祸首”!
2 安全检查,没那么简单
随着安全漏洞问题的不断爆出,越来越多的组织也开始意识到安全问题的重要性,可随着产品的开发生命周期越往后,其功能、接口、代码量、数据、内部关联等越发的庞大和复杂,安全问题排查的难度、引发的修复成本也显著增高。统计数据表明,随着产品的开发,生命周期越往后,安全问题引发的修复成本也成倍数增长。如下图所示,如果到了发布阶段,再去修复安全问题,那么带来的成本将是毁灭性的。
那么问题来了,我们该怎么办呢?
3 提升漏洞修复率 - DevSecOps实践
在以上背景下,DevSecOps应运而生。
DevSecOps又是什么呢?
简单来说,DevSecOps可以理解为在DevOps基础上嵌入了安全Security,即DevSecOps是糅合了开发、安全及运营理念以创建解决方案的全新方法——一套由战略驱动的体系化方法论,一套流程与工具支撑,将安全能力嵌入到整个软件开发体系中,在保证业务快速发展的情况下实现安全保障,即快又安全的发布可运行的软件。
DevSecOps这个概念最早是2017年美国RSA大会上提出的——DecSecOps是一种全新的安全理念与模式,它从DevOps的概念延伸和演变而来,其核心理念是:安全是IT团队中(包括开发、运维及安全团队)每个人的责任,需要贯穿从开发到运营整个业务生命周期的每一个环节,只有这样才能提供有效的安全保障。DevSecOps通过加强内部安全测试,主动搜寻安全漏洞,及时修复漏洞、控制风险,实现与业务流程的良好整合。
4 DevSecOps 的核心
DevSecOps的安全实践主要集中于以下两个方面:
- 安全工作前移
采用安全在软件开发前期介入的方式,降低解决安全问题的成本,前期介入的内容包括对开发、维护人员的安全意识培训、安全开发规范的培训、安全需求(非功能需求)的导入、前期的代码审计工作、基于白盒的安全测试、渗透测试等内容。在运营阶段增加的内容与前期开发阶段类似,主要内容集中在对新安全需求实现情况的验证以及软件整体安全评估。
- 安全工作与现有工作无缝对接
为了避免安全工作(例如:测试与评估、安全策略的部署等)成为开发瓶颈,使得应用系统在最短周期内实现其应有的价值和安全属性。DevSecOps采用快速迭代的开发方式,这就需要实现安全与开发工作实现无缝对接,将安全工作导入现有的开发工作流程和工具中,包括将安全需求导入至统一需求管理流程与工具、安全测试工作与持续集成/持续部署(CI/CD)对接、安全测试结果导入至缺陷管理工具等诸多环节。
这实际上就是对自动化提出非常高的要求。
5 DevSecOps 实施方案
DevSecOps通常是将安全嵌入到DevOps的流程阶段中,所以一般来说,DevSecOps的工具通常也是基于编码、构建、测试、配置、部署、监控这六个阶段嵌入的,如果要自行搭建DevSecOps的流水线需要至少在以上环节中加入相应的工具并实现自动化,具体分析如下:
1)开发阶段
良好的编码习惯更易于代码本身的理解和更改。 DevSecOps通过添加用于编写良好和安全代码的安全检查来扩展这些实践。
传统的单元测试,代码审查,静态代码检查等实践可以扩展到该阶段的安全性检查。为了不影响开发人员的工作效率,可以在代码提交至代码仓库之前查找并修复常见的安全问题。
2)构建阶段
将代码提交到代码仓库后,将执行应用程序的构建和基本自动化测试,以确保代码始终可编译可构建。
同样,需要在此阶段添加安全性检查,以检测严重和高危安全性问题。如果发现严重问题,则需要进行安全控制,设定构建为失败并发送警报通知。
3)测试阶段
成功构建后,通过选择生成的工件并将其部署到容器或者测试环境来触发测试阶段。这些测试包括功能测试,集成测试,性能测试,高级SAST,安全性和DAST。
这个阶段通常需要更多的时间和资源来执行,并且遵循快速失败方法优先原则,即更费劲和耗时的测试要尽可能后延,只有在其他测试都通过时才执行。
4)配置阶段
配置管理工具可以轻松地反复大规模部署和创建安全基础架构。通过标准化配置,配置管理工具可以减少与补丁管理相关的问题,最大限度地降低黑客可以利用未修补的服务器的风险,并有助于减少不同环境之间的差异。值得一提的是,使用配置管理工具可以在中央代码库和版本控制下跟踪配置信息。
5)部署阶段
如果上述所有阶段成功运行,则需要准备投入生产环境运行。该阶段目标主要是验证在配置或部署时间内是否存在任何错误,这些错误是否会降低系统的可靠性和弹性,是否可以在故障情况通过这些进行攻击。
该阶段使用自动化运行时检查和测试中发挥重要作用的地方,特别是发现安全违规和漏洞的安全问题,并突出了风险,如访问控制策略或防火墙规则的变化。
6)监控阶段
系统投入生产后,安全性不会终止,而是真正的开始。在DevSecOps中,自动安全检查和监视反馈循环迭代是生产操作的基本部分。
持续监控可以深入了解应用程序正在接收的流量类型,并帮助识别恶意用户的攻击模式。
6 总结
综上,DevSecOps的工具主要是基于编码、构建、测试、配置、部署、监控这6个阶段嵌入的,如果要自行搭建DevSecOps的流水线,需要至少在以上环节中加入相应的工具(参考工具如下图),并实现自动化。如果自行搭建较为困难,可借助开发平台提供DevSecOps的能力,比如华为云DevCloud软件开发平台来进行流水线的配置与开发。
当你遇到安全问题或者想要预防安全问题发生,DevSecOps是一个很好的解决方案,希望您看完本文,对DevSecOps有所了解。
作为华为ICT基础设施业务面向全球开发者的年度盛会,华为开发者大会2021(Cloud)将于2021年4月24日-26日在深圳举行。本届大会以#每一个开发者都了不起#为主题,将汇聚业界大咖、华为科学家、顶级技术专家、天才少年和众多开发者,共同探讨和分享云、计算、人工智能等最新ICT技术在行业的深度创新和应用。智能时代,每一个开发者都在创造一往无前的奔腾时代。世界有你,了不起!
了解大会详细信息,请点击https://developer.huaweicloud...