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发现, 包管理器安全, 子域名枚举, 安全合规, 安全检测, 无线安全, 漏洞管理, 白名单, 监控集成, 系统安全, 网络代理, 网络安全审计, 逆向工具