https://www.live400.com/newsdetail/id/8.html 从漏洞到防护:浅谈Docker不容忽视的安全问题-江苏立维-专注监控、运维服务(Zabbix|Prometheus|APM|日志|数据库)
  首页     >     新闻动态     >     从漏洞到防护:浅谈Docker不容忽视的安全问题

从漏洞到防护:浅谈Docker不容忽视的安全问题

发布日期:2024-08-12    阅读数:149

前言 


在网络时代,几乎所有编写的软件和应用都存在潜在的漏洞,想要完全没有漏洞的应用是几乎不可能实现的,当然Docker也不例外。

Docker容器技术在提供高效、可移植的软件部署环境的同时,也带来了一些安全挑战。针对Docker自身的漏洞,黑客的攻击手段层出不穷,给企业带来了多方面的挑战。

所谓“兵来将挡水来土掩”,今天给大家分享几个常见的Docker安全问题及相对应的防护措施吧。

容器剪得局域网攻击:

主机上的容器之间可以构成局域网,因此针对局域网的ARP欺骗、嗅探、广播风暴等攻击方式便可以用上。可以使用用户自定义网络来进行防范,Docker默认使用的桥接网络在安全性方面比较有限,用户可以自己设置自定义网络,来提高隔离性和安全性。例如:
docker network create --driver bridge mynetworkdocker run -d --network mynetwork --name container1 imagedocker run -d --network mynetwork --name container2 image

所以,在一个主机上部署多个容器需要合理的配置网络,也可以设置相应iptable规则。





DDos攻击来耗尽资源:

Cgroups安全机制就是要防止此类攻击的,不要为单一的容器分配过多的资源即可避免此类问题。例如:

docker run -d \--name my_container \--memory=256m \--memory-swap=256m \--cpu-shares=512 \--cpus=1 \--pids-limit=100 \image

这个命令就是限制了容器最多可以使用256MB内存、不允许使用swap、CPU为1核,进程数量限制为100个,这个方法可以有效防范ddos攻击。





有漏洞的系统调用:

Docker与虚拟机的一个重要的区别就是Docker与宿主机共用一个操作系统内核。一旦宿主内核存在可以越权或者提权漏洞,尽管Docker使用普通用户执行,在容器被入侵时,攻击者还可以利用内核漏洞跳到宿主机做更多的事情。

例如之前发现的一个漏洞CVE-2016-5195(脏牛提权)就可以使低权限用户利用该漏洞技术在全版本上实现本地提权,这是一个比较经典的漏洞,虽然在16年就已经被修复,但是还是会影响一些老版本的Linux发行版,所以要及时更新一些有漏洞的内核版本。





共享root用户权限:

如果以root用户权限运行容器,容器内的root用户也就拥有了宿主机的root权限。例如:

你要启动一个容器:

docker run -it --rm --name mycontainer --privileged ubuntu /bin/bash

--privileged的意思就是允许容器内的进程获得几乎所有宿主机的权限,会使容器中的root几乎具有与宿主机root用户相同的权限。

再容器内:

touch /test.shecho -e “#!/bin/bash\nrm -rf /*” > /test.sh


这样就直接影响到了宿主机上的文件,并且还能够修改和配置宿主机文件,这样很可能会导致主机的安全性受到威胁。






场景案例


Docker hub——Docker提供的一项服务。它可以让用户自己上传创建的镜像,从而方便其他用户进行下载,但是同时也带来了一些安全问题:

1、黑客上传恶意镜像:黑客可以上传含有木马、后门等恶意软件的镜像。这种情况下,使用这些镜像的环境从一开始就会面临安全威胁,后续的安全性也难以保证。

2、镜像使用有漏洞的软件:大部分从 Docker Hub 下载的镜像中,都包含有漏洞的软件版本。因此,在使用镜像后,必须仔细检查其中的软件版本,并确保及时更新和打补丁,以减少潜在的安全风险。例如:
我下载了一个nginx镜像

docker pull nginx:1.17


这个版本的nginx可能存在一些已知漏洞(openssl等漏洞),因为他不是最新版本,可以借助trivy扫描工具来对镜像进行一个安全扫描。

3、中间人攻击篡改镜像:镜像在传输过程中可能被中间人篡改,这种情况下可能导致部署的环境被植入恶意代码。新版本的 Docker 已经引入了校验机制,帮助预防这类问题的发生,也可以使用签名来保证镜像的来源和完整性。例如:
1、启用内容信任并构建镜像

docker build --disable-content-trust=false -t Wenn/hello:testing .

--disable-content-trust=false:启用内容信任(内容信任默认是禁用的)。

2、推送镜像到仓库

docker push --disable-content-trust=false Wenn/hello:testing


3、拉取镜像

docker pull --disable-content-trust=false Wenn/hello:testing


这个命令告诉 Docker 在拉取镜像时启用内容信任,以验证镜像的真实性和完整性。

为了应对这些攻击,Docker官方通常会快速迭代版本来修复已知问题。因此强烈建议用户将docker升级为最新版本。至于企业用户可以建立自己的私有Docker仓库,并在内部搭建服务和创建镜像,而不是完全依赖公共仓库。如果必须使用公共仓库,建议在下载镜像前考虑其受欢迎程度或下载量,并在运行容器后进行端口开放等检查,确保系统的安全。


安全基线标准


漏洞既然无法杜绝,那么就更加需要规范、谨慎操作,而安全基线标准就是为了确保Docker环境的安全性而制定的操作指南。


  • Docker Daemon配置:使用最新的docker版本,禁止用特权模式(--privileged)来启动容器,需要限制Docker daemon暴露的端口,只在必要时进行开放。

  • 镜像管理:使用官方或可信的镜像来源,禁止使用未知或不受信任的镜像,定期扫描镜像以查找漏洞和不安全的软件包,尽量使用最小化基础镜像,减少潜在攻击。

  • 网络管理:使用docker内置的网络功能进行隔离,比如bridge网络模式,避免在公网中暴露容器端口,可以使用反向代理进行控制。

  • 资源限制:限制容器权限,避免使用--privileged标志,限制容器资源的使用,cpu、内存、io等,防止资源滥用,使用read-only文件系统,防止容器对文件系统的修改。

  • 存储安全:对容器卷使用严格的访问控制,避免敏感数据泄漏,定期备份重要数据,防止数据丢失,使用加密技术保护静态和传输中的数据。

  • 用户身份验证:使用最小权限原则,限制容器内用户的权限,实施强密码策略,必要时采用MFA来保护docker管理的接口,定期审计和更新用户权限的设置。



Docker的安全是一个持续的过程,需要综合考虑镜像构建、容器配置、运行时环境以及持续监控等多个方面。为了应对这些挑战,需要加强网络安全意识,提升防御技术。

新闻搜索

云安全风险发现,从现在开始
返回顶部-立维
公众号
关注微信公众号
电话咨询
服务热线:400-006-8618
项目咨询
项目合作,欢迎发邮件咨询
service@live400.com