注意事项 佩雷夫 :Docker安全主题可能是当今IT世界中永恒的主题之一。 因此,在不作进一步解释的情况下,我们将介绍相关建议的下一部分。 如果您已经对此问题感兴趣,那么您将很熟悉其中的许多内容。 此外,我们还为选区本身提供了有用的实用程序列表和一些资源,供您进一步研究该问题。
这是Docker安全指南。 欢迎您提供反馈,因为它只是来自各种资源的摘录的集合,而并非所有摘录都经过了彻底的检查。 这些建议分为三类:
- 使用Docker时主机操作系统内部的必要措施;
- 有关程序集配置文件和创建容器的说明;
- 可与特定Docker Enterprise功能集成的安全工具。
各种资源已成为领导的基础,下面列出了许多资源。 它不能被称为详尽无遗,但它涵盖了所有基础知识。 可以在CIS测试的说明中找到更多信息(该链接在本手册的末尾提供)以及Docker文档中。
Docker安全基准
Docker Bench for Security自动检查您的Docker是否符合最常见的最佳实践。 该脚本是一个很好的启发式安全测试,但不应视为全面的分析工具。
主机操作系统
显然,如果主机系统本身不受保护,则无法保护Docker容器。 因此,您必须遵循操作系统安全领域的最佳实践。 另外,除了以下建议之外,进行漏洞分析也是明智的。
审核规则
使用
auditctl
为与Docker相关的文件创建和使用审核规则。 例如,您可以将
-w /usr/bin/dockerd -k docker
添加到
/etc/audit.rules
并重新启动审核服务。
FIPS模式
启用FIPS模式会强制密码工具切换到FIPS
(美国联邦信息处理标准 -大约翻译)中引入的算法,从而符合联邦和行业标准及要求。 如果主机操作系统支持FIPS模式,则可以通过运行以下命令来启用它:
sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg && reboot
您还必须在Docker Engine中启用FIPS:
mkdir -p /etc/systemd/system/docker.service.d 2>&1; echo -e "[Service]\n Environment=\"DOCKER_FIPS=1\"" > /etc/systemd/system/docker.service.d/fips-module.conf; systemctl daemon-reload; systemctl restart docker
有关更多信息,请参阅
Docker和
Red Hat文档。
Docker的秘密
机密数据应保密。 您可以使用docker service create命令启动相应的服务:
docker service create --label com.docker.ucp.access.label=/prod --name nginx --publish 443 --secret source=orcabank_prod_mobile.ca.pem.v1,target=ca.pem nginx
有关详细信息,请参见
文档 。
Docker配置文件
可以将以下设置添加到
/etc/docker/daemon.json
配置
/etc/docker/daemon.json
:
运输安全
只有具有TLS客户端凭据访问权限的用户才能连接到Docker守护程序(如果需要远程访问)。
授权插件
确定允许哪些用户执行哪些命令并为Docker创建适当的授权插件。 然后运行Docker守护程序并将插件添加到其中:
dockerd --authorization-plugin=PLUGIN_ID
要了解有关创建授权插件的更多信息,请参阅
文档 。
守护程序选项
Docker守护程序可以使用一组默认参数。
--live-restore
此选项有助于减少系统关闭或重新引导期间的容器停机时间。 以最小的停机时间来修补或更新它们变得更加容易。--userland-proxy=false
当发夹式NAT可用或使用时,用户空间中的代理成为冗余服务,这只会增加可能的攻击媒介数量;--no-new-privileges
防止容器使用suid或sguid获得附加特权;--seccomp-profile /path/to/profile
-如果您有自己的seccomp配置文件,则可以将此标志与它一起使用。 在此处了解有关Seccomp和Docker的更多信息。
配置容器和程序集文件
用户创建
确保为该容器创建了一个用户,并在该用户下运行它(不要在根目录下运行该容器)。
远程访问
拒绝对守护程序的远程访问。 如果仍然有必要,请使用证书对其进行保护。
隔离用户名空间
确保隔离Docker中的用户名空间特别重要,因为默认情况下它与主机名空间共享。 在某些情况下,这可以用于提升特权,甚至可以用于容器之外。 您可以通过编辑配置文件来隔离用户名称空间(如上所述,在Docker Configuration File部分中)。 由于此问题的重要性,因此另外提及了该问题。
健康检查
Healthcheck(运行状况检查)是用于检查容器完整性的强大工具。 使用
HEALTHCHECK
在Dockerfile中对其进行配置。 运行状况检查可让您验证容器是否正常运行。 在下面的示例中,运行状况检查如果服务器正在运行,则以0结尾,如果服务器“崩溃”,则以1结尾:
HEALTHCHECK CMD curl --fail http://localhost || exit 1
SELinux
如果主机操作系统支持SELinux,请创建或导入SELinux策略,并在启用SELinux的守护进程模式下运行Docker:
docker daemon --selinux-enable
在这种情况下,可以使用安全设置启动Docker容器,例如:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bash
网络接口
默认情况下,Docker侦听所有网络接口。 由于在大多数情况下,仅预期其中之一会发生流量,因此这种方法会不合理地增加遭受攻击的风险。 因此,启动容器时,可以将其端口绑定到主机上的特定接口:
docker run --detach --publish 10.2.3.4:49153:80 nginx
缓存的图像版本
下载图像时,请确保本地缓存与存储库的内容匹配。 否则,您可能会收到该图像的过时版本或包含漏洞的图像。
网桥
默认网络模型
docker0
容易受到ARP欺骗和MAC泛洪等攻击。 要解决此问题,请按照您的说明创建网桥,如此处所述。
Docker套接字警告
切勿将Docker套接字扔入容器中。 否则,该容器将能够执行Docker命令,并因此与主机操作系统进行通信并对其进行控制。 不要这样做。
配置Docker Enterprise
Docker信任
Docker Trust允许您生成可用于验证图像的加密完整性的密钥。 Docker Trust密钥可用于通过私钥对Docker映像进行签名,这些私钥已通过Notary Server上的公钥进行验证。 更多信息
在这里 。
文档的此部分详细介绍了在Enterprise Engine中启用Docker Trust。
漏洞扫描
Docker Enterprise有一个内置的漏洞扫描器,它使得下载CVE数据库成为可能,从而可以离线扫描图像中的漏洞。 定期扫描图像有助于使其更安全:用户会立即收到有关发现的漏洞的警告。 有关如何执行此操作的更多信息,请参见
此处 。
注意事项 佩雷夫 :Docker映像中也有开放源代码漏洞扫描程序,请参阅本文结尾处的示例。LDAP和UCP集成
通用控制平面可以与LDAP集成。 结果将是简化的认证系统,以避免不必要的重复。 在文章
与LDAP目录集成中了解有关此内容的更多信息。
其他材质
有关Docker最佳安全做法的更多信息,请访问
docs.docker.com 。 我们还建议下载
Docker的Internet安全测试中心 。
翻译者的奖金
作为对本文的逻辑补充,我们将
在Docker中发布
10种流行的开源安全工具的列表。 它是从
另一篇文章中借用的(由Doerrfeld.io的Bill Doerrfeld撰写)。
注意 :请阅读“ 33+ Kubernetes安全工具 ”一文中提到的许多项目的更多信息。- Docker Bench for Security是本文开头提到的脚本,用于检查Docker容器是否符合常见的安全惯例。

