跳转到主要内容

软件依赖分析器

项目描述

It-Depends

PyPI version Tests Slack Status

It-Depends是一个工具,可以自动为包和任意源代码仓库构建依赖图和软件物料清单(SBOM)。您可以使用它来列出软件包的所有第三方依赖项,将这些依赖项映射到已知的漏洞,以及根据它们的依赖项比较两个包之间的相似性。

据我们所知,It-Depends是唯一具有以下功能的此类工具

  • 支持C/C++项目(包括autootools和cmake)
  • 基于动态分析自动解决原生库依赖项(例如,Python包pytz依赖于原生库libtinfo.so.6
  • 列出所有可能的依赖项解析,而不仅仅是单个可行的解析
  • 基于依赖图的两个包之间相似性的比较指标

功能 ⭐

  • 支持Go、JavaScript、Rust、Python和C/C++项目。
  • 接受源代码仓库或包规范,如pip:it-depends
  • 无需构建即可提取cmake/autotool仓库的依赖项
  • 寻找Python或JavaScript等高级语言的本地依赖项
  • 提供基于vis.js或dot的可视化
  • 匹配依赖项和CVE
  • 导出软件物料清单(SBOMs)
    • 机器可理解的JSON输出
    • 对SPDX标准支持正在积极开发中,请访问此处

它能做吗?视情况而定。🍋

  • It-Depends不能检测到 vendored 或复制粘贴的依赖项
  • 来自autotools和cmake等构建系统的结果在安装时涉及任意计算,因此是尽力而为
  • 原生依赖项的解决是尽力而为
    • 一些原生依赖项通过动态分析来解决
    • 原生依赖项通过将文件需求与Ubuntu软件包仓库提供的路径进行交叉引用来推断;在其他Linux发行版或Ubuntu版本中,依赖项可能不同
  • It-Depends尝试解决满足依赖项的所有可能软件包版本
    • It-Depends 不能找到单个满足条件的软件包解决方案
    • 已解决的软件包列表旨在是任何系统上安装软件包所需软件包的超集
    • 使用--audit功能可能会发现上游依赖项中的漏洞,这些漏洞在目标软件包中不可利用,或者是在目标软件包的任何有效依赖项解析中不可能存在的软件包版本中
  • It-Depends将其预期为不可变的本地数据库中的数据缓存起来
    • 如果缓存后软件包被从软件包仓库中删除或撤回,除非使用--clear-cache清除缓存,否则It-Depends将继续使用缓存的数据

快速入门 🚀

$ pip3 install it-depends

运行它 🏃

在您想要分析源代码仓库的根目录下运行it-depends

$ cd /path/to/project
$ it-depends

或者直接指定路径

$ it-depends /path/to/project

或者指定公共软件包仓库中的一个软件包

$ it-depends pip:numpy
$ it-depends apt:libc6@2.31
$ it-depends npm:lodash@>=4.17.0

It-Depends将以JSON格式输出完整的依赖项层次结构。通过--output-format选项还可以使用其他输出格式,如Graphviz/Dot。

It-Depends可以尝试使用--audit选项自动将软件包与OSV漏洞数据库进行匹配。这是一个尽力而为的匹配,因为它基于软件包名称,这可能并不总是一致的。任何发现的漏洞都将添加到JSON输出中。

It-Depends会尽可能地并行化其努力。要限制最大并行任务数,请使用--max-workers选项。

默认情况下,It-Depends会递归解析所有软件包的依赖项以构建完整的依赖项图。可以使用--depth-limit选项限制递归深度。例如,

$ it-depends pip:graphtage --depth-limit 1

将仅列出Graphtage的直接依赖项。

示例 🧑‍🏫

以下是在其自身的源代码仓库上运行It-Depends的示例:

这是所有发现的依赖项的json。这是生成此Graphviz dot文件的结果,该文件产生此dependency graph

这是生成的依赖项图:dependency graph

It-Depends的依赖项 🎭

JavaScript需要npm
Rust需要cargo
Python需要pip
C/C++ 需要 autotools 和/或 cmake
使用 Ubuntu 的文件路径数据库 apt-file 解决了几个本地依赖项,但在其他发行版和操作系统上,这是通过 Ubuntu docker 容器无缝处理的
目前使用 docker 解决本地依赖项

开发 👷

$ git clone https://github.com/trailofbits/it-depends
$ cd it-depends
$ python3 -m venv venv  # Optional virtualenv
$ ./venv/bin/activate   # Optional virtualenv
$ pip3 install -e '.[dev]'
$ git config core.hooksPath ./hooks  # Optionally enable git commit hooks for linting

许可证和致谢 📃️

这项研究是在 DARPA 提供的支持下由 Trail of Bits 开发的,合同编号为 HR001120C0084(分发声明 A,经批准公开发布:分发无限)。本文档中表达的任何意见、发现、结论或建议都是作者的观点,并不一定反映美国政府或 DARPA 的观点。

Felipe ManzanoEvan Sultanik 是活跃的维护者,但 Alessandro GarioEric KilmerAlexander RemieHenrik Brodin 都对工具的构思和发展做出了重大贡献。

It-Depends 在 GNU Lesser General Public License v3.0 下授权。如果您想了解有关条款的例外情况,请联系我们。

© 2021, Trail of Bits。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

it-depends-0.1.1.tar.gz (61.5 kB 查看哈希值)

上传时间

构建分发

it_depends-0.1.1-py3-none-any.whl (61.1 kB 查看哈希值)

上传时间 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面