Skip to main content

CVE 二进制检查器工具

项目描述

CVE 二进制工具快速入门/自述文件

构建状态 编解码器 吉特 在 ReadTheDocs 在 PyPI 上 代码风格:黑色 进口:异类 CII 最佳实践 语言等级:Python

CVE 二进制工具是一个免费的开源工具,可帮助您使用国家漏洞数据库(NVD) 的常见漏洞和披露(CVE) 列表中的数据查找软件中的已知漏洞。

该工具有两种主要的操作模式:

  1. 一个二进制扫描程序,可帮助您确定哪些软件包可能已作为软件的一部分包含在内。大约有 100 个检查器专注于常见的、易受攻击的开源组件,例如 openssl、libpng、libxml2 和 expat。
  2. 用于扫描各种格式的已知组件列表的工具,包括 .csv、几个 linux 分发包列表、特定语言的包扫描器和几种软件材料清单 (SBOM) 格式。

它旨在用作您的持续集成系统的一部分,以启用定期漏洞扫描并为您提供供应链中已知问题的早期预警。

有关更多详细信息,请参阅我们的文档或此快速入门指南

安装 CVE 二进制工具

可以使用 pip 安装 CVE 二进制工具:

pip install cve-bin-tool

如果您正在尝试来自cve-bin-tool github的最新代码或进行开发,您也可以pip install --user -e .安装本地副本 。贡献者文档更详细地介绍了如何设置本地开发。

最受欢迎的使用选项

使用二进制扫描程序查找已知漏洞

要在目录或文件上运行二进制扫描程序:

cve-bin-tool <directory/file>

请注意,此选项还将使用任何特定于语言的检查器来查找组件中的已知漏洞。

在组件列表中查找已知漏洞

要扫描列出依赖项和版本的逗号分隔 (CSV) 或 JSON 文件:

cve-bin-tool --input-file <filename>

请注意,该--input-file选项还可用于在扫描目录时添加额外的分类数据,如备注、评论等,以便输出反映此分类数据,您可以节省重新分类的时间(用法:)cve-bin-tool -i=test.csv /path/to/scan。VEX 文件(可以使用--vex命令行选项创建)也可以用作分类文件。如果文件后缀为“.vex”,则检测到 VEX 文件。

扫描 SBOM 文件以查找已知漏洞

要扫描软件物料清单文件 (SBOM):

cve-bin-tool  --sbom <sbom_filetype> --sbom-file <sbom_filename>

有效的 SBOM 类型是SPDXCycloneDXSWID

离线使用工具

在运行扫描时指定--offline选项可确保 cve-bin-tool 不会尝试下载最新的数据库文件或检查该工具的更新版本。

请注意,您需要先获取漏洞数据的副本,然后该工具才能在离线模式下运行。离线操作指南包含有关如何设置数据库的更多信息。

输出选项

CVE 二进制工具默认提供基于控制台的输出。如果您希望提供另一种格式,您可以在命令行上使用--format. 有效格式为 CSV、JSON、控制台、HTML 和 PDF。可以使用--output-file标志指定输出文件名。

报告的漏洞还可以通过指定--vex命令行选项以漏洞交换 (VEX) 格式报告。然后可以将生成的 VEX 文件用作--input-file支持分类过程的文件。

如果您希望使用 PDF 支持,则需要reportlab 单独安装该库。

如果您打算在安装 cve-bin-tool 时使用 PDF 支持,您可以指定它,并且报告实验室将作为 cve-bin-tool 安装的一部分安装:

pip install cve-bin-tool[PDF]

如果您已经安装了 cve-bin-tool,您可以在事后使用 pip 添加 reportlab:

pip install --upgrade reportlab

请注意,reportlab 已从默认的 cve-bin-tool 安装中删除,因为它具有与之关联的已知 CVE ( CVE-2020-28463 )。cve-bin-tool 代码使用推荐的缓解措施来限制添加到 PDF 的资源,以及额外的输入验证。这有点奇怪,因为它描述了 PDF 的核心功能:外部项目,例如图像,可以嵌入其中,因此任何查看 PDF 的人都可以加载外部图像(类似于查看网页可以触发外部负载)。对此没有固有的“修复”,只有图书馆用户必须确保在生成时仅将预期项目添加到 PDF 的缓解措施。

由于用户可能不希望安装带有与之关联的开放、不可修复的 CVE 的软件,因此我们选择让 PDF 支持仅对自己安装库的用户可用。安装库后,PDF 报告选项将起作用。

完整的选项列表

用法: cve-bin-tool <directory/file to scan>

optional arguments:
  -h, --help            show this help message and exit
  -e, --exclude         exclude path while scanning
  -V, --version         show program's version number and exit
  --disable-version-check
                        skips checking for a new version
  --disable-validation-check
                        skips checking xml files against schema
  --offline             operate in offline mode							

CVE Data Download:
  -n {json,api}, --nvd {json,api}
                        choose method for getting CVE lists from NVD
  -u {now,daily,never,latest}, --update {now,daily,never,latest}
                        update schedule for NVD database (default: daily)
  --nvd-api-key NVD_API_KEY
                    specify NVD API key (used to improve NVD rate limit)

