软件安全的破局之道:DevSecOps
DevSecOps将DevOps做了扩展和延伸,目的是将安全融入到软件开发生命周期内,全方位保障应用程序安全,从而达到在快速交付高质量软件的同时还有安全性的保障。DevSecOps有三个核心要素:安全左移、持续自动化、人人为安全。
安全左移(shift left)
在传统软件开发的时候(典型如瀑布式开发),安全介入的时间比较晚,一般在软件开发生命周期的测试阶段,甚至更靠后,这时候更“向右”。在半年、甚至一年才发布一次的情况下,这种安全处理方式是业界普遍的做法。但随着用户需求的多样化、敏捷化,软件发布的频率必须要提高才能响应用户日益增长的需求,在这种情况下,软件的敏捷开发逐渐盛行起来,月发布、周发布、甚至天发布都是很稀松平常的,在这种发布频率下,还要保持软件的安全性,就给软件开发带来了很大的挑战。
应对这种挑战的方法就是让安全早介入,在编码甚至计划阶段就介入(诸如威胁建模),这就形成了安全“左移”。左右是针对软件开发生命周期而言,越往左,越靠近开发侧。
左移的背后有一个安全问题修复成本与软件研发生命周期关系的逻辑:
可以看出在软件开发生命周期早期(计划、编码)阶段,发现安全问题,修复的成本是很低的,到了生产线上则修复成本是陡升的。因此,安全“左移”的最终目的是尽可能在软件开发的早期发现安全问题,以便快速采取修复措施,同时降低成本。这和新冠疫情的早发现、早隔离、早治疗有异曲同工之妙。
持续自动化
安全测试方法众多(SCA、SAST、DAST 等),覆盖软件开发生命全周期,如果将这些安全防护手段以自动化的方式运行,有两点优势:
- 一,减少研发、测试等人员的工作量,减少重复的体力劳动,得以让他们把更多的精力放在业务创新与赋能上;
- 二,持续自动化能够针对每次代码变更都做到全方位安全防护,让每一次代码变更都以安全方式交付。

最常见也是最通用的方法就是将安全测试融入到CI/CD Pipeline里面。
人人为安全
Patrick在2009年的时候提出了DevOps。大家的常规认知就是把Dev与Ops结合起来即可,但是在2020年伦敦的QCon上提到了DevOps已经不仅仅是研发和运维的事情了(DevOps beyond Development and Operations),软件加速交付的挑战、风险与瓶颈也有可能来自于其他团队,诸如市场,财务,法务等等。对于安全来讲也是,DevSecOps不仅仅是Dev、Sec、Ops 三个团队的融合,而是所有团队、所有人都要为软件的安全负责,共同消除安全所带来的风险,最终做到软件的安全、快速交付。

DevSecOps 的落地指南
可以遵循“PPT”模型来落地DevSecOps,即人(People)、流程(Process)以及工具(Tool):
- 人:坚持以人为本。人是最关键、最核心的生产要素。这里面的人不仅仅指研发、运维、安全人员,应该包含所有与软件研发相关的人。在以人为本的基础上,进行组织架构转变、公司(团队)文化打造,最终达到提高人员工作效率、改善工作体验的目的;
- 流程:构建适宜流程。流程应该尽量做到标准化、自动化、透明化,而且要让工作人员对流程达成一定共识,以便大家都能够遵循流程。比如CI/CD中要嵌入哪些安全手段、在出现安全问题时CI/CD Pipeline应该终止,安全漏洞的报告要透明化,漏洞追踪要可视化,明确漏洞修复的标准等等。
- 工具:选择合适的工具。工具是DevSecOps落地实践的最终支撑点。与安全相关的工具非常多,针对不同的开发阶段,有开源也有商业版本。没有一款工具能够搞定所有的安全问题,安全的全方位保障往往是多种工具链的结合,选择能够和现有研发流程无缝集成、研发人员使用起来方便、部门之间协作顺畅是非常重要的。

极狐GitLab DevSecOps 是极狐GitLab 旗舰版的重要功能,包含七大主要安全功能:容器镜像扫描、静态应用安全测试 (SAST)、动态应用安全扫描(DAST)、密钥检测、License合规、依赖项扫描以及模糊测试。安全能力覆盖软件开发的全生命周期(从编码到上线运维),涵盖代码从静态(编码)到动态(运行上线)转变过程的安全保障。所有安全功能都是开箱即用,而且可以很容易和极狐GitLab CI/CD集成起来。这样就能做到真正的DevSecOps:安全持续左移 & 安全持续自动化。
极狐GitLab DevSecOps
- 万法归一:一个平台,端到端的安全能力
极狐GitLab的DevSecOps功能覆盖软件全生命周期,提供从计划到上线的的全流程安全保障能力,完成从软件静态到动态的安全护航。

