如何使用 Snyk 查找和修复安全漏洞
在本文中,我们将讨论一个重要主题,Python 中的安全性。 我们经常从 PyPi 下载和安装软件包,但我们不确定它们可能带来的漏洞。 因此,在本教程中,我们将学习一个名为 Snyk 的很棒的工具,它可以帮助我们找到代码中的漏洞,然后修复它们。所以让我们开始吧! 什么是 Snyk? Snyk(发音为 sneak)是一个开发人员安全平台,用于保护代码、依赖项、容器和基础设施即代码。所以它的作用是扫描
在本文中,我们将讨论一个重要主题,Python 中的安全性。
我们经常从 PyPi 下载和安装软件包,但我们不确定它们可能带来的漏洞。
因此,在本教程中,我们将学习一个名为 Snyk 的很棒的工具,它可以帮助我们找到代码中的漏洞,然后修复它们。所以让我们开始吧!
什么是 Snyk?
Snyk(发音为 sneak)是一个开发人员安全平台,用于保护代码、依赖项、容器和基础设施即代码。所以它的作用是扫描你的代码,通读它并告诉你代码中是否有任何漏洞。现在它不仅可以检查您的代码,还可以检查已安装的依赖项、Docker 容器、基础设施即代码以及其他一些内容。它与许多语言兼容,并带有不同 IDE 支持的插件。因此,它基本上是您代码的语法。
Snyk 入门
首先,您需要在 Snyk 上创建一个帐户。前往https://snyk.io/并注册一个免费帐户。我建议您通过 Github 登录。注册后,您可以登录到您的帐户。登录后,您将能够看到类似的仪表板。
现在您可以访问这个链接并按照说明下载 Snyk CLI。有多种方法可以下载 Snyk CLI。您可以继续使用其中任何一个。
现在,如果您在这里,我假设您已经使用任何可用方法安装了 Snyk CLI。现在我们需要做的是使用 Snyk CLI 对自己进行身份验证。为此,请在终端中运行以下命令:
snyk auth
当您运行该命令时,将在您的默认浏览器中打开一个身份验证页面,如下所示:
只需单击 Authenticate 按钮并等待页面显示成功消息。看到消息后,您可以转到终端,在那里您会找到类似的输出,如下所示:
现在,Synk CLI 已连接到您的帐户。
在 Demo App 中查找漏洞
出于演示目的,我们将使用一个用 Django 编写的名为 PyGoat 的 Web 应用程序。很多漏洞已经被故意添加到应用程序中,所以我们可以围绕它有一个很好的 Snyk 演示。
这是 Github 存储库的链接:https://github.com/purpledobie/pygoat。打开存储库链接,单击 Fork,然后将分叉的存储库克隆到本地计算机。当您浏览存储库时,您会发现 Dockerfile、Infrastructure as Code 文件以及标准 Python 文件。稍后我们将浏览这些文件。您可以从 requirements.txt 文件安装 Python 依赖项。
pip install -r requirements.txt
Snyk 插件
Snyk 有可用于不同 IDE 的插件,例如 Eclipse、VS Code、Jetbrains(PyCharm、IntelliJ 等)。因为,我在 VS Code 上,所以我在我的 IDE 上安装了 Snyk 扩展。你可以为你的 IDE 做同样的事情。
安装扩展程序后,您可能需要再次进行身份验证。一旦通过身份验证,插件将开始自动扫描代码,几秒钟后,它将显示类似以下的结果:
可以看到代码中有很多18个代码安全漏洞和2个代码质量问题。每个问题或漏洞旁边都有一个图标。它可以是 C 、 H 、 M 和 L 表示 Critical 、 High 、 Medium 和 **Low ** 分别。您可以单击其中任何一个以了解更多信息,它甚至会针对问题或漏洞提出修复建议。
Snyk CLI 命令
我们已经运行了一个 Synk CLI 命令,即 snyk auth
来向 Snyk 验证我们自己。现在让我们看看其他一些重要的命令。
1.snyk test
此命令将扫描代码并向您显示任何漏洞。让我们运行它,看看我们得到了什么输出:
您可以看到它已经完成扫描并发现了相同的漏洞。这些漏洞再次被标记为低、中、高和严重。除此之外,它还为我们提供了解决问题的建议。例如,如果您看到上图,它建议我们将 Django 从版本 3.1.12 升级到 3.2.13 以解决很多问题。让我们升级 Django,然后重新扫描应用程序以查看这些漏洞是否已修复。
让我们首先使用以下命令将 Django 版本升级到 3.2.13:
pip install django==3.2.13
你会得到类似的输出:
现在让我们使用snyk test
命令重新扫描代码。
现在,如果您注意到,我们没有 SQL 注入等漏洞。
2.snyk monitor
该命令的作用是扫描代码并将其快照上传到 Snyk UI 或 Snyk 平台。让我们首先运行命令:
该命令已拍摄项目快照并将其上传到 Snyk 平台。然后它为我们提供了一个 URL,我们可以在其中看到有关该项目的许多其他信息。如果你打开 URL,你会看到一个类似的页面:
现在更容易看到应用程序中的漏洞。您还可以通过单击 Retest Now 链接重新测试应用程序。您还可以查看应用程序的 Fixes 和 Dependencies。
3.扫描基础设施即代码
如果您查看该项目,您会发现一个名为 infrastructure 的文件夹。其中,我们有 application-load-balancer 文件夹。因此,该项目可以部署到 AWS 负载均衡器。有一个 Python 文件app.py
实际上会生成一个模板,用于在 AWS 上配置负载均衡器。然后在 cdk.out 文件夹中,您可以找到由 Python 代码生成的 LoadBalancerStack.template.json 文件。
为了在部署之前扫描任何错误配置,我们实际上可以使用 Snyk 测试这个文件。相同的命令是:
snyk iac test <template-file-path>
让我们运行并查看输出:
它显示了模板文件中的所有问题和漏洞。
4.扫描 Dockerfile 和 Docker 镜像
在项目中,我们确实有一个 Dockerfile。您可以使用以下命令从 Dockerfile 构建 Docker 映像:
docker build -t pygoat .
您可以在下面看到正在创建的图像:
构建映像后,您可以使用以下命令扫描漏洞:
docker scan pygoat
Snyk 与 Docker 的集成使得扫描变得异常简单。
您将获得如下输出:
输出非常大,无法显示所有内容。但是我们可以看到图像中的漏洞。
Snyk 与 Github 集成
Snyk 可以自动为您解决问题。当您将 Github 存储库链接到 Snyk 时,它将扫描整个项目,如果它有针对任何漏洞的修复,它将创建一个带有修复的 Pull Request。这不是很神奇吗?
由于我们已经使用 Github 登录,因此 Snyk 已经可以访问我们的存储库。我们只需要选择我们想要扫描的存储库。
单击添加项目按钮,然后单击 Github 并选择您的存储库。
添加项目后,您可以在仪表板上找到它。 Snyk 将自动扫描项目。看到问题后,您将看到一个修复此漏洞(针对每个漏洞)或修复这些漏洞(针对修复所有漏洞)按钮。
当你点击它时,你会看到这个页面:
您可以选中复选框来修复要修复的漏洞,然后单击 Open a Fix PR 按钮。单击它后,将在您的存储库中创建一个带有修复程序的 PR。
! zoz100076](https://res.cloudinary.com/dlomjljb6/image/upload/v1/media/blog/uploads/2022/05/20/screenshot-2022-05-20-204526_xbzqfo)
现在您可以自由合并或拒绝拉取请求。
结论
在本文中,我们了解了 Snyk,这是一个可以帮助我们发现漏洞并修复它们的工具。这只是一个基本的概述。还有很多要了解的。
谢谢阅读!您可以在Twitter上关注我或查看我的博客。
更多推荐
所有评论(0)