如何用Snyk查找、优先处理并自动修复应用程序中的漏洞

757 阅读9分钟

忽略一个漏洞?这听起来像是一个悖论。为什么会有人想忽视一个漏洞呢?

虽然忽略安全问题不应该是你的默认做法,但有时仍是必要的。今天的开发和安全团队面临着由成千上万的问题组成的漏洞积压。为了保持快速发展,他们必须能够有效地安排工作的优先次序。 哪些漏洞需要立即关注,哪些可以在以后再处理,哪些可以完全忽略?

不是所有的漏洞都是一样的。有些是关键性的,而有些则是较低的严重性。有些漏洞可以立即修复,有些则没有。有些漏洞与某些项目无关(例如,面向内部的服务中的拒绝服务漏洞)。这些以及其他的漏洞特征,都是你在分流时可能希望忽略一个漏洞的有效理由。

安全解决方案必须使开发人员能够抑制漏洞,但它们也必须为安全团队提供适当程度的控制,以控制谁忽略什么(以及为什么)。同样,忽略漏洞也不是最佳做法,而是应该适度采取的行动,并与你的组织的政策保持一致。

Snyk中的忽略选项

Snyk平台提供了各种忽略问题的方法--通过Snyk CLI、API、UI,或使用.snyk策略文件。你使用的方法取决于你的具体使用情况,但有一个原则是必须理解的,即Snyk中的忽略是本地性质的。 这意味着它们被限制在一个项目、集成类型和组织。例如,在通过GitHub导入的项目中被忽略的同一问题,在通过Snyk CLI导入的项目中不会被忽略。

让我们仔细看看。

使用Snyk CLI

Snyk CLI是一个非常有用的工具,可以帮助你在本地开发环境中手动查找和修复漏洞,或者作为CI/CD管道的一部分自动查找和修复漏洞。你可以使用snyk test 命令扫描你的项目。扫描会返回项目中发现的所有问题的列表,以及升级和修复建议(如果有)。

如果你想出于上述任何原因忽略一个特定的漏洞--无论是在你的本地测试中还是在你的构建管道中--你可以使用snyk ignore ,该命令包含可选的子命令(在方括号内)。这些子命令帮助你定义忽略行动的范围:忽略规则的失效日期和规则的原因。下面的命令忽略了一个在 hbsnpm软件包中的一个信息暴露漏洞,因为没有可用的修复方法。

snyk ignore –id=SNYK-JS-HBS-1566555 [--expiry=2022-05-30] [--reason=no fix available]

id 是一个由Snyk分配给问题的唯一ID。你可以在Snyk用户界面的一些地方找到它--但如果你使用Snyk CLI,你会看到ID附加在Snyk漏洞数据库中问题的URL上。

Image displaying information from the Snyk intel vulnerability database, including the unique ID.

执行该命令后,一个新的规则被添加到.snyk策略文件中。如果.snyk策略文件不存在,该命令将创建该文件并将该规则添加到其中。随后使用snyk test 运行的任何扫描将遵循这一规则。

专业提示

  • 不确定Snyk CLI的忽略问题的语法?只要输入snyk ignore –help
  • 你可以通过你的组织的设置,在Snyk用户界面中,将忽略问题的能力限制在只有管理员用户。
  • 对于Snyk Code和Snyk Open Source中的非管理依赖性测试,忽略目录而不是单个问题可能更有用。使用snyk ignore 也支持这一功能。

Screenshot showing control options for an ignore policy.

使用 .snyk 策略文件

如上所述,snyk ignore 命令创建了一个新文件,称为 .snyk 策略文件。该文件通常用于配置snyk testsnyk monitor CLI 命令的行为和范围,以及通过 Snyk API 和 Snyk UI 执行的测试和语言设置。你也可以在项目的根目录下,或在项目内部的特定目录下手动创建.snyk策略文件。

对于忽略漏洞,该文件需要包括一个头文件。

# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities.
 version: v1.22.1

它还需要为每个忽略规则包括以下YAML语法。

Ignore:
  snyk-vulnid:
    - path to library using > seperator :
      reason: 'text string'
      expires: 'datetime string'

请注意,如果 .snyk 策略文件存储在项目的一个子目录中,当你在 Snyk CLI 中执行snyk ignore 命令时,你需要指定其位置。

作为一个最佳实践,我们建议用Git来管理.snyk文件。这可以确保通过Snyk用户界面执行的测试符合本地设置的规则。关于.snyk策略文件的其他信息,如何创建它,以及如何使用它来忽略漏洞。

使用Snyk用户界面

忽略也可以用Snyk用户界面来应用:只要点击任何问题卡上的忽略按钮。这将打开一个对话框,你可以选择忽略的原因,并指定你希望问题被忽略的时间。(你甚至可以决定忽略一个问题,直到有一个修复方案可用)。

Screenshot highlighting the Ignore button in the Snyk UI.

在你通过Snyk用户界面对一个问题应用忽略选项后,会发生一些事情--但重要的是要记住,问题本身并没有消失。如果你刚刚忽略了一个关键的漏洞,请不要担心!问题不会出现,但会在你的电脑上出现。