Input:
  directory             directory to scan
  -i INPUT_FILE, --input-file INPUT_FILE
                        provide input filename
  -C CONFIG, --config CONFIG
                        provide config file
  -L PACKAGE_LIST, --package-list PACKAGE_LIST
                    provide package list
  --sbom {spdx,cyclonedx,swid}
                    specify type of software bill of materials (sbom)
                    (default: spdx)
  --sbom-file SBOM_FILE
                    provide sbom filename

Output:
  -q, --quiet           suppress output
  -l {debug,info,warning,error,critical}, --log {debug,info,warning,error,critical}
                        log level (default: info)
  -o OUTPUT_FILE, --output-file OUTPUT_FILE
                        provide output filename (default: output to stdout)  
  --html-theme HTML_THEME
                        provide custom theme directory for HTML Report
  -f {csv,json,console,html,pdf}, --format {csv,json,console,html,pdf}
                        update output format (default: console)
  -c CVSS, --cvss CVSS  minimum CVSS score (as integer in range 0 to 10) to
                        report (default: 0)
  -S {low,medium,high,critical}, --severity {low,medium,high,critical}
                        minimum CVE severity to report (default: low)
  --report              Produces a report even if there are no CVE for the
                        respective output format
  -A [<distro_name>-<distro_version_name>], --available-fix [<distro_name>-<distro_version_name>]
                        Lists available fixes of the package from Linux distribution
  -b [<distro_name>-<distro_version_name>], --backport-fix [<distro_name>-<distro_version_name>]
                        Lists backported fixes if available from Linux distribution
  --affected-versions   Lists versions of product affected by a given CVE (to facilitate upgrades)
  --vex VEX             Provide vulnerability exchange (vex) filename

Merge Report:
  -a INTERMEDIATE_PATH, --append INTERMEDIATE_PATH      
                        provide path for saving intermediate report 
  -t TAG, --tag TAG     provide a tag to differentiate between multiple intermediate reports
  -m INTERMEDIATE_REPORTS, --merge INTERMEDIATE_REPORTS           
                        comma separated intermediate reports path for merging
  -F TAGS, --filter TAGS           
                        comma separated tags to filter out intermediate reports

Checkers:
  -s SKIPS, --skips SKIPS
                        comma-separated list of checkers to disable
  -r RUNS, --runs RUNS  comma-separated list of checkers to enable

Deprecated:
   -x, --extract        autoextract compressed files
   CVE Binary Tool autoextracts all compressed files by default now

有关所有这些选项的更多信息,请参阅CVE 二进制工具用户手册

注意:为了向后兼容,我们仍然支持csv2cve从 csv 生成 CVE 的命令,但我们建议使用--input-file向前的命令。

-L--package-list选项对包列表中列出的已安装包运行 CVE 扫描。它需要一个 python 包列表 (requirements.txt) 或具有 dpkg、pacman 或 rpm 包管理器的系统包的包列表作为扫描的输入。与扫描二进制文件的默认方法相比,此选项速度更快,并且检测到的 CVE 更多。

您可以在中获取所有已安装软件包的软件包列表

  • 通过运行使用 dpkg 包管理器的系统dpkg-query -W -f '${binary:Package}\n' > pkg-list
  • 通过运行使用 pacman 包管理器的系统pacman -Qqe > pkg-list
  • 通过运行使用 rpm 包管理器的系统rpm -qa --queryformat '%{NAME}\n' > pkg-list

cve-bin-tool -L pkg-list在终端中并通过运行完整的包扫描将其作为输入提供。

配置

您可以使用--config选项为工具提供配置文件。您仍然可以使用命令行参数覆盖配置文件中指定的选项。在test/config中查看我们的示例配置文件

在 GitHub Actions 中使用 CVE 二进制工具

如果您想将 cve-bin-tool 集成为 github 操作管道的一部分。您可以查看我们的示例github 操作

二进制检查器列表

以下检查器可用于在二进制文件中查找组件:

可用的检查器
会计服务 阿瓦希 重击 绑定 二进制工具 螺栓 泡沫包装
忙箱 压缩包 亲信 密码设置 杯子 卷曲 总线
dnsmasq 鸽舍 磅数 题词 外籍人士 ffmpeg 自由半径
ftp 海合会 瘸子 glibc 侏儒外壳 gnupg 坚果
gpgme 流媒体 gupnp 代理服务器 高清5 主机 洪斯佩尔
冰播 重症监护病房 伊尔西 kbd kerberos 执行工具 图书馆档案
libbpg 库数据库 libebml libgcrypt 抒情的 libjpeg_turbo 图书馆
libseccomp 库文件 libsolv 库汤 libsrtp
libssh2 库文件 libvirt libvncserver libxslt 轻量级 对数旋转
lua 玛丽亚数据库 mdadm 内存缓存 地铁 mysql 纳米
诅咒 内苏斯 netpbm nginx 节点 ntp open_vm_tools
开放式 打开jpeg 开放式LDAP 打开sh openssl 开斯旺 打开VPN
p7zip pcsc_lite PNG Polarssl_fedora 波普勒 PostgreSQL
pspp Python qt 雷达2 系统日志 桑巴 sane_backends
sqlite 大天鹅 颠覆 须藤 系统日志 系统 tcpdump
裤子 网络工具包 线鲨 wpa_supplicant 练习 xml2
zlib zsh

