需要更纤薄的容器

2021-06-03 23:34:49

最近我是喧嚣的容器,并注意到,Docker开始在Docker Build输出中以Docker Scan命令为特色。我一直忽略了它的存在一段时间,所以显然,现在是时候终于尝试了。

Docker Scan命令使用第三方工具,称为SNYK容器。显然,它'某种漏洞扫描仪。所以,我决定,主要是为了有趣,扫描我的一个图像。这就是这样发生的是一个相当基本的东西:

#最新稳定在python:3.9run pip install plaskcopy server.py server.pyenv flask_app = server.pyenv flask_run_port = 5000env flask_run_host = 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0expe 5000cmd ["烧瓶""运行" 34;]

我ran docker build -t python-flask。然后码头扫描Python-Flask。为了我的话,输出很大!这只是一个摘录:

测试Python-Flask ......✗低严重程度漏洞在未绑定/ libunbound8中发现:输入验证信息不正确:https://snyk.io/vuln/snyk-debian10-unbound-534899通过:mysql-defaults / default-libmysqlient [email protected]来自:mysql-defaults/[email protected]和gt; mariadb-10.3/libmariadb-dev-compat@1:10.3.27-0 + DEB10U1> mariadb-10.3/libmariadb-dev@1:10.3.27-0 + deb10u1> gnutls28/[email protected]+deb10u6> gnutls28/[email protected]+deb10u6> unbound/[email protected]+deb10u2✗在tiff / libtiff5中发现的低严重程度漏洞5描述:缺失信息:https://snyk.io/vuln/snyk-debian10-tiff-1079067通过:imagemagick介绍@ 8:6.9.10.23 + DFSG-2.1 + DEB10U1,ImageMagick / libmagickcore-dev @ 8:6.9.10.23 + DFSG-2.1 + DEB10U1来自:ImageMagick @ 8:6.9.10.23 + DFSG-2.1 + DEB10U1> ImageMagick/imagemagick-6.Q16@8:6.9.10.23 + DFSG-2.1 + DEB10U1> ImageMagick/libmagickcore-6.Q16-6@8:6.9.10.23 + DFSG-2.1 + DEB10U1> TIFF/[email protected]来自:IMAGEMGICK / LIBMAGICKCORE-DEV @ 8:6.9.10.23 + DFSG-2.1 + DEB10U1> imagemagick/libmagickcore-6.q16-dev@8:6.9.10.23 + dfsg-2.1 + deb10u1> tiff/[email protected]~deb10u2> TIFF/[email protected]来自:IMAGEMGICK / LIBMAGICKCORE-DEV @ 8:6.9.10.23 + DFSG-2.1 + DEB10U1> imagemagick/libmagickcore-6.q16-dev@8:6.9.10.23 + dfsg-2.1 + deb10u1> tiff/[email protected]~deb10u2> TIFF/[email protected]~DEB10U2> tiff/[email protected] adebit191117-2 ~deb10u2和3更多......在gcc-8中发现的高度严重性漏洞描述:熵信息不足:https://snyk.io/vuln/snyk-debian10 -gcc8-469413通过:gcc-defaults / g ++ @ 4:8.3.0-1,[email protected],ImageMagick @ 8:6.9.10.23 + DFSG-2.1 + DEB10U1,Meta-Compar-Packages @ Meta来自:GCC-DEFAULTS / G ++ @ 4:8.3.0-1> [email protected]来自:[email protected]> [email protected]来自:gcc-defaults / g ++ @ 4:8.3.0-1> gcc-8/g++ [email protected]> GCC-8.8.3.0-6和23更多...✗高度严重程度漏洞在Djvulibre / libdjvulibre21中找到:null pointer derefiffifo:https://snyk.io/vuln/snyk-debian10-djvulibre-481572通过:imagemagick / libmagickcore-dev @ 8:6.9.10.23 + dfsg-2.1 + deb10u1来自:imagemagick / libmagickcore-dev @ 8:6.9.10.23 + dfsg-2.1 + deb1d10u1> imagemagick/libmagickcore-6.q16-dev@8:6.9.10.23 + dfsg-2.1 + deb10u1> djvulibre/[email protected]> djvulibre/[email protected]来自:imagemagick / libmagickcore-dev @ 8:6.9.10.23 + DFSG-2.1 + DEB10U1> imagemagick/libmagickcore-6.q16-dev@8:6.9.10.23 + dfsg-2.1 + deb10u1> ImageMagick/libMagickCore-6.Q16-6-EXTRA@8:6.9.10.23 + DFSG-2.1 + DEB10U1> djvulibre/[email protected]来自:imagemagick / libmagickcore-dev @ 8:6.9.10.23 + DFSG-2.1 + DEB10U1> imagemagick/libmagickcore-6.q16-dev@8:6.9.10.23 + dfsg-2.1 + deb10u1> djvulibre/[email protected]和1更多......在Bluez / libbluetooth中发现的高度严重性漏洞3描述:双重免费信息:https://snyk.io/vuln/snyk-debian10-bluez-1018718介绍通过:bluez/[email protected]~deb10u1来自:bluez/[email protected]~deb10u1> bluez/libbluetooth3 @ 5.50-1.2 ~deb10u1来自:bluez/[email protected]~deb10u1package manager:debproject名称:docker-image | Python-flaskdocker图片:Python-Flaskplatform:Python-Flaskplatform:Linux / AMD64Tested 431依赖于已知漏洞,找到了已知漏洞的依赖项358漏洞。根据您的图像安全的免费扫描,请在https://dockr.ly/3epqvcp上注册snyk

