利用 Thoth 自动检查 Python 中的漏洞

利用 Thoth 自动检查 Python 中的漏洞

2022-08-11 作者: xuzhiping 浏览: 215 次

摘要: 大多数网络攻击都利用了众所周知的漏洞,许多程序员可以使用持续集成、持续部署 (CI/CD) 或 DevOps 技术自动执行构建。然而,我们如何能够自动检查每小时在不同的免费和开源库中出现的安全漏洞呢?如今有多种方法可以在构建应用程序时找出库的错误版本。 本文...

大多数网络攻击都利用了众所周知的漏洞,许多程序员可以使用持续集成、持续部署 (CI/CD) 或 DevOps 技术自动执行构建。然而,我们如何能够自动检查每小时在不同的免费和开源库中出现的安全漏洞呢?如今有多种方法可以在构建应用程序时找出库的错误版本。

本文将重点介绍 Python,因其拥有一些用于检查依赖项安全性的复杂工具。特别是,本文探讨了 Thoth 项目(https://thoth-station.ninja/),它将许多工具结合在一起,以自动化 Python 程序构建,并将安全检查作为解决过程的一部分。

自动化安全工作的投入

本节列出了向公众提供有关漏洞信息所做出的努力。它侧重于与本文主题相关的工具:开源 Python 库中的漏洞报告。

常见漏洞和暴露 (CVE) 计划

任何关于软件安全性的讨论都必须从全面的 CVE 数据库开始,该数据库汇集了数千名研究人员发现的缺陷。本文中的其他项目在很大程度上依赖于此数据库。它由美国国家标准与技术研究院(NIST)维护,并由 MITRE 策划,MITRE 是一家专门从事开源软件的非营利性公司,并得到了美国政府的支持。CVE 数据库为许多相关项目(如 CVE 详细信息统计信息站点)提供信息。

个人或自动化工具可以找到与结构化格式安全漏洞相关的确切包和版本,以及解释漏洞的不太结构化的文本,如下所示。

CVE 样品

Python Packaging Authority 的安全举措

Python Packaging Authority (PyPA) 是为 Python 语言中的开源包创建最佳实践的主要机构,来自许多公司的志愿者都支持 PyPA。PyPA 的安全相关举措是使 Python 重大进步的主要因素。

PyPA 的咨询数据库以机器可读的形式整理 Python 包中的已知漏洞,PyPA 支持的另一个项目 pip-audit 审计应用程序,提供需求并报告所用软件包中的任何已知漏洞。pip-audit 的输出可以是人类可读的结构化格式,例如 JSON。因此,自动化工具可以咨询数据库或 pip-audit,用以警告开发人员其依赖项中的风险。

开源见解(Open Source Insights)

一项名为 Open Source Insights 的计划,试图通过以结构化的格式提供信息,利用流行语言生态系统中依赖的关系,以帮助开源开发人员。此类信息包括安全建议、许可信息、库的依赖关系等。为了更好地运用 Open Source Insights,我们查阅了流行的 TensorFlow 数据科学库,发现关于PyPI 的安全公告(https://deps.dev/pypi/tensorflow),单击“更多详细信息”按钮可显示有助于研究资讯的链接。

依赖项的示例安全建议

咨询详情

有趣的是,Node.js 包管理器(npm)提供的 TensorFlow 版本当时没有安全公告。在这种情况下使用的编程语言可能是造成差异的原因之一。然而,明显的不一致提醒我们,起源可以带来很大的不同,因此将展示解决依赖关系的自动化过程,以此来适应这些问题。

Open Source Insights 通过将 Python 包安装到干净的环境中来获取其依赖关系信息。Python 包由 pip 解析器(Python 库最流行的安装工具)安装,PyPI 是列出开源 Python 库最流行的索引。从开源漏洞数据库 (OSV) 中检索每个包的漏洞信息。OSV 则作为会审服务,对跨多个语言生态系统漏洞进行分组。如果开源见解有 API,它将是一个非常有价值的资源; 我们希望开发人员会在某个时候段能够添加一个。尽管信息目前仅作为网页提供,但结构化格式允许自动化工具抓取页面并查找关键信息,例如安全公告。

开源安全基金会的安全记分卡

与安全密切相关的软件质量需要基本的实践,例如在将更改检查到存储库之前进行回归测试,将加密签名附加到发布,以及运行静态分析,其中一些做法可以自动检测,从而使安全专家能够大规模地评估项目的安全性。

一项名为 “Security Scorecards(安全记分卡)” 的工作于 2020 年启动,并得到了开源安全基金会(OpenSSF) 的支持,目前列出了几十个自动检查。大多数检查依赖于 GitHub 服务,并且只能在存储于 GitHub 中的项目上运行。鉴于 GitHub 在开源项目中的主导地位,该项目目前仍然非常有用,并且代表了更通用评级系统的模型。

Thoth 计划

Project Thoth 是一个基于云的工具,可帮助 Python 程序员构建强大的应用程序,该任务包括安全检查以及许多其他注意事项。Red Hat 创立了 Thoth,并运行在 Red Hat OpenShift 云服务中,但其代码完全是开源的。该项目在 Python 开发人员中建立了一个社区,开发人员可以将项目的创新成果复制到其他编程语言中。

帮助程序员查找库和构建应用程序的工具称为解析器。流行的 pip 解析器通常选择每个库的最新版本,但比较复杂,pip 甚至可以回溯,并选择不同版本的库来处理通过遍历依赖关系图找到的版本范围规范。在选择依赖项的最佳版本时,Thoth 可以做的不仅仅是 pip。以下是 Thoth的概述,可特别关注它如何帮助提高安全性。

Thoth 概述

Thoth 在安装依赖项时会考虑程序环境的许多元素,程序将在其上运行 CPU 和操作系统、有关应用程序容器的元数据(例如由 Skopeo 提取的元数据),甚至是有关机器学习应用程序将使用的 GPU 信息。Thoth 可以考虑其他几个变量,但可能从前面的列表中已猜到,Thoth 最初是为了支持机器学习而开发的。开发人员在配置文件中向 Thoth 提供有关应用程序环境的信息。

然而环境信息有什么优势呢?它允许 Thoth 在指定环境中排除具有已知漏洞的库版本。在运行期间能够注意到构建失败或出现问题的开发人员,并将有关使用或避免哪些版本的依赖项信息存储在称为 “Prescription” 的规范中,Thoth 会为未来用户提供咨询。Thoth 甚至可以对程序及其环境进行测试。目前,它使用 Clair 对容器镜像的内容进行静态测试,并存储有关发现漏洞的信息。未来 Thoth 的开发人员计划使用 Python 代码质量管理局(PyCQA) 的 Bandit 项目来运行具有各种库版本组合的实际应用程序。Thoth 将在每个包源代码上单独运行 Bandit,并在解析过程中合并结果。

各种库的不同版本组合较多,无法全部测试。因此,Thoth 将依赖关系解析建模为马尔可夫决策过程(MDP),以决定要运行的最高效子集。有时安全不是主要问题。例如,也许您计划在与 Internet 隔离的专用网络中运行程序。在这种情况下,可以考虑Thoth 的其他一些优势,例如性能或稳定性等,而不是安全性。

Thoth 将其依赖项选择存储在锁定文件中,文件“锁定”特定依赖项的特定版本。如果没有锁定文件,细微的安全漏洞和其他错误可能会蔓延生产应用程序,在最坏的情况下,如果没有锁定,用户可能会面临所谓的“依赖性混淆攻击”。解析器可能会选择从具有错误版本的索引中获取库。另一个风险是攻击者可能会在索引中增加库的版本号,导致解析器选择最新的版本。

总结

Thoth 是一个复杂且不断增长的开源工具集合,其解决方案背后的基本原则可以启发其他项目,该原则是: 解析器应通过抓取网站(例如 CVE 数据库)、运行静态检查以及任何其他信息源来例行检查漏洞。结果必须存储在数据库中。当解析器发现某些错误或安全漏洞需要更改解析器之前做出的决定时,解析器必须查看依赖项的依赖关系并进行回溯。解析器的发现和使用解析器的开发人员传回的信息应被存储起来,并在未来的决策中使用。简而言之,借助当今可用的有关安全漏洞的大量信息,我们可以自动解决依赖关系并生成更安全的应用程序。

相关推荐

关注公众号
获取免费资源

随机推荐


Copyright © Since 2014. 开源地理空间基金会中文分会 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org