![587a32fc249bbe2414bd1803bd1b56ed.png](https://i-blog.csdnimg.cn/blog_migrate/9837f72c78271343ff13322c25965f23.jpeg)
容器的出现使开发团队可以创建沙盒环境,以在其中运行和测试应用程序,容器主要由从 docker hub 或其他公共镜像存储库提取的开源镜像组成。
但是这些开源镜像有时可能包含一些漏洞,这些漏洞可能会危害容器的安全,进而危害其主机/服务器。
由于这些容器在主机上运行,因此如果容器不受保护,就可以劫持生产中的容器。
此类攻击的一个很好的例子是特斯拉对未受保护的 Kubernetes 集群的加密劫持攻击。在此攻击中,攻击者能够使用特斯拉的 K8s(Kubernetes)集群提供的 GPU 下载并运行恶意脚本来挖掘加密货币。通过将 CPU 使用率保持在最低水平,并且还可以在特定的时间间隔运行脚本,导致监控很难发现这个问题。
下面我们将研究常见的容器漏洞以及修复它们的可能方法。
容器漏洞
加密劫持
加密劫持是一种攻击,其中恶意脚本被用来窃取设备的计算资源以挖掘加密货币。
最近,在 Docker 上发现了 CVE-2018-15664 的漏洞。 此漏洞使攻击者有可能获得对主机计算机的 root 访问权限。
攻击者除了能够使用主机计算机的 CPU 和 GPU 资源来挖掘加密货币之外,还可以窃取敏感凭据,进行 DoS 攻击,发起网络钓鱼活动等等。
如果容器包含恶意镜像,这些容器会给攻击者提供对整个容器的根访问权限,则它们可能容易受到密码劫持的攻击。 如果 Docker API 暴露在公网上,例如 Tesla,它们很容易受到攻击。
恶意开源镜像
该漏洞可以覆盖主机的 runc 二进制文件,从而使攻击者可以通过 root 用户访问权限来执行命令。 v18.09.2 之前的Docker 引擎使带有攻击者控制镜像的容器容易受到 CVE-2019-5736 漏洞的影响。
建议工程师尽可能利用 docker 提供的官方 Docker 镜像。 毕竟,甚至还有一个由 Docker 赞助的团队,该团队与软件维护者/发布者和安全专家紧密合作,以确保官方 Docker 镜像的安全性。
静态 Dockerfile
容器的镜像是不可变的。 这意味着在构建镜像时,其内容不可更改。 由于镜像中包含的过时程序包/库/镜像也会导致漏洞
因此,将漏洞扫描程序合并到 CI/CD 流程中是一个好主意,以便识别易受攻击的容器镜像。 由于镜像是不可变的,因此建议经常更新程序包、库、镜像
如何查找容器漏洞
前面我们说了利用漏洞如何攻击容器的可能方式。
下面研究下如何找出容器中可能包含的漏洞
使用 Docker Bench for Security
Docker Bench for Security 是一个脚本,用于测试主机/服务器上的所有 Docker 容器,检查关于在生产环境中部署Docker 容器的几十个常见最佳实践,这些测试基于 CIS docker 基准。
如何运行
docker run -it --net host --pid host --userns host --cap-add audit_control -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST -v /etc:/etc:ro -v /usr/bin/docker-containerd:/usr/bin/docker-containerd:ro -v /usr/bin/docker-runc:/usr/bin/docker-runc:ro -v /usr/lib/systemd:/usr/lib/systemd:ro -v /var/lib:/var/lib:ro -v /var/run/docker.sock:/var/run/docker.sock:ro --label docker_bench_security docker/docker-bench-security
![641b62f531810e0810cb2f4f46ed3291.png](https://i-blog.csdnimg.cn/blog_migrate/5384fed6ba4651af2341e391044b7da5.jpeg)
该脚本运行各种测试,并为每个测试提供 INFO , NOTE , PASS 或 WARN 结果。