Docker安全作弊表

2021-03-13 23:17:49

Docker是最受欢迎的集装箱技术。正确使用后,它可以增加安全级别(与在主机上直接运行应用程序相比)。另一方面,一些错误配置可能导致降级安全水平甚至引入新的漏洞。

该备忘单的目的是提供一种易于使用的常见安全错误列表和良好的实践,可以帮助您保护您的Docker容器。

为防止已知已知,集装箱逃离漏洞,通常以root /管理员权限升级结束,修补码头引擎和Docker机器至关重要。

此外,容器(与虚拟机不同)与主机共享内核,因此在容器内执行的内核漏洞将直接命中主机内核。例如,内核权限升级exproit(如脏奶牛)在绝缘潜在的容器内执行的将导致主机中的根目录。

docker socket /var/run/docker.sock是Docker正在侦听的UNIX套接字。这是Docker API的主要入口点。此套接字的所有者是root。给某人访问它相当于为您的主机提供无限制的root访问权限。

请勿启用TCP Docker守护程序套接字。如果您正在使用-h tcp://0.0.0.0运行docker守护程序:xxx或类似于您揭示未加密和未验证的直接访问Docker守护程序。如果您真的,真的必须这样做,你应该安全它。请检查Docker官方文档后如何执行此操作。

不要将/var/run/docker.sock曝光到其他容器。如果您使用-v /var/run/docker.sock://var/run/docker.sock或类似,则应更改您的Docker映像。请记住,安装套接字只读不是一个解决方案,但只能使漏洞利用更难。 docker-compose文件中的等效文件是这样的:

配置容器以使用未经特权的用户是防止权限升级攻击的最佳方式。这可以以三种不同的方式完成如下:

来自Alpine Run Groupadd -R Myuser&& UserAdd -r -g myuser myuser<这里做你必须做的是安装包等root用户。>用户myuser.

亲切:...... apiersion:... Metadata:名称:...规格:...集装箱: - 名称:......图片:...... SecurityContext:... runasnonroot:true ...

Linux内核功能是一组可以通过特权使用的权限。默认情况下,Docker只运行了一个功能。您可以更改它并删除一些功能(使用--cap-drop)来硬化您的Docker容器,或者如果需要,添加一些功能(使用--CAP-Add)。请记住不要使用--privileged标志运行容器 - 这将为容器添加所有Linux内核功能。

最安全的设置是删除所有功能 - 删除所有功能,然后只添加所需的功能。例如:

类:...... apiersion:... metadata:名称:...规格:...集装箱: - 名称:......图片:.... SecurityContext:...能力:Drop: - 所有添加: - chown ...

始终使用-security-opt = no-new-privileges运行您的Docker映像,以防止使用SetUID或SetGID二进制文件升级权限。

亲切:...... apiersion:...元数据:名称:...规格:...集装箱: - 名称:......图片:...... SecurityContext:... allowprivileGeeStemation:false ...

作为kubernetes群集管理员,您可以参考Kubernetes文档来使用Pod安全策略配置它。

默认情况下,容器间通信(ICC)已启用 - 这意味着所有容器都可以相互交谈(使用Docker0桥接网络)。可以通过使用-iCc = false flag运行docker守护程序来禁用该问题。如果禁用ICC( ICC = FALSE)需要告诉哪些容器可以使用--link = container_name_or_id:别名选项。将更多内容更多地在Docker文档中 - 容器通信

说明如何在安全上下文文档和Kubernetes API文档中找到Kubernetes内部的这一点

避免DOS攻击的最佳方法是通过限制资源。您可以限制内存,CPU,重启最大重启(--restart = On-Faility:< number_of_restarts>),最大文件描述符数( - -ulimit nofile =< number>)和最大进程数( - ulimit nproc =< number>)。

如果容器中的应用程序必须暂时保存一些内容,则组合 - 仅用于-TMPFS的标志:

亲切:...... apiersion:...元数据:名称:...规格:...集装箱: - 名称:......图片:.... SecurityContext:... readonlyrootfilesystem:true ...

此外,如果卷仅安装用于读取它们,则可以通过将其附加到读取的读数:RO到-V如此: 默认情况下,Docker守护程序被配置为具有&#39的基本日志记录级别;信息',如果不是这种情况:将Docker守护程序日志级别设置为'信息' 理由:设置适当的日志级别,将Docker守护程序配置为要稍后要查看的日志事件。 基本日志级别的'信息' 以上将捕获除调试日志之外的所有日志。 直到需要,除非需要,您不应该在&#39运行Docker守护程序;调试' 日志级别。 在编写Dockerfile时,可以通过以下一些最佳实践来防止许多问题。 在构建管道中添加安全LINTER可以在避免进一步的头痛方面进行一步。 一些值得检查的问题是: