共计 4780 个字符,预计需要花费 12 分钟才能阅读完成。
长期以来,平安问题始终被当作软件开发流程中的最初一步。开发者奉献能够实现软件个性的代码,但只在开发生命周期的测试和部署阶段思考平安问题。随着盗版、恶意软件及网络立功事件飙升,开发流程须要做出扭转。
开发过程中的“平安左移”是指将平安问题作为每个开发迭代和冲刺的重要组成部分。诸多组织正在系统地将平安实际纳入他们的 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