该问题将不会出现,但在默认情况下,你仍然可以通过使用忽略过滤器在项目页面上查看它。重要的是,任何通过Snyk用户界面进行的忽略操作都会被记录下来(包括谁忽略了这个问题,他们什么时候做的,以及为什么)。

Screenshot showing details of an ignored issue.

专业提示。

  • 通过Snyk UI对通过Snyk CLI(使用snyk monitor )导入到Snyk的项目所做的忽略会与你的本地项目同步。然而,通过Snyk用户界面应用于通过源码控制管理****(SCM)集成(如GitHub,Bitbucket)导入Snyk的项目的忽略则不会。
  • 你可以在你的组织的设置中为每个通过Snyk用户界面执行的忽略动作要求一个理由。

Screenshot showing control options for an ignore policy.

自动拉取请求

对于通过 Snyk UI 忽略的问题,Snyk 不会打开 Snyk 的自动修复拉动请求(无论是在问题卡上手动还是通过安全策略自动),这些问题也不会出现在 Snyk 的报告图表中。

使用安全策略(仅限Snyk Open Source和Snyk Container)

对于大多数组织来说,以更自动化的方式忽略大规模的问题是很重要的。

Snyk的安全策略本质上是一种规则,你可以用它来自动优先处理或取消问题的优先级。它们是通过Snyk用户界面导航栏上的策略标签在组级上定义的,并且可以应用于特定的组织或特定的项目(使用项目属性选项)。这使你可以精细地控制如何应用你的忽略规则。

使用Snyk的安全策略忽略问题是通过首先定义Snyk忽略一个问题必须存在的条件,然后选择忽略选项。

Screenshot showing the security policy conditions page in the Snyk UI.

使用安全策略的忽略将忽略所有符合规则中指定条件的漏洞。它们将忽略所有符合条件的现有漏洞,以及所有未来被发现的实例。通过安全策略忽略的问题将被标记为如此。

例如,流行的Python Django软件包中的这个目录遍历漏洞就被内部项目设置的策略忽略了。

Screenshot showing information on the directory traversal vulnerability in the django package.

专业提示:当在安全策略中设置忽略动作时,你可以选择不会修复没有漏洞作为忽略类型,并添加你希望显示忽略动作的原因。这些信息会出现在你项目中的问题卡上。

使用Snyk API

您可以使用Snyk API来应用更多的全局忽略规则。我们建议在使用时要非常谨慎,因为这种方法可能会在你的测试过程中产生错误的否定结果。

使用Snyk API的基于路径的忽略规则将看起来像这样。

POST https://snyk.io/api/v1/org/orgId/project/projectId/ignore/issueId

API的有效载荷将看起来像这样。

{ 
“ignorePath”:””,
“Reason”:”no fix available”,
“reasonType”:”wont-fix”,
“disregardIfFixable”:true
}

你也可以使用API来创建一个被忽略问题的列表。这被推荐用于跟踪整个组织的全局忽略问题。

https://snyk.io/api/v1/org/orgId/project/projectId/ignores

忽略问题的其他最佳做法

Snyk平台提供了各种选项,以有节制的方式使用忽略,并有一定程度的控制,以确保关键问题不被忽视。下面是使用这些方法的一些最佳实践。

要求提供忽略的理由

我们建议要求你的开发者提供使用忽略的理由。如上所述,管理员可以为通过Snyk用户界面应用的忽略设置这一要求。对于通过Snyk CLI或API应用的忽略,你需要指示你的开发团队遵循这一做法。

将忽略限制在管理员角色内

我们建议在Snyk中为你的每个组织启用使用忽略的选项。(这个权限也可以通过Snyk用户界面设置。)但是请注意,这只限制了在Snyk CLI和Snyk API中执行的忽略。开发人员仍然可以在.snyk策略文件中设置忽略规则。

定期审查忽略情况

为了增加可视性,定期监控不同团队在您的Snyk账户中执行的忽略。要做到这一点,你可以使用上面显示的curl命令来自动提取和审查被忽略的问题列表。你也可以参考报告标签,在那里Snyk显示了被忽略的问题的数量。

谨慎地忽略

忽略一个安全问题,或一个许可证问题,应该永远是一个例外,而不是一个普遍的做法。通过仔细定义你的组织中可接受的忽略政策,并给开发人员提供工具,使他们能够在你的护栏内忽略问题,从而在开发人员的生产力和安全措施之间设定正确的平衡。

让我们回顾一下Snyk Code和Snyk Infrastructure as Code(Snyk IaC)中如何处理忽略问题的几个要点。

  • 与Snyk的其他产品相比,通过Snyk UI忽略Snyk Code问题可能会捕获更多的问题。我们的安全编码与Snyk代码。忽略功能是一个转折,深入探讨了Snyk Code的忽略功能。
  • 当使用.snyk策略文件来忽略由Snyk Infrastructure as Code识别的问题时,有一些语义需要考虑,例如将范围缩小到单个文件。

祝您忽视漏洞!

利用上下文对漏洞进行优先排序

使用Snyk查找、优先处理并自动修复您应用程序中的漏洞。