docker - 如何解决docker scan中报告的python3.7 Docker漏洞

标签 docker openssl python-3.7 amazon-ecr google-container-registry

我们正在尝试将我们的服务构建为 docker 镜像。我们在 docker 镜像中提供 flask 服务。如果我们使用 python3.7 作为基础镜像,我们会遇到很多漏洞。即使在升级版本后,仍然会报告问题。

为重现该问题,此处提供了一个基本的 docker 镜像。

FROM python:3.7
CMD ["sleep", "300"]
sudo docker build -t p37:basic-f ./Dockerfile .
sudo docker tag p37:basic $DOCKER_LOGIN_URL/repo:p37_basic
sudo docker push $DOCKER_LOGIN_URL/repo:p37_basic

当这个镜像被推送到 AWS Container registry 时,扫描报告显示有很多漏洞。

给出一个示例问题报告。 CVE-2022-2097 CVE-2022-2097 screenshot

问题表明我们需要将 openssl 更新为 openssl 1.1.1q。 我们在本地运行镜像,发现已经安装了openssl 1.1.1n。

sudo docker run p37:basic &

sudo docker container list

CONTAINER ID   IMAGE       COMMAND        CREATED          STATUS      PORTS     NAMES 77a25f41da01   p37:basic   "sleep 6000"   15 seconds ago   Up 14 seconds             eager_black

sudo docker exec -it 77a25f41da01 /bin/bash

root@77a25f41da01:/# openssl version -a OpenSSL 1.1.1n  15 Mar 2022 built on: Fri Jun 24 20:22:19 2022 UTC platform: debian-amd64 options: bn(64,64) rc4(16x,int) des(int) blowfish(ptr)  compiler: gcc -fPIC
-pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -ffile-prefix-map=/build/openssl-qQYEec/openssl-1.1.1n=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2 OPENSSLDIR: "/usr/lib/ssl" ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1" Seeding source: os-specific root@77a25f41da01:/#

所以我们决定升级docker镜像中的openssl。

FROM python:3.7
RUN apt-get update
RUN apt-get install software-properties-common --yes

# OPENSSL
RUN apt-get update && \
    apt-get install --yes --no-install-recommends wget build-essential libcurl4 && \
    wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz && \
    tar -xvf openssl-1.1.1q.tar.gz  && cd openssl-1.1.1q && \
    ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib && make && make install


RUN echo "/usr/local/ssl/lib" >> /etc/ld.so.conf.d/openssl-1.1.1q.conf
RUN cat /etc/ld.so.conf.d/openssl-1.1.1q.conf
RUN ldconfig -v
RUN mv /usr/bin/c_rehash /usr/bin/c_rehash.backup
RUN mv /usr/bin/openssl /usr/bin/openssl.backup
ENV PATH="${PATH}:/usr/local/ssl/bin"

CMD ["sleep", "6000"]

当我们在本地运行 docker 镜像并检查容器内部时,最新的 openssl 已安装。

sudo docker exec -it c3314b7efeea /bin/bash

root@c3314b7efeea:/# openssl version -a
OpenSSL 1.1.1q  5 Jul 2022
built on: Fri Aug  5 17:26:11 2022 UTC
platform: linux-x86_64
options:  bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr) 
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DZLIB -DNDEBUG
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/ssl/lib/engines-1.1"
Seeding source: os-specific
root@c3314b7efeea:/#

但是当它被推送到 AWS 中的弹性容器注册表时,扫描报告中仍然报告 openssl 问题。 (我们也检查了 Google 容器注册表。只有类似的行为)

updated_screenshot

为什么修复没有反射(reflect)在扫描报告中?还是有其他方法可以修复这些漏洞?

最佳答案

将此作为解决方法发布。 2个问题中,

为什么修复没有反射(reflect)在扫描报告中? 仍然没有答案

是否有替代方法来修复这些漏洞? - 此变通解决方案。

我们将 ubuntu:20.04 作为基础 docker 镜像,然后添加 docker 所需的文件。

这大大减少了扫描漏洞的数量。现在我们在 AWS ECR 的 docker 扫描报告中有 2 个 low 和 few 信息条目。

FROM ubuntu:20.04
RUN apt-get update
RUN apt-get install software-properties-common --yes
RUN apt-get install build-essential wget -y
RUN apt-get install python3-pip -y
RUN pip install --upgrade pip
CMD ["sleep", "300"]

这将有内置的 python3.8。

我们可以像这样使用

CMD ["python3", "testfile.py"]

或创建别名并使用 python

关于docker - 如何解决docker scan中报告的python3.7 Docker漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73253576/

相关文章:

openssl - 将私钥从 der 转换为 pem

openssl - 无法通过标准输入提供证书和 key 到openssl

google-app-engine - 在 GCP(应用程序引擎)上运行 python Flask Restplus API 的问题

python - CMake错误: could NOT find Python (missing: Python_NumPy_INCLUDE_DIRS NumPy) (found version "2.7.17")

docker - 如何在docker中列出可用的存储驱动程序?

docker - Spring Boot docker微服务restTemplate异常

python - 导入错误 : paho. mqtt.client 未找到

c++ - 使用 OpenSSL 生成私钥

mysql - 如何在查询执行期间发生错误时自动关闭 python 中的 MySQL 连接?

docker - 如何更改 Kibana 的 Docker 镜像的端口号