实用指南:手把手搭建坚若磐石的DevSecOps框架
长期以来,安全问题一直被当作软件开发流程中的最后一步。开发者贡献可以实现软件特性的代码,但只在开发生命周期的测试和部署阶段考虑安全问题。随着盗版、恶意软件及网络犯罪事件飙升,开发流程需要做出改变。
开发过程中的“安全左移”是指将安全问题作为每个开发迭代和冲刺的重要组成部分。诸多组织正在系统地将安全实践纳入他们的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框架的更多相关文章
- A Practical Guide to Distributed Scrum - 分布式Scrum的实用指南 - 读书笔记
最近读了这本IBM出的<A Practical Guide to Distributed Scrum>(分布式Scrum的实用指南),书中的章节结构比较清楚,是针对Scrum项目进行,一个 ...
- webdriver实用指南python版本(1)-安装开发环境
webdriver实用指南是本人编写的系列丛书,包括ruby版.python版和java版.在线版是免费的,之前是放在我的github上,但是很多同学总不记得地址,现在转到我的博客上,方便大家阅读. ...
- [转载]Firefox插件(plugins)开发实用指南
转自: http://huandu.me/2010/02/11/595/ Firefox插件可实现强大功能,但其中麻烦事情不少.写这个实用指南首先是为了方便自己记忆,免得以后再次栽倒一些坑里面,如果能 ...
- Chrome 控制台实用指南【转】
转自伯乐在线. Chrome 控制台实用指南 前言 Chrome浏览器我想是每一个前端er必用工具之一吧,一部分原因是它速度快,体积不大,支持的新特性也比其它浏览器多,还有一部分我想就是因为它的控制台 ...
- ActiveReports 9实战教程(1): 手把手搭建环境Visual Studio 2013 社区版
原文:ActiveReports 9实战教程(1): 手把手搭建环境Visual Studio 2013 社区版 ActiveReports 9刚刚发布3天,微软就发布了 Visual Studio ...
- MSIL实用指南-生成索引器
MSIL实用指南-生成索引器 索引器是一种特殊的属性,它有参数的,也有get和set方法,属性名称一般是"Item",并且方法名称一般名称是"get_Item" ...
- 乙醇的webdriver实用指南ruby版本
webdriver实用指南是乙醇2013年分享计划的一部分,作为对已逝去的selenium2时代的追忆. 目录如下 启动浏览器 关闭浏览器 浏览器最大化 设置浏览器大小 访问链接 打印当前页面的tit ...
- 《Android Studio实用指南》7.1 AndroidStudio代码检查工具概述
本文节选自<Android Studio实用指南> 作者: 毕小朋 目前本书已上传到百度阅读, 在百度中搜索[Anroid Studio实用指南]便可以找到本书. Android Stud ...
- 《Android Studio实用指南》4.27 使用演示模式
本文节选自<Android Studio实用指南> 第4章第27节 作者: 毕小朋 目前本书已上传到百度阅读, 在百度中搜索[Anroid Studio实用指南]便可以找到本书. 什么是演 ...
- 家用wifi信号覆盖增强扩展实用指南
家用wifi信号覆盖增强扩展实用指南 现在网上很多号称穿墙王的无线路由器,但是一般用起来效果都不理想,其实最主要的原因还是家里面一般每个房间不大,但是墙比较多.并且一般也没有一个所谓的中心点放置路由器 ...
随机推荐
- AtCoder Beginner Contest 321(ABC321)
A. 321-like Checker 直接模拟. Code B. Cutoff 直接暴力枚举 \([0\sim100]\),每次把第 \(n\) 个数当作当前枚举的 \(i\),然后看看条件是否满足 ...
- Go 接口-契约介绍
Go 接口-契约介绍 目录 Go 接口-契约介绍 一.接口基本介绍 1.1 接口类型介绍 1.2 为什么要使用接口 1.3 面向接口编程 1.4 接口的定义 二.空接口 2.1 空接口的定义 2.2 ...
- 生产真实案例:震惊,几条SQL把服务器干崩了,事后还大言不惭!
大家好,我是冰河~~ 今天跟大家分享一个发生在今天凌晨的真实案例,这篇文章也是我事后临时写出来的,处理事情的过程有点无语,又有点气愤! 事件背景 事情的背景是这样的:一个朋友今年年初新开了一家公司,自 ...
- Linux 本地AMH 服务器管理面板实现远程访问方法
AMH 是一款基于 Linux 系统的服务器管理面板,它提供了一系列的功能,包括网站管理.FTP 管理.数据库管理.DNS 管理.SSL 证书管理等.使用 AMH 云主机面板可以方便地管理服务器,提高 ...
- The 2021 ICPC Asia Regionals Online Contest (II) L Euler Function
思路来源:Zed222 如果一个区间里的数都有这个质数,那么我们就直接利用性质\(\phi(n * p) = \phi(n) * p\),如果没有这个区间中有没有这个质数的,那么就退化到了单点修改,当 ...
- MySQL大表设计
存储大规模数据集需要仔细设计数据库模式和索引,以便能够高效地支持各种查询操作.在面对数亿条数据,每条数据包含数百个字段的情况下,以下是我能想到的在设计数据库的时候需要注意的内容,不足之处欢迎各位在评论 ...
- 【结对作业】第一周 | 学习体会day03
昨天解决线路查询时遇到的type接受为空导致出现空指针异常抛出,后来发现是因为传递的数据类型出现了问题,更改数据类型之后问题就得到了解决今天在实现站点查询线路时遇到了乱码问题,在这之前我们单独编写代码 ...
- TCP传输层详解(计算机网络复习)
介绍:TCP/IP包含了一系列的协议,也叫TCP/IP协议族,简称TCP/IP.该协议族提供了点对点的连接机制,并将传输数据帧的封装.寻址.传输.路由以及接收方式都予以标准化 TCP/IP的分层模型 ...
- Linux笔记03: Linux常用命令_3.5权限管理命令
3.5 权限管理命令 3.5.1 权限介绍 1.为什么需要权限 绝大多数用户使用的是个人计算机,而使用个人计算机的用户一般都是被信任的用户(如家人.朋友等).在这种情况下,大家都可以使用管理员身份直接 ...
- MySQL运维11-Mycat分库分表之应用指定分片
一.应用指定分片 此规则是在运行阶段有应用自主决定路由到那个分片,根据提供的字段,然后按照指定的规则,截取该字段的部分子字符串当做分片的依据,该分别方法比较灵活,适用于某个字段有几个特殊的字符串拼接而 ...