- 对于静态分析容器中的漏洞, Clair可能是最受欢迎的实用程序。 它使用了许多CVE漏洞数据库(包括领先的Linux发行版的跟踪器,例如Red Hat,Debian,Ubuntu)。 它为开发人员提供了API,并为扩展功能提供了简单的机会(通过添加“驱动程序”)。 它在流行的容器映像公共注册表中使用(类似于Docker Hub)-Quay.io。
- Cilium是基于BPF网络数据包过滤技术的内核级网络安全解决方案。
- Anchore是基于CVE的实用程序,用于分析图像内容的安全漏洞。 另外,它允许您应用自定义策略(基于各种数据,包括白/黑名单,文件内容等)来评估容器的安全性。
- OpenSCAP Workbench是一个用于跨平台创建和维护安全策略的完整生态系统。 为了检查容器,它提供了
oscap-docker
实用程序。 - Dagda是用于扫描Docker容器中的漏洞,木马,病毒和恶意软件的实用程序。 CVE数据库包括OWASP依赖项检查,Red Hat椭圆数据库,漏洞数据库漏洞利用存储库。
- 公证是用于签名Docker映像的框架,最初由Docker Inc.创建(然后移交给CNCF进行开发)。 它的使用使您可以委派角色并在容器之间分配职责,以及验证图像的加密完整性。
- Grafaes是一种元数据API,旨在管理内部安全策略。 例如,它提高了容器安全扫描器的性能。 Shopify使用此API来管理其500,000张图像中的元数据。
- Sysdig Falco - Kubernetes的实用程序,用于监视系统的行为:容器中,主机上,网络上的活动。 允许您在基础架构中配置连续检查,检测异常并将警报发送到任何Linux系统调用。
- Banyanops Collector是用于Docker容器的静态图像分析的另一个工具。 使您可以“查看”图像文件,收集必要的数据,应用必要的策略等。
可以在
此 Aqua Security
文章中找到关于使Docker更安全的
另一种实用技巧的精选 。 她的许多技巧与上面已经提到的那些技巧重叠,但是还有其他一些技巧。 例如,作者建议监视容器中的活动,并指出使用Docker Swarm时要查找的内容。
去年,对于那些想更深入地研究这个主题的人,
出版了《 Docker安全性:快速参考 》一书 ,其片段可
在此处免费获得。
最后,要实际了解Docker安全性的一些方面:Seccomp配置文件和在容器中使用Linux内核的功能-您可以
在Play with Docker *
资源上进行相应的
实验室工作 -请参阅“安全性”部分。
*两年前,我们谈论了这个资源,2018年11月,发生了一个非常有趣的故事(从安全角度来看)。 简而言之,来自CyberArk Software Ltd.的专家 设法破解:实现在容器外部执行命令的能力,即 在主机系统上。 很好地说明了Docker中的安全问题,对吗? 阅读发生在这里的所有详细信息。译者的PS
另请参阅我们的博客: