CVE 二进制工具 cve-bin-tool

CCVE 二进制工具是一个免费的开源工具,可帮助您查找软件中的已知漏洞,使用来自国家漏洞数据库 (NVD) 常见漏洞和披露 (CVE) 列表中的数据以及来自 Redhat开源漏洞数据库 (OSV)、Gitlab 咨询数据库 (GAD) 和 Curl 的已知漏洞数据。

CVE 二进制工具使用 NVD API,但未经 NVD 认可或认证。

一个二进制扫描程序,可帮助您确定哪些软件包可能已作为软件的一部分包含在内。有 360 个跳棋。我们最初的重点是常见的、易受攻击的开源组件,如 openssl、libpng、libxml2 和 expat。

用于扫描各种格式的已知组件列表的工具,包括 .csv、多个 linux 分发包列表、特定于语言的包扫描程序和多种软件物料清单 (SBOM) 格式。

它旨在用作持续集成系统的一部分,以实现定期漏洞扫描,并对供应链中的已知问题提供早期警告。它还可用于自动检测组件并创建 SBOM。

CVE Binary Tool 在运行时执行的操作:

  1. 下载 CVE 数据(来自 NVD、Redhat、OSV、Gitlab 和 Curl)。
    • 默认情况下,这每天发生一次,而不是每次运行扫描时都会发生。
    • 首次运行时,下载所有数据可能需要一些时间。
  2. 创建/读取组件列表。有两种操作模式:
    1. 使用二进制检查器和语言组件列表(如 python 的requirements.txt)的组合创建组件列表(包括版本)。
    2. 阅读 SBOM(使用标准化软件物料清单格式的现有组件列表。
  3. 创建 CVE 列表
    • 这将查找从现有物料清单中找到或读取的所有组件,并报告与它们相关的任何已知问题
  4. 包括会审/附加数据
    • 有几个选项可用于添加分类/注释、以前报告中的信息以跟踪漏洞随时间的变化或已知的修复数据
  5. 生成一种或多种格式(控制台、json、csv、html、pdf)的报告

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

安装 CVE 二进制工具

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

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

Pip 将为您安装 python 要求,但对于某些类型的提取,我们使用系统库。如果您在提取文件时遇到困难,您可能需要查看我们针对 Linux 和 Windows 的其他要求列表

首次使用时(默认情况下,每天一次) 该工具将从一组已知的漏洞数据源下载漏洞数据。由于 NVD 的可靠性问题,从 3.3 版开始,我们将默认使用我们自己的 NVD 镜像 https://cveb.in/,而不是直接联系 NVD。如果您希望直接从 NVD 服务器获取数据,则必须提供自己的NVD_API_KEY才能使用其 API。

如果您使用的是 3.3 之前的版本,但该版本不使用我们的镜像,请使用上述NVD_API_KEY。

如果需要 NVD_API_KEY,则需要到

https://nvd.nist.gov/developers/request-an-api-key

申请,需要邮件确认。

最受欢迎的使用选项

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

要在目录或文件上运行二进制扫描程序,请执行以下操作:

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

默认情况下,该工具假定您正在尝试扫描整个目录,但如果您为其提供列出依赖项的单个.csv或.json文件,则会将其视为物料清单。您还可以使用 --input-file 选项直接指定物料清单文件,或按照以下说明扫描 SBOM。

如果没有下载默认的库,如果有 nvd api key, 则可以加上 –nvd-api-key 选项,则第一次会自动下载,test 是文件或是目录

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

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

有效的 SBOM 类型包括 SPDXCycloneDX 和 SWID。 扫描 SBOM 文件中的产品名称不区分大小写。

SBOM 扫描操作指南提供了其他 SBOM 扫描示例。

生成 SBOM

除了扫描 SBOM 外,CVE Binary Tool 还可用于从扫描生成 SBOM,如下所示:

有效的 SBOM 类型为 SPDX 和 CycloneDX

生成的 SBOM 将包括产品名称、版本和供应商(如果可用)。未提供许可证信息。

SBOM 生成操作指南提供了其他 SBOM 生成示例。

对漏洞进行分类

该选项可用于在扫描目录时添加额外的分类数据,如备注、注释等,以便输出将反映此分类数据,并且可以节省重新分类的时间(用法:)。 支持的格式是CycloneDX VEX格式,可以使用该选项生成。--triage-input-filecve-bin-tool --triage-input-file test.vex /path/to/scan--vex

典型用法:

  1. 使用cve-bin-tool /path/to/scan --vex triage.vex
  2. 使用您喜欢的文本编辑器编辑 triage.vex,以提供有关所列漏洞的分类信息。
  3. 将此分类文件用于将来的扫描,如下所示:cve-bin-tool /path/to/scan --triage-input-file triage.vex

应该可以在cve-bin-tool的不同运行之间共享分类数据,或者与其他支持CycloneDX VEX格式的工具共享分类数据。这对于扫描相关产品或容器的团队、出于合规性原因需要使用多种工具的团队、具有提供有关漏洞会审指导的中央安全策略组的公司等特别有用。

离线使用该工具

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

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

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

如果您想将 cve-bin-tool 集成为 github 操作管道的一部分,您可以使用 cve-bin-tool 的官方 GitHub 操作。 在此处查找更多详细信息。GitHub Action 在安全选项卡上提供报告,该选项卡可供开源项目以及为该访问付费的 GitHub 客户使用。

如果您希望直接使用该工具,我们还提供了一个示例 GitHub 操作。对于想要将报告存储在证据储物柜中的团队或无权访问 GitHub Security 选项卡的团队来说,这可能是一个不错的选择。

输出选项

默认情况下,CVE 二进制工具提供基于控制台的输出。如果要提供其他格式,可以在命令行上使用 指定此格式和文件名。有效格式为 CSV、JSON、控制台、HTML 和 PDF。可以使用标志指定输出文件名。--format--output-file

您还可以使用逗号 (’,’) 作为分隔符来指定多种输出格式:

注意:不得在逗号(’,’)和输出格式之间使用空格。

此外,还可以在 漏洞交换 (VEX) 格式通过指定命令行选项。 然后,生成的 VEX 文件可以用作支持 会审过程。--vex--triage-input-file

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

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

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

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

由于用户可能不希望使用开放的、无法修复的 CVE 安装软件 与之相关,我们选择仅向以下用户提供 PDF 支持 自己安装了库。安装库后,PDF 报告选项将起作用。

配置

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

自动检测组件

CVE 二进制工具尝试使用二进制检查器、支持的语言组件列表和文件提取方法对组件进行自动检测。下面列出了支持的自动检测工具。

二进制检查器列表

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

Available checkers
accountsserviceacpidapache_http_serverapcupsdapparmorasn1cassimp
asteriskatftpavahiaxelbashbindbinutils
birdbisonbluezboincbotanbrobubblewrap
busyboxbwm_ngbzip2c_arescapnprotocephchess
chronycivetwebclamavcollectdcommons_compressconnmancoreutils
cpiocroniecryptsetupcupscurlcvsdarkhttpd
dav1ddavfs2dbusdebianutilsdhclientdhcpcddhcpd
dmidecodednsmasqdockerdomoticzdosfstoolsdotnetdovecot
doxygendpkgdropbeare2fsprogsedelfutilsemacs
enscriptexfatprogseximexiv2f2fs_toolsfaad2fastd
ffmpegfilefirefoxflacfluidsynthfreeradiusfreerdp
fribidifrrgawkgccgdalgdbgdk_pixbuf
gimpgitglibglibcgmpgnomeshellgnupg
gnutlsgogpgmegpsdgraphicsmagickgrepgrub2
gstreamergupnpgvfsgziphaproxyharfbuzzhaserl
hdf5heimdalhostapdhunspellhwloci2pdicecast
icuiperf3ipmitoolipsec_toolsiptablesirssiiucode_tool
iwdjack2jacksondatabindjanusjheadjqjson_c
kbdkeepalivedkerberoskexectoolskodikubernetesldns
lftplibarchivelibasslibbpglibcoaplibconfuselibcurl
libdblibde265libebmllibeventlibexpatlibgcryptlibgd
libgit2libheiflibicallibidn2libinputlibjpeglibjpeg_turbo
libksbaliblaslibmatroskalibmemcachedlibmicrohttpdlibmodbuslibnss
libpcaplibrawlibrsvglibrsynclibsampleratelibseccomplibsndfile
libsolvlibsouplibsrtplibsshlibssh2libtasn1libtiff
libtomcryptlibupnplibuvlibvipslibvirtlibvncserverlibvorbis
libvpxlibxsltlighttpdlinux_kernellldpdlogrotatelrzip
lualuajitlxclynxlz4mailxmariadb
mbedtlsmdadmmemcachedmicropythonminetestmini_httpdminicom
minidlnaminiupnpcminiupnpdmobymodsecuritymonitmosquitto
motionmpg123mpvmsmtpmtrmupdfmutt
mysqlnanonasmnbdncursesneonnessus
netatalknetdatanetkit_ftpnetpbmnettlenghttp2nginx
ngircdnmapnodentfs_3gntpntpsecopen_iscsi
open_vm_toolsopenafsopencvopenjpegopenldapopenscopenssh
opensslopenswanopenvpnp7zippangopatchpcre
pcre2pcsc_liteperlphppicocompigzpixman
pngpolarssl_fedorapopplerpostgresqlpppprivoxyprocps_ng
proftpdprotobuf_cpspppure_ftpdputtypythonqemu
qpdfqtquaggaradare2radvdraptorrauc
rdesktopreadlinerpmrsyncrsyslogrtl_433rtmpdump
runcrustsambasane_backendssdlseahorseshadowsocks_libev
snapdsngrepsnortsocatsofia_sipspeexspice
sqlitesquashfssquidsslhstellariumstrongswanstunnel
subversionsudosuricatasylpheedsyslogngsysstatsystemd
tartcpdumptcpreplayterminologytesseractthriftthttpd
thunderbirdtimescaledbtinyproxytortpm2_tsstraceroutetransmission
trousersttydtwonky_serveru_bootudisksunboundunixodbc
upxutil_linuxvarnishvimvlcvorbis_toolsvsftpd
webkitgtkwgetwiresharkwolfsslwpa_supplicantxercesxml2
xscreensaverxwaylandyasmzabbixzchunkzeekzlib
znczshzstandard

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

特定语言检查器

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

LanguageFiles supported
Dartpubspec.lock
GoGo.mod
Javapom.xml; JAR, WAR and EAR archives
JavaScriptpackage-lock.json
RustCargo.lock
RubyGemfile.lock
Rrenv.lock
SwiftPackage.resolved
Pythonrequirements.txtPKG-INFOMETADATA; .whl and .egg files
Perlcpanfile

有关特定语言检查器的更多信息,请参阅 CVE 二进制工具手册

支持的存档格式

自动解压器当前支持以下存档格式:

Archive FormatFile Extension
zip.zip, .exe, .jar, .msi, .egg, .whl, .war, .ear
tar.tar, .tgz, .tar.gz, .tar.xz, .tar.bz2
deb.deb, .ipk
rpm.rpm
cab.cab
apk.apk
zst.zst
pkg.pkg

其他要求

要使用自动解压器,您可能需要以下实用程序,具体取决于您需要解压的受支持存档格式的类型。

在 Linux 上运行完整测试套件需要以下实用程序:

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

默认情况下,其中大多数都安装在许多 Linux 系统上,但尤其可能需要安装。cabextractrpm2cpio

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

  • ar
  • 7z
  • Expand
  • pdftotext

默认情况下,Windows 已安装,但可能需要安装。 如果您想运行我们的测试套件或扫描 zstd 压缩文件,我们建议安装 7zip 的这个 7-zip-zstd 分支。我们目前用于提取 、 、 和 文件。 要安装,您可以从此处安装 MinGW(其中包含 binutils 作为其中的一部分)并运行下载的 .exe 文件。Expandar7z7zjarapkmsiexerpmar

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

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

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

您可以查看我们的 CI 配置,了解我们正在显式测试的 python 版本。

局限性

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

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

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

用户可以将会审信息添加到报表中,以将问题标记为误报,指示已通过配置/使用情况更改来缓解风险等。

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

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

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

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

该工具不保证报告所有漏洞,因为该工具只能访问有限数量的公开可用的漏洞数据库。 我们始终欢迎为该工具引入新的数据源做出贡献。

虽然对漏洞数据库中的数据执行了一些验证检查,但该工具无法断言数据的质量或纠正任何 如果数据不完整或不一致,则存在差异。例如,这可能会导致某些漏洞报告的严重性报告为“未知”。

反馈和贡献

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

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

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

CVE 二进制工具贡献者被要求遵守 Python 社区行为准则。如果您对本行为准则有任何疑虑或疑问,请联系 Terri

安全问题

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

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

完整选项列表

用法:

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

参考链接:

https://github.com/intel/cve-bin-tool

更新

测试

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部