实用指南:手把手搭建坚若磐石的DevSecOps框架

实用,指南,手把手,搭建,磐石,devsecops,框架 · 浏览次数 : 137

小编点评

## DevSecOps 工具盘 **开发阶段** * 规划和问题跟踪: * Jira(软件供应链管理平台) * Slack * 威胁建模: * IriusRisk * CAIRIS * Kenna.VM *微软威胁建模工具 * SD Elements * securCAD * Tutamantic * Threagile * ThreatModeler * OWASP Threat Dragon **写代码及代码管理** * 代码审查: *PMD *Checkstyle *Gerrit *Phabricator *SpotBugs *Find Security Bugs **在构建阶段的DevSecOps 安全实践** * 软件成分分析 (SCA) * 静态应用测试及单元测试 * OWASP Dependency-Check * Retire.js * Snyk **测试阶段** * 使用DAST识别应用程序相关的漏洞 * 使用各种工具测试运行时性能 **解决攻击代理和网络协议模糊的一般DevSecOps测试工具** * Boofuzz * OWASP Zed攻击代理 * BBDD-Security * AppScan * Gauntlt * JBroFuzz * Arachni **部署和运维阶段** * 安全操作环境 (Red Hat Ansible、Chef、Puppet、Salt、HashiCorp Terraform和Docker) * 变更和配置管理工具 (Red Hat Ansible、Chef、Puppet、Salt、HashiCorp Terraform和Docker) * Chaos Monkey和Gremlin

正文

长期以来,安全问题一直被当作软件开发流程中的最后一步。开发者贡献可以实现软件特性的代码,但只在开发生命周期的测试和部署阶段考虑安全问题。随着盗版、恶意软件及网络犯罪事件飙升,开发流程需要做出改变。
 

开发过程中的“安全左移”是指将安全问题作为每个开发迭代和冲刺的重要组成部分。诸多组织正在系统地将安全实践纳入他们的DevOps流水线中,以最终形成 DevSecOps。DevSecOps 并不是单一的工具或技术。成功的 DevSecOps 是在一个框架中集成了多种实践和工具,确保企业在开发工作流程的所有阶段都考虑到安全问题,换言之,DevSecOps 并非一日之功,一个人或单个部门都无法独立负责 DevSecOps,它跨越了开发、网络安全、QA测试、IT运维和技术支持等团队。
 

本文将简述采用 DevSecOps 的优势和挑战,整个应用生命周期中 DevSecOps 框架的要素以及其中每个阶段的常用工具。
 

DevSecOps 中的基本概念

DevSecOps 是将安全额外加入到企业 CI/CD 工作流程中。DevSecOps 并没有取代现有的开发模式。相反,它通过在整个开发周期中增加一个安全层来扩展和补充这一模式。DevSecOps 是一种解决开发人员将安全检查和测试保留在项目后期阶段的方法——通常是在项目接近完成和部署阶段。
 

在后期阶段才进行安全检查会导致两种问题。安全缺陷可能在被发现之前已经进入已发布的软件,而在软件开发生命末期发现的安全问题比早期发现的问题需要更多的时间、资源和资金来补救。
 

越来越短的开发周期以及降低项目管理成本和商业风险的需要,使得安全左移成为众望所归的方法。如果将项目进度想象成从左到右排列的时间线,那么左移意味着将安全检查移到项目的开始阶段。安全及其他操作上的考虑越往左移,它们就越有可能被纳入产品的设计和搭建之中。DevSecOps 的目标是在设计、构建、测试和部署软件的过程中,开发人员对安全问题的重视不亚于其他主要的软件特性。
 

当完全实现 DevSecOps 时,它将会带来以下好处:

  • 为企业、客户及用户降低安全风险
  • 在产品生命周期早期发现软件的安全缺陷及漏洞
  • 更快修复安全问题
  • 改善开发、安全和运维团队之间的沟通和协作方式
  • 整体代码质量更好
     

然而,直接将安全纳入现有的敏捷开发流程中可能会带来一些弊端:

  • 改变现有工作流程,可能会出现瓶颈
  • 开发和安全团队都需要额外的培训以补充专业 知识
  • 由于沟通不畅或为了达成零漏洞的目标而导致开发工作流程中断


图片来源:TechTarget
 

创建现代化的 DevSecOps 框架

由于DevSecOps是对现有软件开发实践的扩展或增强,因此最简单的做法是从敏捷的角度考虑DevSecOps框架,以此来进行规划、编写代码、测试、部署和持续运维。
 

规划和设计

