将JFrog Xray引入您的DevSecOps流程的最佳实践

开始在你的组织中实施DevSecOps流程

作者:Yann Chaysinh

介绍

DevSecOps是一种相对较新的文化,在软件开发生命周期(SDLC)。从集成开发环境(IDE)中的第一行代码一直到将应用程序交付到生产环境。

实现一个好的DevOps的方法很难,但是把DevSecOps做好是一个更大的挑战。DevSecOps的范围很广,是在DevOps流程中集成不同安全实践的理念。目标是最小化安全漏洞在SDLC的每个阶段。我们已经看到了定向攻击对大型企业的影响,比如最近的太阳风公司(SolarWinds)数据泄露事件。安全性不是一个孤立的问题,识别漏洞与软件开发密不可分。

开源软件(OSS)组件使用的持续增长,将代码库暴露于潜在的隐藏漏洞和违反许可法规的情况下。问题是……如何在软件开发管道中安全地使用OSS组件,而不将产品代码置于危险之中。监控和降低OSS组件中的风险是通过DevSecOps工具——软件组合分析(SCA)来处理的。

JFrog x射线是软件组合分析(SCA)工具它监视并提供有关安全性和遵从性的(OSS)包的见解。它是一个不可分割的部分JFrog DevOps平台,并与存储和组织所有软件工件的JFrog Artifactory原生集成。通过利用这两种解决方案的优点,您可以为您的软件工件实现安全性、遵从性和可追溯性。

本白皮书将指导您通过使用JFrog Xray在您的组织中实现DevSecOps过程的最佳实践。它包括以下三个部分:

  1. 通过采用推荐的存储库结构和依赖构建信息,增加JFrog Artifactory中工件的可跟踪性。
  2. 通过在JFrog Xray中组织策略和监视来定义安全和许可遵从性行为规范。
  3. 将JFrog Xray集成到您的安全和合规工作流程中。

1.JFrog Artifactory:软件工件可追溯性

作为一个通用的工件存储库管理器,Artifactory允许您在存储库中组织工件,以便:

  • 在工件的生命周期中监视它们。
  • 了解在构建过程中使用了哪些依赖项版本。
  • 根据特定的概要文件应用安全策略并限制对工件的访问。

为了改进工件的可追溯性,您将需要一个良好的存储库结构和构建信息。

库结构

实现存储库组织有两种常见模式:

  1. 单体构件存储库:所有团队共享相同的存储库。
    例如:

    • 所有Java团队的远程存储库。
    • 1本地存储库,用于存储所有Docker镜像。
  2. 专用工件存储库:每个团队都有自己的存储库集来隔离自己的应用程序和依赖项。

下面是这两种模式在工件可追溯性方面的优点和影响。

单体构件存储库

在开始使用Artifactory时,建议使用此模式。请记住,随着项目数量的增加,维护和实现工件可追溯性就会变得更加困难。最后,您将需要切换到专用的工件存储库。

好处 影响
配置:

  • 设置起来非常快。
  • 每个包类型由多个团队使用,一个远程存储库+一个本地存储库。
可追溯性和安全性:

  • 由于您不希望删除已使用的依赖项,因此执行清理比较困难。
  • 访问限制必须在存储库路径上实现,这在处理多个项目时很难维护。

专用的工件存储库

如果您计划使用Artifactory作为组件,则建议使用此模式中央存储库管理器在你的组织内部。它将允许您与您的组织一起扩展。

好处 影响
可追溯性

  • 每个项目的远程存储库:您知道消耗了哪些依赖项。

隔离

  • 更容易在repo级别保护和授予权限(而不是在repo内的路径)。
配置

  • 需要管理更多的存储库。

很高兴知道!

建立信息

build -info是构建代理收集的关于构建的所有信息。构建信息包括项目模块、工件、依赖项、环境和变量的列表。当使用其中一个JFrog客户端构建代码时,客户端可以收集构建信息并将其发布到Artifactory。当构建信息发布到Artifactory时,所有发布的详细信息都可以从Artifactory UI中访问。

好处 影响
可追溯性

  • 所有生成和消耗的二进制文件都记录在此物料清单(JSON文件)中。
配置

  • 修改您的CI管道。

很高兴知道!

JFrog Artifactory的最佳实践

建议开发团队使用专用的存储库和构建信息。这保证了工件的完全可追溯性,包括:

  • 跟踪哪些依赖版本被用于构建产品的特定版本。
  • 在软件的生命周期/交付过程中跟踪软件。
  • 每个范围隔离工件(即项目、团队、工件成熟度级别),这在清理过程中非常有用!