358个漏洞总共被发现:其中,54个是高度严重程度和48中等严重程度。

仔细看看扫描报告给了我一个线索,其中大多数发现的漏洞可能与Debian有关(见信息:https://snyk.io/vuln/snyk-debian10 -... ,如果不是全部,则报告中的物品很多,那就有了它)。

说实话,这是令人兴奋的!我知道的是我们的容器较厚,潜在的攻击表面越高。但无论如何,我没有期待这样的大规模。

包管理器:DebProject名称:Docker-Image | Python-Flask-Slimdocker图片:Python-Flask-Slimplatform:Linux / AMD64TESTed 94个已知漏洞的依赖性,发现了69个漏洞。

总共发现了69个漏洞:其中,14人患者高,严重程度高,8中等严重程度。

包管理器:APKProject名称:Docker-Image | Python-Flask-Alpineprocker图片:Python-Flask-AlpinePlatform:Linux /AMD64✓测试了37个已知问题的依赖关系,没有找到易受攻击的路径。

看起来有希望的臃肿容器问题的另一个潜在解决方案是所谓的"打破和#34;谷歌的Docker图像。项目描述指出它' s"语言聚焦码头图像,减去操作系统"。虽然它' d很难在Python的情况下实现,因为它的标准库依赖于一些更高级别的操作系统能力。

我花了一段时间来提出工作的打败蟒蛇图像。大多数例子都展示了如何使用一些微不足道的脚本。但是,安装烧瓶(或任何其他依赖性)结果比我预期的多样棘手。 Python Distroless Containers需要多阶段建设过程,因为GCR.io/Distroless/Python3图像既不是PIP也没有Easy_install。首先,我试图利用构建图像中的虚拟环境,然后将其复制到运行时映像,并将路径变量攻击。但它没有工作,因为基础打败图像在文件系统布局上做出了一些自由选择:

所以,我最终用了以下船坞,让我在分布般的Python图片中安装烧瓶:

#构建映像从python:3.7-slim作为build-envrun python-m pip install flask#运行时映像从gcr.io/distroless/python3copy --from = build-env / usr / local / bin / flask / flask / usr / local / bin / flaskcopy - 从= build-env /usr/local/lib/python3.7/site-packages /usr/local/lib/python3.7/site-packagessworkdir / appcopy server.py server.py#mightry line!env pythonpath = / usr / local / lib / python3.7 / site-packagesenv flask_app = server.pyenv flask_run_port = 5000env flask_run_host = 0.0.0.0expe 5000cmd [" / usr / local / bin / flask&#34 ;运行"]

包管理器:DebProject名称:Docker-Image | Python-Flask-Distrolessdocker图片:Python-Flask-Distrolessplatform:Linux / AMD64TESTed 25个已知漏洞的依赖性,发现了37个漏洞。

所以,它' s只是37个漏洞:6,具有高严重程度和8个中等。听起来与原始Python相比,减少90%:3.9图像!它'漏洞甚至比Python更少:3.9纤细。

我喜欢完全从头开始建造容器图像的想法,避免在里面放任何分散的东西。但是,为此,你' d需要一种具有深刻支持的语言,例如go❤️

测试go-scratch ...包管理器:Linuxproject名称:Docker-Image | Go-ScratchDocker图片:Go-Scratchplatform:Linux /AMD64✓已测试的Go-Scratch用于已知漏洞,未找到易受攻击的路径。

嗯,没有分散,没有必然意味着没有漏洞。但它确实降低了一个拥有的概率。

从我的经验膨胀图像通常是使用Bloated_Base的默认值的结果,或者因为人们故意为未来调试/故障排除而将额外的工具放到图像中。

第一个可能是在当天码头的挖掘营销活动的结果。为了普及容器,你需要给人们看起来很酷和方便的东西。并且能够从您的DEV机器推出一个完整的Linux Dist(种类),即使在今天也非常凉爽。一些局部修补和/或实验受益于码头run -it ubuntu很多。但是,我希望它永远不会用于生产使用。但是,从一个完整的Debian,CentOS或Ubuntu开始,在从完整的Debian,CentOS或Ubuntu开始时,of offickerfiles的示例是避免至少将其中一些人渗透到我们的生产环境中。

第二个原因看起来更合法。但我有一种感觉,它只唯一一目了然。理想情况下,应该有另一种方法来调试您的集装箱服务。这样的方式,这不涉及将所有可能所需的工具包装到容器中。最近的Kubect调试添加是该假设的良好证据。它允许人们将短暂的容器注入运行的吊舱,并且这种容器可以拥有调试所需的所有内容。

较小的容器Don' t的意思是更快的构建和更小的磁盘和网络利用,它们意味着更安全。

喜欢这篇文章?让它成为一个伟大的友谊的开始。留下您的电子邮件,以便我可以通知您关于此博客主题的新文章或任何其他有趣的事件。我保证没有垃圾邮件!