DevSecOps 在软件开发生命周期的早期阶段开始,通常是设计或规划阶段。例如,安全问题会影响 Sprint planning 期间的目标设置。DevSecOps 框架通过以下方式将安全目标引入规划阶段:

  • 建立代码标准并进行同行评审。当开发者以不同的方式编写各部分代码时,安全缺陷可能进入产品中。一个团队如果建立并执行一套一以贯之的代码标准,并依据此套标准评估代码库,可以在极大程度上防止漏洞引入。同行评审可以确保代码确实符合标准并且能够发现常见的编程错误。
  • 在IDE环境中使用安全插件。IDE是可扩展的平台,通常可以安装各类安全插件以检查代码中潜在的漏洞,就像 IDE 可以标注出缺少的标点符号或语法错误一样。基于 IDE 的安全检查会在开发者向代码库进行提交之前为他们提供静态代码分析。
  • 进行威胁模型分析。威胁建模鼓励开发者像黑客一样对待一个应用程序。开发人员应该考虑到程序会被滥用的潜在风险,同时应该在程序目标设置中考虑到防止滥用的方法。常见的威胁模型分析方法包括STRIDE、DREAD和OWASP。多种威胁模型可以结合起来,以加强设计的安全性。
     

写代码及代码管理

DevSecOps 不仅仅指有安全意识的代码标准和同行评审。同时还意味着将安全置于代码库管理和维护的中心,以避免引入漏洞。确保代码提交和管理的安全的常用技术包括:

  • 管理依赖项的安全性。外部库、开源代码及重复使用的模块在软件开发中很常见。然而,外部代码可能并不遵循与企业内部工作流程一致的安全标准和防范措施。开发者应该检查所有依赖项的安全性,验证他们是否是官方发布的真实版本并安全地交付。
  • 扫描代码和代码仓库。代码仓库扫描工具可以在构建执行前对提交到仓库的代码进行静态分析,检查是否存在漏洞、硬编码凭证和其他常见的疏漏。漏洞测试和其他静态测试对于代码安全来说至关重要。代码仓库扫描为大型团队增加了安全性,因为团队中的开发者会访问同一个仓库。
  • 保护开发流水线的安全。在检测到安全问题后,一个完整的 DevSecOps 框架可能会调整开发工作流程以防止代码直接提交到默认或主干分支,直到问题得到解决。此外,攻击者还可以通过引入恶意代码或窃取凭证来破坏流水线本身。因此,企业应该在其开发流水线中进行安全管控。
     

测试

测试可以检测应用程序的缺陷和安全问题。构建、测试和发布流水线的自动化和编排应该包括当代码部署测试时运行的安全工具,如,在单元测试期间检查漏洞。DevSecOps 框架的常见测试注意事项如下:

  • 集成动态应用安全测试(DAST)。DAST 和渗透测试历来都是开发过程中的最后一步。DevSecOps 应该将DAST、渗透测试和其他类型的动态漏洞测试加入到流水线内构建阶段的测试方案中。完整的DAST和其他动态漏洞测试,如安全验收测试,可能很耗时,但也可以选择更轻量的测试方案,既可以更快地获取结果也能识别静态测试中遗漏的问题。
  • 保护基础设施安全。DevSecOps 的安全考量应该不仅仅局限于应用程序本身,还需要考虑到部署环境,无论是本地还是云端的基础设施(虚拟机、容器、K8S集群等)。借助微软、AWS等工具可以在云基础设施上执行安全驱动的策略。基础设施即代码(IaC)是构建标准和良好应用程序环境的一种方式。
     

部署和运维

即便构建成功,也并不意味着再也不会出现安全问题。DevSecOps 实践通过以下方式进入部署和运维环境:

  • 配置管理。托管应用程序的基础设施环境必须是稳定的。任何试图改变既定基础设施配置的行为都可能是恶意的。监控和执行基础设施配置的工具应该是一个组织的DevSecOps框架的核心要素。云供应商也提供这些工具,如Microsoft Defender for Cloud和Microsoft Sentinel。

  • 入侵检测和行为分析。分析工具(入侵检测和预防系统)可以建立流量模式和性能的基准线,然后基于此检测工作负载或网络中可疑或恶意的异常情况。这类工具已经发展成熟,可以被 DevSecOps 所采纳。

  • 持续的安全测试。DAST、渗透测试和其他类型的安全测试不应该止步于应用生命周期的测试阶段。定期执行测试(如端口扫描、模糊测试),并且只要团队怀疑代码中存在新的风险就应该进行测试。例如,如果一个新发现的漏洞出现在处理器的命令集中,运维或安全支持管理员应该采取行动。当测试确认了存在潜在的漏洞,他们就可以即刻着手开发和部署新的补丁。

  • 告警和报告。安全工具和策略需要配合全面的告警和报告。开发者和项目相关方应该收到可执行的情报以支持及时的鉴别和修复问题。

  • 事后复盘。即便做了最佳的安全工作,企业仍有可能最终在应用程序或基础设施中遇到安全问题。当安全事件发生时,进行事后总结是十分必要的。团队应该共同解决问题,并利用经验来调整未来的开发和运维工作,以避免重蹈覆辙。
     

