CVE 二进制检查器工具
项目描述
CVE 二进制工具快速入门/自述文件
CVE 二进制工具是一个免费的开源工具,可帮助您使用国家漏洞数据库(NVD) 的常见漏洞和披露(CVE) 列表中的数据查找软件中的已知漏洞。
该工具有两种主要的操作模式:
- 一个二进制扫描程序,可帮助您确定哪些软件包可能已作为软件的一部分包含在内。大约有 100 个检查器专注于常见的、易受攻击的开源组件,例如 openssl、libpng、libxml2 和 expat。
- 用于扫描各种格式的已知组件列表的工具,包括 .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 类型是SPDX、 CycloneDX和SWID。
离线使用工具
在运行扫描时指定--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-INFO和METADATA文件,以提取用于在数据库中搜索漏洞的组件名称和版本。
该工具支持扫描任何 Wheel 包文件(以.whl 文件扩展名表示)和 egg 包文件(以.egg 文件扩展名表示)的内容。
该--package-list选项可以与 Python 依赖文件一起使用,requirements.txt以查找组件列表中的漏洞。
限制
此扫描器不会尝试利用问题或更详细地检查代码;它只查找库签名和版本号。因此,它无法判断是否有人将修补程序反向移植到易受攻击的版本,并且如果库或版本信息被故意混淆,它将无法工作。
该工具旨在在非恶意环境中用作快速运行、易于自动化的检查,以便开发人员可以了解已编译到其二进制文件中的存在安全问题的旧库。
该工具不保证报告的任何漏洞确实存在或可利用,也不能保证找到所有存在的漏洞。
用户可以将分类信息添加到报告中,以将问题标记为误报、误报、指示风险已通过配置/使用更改等得到缓解。
分类细节可以在其他项目中重复使用,例如,Linux 基础镜像上的分类可以应用于使用该镜像的多个容器。
有关该工具的更多信息和分类信息的使用,请查看此处。
如果您使用二进制扫描器功能,请注意我们只有有限数量的二进制检查器(见上表),因此我们只能检测这些库。总是欢迎新跳棋的贡献!您还可以使用另一种方法来检测组件(例如,材料清单工具,例如tern),然后将结果列表用作 cve-bin-tool 的输入,以获得更全面的漏洞列表。
该工具使用漏洞数据库来检测当前的漏洞,如果数据库不经常更新(特别是在离线模式下使用该工具),该工具将无法检测到任何新发现的漏洞。因此,强烈建议保持数据库更新。
要求
要使用自动提取器,您可能需要以下实用程序,具体取决于您需要提取的文件类型。在 Linux 上运行完整的测试套件需要以下实用程序:
filestringstarunziprpm2cpiocpioarcabextract
其中大多数默认情况下安装在许多 Linux 系统上,但cabextract特别
rpm2cpio是可能需要安装。
在 Windows 系统上,您可能需要:
ar7zExpandpdftotext
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报告给英特尔的安全事件响应团队。
如果在使用此工具的过程中您发现其他人的代码存在安全问题,请负责任地向相关方披露。