Docker映像安全:6个必须知道的提示

随着Docker越来越受欢迎,Docker安全问题的新闻也越来越多。例如,今年早些时候,Doki后门被用来利用配置错误的Docker API端口,并安装加密矿工或其他恶意软件。最初被描述为无法察觉今天,VirusTotal上只有36/61的扫描器正常运行将Doki标记为恶意软件。Doki只是众多潜在威胁中的一个例子。去年,cve - 2019 - 5736一个容器安全漏洞,使攻击者能够获得主机的根访问权限。

当然,这些消息并不意味着Docker不适合生产环境。相反,它为我们提供了一些例子,说明为什么认真对待Docker安全性很重要。因为码头工人的图片是刚开始熟悉Docker的人的起点,也是开始学习Docker安全性的好地方。在这里,我们将回顾6个Docker映像安全提示,以帮助您保证项目的安全。

1.应用更新和补丁

这一点很简单,但我们不能夸大它的重要性:你必须保持你的Docker镜像,Docker引擎和主机补丁和最新的。总是会有新的漏洞和补丁发布来解决这些漏洞。养成定期使用它们的习惯。如果在发布了关键的安全补丁后不应用它们,那么这里的其他技巧很快就会变得毫无意义。

2.只使用经过验证的Docker镜像

Docker Hub (Docker的官方Docker注册表)的主要优点之一是可供下载的大量可用镜像。来自世界各地的个人和组织将图像上传到您可以使用的Docker Hub。Docker最近限制免费层使用的变化确实会减慢开发速度,阻碍真正的开发。然而,也有免费的解决方案——比如使用JFrog Artifactory的免费层作为缓存代理它允许您在没有过度限制速率限制的情况下获得Docker Hub的优势。无论您使用何种方法提取图像,您如何知道哪些图像可以信任?

这就是概念所在Docker Content Trust (DCT)出现的原因。使用DCT,图像发布者可以对图像进行数字签名,这样您就可以验证图像来自可信来源。在高层次上,这些数字签名与网站的SSL证书相当。就像拥有SSL证书的网站一样,经过验证的图像并不一定安全。恶意攻击者可能会对图像进行签名或颁发SSL证书。数字签名只是让您知道内容来自您期望的来源。这就是为什么只从您信任的来源提取图像很重要的原因。

默认情况下,Docker Content Trust是禁用的。您可以使用export命令启用它DOCKER_CONTENT_TRUST = 1。

johnnyo@LAPTOP-5V55HON5:~$ export DOCKER_CONTENT_TRUST=1

设置了环境变量后,让我们看看如果我们尝试提取无符号图像会发生什么:

johnnyo@LAPTOP-5V55HON5:~$ docker pull riyaz/unsigned-img

使用默认标签:latest

错误:docker不存在远程信任数据。Io /riyaz/unsigned-img:公证人.docker.io没有docker.io/riyaz/unsigned-img的信任数据

注意:如果你“sudo”你的Docker pull命令,一定要使用-E选项来确保你设置的环境变量被使用。sudo -E docker pull your_image_name。

3.尽可能使用最少的Docker镜像

正如挪威研究人员在2020年6月的“2500个Docker Hub图像的漏洞分析”研究中所证明的那样,Docker Hub上的图像中存在大量漏洞。甚至经过验证的图像被发现至少有一个超过50%的高评级漏洞。

在某种程度上,这可以归因于这样一个事实,即许多容器具有比提供其核心功能所需的更多的膨胀。虽然将用户可能需要的所有功能塞进一张图像中很好,但这样做会大大增加攻击面。

使用最少的镜像——比如官方的Ubuntu镜像——并且只在上面安装你需要的东西,这样可以减少大量的风险。

4.遵循最小特权原则

最小特权原则是信息安全的黄金法则之一。这个想法很简单:只给用户和进程完成特定任务所需的特权。如何将其应用于Docker安全性?下面是一些最常见的方法:

  • 运行带有-的映像-security-opt = no-new-privileges选项以防止特权升级

  • 避免——享有特权的标志运行Docker容器时。-享有特权的Flag授予正在运行的容器对底层主机资源的更多访问权,这意味着如果一个特权容器受到威胁,整个系统很快就会受到威胁。2022世界杯阿根廷预选赛赛程

  • 使用- - - - - -cap-drop和- - - - - -加帽微调Linux的能力授予容器。理想情况下,你应该用t他-cap-drop =选项,默认情况下删除所有功能,然后只显式地添加需要的功能-cap-add。

  • 遵循Docker的建议使用用户命名空间隔离容器。将容器应用程序配置为以非特权用户身份运行。如果应用程序必须以root身份运行,则将该用户映射到主机上的非特权用户。

  • 以非root用户运行Docker容器。最简单的方法之一是将非root用户添加到容器的Dockerfile中。

5.扫描Docker镜像以查找漏洞

漏洞扫描是信息安全的重要组成部分,Docker安全也不例外。当然,扫描和验证产品交付的安全状态是很重要的。但是,为了确保将安全性嵌入到您的CI/CD管道中,请采用“左移”的DevSecOps方法是至关重要的。

你怎么能这么做?通过扫描所有容器、软件构件和依赖项来查找现有的漏洞。我们自己的JFrog x光是用这种“左移”的方法建立的。Xray不断地审核所有工件,包括Docker映像,以查找已知的漏洞和许可证问题。此外,它是唯一的软件组合分析(SCA)解决方案能够与Artifactory和我们的本地集成码头工人注册表。通过使用Xray审计和分析整个CI/CD管道,您可以更快地捕获漏洞,并减少将易受攻击的Docker映像部署到生产环境的可能性。

6.加固你的Docker主机

纵深防御是信息安全的另一条黄金法则。您可以通过确保加固Docker主机来将此概念应用于Docker安全性。除了使用SSH密钥、强密码和防火墙之外,帮助保护系统调用的解决方案在这里也很重要。Linux模块(如Selinux、AppArmor和Seccomp)可以在系统上的给定容器遭到破坏时增加一个强大的防御层。

最后的想法:Docker安全性的下一步

我们在这里介绍的6个技巧是帮助您安全地开始使用Docker的良好基础。在构建下一个项目时,请记住这些技巧,这样就可以提高整体安全性。在Docker映像级实践它们之后,您可以通过使用Kubernetes - and进行扩展来更深入地自动化您的DevSecOps工作到时候我们也会帮你的