DevSecOps 工具盘点

如果企业开始推动 DevSecOps 的实现,那么首先需要评估一下工具链及其中的每一个工具。一些组织已经使用了适合的DevSecOps 工具,而其他组织则需要更新或替换工具。市面上,有需要工具可以满足 DevSecOps 的需求,以下列出每个主要阶段的常见工具:
 
规划和设计阶段:团队需要针对安全注意事项进行协作和讨论。用于规划、问题跟踪和管理的常用工具有 Jira(软件供应链管理平台SEAL已实现对Jira的集成),以及通信工具Slack。威胁建模是 DevSecOps 下的一个主要规划问题,市面上有许多常用工具,如IriusRisk、CAIRIS、Kenna.VM、微软威胁建模工具、SD Elements、securiCAD、Tutamantic、Threagile、ThreatModeler和OWASP Threat Dragon等,它们均可提供威胁建模能力。
 

写代码及代码管理阶段:开发人员使用静态代码分析、IDE插件(如 pre-commit hooks)和代码仓库扫描来确保代码安全。代码审查工具包括PMD、Checkstyle、Gerrit、Phabricator、SpotBugs和Find Security Bugs。在选择代码审查工具时,要选择为项目的编程语言和IDE或工具链的互操作性设计的工具。
 
在构建阶段的DevSecOps 安全实践包括软件成分分析(SCA)、静态应用测试及单元测试,它们可以分析新代码和任意依赖项。常见的工具包括OWASP Dependency-Check、Retire.js, Snyk等。
 

测试阶段:测试阶段的重点是使用DAST来识别与应用程序操作相关的漏洞,如用户认证、授权、SQL注入和API端点。DAST工具包括Invicti(以前是Netsparker)、Astra Pentest、Acunetix、PortSwigger、Detectify、Rapid7、Mister Scanner、AppScan和AppCheck。
 
解决攻击代理和网络协议模糊的一般DevSecOps测试工具包括Boofuzz、OWASP Zed攻击代理、BDD-Security、AppScan、Gauntlt、JBroFuzz和Arachni。选择工具的依据是它们是否适合所需的应用类型和测试,以及它们与其他正在使用的工具的互操作性。
 

部署和运维阶段:一个DevSecOps的候选版本应该被安全地编码、进行构建检查和彻底的测试。紧接着,DevSecOps团队需要为版本发布搭建一个安全的操作环境,比如设置访问控制、网络防火墙访问和密钥管理。在部署阶段,变更和配置管理工具是DevSecOps框架的核心。常见的配置管理工具包括Red Hat Ansible、Chef、Puppet、Salt、HashiCorp Terraform和Docker。DevSecOps团队专注于实时运行环境中的情况。测试和生产环境之间的差异应该被识别并仔细研究,因为它们往往是安全出现问题的预兆。运行时性能工具包括Osquery、Falco和Tripwire。
 
此外,团队使用混沌工程工具,如Chaos Monkey和Gremlin,来评估部署中的,或者是未经测试的故障,如服务器崩溃、驱动故障和网络连接问题。其目的是让部署在中断中生存下来,或者优雅地失败。
 
反馈循环是DevSecOps成功的核心因素。除非工具产生的结果能够循环到开发过程中,否则这些工具是没有用的。利用整个工具链的报告和分析来评估当前版本的安全状态,并利用这种经验来改善下一个开发周期。
 

SEAL 如何帮企业实现 DevSecOps?

软件供应链管理平台 SEAL 可以帮助需要实现 DevSecOps 的企业以全链路的视角管理代码安全、构建安全、依赖项安全以及运行环境(K8S)安全,其可扩展的架构可以让开发者轻松将各阶段的工具集成其中,并为软件供应链整体提供简洁、直观的全局视图,帮助开发、安全和运维团队充分掌握全链路概况,以评估软件开发流程的安全状态。
 

免费试用请访问:seal.io/trial.html

