【问题标题】:Find all Python packages depending on a linux system library查找所有依赖于 linux 系统库的 Python 包
【发布时间】:2021-03-23 16:25:14
【问题描述】:

让我们假设安全扫描发现某个 linux 系统库中存在高漏洞。

如何找到需要这个系统库的所有 python 包(在许多使用 pipconda 安装的包中)?

换句话说,pipdeptree,但返回系统库。

  • 更多信息。作为风险缓解的一种形式,我们将暂时卸载受影响的 python 包以摆脱易受攻击的系统库。我们可以确定,底层操作系统的正确运行不需要系统库,因为该漏洞不存在于仅包含操作系统的基础映像中。我们不能保持安装易受攻击的库,而只是禁用/阻止 - 构建时安全扫描必须干净地通过(即没有安装库)。

【问题讨论】:

  • 随便chmod a-r <path-to-lib>
  • 防止访问系统库的好主意(可能执行也可以?)。从安全的角度来看它是有效的,但它仍然可能不允许我们通过安全扫描(这是在构建镜像之后但运行之前在 Docker 容器级别执行的)。
  • chmod 解决方案的问题是安全扫描器将以 root 身份运行容器,因此即使我们删除了所有三个权限 (chmod -r-w-x),扫描器作为 root 仍然会保留能够cat 文件的内容,从而能够找到漏洞,即使普通用户被阻止访问库。
  • 重命名库。
  • 查找 python 包的所有系统依赖项的问题仍未得到解答,但我在我的特定情况下找到了一个安全的解决方法,使用 conda 安装的系统库补丁版本。

标签: python linux pip dependencies conda


【解决方案1】:

事实证明,这个特定的包有一个conda-installable python 包,具有​​相同的名称并依赖于易受攻击的系统库,其中系统依赖项已经被修补。

所以第一步是使用conda升级python包,这也升级了conda-特定文件夹(/opt/conda/bin/<package>)中的系统二进制:

conda install -y <package>

但是,用户级位置 (/usr/bin/) 中的同一个库仍然容易受到攻击,所以我不得不用 conda-patched 版本覆盖它(我检查了库源 repo 中的差异以确保补丁是次要的):

rm /usr/bin/<package> && ln -s /opt/conda/bin/<package> /usr/bin/<package> 

此外,由于初始安全扫描也在执行 conda 补丁之前运行,我不得不将 CVE 添加到白名单中(但仅限于初始扫描覆盖的这个 docker 映像,而不是之后扫描的最终映像补丁)。

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 2021-08-11
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 2020-05-27
    • 2016-01-19
    相关资源
    最近更新 更多