了解更多Artifactory最佳实践>

2.JFrog Xray:开源软件安全性和遵从性

现在您已经组织了您的工件,并且可以完全跟踪您的工件,让我们看看如何通过使用Xray正确组织您的policy和watch来实现您的OSS安全过程。

JFrog Xray依靠以下功能来实现您的安全过程:

您可以根据组织的内部法律和遵从性策略以及所选择的安全流程定义一组策略和监视。

示例组织:

  • 每个开发项目都由一个发布经理/技术负责人来代表。
  • DevOps团队负责CI / CD工具
  • 安全团队负责实现安全流程。
  • DevOps和安全团队要么是全球性的,要么是跨项目的。
  • DevSecOps (DevOps + Security团队)负责执行安全流程。
  • 安全部门负责定义策略,DevOps在Xray中实现策略。

发布经理-开发运维工程师-安全工程师

组织策略将取决于您的内部安全流程。在下面的违反工作流部分中有更多的介绍。建议为每个项目和每个成熟度级别(跨项目)设置监视。

以下概述了两种类型的政策结构和模式:

  1. 为整个组织设置的全局策略。
  2. 专门的策略,每个项目/应用程序/团队设置。

模式1:企业级策略

此模式描述对整个组织全局的策略。

如下图所示,企业级策略模式意味着项目A和B:

  • 共享相同的定义高,中,低严重违规(CVSS分数的特定范围)。
  • 使用相同的post操作,例如块下载或失败构建。

模式1 -企业级策略

建议做法:

  • 每个发布经理/技术领导都应该通过观察来管理他们自己项目的违规行为(列出和忽略)。

跨项目监视帮助DevSecOps团队监控所有项目。

模式2:项目级策略

此模式描述专用于特定项目的策略。

比内部项目更暴露的项目,例如面向internet前端的应用程序,需要更严格的安全策略。

如下图所示,项目级策略模式意味着DevOps团队构建基于每个项目/业务单元的独立策略并确保他们遵守安全小组的指示。

模式2-项目级策略

建议做法:

  • 每个发布经理/技术领导都通过观察来管理他们自己项目的违规行为(列出和忽略)。
  • 跨项目监视帮助DevSecOps团队监控所有项目。
  • 每个项目的专用策略由DevSecOps团队创建和维护。

JFrog x射线的最佳实践

需要记住的其他指导方针:

  • REST API可以帮助您创建/更新/删除策略和监视。自动化创建和更新,并使用您自己的门户来限制对策略的访问。
  • 电邮地址:
    • 策略级别——旨在通知策略经理(DevOps或安全团队)。
    • 监视级别——旨在通知项目级别的一组用户。
  • 考虑限制对发布经理或技术主管的忽视违规,以确保它将得到适当的检查和处理。
  • 索引远程存储库将允许Xray在开发团队请求时扫描第三方依赖项。
  • 索引本地存储库将允许Xray在整个交付过程中扫描应用程序中使用的OSS,甚至在它们部署到生产环境之后。
  • 索引构建信息将允许Xray在CI管道期间通知和/或失败构建,如果在构建或任何运行时依赖项中发现违规。

了解更多关于x射线的最佳实践>

3.违反工作流程

请记住,JFrog Xray是一个软件组合分析(SCA)工具,而不是问题跟踪器。它绝对可以成为您的违规管理的一部分,但必须与其他工具集成,以完全覆盖您的安全和补救过程。

引入一个新的流程是令人兴奋的,同时也是具有挑战性的,因为您必须涵盖所有可能的工作流和用例。

以下是你的违规工作流程应该解决的问题列表(并非详尽无遗):

  1. 何时以及如何通知用户违规行为?
  2. 谁应该审查违规行为?
  3. 您应该在哪里审查违规行为?
  4. 如何对安全性和遵从性违规进行优先排序?
  5. 如何忽视违规行为?
  6. 什么时候/多久审查一次违规行为?和谁?
  7. 阻止还是不阻止下载?

在下面的建议部分中查看这些问题的答案。

应引入违规审查。它可以与敏捷方法中的“冲刺回顾”相比较,因为它需要不同的参与者(即scrum主管、开发团队、产品负责人),你必须遵守规则并在会议结束时采取行动。

涉众(即开发团队、安全团队、法律团队)之间的主要障碍包括:

  • 语言/术语
  • 优先级
  • 每个利益相关者的可用性

建议

1.何时以及如何通知用户违规

通过在以下过程中尽快扫描依赖项来“向左移动”:

  • 使用Xray的IDE插件进行开发
  • 通过索引人工远程存储库进行本地构建。
  • 通过索引构建信息来构建CI。
