关于DevSecOps,你应该知道这些 | IDCF
来源:CIO Talk 作者:马景贺
一、什么是DevSecOps
对比DevOps的概念,可以将DevSecOps理解为:
DevSecOps 描述了一个组织的文化和具体实践,这些文化和实践能够打破开发、安全、运维部门之间的壁垒,使得开发、运维和安全能够通过通力协作和敏捷开发来提高工作效率,实现软件的更快速、更安全交付。
二、DevOps不香了吗
滞后型:在以前的开发模式中,安全往往是置于软件开发的最后阶段,在半年甚至一年发布一个版本的时候,这种模式的弊端并没有显得太突兀。就像凤凰项目一样,安全团队甚至有好几个月的时间去完成安全工作。 甩锅型:我是开发,安全与我无关;我是测试,安全与我无关;我是安全,漏洞是开发引入的,测试没有测试出来,安全与我无关。 狭隘型: 安全问题只有一种:被黑客利用漏洞攻击了。其余的配置错误,敏感信息泄漏,权限管理混乱,都不是安全问题,只是因为不小心。 侥幸型: 全世界这么多软件,就算被攻击,怎么会轮到我呢? 势利型: 增加安全必然增加成本,雇佣专业的安全人员,选用专业的安全工具,进行专业的安全测试。然而,能给我带来的收益有多少?
三、DevSecOps 更香
安全融入:在软件开发的整个生命周期中都融入安全,从设计到上线之后的运维、监控阶段。安全贯穿始终。 安全左移(security shifting left):传统开发模式下,安全都是在开发的最后阶段介入,甚至上线之前。在DevSecOps 模式下,安全在计划阶段就介入,在软件的生命周期中,可以看到左移了。
测试领域有一个原理:在需求阶段发现并修复一个缺陷或问题如果如需要花费一美分,那么在开发阶段修复同样的问题则需要花费十美分;在测试阶段话花费一美元,在生产环境则需要十美元。
根据Red Hat的统计数据,他们的客户在不采用DevSecOps模式时,在生产环境上通过动态扫描发现漏洞后,修复漏洞的平均时间是174天,但是采用DevSecOps模式后,时间变为92天;如果是开发阶段就用静态扫描发现漏洞,不采用DevSecOps模式的时候,修复的平均时间是113,而采用DevSecOps模式后,时间变为52天。
文化建设:打造开发,运维,安全团队共担责任、相互信任、不推诿的文化。团队之间,团队内部都能形成大家认可和遵守的公约。比如,代码层面的漏洞由开发团队负责,基础设施的漏洞由运维负责等,这样团队之间安全责任比较明确。而针对于团队内部,比如开发团队,可以约定每一个开发人员提交代码之前必须要借助于安装在IDE中的安全插件,完成本地代码扫描和测试才能提交代码。 团队管理:组建规模合适的团队(比如two pizza team),团队与团队之间的沟通要方便,快捷。这里所说的沟通,不仅指开发内部团队的沟通,运维团队内部的沟通,安全团队内部的沟通,更重要的开发,运维,安全这种跨部门团队之间的沟通。可以用实时通讯工具,如slack等实现团队内、跨团队的协同工作。 报告共享:与安全相关的报告,不管是成功案例还是失败案例,都应该各个团队共享,通过学习案例来改进系统设计,强化实施和增强事件响应能力。比如代码扫描报告,测试覆盖报告,镜像扫描报告等。 组织培训:对于安全来讲,意识比任何事情都重要。对于大多数从事软件开发的人员来讲,安全的认知仅限于代码层面,公司法规,安全审计,权限管理等都从未考虑。通过组织安全培训,可以让每个人明确安全的范围到底有多大,每个人担负的责任有哪些。
流程意味着标准化,流程的制定应该由多团队共同参与,明确各个团队所承担的安全责任,以及对应阶段中的一些安全阈值设定,比如有高危漏洞,CI/CD Pipeline 就要终止,阻止代码的提交(持续集成阶段)或者上线(测试阶段),只有高危漏洞解决了,才能继续往下走;如果测试覆盖率低于80%,就不可以部署此版本到生产线;已有漏洞的解决,在迭代内以50%的速率递减等等。这种适合多个团队的流程,方便管理的同时,也便于推广。 如果能够自动化的,应该采用相应的工具来尽可能的实现自动化,以此来减少人工干预。比如可能由安全人员来手动执行的静态安全测试(SAST),动态安全测试(DAST),由测试人员手动执行的压力测试等,可以进行自动化改造,最好是融入到CI/CD Pipeline中。以期做到持续测试。 流程应该高度透明,比如测试可以看到开发在代码提交前是否执行了单元测试,安全团队可以看到开发在代码提交之前是否执行了敏感信息检测,代码静态扫描等,还有覆盖率的阈值设置及结果都应该是公开透明的。这种透明,不是为了让各自找证据用来甩锅,而是要培养团队之间的相互信任。完全的可见性会驱动全面的信任。 要将安全加入流程,形成端到端的安全交付流程,不是一蹴而就的。可以以小步开始,比如先在持续集成加入诸如代码扫描,敏感信息检测步骤,然后循序渐进,在持续测试,持续交付,持续部署,持续运维,持续监控中加入相应的安全步骤(后面章节会介绍)。每个步骤都应该形成一个闭环,通过反馈来做到持续改进。这种改进可以按照迭代的方式来进行。
有数据统计,现在能自动修复的漏洞数量不及发现漏洞数量的1%,借助于AI和ML,在2023年这种比例要达到10%以上。
四、DevSecOps CI/CD 实践案例
应用程序:应用程序是IT最核心的产物,也是价值的真正体现。安全是贯穿在应用程序的整个生命周期中的。常用的包括威胁建模,SAST,DAST,IAST,渗透测试。当然还有包括代码风格检测,性能、功能测试、压力测试等其他手段。从源码到产品,从静态到动态,都有相应安全手段。
SAST(Static Application Security Testing): 也称为白盒测试,通过分析应用的源码,字节码,二进制文件来发现安全漏洞,一般在软件的开发,测试阶段进行。 DAST(Dynamic Application Security Testing): 在应用处于运行状态时,通过模拟外部攻击,查看应用程序应对攻击的反应来确定,是否存在漏洞。一般在软件的测试或者维护阶段进行。 IAST(Interactive Application Security Testing):兼具SAST和DAST特点的一种安全测试手段,也是这几年比较流行的一种方法,IAST还能够对于一些软件框架进行安全检测。
镜像 & 容器:可以说容器技术的发展极大的促进了云计算的发展,容器交付模式也大大缩短了应用程序开发周期。对于镜像,可以通过镜像扫描来扫描出镜像漏洞;镜像签名可以防止镜像被恶意篡改;制作没有漏洞的基础镜像,确保多个项目应用的基础镜像是安全的。最小权限确保了应用程序所在的容器是以非root权限运行的。
云平台:云平台的安全是最大的安全,如果云平台不安全,那么在上面进行再多安全操作和防护都是没有意义的。在租用云平台的时候,必须要理清楚租用的云平台的网络,数据,租户管理等等,是否能达标公司要求的安全标准。
工具名称 | 作用 | 作用阶段 | 地址 |
---|---|---|---|
git-secrets | 代码中敏感信息检测 | 编码阶段 | https://github.com/awslabs/git-secrets |
sonarqube | 代码质量检测 | 编码阶段、构建阶段 | https://www.sonarqube.org/ |
SAST/DAST相关工具 | SAST/DAST检测 | 编码阶段、测试阶段、运维阶段 | https://www.gartner.com/doc/reprints?id=1-6JR0995&ct=190419&st=sb |
vault | 敏感数据管理 | 任意阶段 | https://www.vaultproject.io/ |
Clair/Xray/Anchore | 镜像扫描 | 构建阶段中镜像打包环节 | Clair: https://github.com/quay/clair 和 Xray: https://github.com/atom-archive/xray 和 Anchore: https://anchore.com/ |
Terraform | 管理基础设施,基础设施即代码 | 部署阶段 | https://www.terraform.io/ |
五、路漫漫其修远兮,吾将上下而求索
https://devops.com/the-state-of-devops-report-2019-is-out/
https://www.recordedfuture.com/vulnerability-management-prioritization/
https://medium.com/@Joachim8675309/devops-concepts-pets-vs-cattle-2380b5aab313
https://docs.microsoft.com/en-us/azure/devops/learn/what-is-infrastructure-as-code
https://www.redhat.com/en/topics/devops/what-is-devsecops
https://www.recordedfuture.com/vulnerability-management-prioritization/
https://www.plutora.com/blog/devsecops-guide
https://www.gartner.com/doc/reprints?id=1-6JR0995&ct=190419&st=sb
https://devops.com/devops-and-security-the-path-to-devsecops/
https://www.kiuwan.com/blog/the-benefits-of-a-devsecops-approach-to-the-sdlc/
作者:马景贺
马景贺,人称小马哥,曾做过LTE 4G网络协议开发,后转向DevOps,对于Cloud Native DevSecOps进行布道,喜欢研究docker,kubernetes,istio等Cloud Native相关技术,乐于分享,运营着DevOps SIG公众号。在大连DevOps社区活动上,举办DevOps Workshop活动。
5月25日,徐磊老师线上课程《基于BoatHouse的DevOps实战训练营》开课,现在有早鸟优惠,快快报名吧~