- 便捷易用:开箱即用
极狐GitLab DevSecOps功能开箱即用,用户无需安装配置第三方工具,无需额外学习编程语言,研发、测试、运维均可快速上手开始使用。
- 持续安全:无缝集成极狐GitLab CI/CD
与极狐GitLab CI/CD能够无缝集成,针对每一次代码变更都执行完整的安全检测,做到真正的安全持续自动化。
- 化繁为简:报告统一展示
多种安全扫描的结果统一展示,打破由多种安全工具单独产生安全报告所带来的安全信息孤岛,能够更加方便的筛选出真正具有参考价值的安全漏洞数据。

- 修复闭环:使用极狐GitLab workflow
当有任何代码变更时(创建MR),嵌入CI/CD Pipeline中的安全检测手段被触发,相应的安全扫描结果会在CI/CD流程结束时展现在MR中,漏洞的级别(高中低)、来源(来自SAST还是DAST等)均一览无余,帮助研发在第一时间找到安全问题,进行及时修复,及时防止了有问题的代码被合入主分支,从而“感染”主分支的代码。
- 拒绝背锅:漏洞修复,有据可依,有迹可查
一旦在MR中看到安全问题,可以直接点击安全漏洞,在查看详情的过程中,直接创建Issue来对安全问题进行追踪,在安全问题修复之后,关闭Issue。在后期的复盘中,可以通过直接查看Issue来找到相应的负责人、修复情况等。
极狐GitLab DevSecOps七大安全功能各有功能特性与覆盖范围与保障阶段:
- 容器镜像扫描:能够对应用环境中的容器镜像进行静态扫描,使用开源扫描工具(Trivy、Grype)来对各种镜像进行扫描。同时还能将报告嵌入MR(合并请求)中展示,亦或Security的Dashboard中单独展示。关于容器镜像扫描的使用可以查看文章极狐GitLab DevSecOps七剑下天山之容器镜像安全扫描。
- 静态应用安全测试(SAST):对代码进行“白盒”扫描分析,找出已知的安全漏洞。并出具漏洞报告,内容详细,一目了然。SAST属于静态测试,往往发生在软件开发生命周期的开发或者构建阶段,越早发现安全问题,修复安全问题所需要的成本就越低。
- 动态应用安全扫描(DAST):属于“黑盒”测试,模拟攻击者的行为,来对软件进行模拟攻击,以发现潜在的安全漏洞。极狐GitLab能够进行被动和主动扫描,并且支持HTTP凭据来测试密码保护部分,最终出具漏洞报告。DAST往往发生在测试阶段。
- 密钥检测:密钥检测可扫描代码仓库内容,找出那些不应该提交的敏感信息(诸如无意提交的Token、API key等)。同样会出具检测报告。密钥检测能够防止被提交的敏感信息遭到泄漏,从而增加系统被攻击的风险。关于容器镜像扫描的使用可以查看文章极狐GitLab DevSecOps七剑下天山之敏感信息检测。
- License合规:能够搜索扫描项目依赖项中包含的相关license,展示扫描信息,并对标记为拒绝或者新增的license进行标识。license是开源的法律武器,license合规能够让企业或个人避免陷入开源的法务纠纷中。
- 依赖项扫描:可以分析依赖项中的已知安全漏洞,出具漏洞报告,从而确保应用程序中依赖项的安全。
- API模糊测试:这是极狐GitLab DevSecOps特有的一项安全功能。扫描工具可以向API操作发送随机输入来触发例外或崩溃,做进一步的“探索性“测试,以用来防治其他手段或者工具可能遗漏的漏洞。此功能和其他手段一起使用,将大大降低漏洞漏检的概率,尽可能的发现应有的安全漏洞。
此外,极狐GitLab DevSecOps还具备以下功能:
- 和极狐GitLab CI无缝集成,构建起完整的DevSecOps CI/CD流水线,实现安全的持续自动化,任何一步出现安全漏洞,都会终止流水线(是否终止可自由设置),避免有漏洞的代码部署上线;
- 漏洞报告可以嵌入在MR(Merge Request)中,给代码审查提供更多依据,进一步保证代码质量;此外报告还可以在CI/CD构建日志、Security Dashboard等地方展示,可下载,可浏览;
- 可以和极狐GitLab的Issue功能关联起来,当任意阶段检测出漏洞,可以直接创建issue,然后可利用Epic、Roadmap等功能实现漏洞的管理;
- 版本迭代快,功能特性多。仅仅极狐GitLab14版本就上线了诸如动态安全扫描DAST预设置、DAST界面配置工具、项目级动态安全扫描DAST和密钥检测扫描的执行策略、追踪依赖性扫描和模糊测试的使用情况等功能。