所有检查器都可以在 checkers 目录中找到,以及 如何添加新检查器的说明。可以通过 GitHub 问题请求对新检查器的支持。

语言特定检查器

许多检查器可用于在特定语言包中查找易受攻击的组件。

爪哇

扫描程序检查pom.xmlJava 包存档中的文件以识别 Java 组件。存档中的包名称和版本用于在数据库中搜索漏洞。

支持 JAR、WAR 和 EAR 档案。

Javascript

扫描程序检查package-lock.jsonjavascript 应用程序中的文件以识别组件。软件包名称和版本用于在数据库中搜索漏洞。

Python

扫描程序检查已安装 Python 包的PKG-INFOMETADATA文件,以提取用于在数据库中搜索漏洞的组件名称和版本。

该工具支持扫描任何 Wheel 包文件(以.whl 文件扩展名表示)和 egg 包文件(以.egg 文件扩展名表示)的内容。

--package-list选项可以与 Python 依赖文件一起使用,requirements.txt以查找组件列表中的漏洞。

限制

此扫描器不会尝试利用问题或更详细地检查代码;它只查找库签名和版本号。因此,它无法判断是否有人将修补程序反向移植到易受攻击的版本,并且如果库或版本信息被故意混淆,它将无法工作。

该工具旨在在非恶意环境中用作快速运行、易于自动化的检查,以便开发人员可以了解已编译到其二进制文件中的存在安全问题的旧库。

该工具不保证报告的任何漏洞确实存在或可利用,也不能保证找到所有存在的漏洞。

用户可以将分类信息添加到报告中,以将问题标记为误报、误报、指示风险已通过配置/使用更改等得到缓解。

分类细节可以在其他项目中重复使用,例如,Linux 基础镜像上的分类可以应用于使用该镜像的多个容器。

有关该工具的更多信息和分类信息的使用,请查看此处

如果您使用二进制扫描器功能,请注意我们只有有限数量的二进制检查器(见上表),因此我们只能检测这些库。总是欢迎新跳棋的贡献!您还可以使用另一种方法来检测组件(例如,材料清单工具,例如tern),然后将结果列表用作 cve-bin-tool 的输入,以获得更全面的漏洞列表。

该工具使用漏洞数据库来检测当前的漏洞,如果数据库不经常更新(特别是在离线模式下使用该工具),该工具将无法检测到任何新发现的漏洞。因此,强烈建议保持数据库更新。

要求

要使用自动提取器,您可能需要以下实用程序,具体取决于您需要提取的文件类型。在 Linux 上运行完整的测试套件需要以下实用程序:

  • file
  • strings
  • tar
  • unzip
  • rpm2cpio
  • cpio
  • ar
  • cabextract

其中大多数默认情况下安装在许多 Linux 系统上,但cabextract特别 rpm2cpio是可能需要安装。

在 Windows 系统上,您可能需要:

  • ar
  • 7z
  • Expand
  • pdftotext

Windows 已默认安装,但ar可能需要安装。如果您想运行我们的测试套件或扫描 zstd 压缩文件,我们建议安装这个7zip的 7-zip-zstd fork。我们目前用于提取、、和文件。Expand7z7zjarapkmsiexerpm

如果您在尝试从 pip 安装时收到有关构建库的错误,则可能需要安装 Windows 构建工具。Windows 构建工具可从 https://visualstudio.microsoft.com/visual-cpp-build-tools/免费获得

如果在 Windows 上安装 brotlipy 时出现错误,安装上面的编译器应该可以修复它。

pdftotext是运行测试所必需的。(cve-bin-tool 的用户可能不需要它,开发人员可能会需要它。)在 Windows 上安装它的最佳方法是使用 conda(单击此处获取更多说明)。

您可以检查我们的 CI 配置以查看我们明确测试的 python 版本。

反馈和贡献

可以通过GitHub 问题提出错误和功能请求。请注意,这些问题不是私密的,因此在提供输出时要小心,以确保您没有在其他产品中披露安全问题。

也欢迎通过 git 提出拉取请求。

  • 新的贡献者应该阅读贡献者指南以开始。
  • 已经有为开源项目贡献过经验的人可能不需要完整的指南,但仍应使用拉取请求清单以使每个人都轻松。

安全问题

该工具本身的安全问题可以通过 https://intel.com/security报告给英特尔的安全事件响应团队。

如果在使用此工具的过程中您发现其他人的代码存在安全问题,请负责任地向相关方披露。

项目详情


下载文件

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

源分布

cve-bin-tool-3.1.1.tar.gz (1.3 MB 查看哈希

已上传 source