nix-community/vulnix
GitHub: nix-community/vulnix
专门面向 Nix/NixOS 生态的 CVE 漏洞扫描器,通过解析 Nix 派生文件并与 NVD 数据库比对来发现系统中存在已知漏洞的软件包。
Stars: 782 | Forks: 46
# Nix(OS) 漏洞扫描器
这是一个实用工具,用于验证 Nix 存储中是否存在满足以下条件的软件包:
从活动路径可达,并且可能受到
NVD 中列出的漏洞影响。
它实现了一个用于检查当前状态的 CLI 实用程序以及
用于 Sensu 的监控集成。
输出示例
.. code:: text
2 derivations with active advisories
binutils-2.31.1
/nix/store/zc1lbkaf9l9hlsp1jdiq3si56nsglymh-binutils-2.31.1.drv
CVE CVSSv3
https://nvd.nist.gov/vuln/detail/CVE-2018-1000876 7.8
https://nvd.nist.gov/vuln/detail/CVE-2018-20657 7.5
https://nvd.nist.gov/vuln/detail/CVE-2018-20712 6.5
libssh2-1.9.0
/nix/store/mfpfclry68r4sv4mcc9hb88z0lb9jk1c-libssh2-1.9.0.drv
CVE CVSSv3
https://nvd.nist.gov/vuln/detail/CVE-2019-17498 8.1
## 操作原理
``vulnix`` 从 NIST_ 拉取所有已发布的 CVE 并在本地进行缓存。它将命令行引用的所有 derivations 的名称和版本与已知的 CVE 条目进行匹配。*白名单* 用于过滤掉不需要的结果。
目前,将 Nix 软件包名称匹配到 NVD 产品是通过粗略的启发式方法完成的。首先,尝试直接匹配。如果找不到产品,则会尝试小写形式以及使用下划线代替连字符的变体。显然,这种映射过于简单,需要在未来的版本中进行改进。
## 系统要求
- 依赖于常见的 Nix 工具,如 ``nix-store``。这些工具需要存在于 $PATH 中。
- 依赖于能够与 Nix 存储数据库 进行交互。这意味着它必须以拥有 Nix 存储数据库的同一用户身份运行,或者 ``nix-daemon`` 必须处于活动状态。
- 直接解析 ``*.drv`` 文件。已通过 Nix >=1.10 和 2.x 测试。
- 如果没有某些区域设置环境变量,它将拒绝工作。如果遇到编码错误,请尝试 ``export LANG=C.UTF-8``。
# 用法示例
- 当前系统列出了哪些漏洞
.. code:: shell
vulnix --system
- 检查 ``nix-build`` 输出及其传递闭包
.. code:: shell
vulnix result/
- 检查所有传递的 derivations,但不确定依赖项
.. code:: shell
vulnix -R /nix/store/*.drv
- 用于机器后续处理的 JSON 输出
.. code:: shell
vulnix --json /nix/store/my-derivation.drv
有关所有选项的列表,请参见 ``vulnix --help``。
# 白名单
``vulnix`` 的输出可能包含误报、无法修复的软件包或已知已处理的内容。*白名单* 功能允许排除匹配特定条件的软件包。
## 用法
从本地文件或 HTTP 服务器加载白名单
.. code:: shell
vulnix -w /path/to/whitelist.toml \
-w https://example.org/published-whitelist.toml
## 语法
白名单是 TOML_ 文件,其中将要过滤的软件包作为节标题,后跟进一步的每个软件包选项。
## 节标题 - 软件包选择
排除特定版本的软件包
.. code:: toml
["openjpeg-2.3.0"]
排除不限版本的软件包(可能会应用额外的 CVE 过滤器,见下文)
.. code:: toml
["openjpeg"]
排除所有软件包(同样见下文的 CVE 过滤器)
.. code:: toml
["*"]
## 选项
cve
要匹配的 CVE 标识符列表。只要检测到的 CVE 是此处列出的 CVE 的子集,此白名单规则就有效。如果检测到额外的 CVE,此白名单规则将不再有效。
until
格式为 "YYYY-MM-DD" 的日期,用于限制此规则的有效期。在指定日期及之后,此白名单规则将不再有效。
issue_url
指向任何问题跟踪器的 URL 或 URL 列表。仅用于提供信息。
comment
包含自由文本的字符串或字符串列表。仅用于提供信息。
## 示例
在您最喜欢的问题跟踪器上创建一个工单。估算修复易受攻击软件包所需的时间。创建白名单条目:
.. code:: toml
["ffmpeg-3.4.2"]
cve = ["CVE-2018-6912", "CVE-2018-7557"]
until = "2018-05-01"
issue_url = "https://issues.example.com/29952"
comment = "need to backport patch"
这个特定版本的 ffmpeg 将从报告中被排除,直到发布另一个 CVE 或达到指定的日期。
# CVE 补丁自动检测
``vulnix`` 将检查 derivations 中是否包含据称用于修复特定 CVE 的补丁。当补丁文件名包含一个或多个 CVE 标识符时,这些将不再被报告。Nix 代码示例:
.. code:: nix
{
patches = [ ./CVE-2018-6951.patch ];
}
修复多个 CVE 的补丁应使用非数字分隔符将它们全部命名,例如 ``CVE-2017-14159+CVE-2017-17740.patch``。
只要名称中包含 CVE 标识符,即使补丁是通过 ``fetchpatch`` 及其相关函数拉取的,自动检测也同样有效。示例:
.. code:: nix
{
patches = [
(fetchpatch {
name = "CVE-2018-9055.patch";
url = http://paste.opensuse.org/view/raw/330751ce;
sha256 = "0m798m6c4v9yyhql7x684j5kppcm6884n1rrb9ljz8p9aqq2jqnm";
})
];
}
.. _NIST: https://nvd.nist.gov/vuln/
.. _TOML: https://github.com/toml-lang/toml/
标签:CVSS评分, GPT, Nix, NixOS, NVD, Python安全, Sensu, URL发现, 包管理器安全, 子域名枚举, 安全合规, 安全检测, 无线安全, 漏洞管理, 白名单, 监控集成, 系统安全, 网络代理, 网络安全审计, 逆向工具