InfoQ百度的 DevSecOps 实践


来源 |本文转载自公众号“百度安全应急响应中心”
本文将从传统 SDL 开始 , 介绍百度从 SDL 到 DevSecOps 的演进历程 。 全文涉及 SDL 的痛点、DevSecOps 建设初衷、实践形式、落地思路 , 以及落地后的效果与收益 , 也会介绍 DevSecOps 在云原生时代的探索思路与落地场景 。 如果你正准备或者已经参与到企业 DevSecOps 建设的相关工作中 , 这篇文章或许能够给你的工作带来一些启发 。
1
轻量级 SDL , 百度的前 DevSecOps 时代
作为一家大型互联网公司 , 百度具备着所有大型公司和互联网公司的典型特点:业务体系繁多、业务数量庞大、业务迭代迅速 。
在百度内部 , 业务研发模式有别于传统的 SDLC 模型 , 更接近于 DevOps 模式 , CI/CD 工具集成和自动化程度高 , 产品迭代频次多、周期短 。
InfoQ百度的 DevSecOps 实践
本文插图
面对这样的业务研发场景 , 传统通过输出人力到业务团队 , 全流程跟进和解决业务研发生命周期的安全问题的方式已经不再适合 。 安全团队不能、也不可能将人力覆盖到所有业务 。 因此 , 安全团队势必需要构建通用性的产品安全基础设施 , 将其嵌入到产品研发流程中 , 然后配合重点业务的小范围安全评估 , 来实现高可用、高自动化的软件研发生命周期安全保障 。
在百度 , 我们将这种方式称之为轻量级 SDL , 即通过少量的人力投入 , 以高自动化、高 CI/CD 集成的方式解决业务产品的安全问题 。 在轻量级 SDL 建设初期 , 我们根据实际业务场景 , 构建了百度的自动化漏洞检测系统 , 并将其嵌入到业务测试上线流程中 , 具体图示如下:
通过轻量级 SDL 建设 , 我们以不足 10 人的团队规模 , 支撑百度 80% 以上业务的上线前安全检查 , 并在过去的几年时间 , 保证百度线上业务安全问题数量每年降低 30% 以上 。
【InfoQ百度的 DevSecOps 实践】当然 , 上图中描述的轻量级 SDL 架构也存在一些问题和痛点 。
虽然通过在测试上线阶段嵌入了自动化安全测试流程 , 能够帮助业务在上线之前提前发现安全问题 , 降低安全风险 。 但是由于业务团队相对缺少安全意识和视野 , 经常误认为保障业务安全只是安全团队的工作 , 认为自动化安全测试是安全团队给业务团队增加的额外负担 。 在这种情况下 , 业务团队在面对自动化安全测试流程检查出的问题时 , 也常常是 case by case 的解决 , 并没有深层次的解决安全意识和安全编码相关的问题 。
对此 , 我们整理了轻量级 SDL 初期建设完成后亟待解决的一些问题 , 并决心解决:
自动化安全工具很难覆盖到产品的需求设计阶段 。
安全只覆盖了产品研发的编码和测试阶段 , 并没有实现全链条覆盖 。
绝大多数产品的安全措施集中在测试阶段 , 流程滞后、修复成本高、效率低 。
仅通过自动化安全工具的嵌入 , 很难与业务团队建立安全协同机制 。
非常规型安全漏洞 , 很难在测试阶段进行自动化发现和收敛 。
2
构建 DevSecOps 的初衷
针对上述问题 , 我们期望对轻量级 SDL 架构进一步完善 , 建设一个产品研发全流程覆盖、高自动化集成、强调安全与业务协同的业务安全保障框架 。
我们期望通过产品研发全流程的安全措施建设 , 持续提升业务团队相关人员的安全意识、安全编码习惯以及对安全场景的理解 , 让业务在产品研发的各个阶段都能实现高效、安全、可靠的交付 , 在根源去消灭安全漏洞和缺陷 。
这些都与 DevSecOps 的理念不谋而合 , 所以我们决定在轻量级 SDL 的基础上 , 构建百度的 DevSecOps 。
3
百度 DevSecOps 实践
我们在建设 DevSecOps 时 , 主要侧重以下方面:


推荐阅读