提示x射线实现连续扫描,这意味着扫描是由事件触发的:

  • 将新缓存的二进制文件放入远程存储库
  • 新上传的二进制文件到本地存储库
  • 漏洞和许可证数据库更新。扫描将只影响受更新影响的二进制文件(不进行完整扫描)

提示虽然电子邮件和即时通讯(比如微软团队的Slack)是很好的沟通媒介,但当要发送数百条提醒时,它们可能不适合。我们建议你在开发过程中使用以下方法来提醒开发者:

  • IDE插件-尽早识别许可证和漏洞!
  • CI集成-获取CI管道期间所有违规的列表,并在必要时停止它。

提示不要拖慢开发团队的速度,不要在交付过程中的任何主要步骤之前停止管道,例如在将PR合并到主/开发分支之前。

2.谁应该审查违规行为

开发人员可以通过IDE插件和CI扫描快速检测和分析漏洞和许可证违规,并修复它们。对于那些还没有修复或与合规性相关的问题,你可能想让发布经理/技术主管与安全团队一起处理它们,因为这些违规行为将花费更多的时间来调查。

为了不减慢开发阶段,可以在一段时间内忽略违规(小睡),或者直到下一次扫描。

提示在以下情况下,实施清晰的工作流程:

  • 没有针对漏洞的修复程序
  • 软件包没有附加许可证

提示如果你想在x射线中管理违规行为,请确保你的评论标准化想出一个模式。然后使用Rest API检索并过滤被忽略的违规列表。

3.您应该在哪里审查违规行为

JFrog Xray可以列出不同级别的违规行为:工件、构建信息、监视。但是,它的作用不是管理整个违规工作流,这可能更适合问题跟踪器。

例如,您的违规工作流程可能导致在问题跟踪器中创建一个票据:

  • 如果Xray没有提供有关安全违规或无法检测到许可证的足够补救信息,您可以在问题跟踪器中列出它们。

  • 对于x射线提出的任何违规行为。

你也可以使用JFrog平台内置报表对于可定制的评论。您可以通过UI和REST API以不同的格式(JSON, PDF, CSV)导出它们。

提示使用以下REST API端点提取漏洞,许可证,违规:

4.如何对安全性和遵从性违规进行优先排序

首先检查更严重的违规。

观看这段关于x射线入职最佳实践>

5.如何忽视违规行为

JFrog x射线忽略规则允许您白名单,忽略或接受安全违规规则,以过滤掉不需要的违规噪声。

在x射线中查看违规可以在3个不同的层次上完成:观察,构建和工件。

监视包含来自多个资源(包括存储库、构建和发布包)的违规组合列表。2022世界杯阿根廷预选赛赛程尽管拥有所有违规的全局视图很方便,但是在定义忽略违规时,您需要根据您想要做的事情深入到特定的视图。例如,要忽略特定构建号上的违规,您可以在构建级别创建忽略规则。

了解更多关于如何忽略违规行为>

6.何时/多久审查一次违规行为,与谁一起审查

您的项目越关键,越暴露,您就越需要检查交付过程中的违规情况。Xray提供了违规的实时视图,你可以很容易地通过REST API提取它们。

7.阻止或不阻止下载

您的安全团队当然希望阻止任何具有安全威胁的工件。然而,这可能会大大减缓开发过程(并可能惹恼您的开发团队),因为阻止依赖项下载可能导致构建失败。

块下载可以在以下情况下启用:

  • 远程存储库防止开发人员下载易受攻击或不兼容的依赖项。
  • 本地存储库防止将易受攻击的应用程序部署到运行时环境。

如果你想阻止下载,重要的是要确保训练你的团队检测这种行为!

提示:阻止未扫描工件选项暂时阻塞工件,直到扫描完成。一定要正确设置启用时。

结论

本白皮书提供了将JFrog平台(包括Artifactory和Xray)集成到您的组织中以实现和利用您的DevSecOps文化的指导方针。

您可以实现工件的完全可追溯性,并使用JFrog平台构建安全流程。这可以通过采用正确的存储库结构和依赖Artifactory中的构建信息来实现。您还可以在JFrog Xray中组织策略和手表,以匹配您的内部安全和合规结构。最困难的部分将是定义您的整个安全违规工作流程,以在您的组织中实现DevSecOps,这将影响您的开发,运营和安全和合规团队。

无论您是已经在使用Artifactory和Xray,还是刚刚开始使用,都可以尝试一下这些DevSecOps最佳实践。

开始试验

要么释放,要么死亡