conda-forge 安全吗?

Is conda-forge safe?

我去conda forge下载了PyPDF2:

    conda install -c conda-forge pypdf2

并收到此消息:

The following packages will be UPDATED:
  ca-certificates    anaconda::ca-certificates-2020.10.14-0 --> conda-forge::ca-certificates-2021.10.8-h033912b_0
  certifi            pkgs/main::certifi-2021.5.30-py39hecd~ --> conda-forge::certifi-2021.10.8-py39h6e9494a_0

The following packages will be SUPERSEDED by a higher-priority channel:
  openssl              pkgs/main::openssl-1.1.1l-h9ed2024_0 --> conda-forge::openssl-1.1.1l-h0d85af4_0

在我看来,安装 pdf reader 正在尝试更新与安全相关的包。

如果坏人向 conda 上传了东西,这可能会对更广泛的 Python 生态系统构成风险。 这个特定的 conda forge repo 是 Google 和 DuckDuckGo 上“conda PyPDF2”的最佳结果,并且已被大量下载:

 175141 total downloads
 Last upload: 2 years and 10 months ago

为什么 Conda Forge 优先?

Conda 积极更新与安全相关的包。具体参见

$ conda config --describe aggressive_update_packages
# # aggressive_update_packages (sequence: primitive)
# #   env var string delimiter: ','
# #   A list of packages that, if installed, are always updated to the
# #   latest possible version.
# # 
# aggressive_update_packages:
#   - ca-certificates
#   - certifi
#   - openssl

这意味着每当用户请求对环境进行变异操作时,Conda 将检查是否有更高优先级的可用包版本。每当使用 --channel, -c 标志时,它都会将该通道置于最高优先级。因此,命令

conda install -c conda-forge ...

运行 在以前只使用过 defaults 频道的环境中将触发一些包切换到 conda-forge 作为来源。

Conda Forge 值得信赖吗?

是的。 但是,每个 user/organization 都必须评估自己的风险,提供 Conda Forge 的完整安全分析超出了本论坛的范围。

取而代之的是,可能值得概述相关的 Conda Forge 程序以减轻受损包的影响。

安全概述

虽然 Conda Forge 对任何人的社区提交开放,但以下是一些有助于确保通道安全的做法:

  • 把关。 新包必须通过受信任的团队成员的审查才能被 Conda Forge 接受和分发。对于大多数包,鼓励用户使用在其他可信存储库(例如 PyPI、CRAN)下游工作的配方生成脚本。

    一旦通过,只有提交者和核心成员才有维护者权限。任意用户可以向任何 feedstock 提交 Pull Requests,但同样必须由维护者审查和接受。

  • 透明供应链。所有配方都是开源的,所有构建都在 CI 基础设施上执行,并带有开放日志。在 conda-forge 频道上构建的任何包都可以完全审核回用于构建它的配方 URL。

  • 孤立的原料。每个原料只能上传该原料的包。这是通过使用首先发送构建的 cf-staging 通道强制执行的。然后,机器人会评估提交的原料是否有权构建它已提交的包,然后才会将构建转发到 conda-forge 频道。

    这有助于防止不良行为者获得对不显眼原料的访问权限,然后尝试将带有恶意代码的构建推送到基本基础设施包(例如,opensslpython)。

我相信还可以说更多,但希望这是一个充分的开始。

Anaconda 信任 Conda Forge

可能还值得指出的是,许多 Anaconda 包配方都是从 Conda Forge 原料中提取出来的。这包括每个安全包配方 (certifi, openssl, ca-certificats)。