与实用指南:手把手搭建坚若磐石的DevSecOps框架相似的内容:

实用指南:手把手搭建坚若磐石的DevSecOps框架

长期以来,安全问题一直被当作软件开发流程中的最后一步。开发者贡献可以实现软件特性的代码,但只在开发生命周期的测试和部署阶段考虑安全问题。随着盗版、恶意软件及网络犯罪事件飙升,开发流程需要做出改变。 开发过程中的“安全左移”是指将安全问题作为每个开发迭代和冲刺的重要组成部分。诸多组织正在系统地将安全实

vue3项目实战+element-plus

记录自己搭建前端项目的学习过程和开发过程,希望一起学习进步 采用Vue3+element-plus+axios+vue-router+sass……(目前刚开始是用到了这些,随着开发慢慢更新) npm是比较慢的, 所以我用的是pnpm。安装指令:npm i pnpm 简单介绍下作用 Vue3:前端框架

『手撕Vue-CLI』添加帮助和版本号

前言 经过上一篇『手撕Vue-CLI』编码规范检查之后,手撕 Vue-CLI 已经进阶到了代码规范检查这一步,已经将基本的工程搭建好了,然后代码规范约束也已经加入了,并且将 nue-cli 指令绑定到了全局当中,可以在任何地方使用了。 正文 接下来这篇文章呢,就要来实现一下大多数的命令行工具都会有的

微服务面试必读:拆分、事务、设计的综合解析与实践指南

微服务的应用级别确实相对简单,但在实际开发中仍有一些技术难点需要解决。对于微服务组件的使用,确实不存在太大差距,但在设计和开发过程中需要积累经验。学习微服务的上手时间相对较短,可能只需一周到一个月的时间。然而,设计经验和技术难点是需要个人长期积累的,不能急于求成。因此,在使用和开发微服务时,更应该关注方案思考,展示自己对该领域的理解和见解。这样能够体现出你对问题的思考深度和解决方案的创新性。希望这次面试种子题目的解答能够帮助你应对面试官的问题!

《consul 简易上手指南》

consul 是一个用来做服务发现的框架,具有分布式、高可用以及可横向扩展的特性 什么是服务发现?为什么要实现服务发现? 举个常见的例子: 假设有一台 client 想要实现不同的业务,就需要调用接口去访问后端的server 那这样 client 就需要知道后端 server 的网络配置,通常是将

Terraform 新手村指南,萌新必读!

基础设施即代码(IaC)是指使用代码和软件开发技术来配置和管理基础设施的实践。IaC 背后的逻辑是尽量消除手动配置基础设施和资源的需求,比如服务器、负载均衡以及数据库等。由于基础设施是整个软件开发流程的一个组成部分,并且与应用交付更紧密地联系在一起,因此让基础设施的更改更容易交付十分重要。 使用代码

松灵机器人scout mini小车 自主导航(2)——仿真指南

松灵机器人Scout mini小车仿真指南 之前介绍了如何通过CAN TO USB串口实现用键盘控制小车移动。但是一直用小车测试缺乏安全性。而松灵官方贴心的为我们准备了gazebo仿真环境,提供了完整的仿真支持库,本文将介绍如何上手使用仿真。 官方仓库地址:https://github.com/ag

轻松掌握组件启动之MongoDB:快速入门、Linux安装和Docker配置指南

本文总结了MongoDB的快速入门、Linux安装和Docker配置指南。它提供了一步步的操作指引,帮助读者迅速上手MongoDB,并了解如何在Linux环境下进行安装、启动和配置。此外,文章还介绍了使用Docker安装和配置MongoDB的方法,使读者能够更轻松地部署和管理MongoDB实例。

『手撕Vue-CLI』下载指定模板

开篇 经上篇文章的介绍,实现了获取下载目录地址,接下来实现下载指定模板的功能。 背景 通过很多章节过后,已经可以拿到模板名称,模板版本号,下载目录地址,这些信息都是为了下载指定模板做准备的。 实现 如何从 GitHub 下载模板 可以借助 download-git-repo 这个库来下载 GitHu

鸿蒙HarmonyOS实战-ArkUI动画(放大缩小视图)

前言 在HarmonyOS中,可以通过以下方法放大缩小视图: 使用缩放手势:可以使用双指捏合手势来放大缩小视图。将两个手指放在屏幕上,并向内或向外移动手指,即可进行放大或缩小操作。 使用系统提供的缩放控件:在HarmonyOS的开发中,可以使用系统提供的缩放控件来实现视图的放大缩小功能。通过在布