文章目录
前言:Docker 容器与虚拟机的区别
①隔离性(共享)
- 虚拟机通过添加 Hypervisor 层,即虚拟化监控平台,通过这个层面虚拟出网卡、内存、CPU 等虚拟硬件,这些虚拟硬件是靠一个个线程来管理的
- 再在其上建立虚拟机,每个虚拟机都相当于一个进程,有自己的系统内核,是一个独立的系统,从系统的层面上进行隔离 ,遇到问题也不会影响到其他的虚拟机乃至宿主机,安全性有很好的保障
- 而 Docker 容器则是通过隔离的方式,将文件系统、进程、设备、网络等资源进行隔离,再对权限、CPU 资源等进行控制,最终让容器之间互不影响(Cgrep:CPU、内存、IO)
- 容器与宿主机共享内核、文件系统、硬件等资源,可能会因此造成安全隐患,导致容器影响到宿主机
②性能(损耗)
- 与虚拟机相比,容器资源损耗要少,在同样的宿主机下,能够建立容器的数量要比虚拟机多
- 但是,虚拟机的安全性要比容器好,要从虚拟机攻破到宿主机或其他虚拟机,需要先攻破 Hypervisor 层,这是极其困难的
- 而且,docker 容器与宿主机共享内核、文件系统等资源,相互之间可能对其他容器、宿主机产生一定的影响
一、细谈 Dcoker 存在的安全问题
1.自身漏洞方面
- 作为一款开源应用,Docker 本身在实现上会有一些代码缺陷,官方统计 Docker 在历史版本中,到目前为止有超过 20 项漏洞
- 黑客能够利用这些漏洞,通过这些入口以来实现权限的提升、盗取信息等,这给 Docker 自身带了安全隐患,也因此 Docker 版本更迭非常快,Docker 用户最好将 Docker 升级为 最新版本
2.源码问题方面
①黑客上传恶意镜像
-
Docker 提供了 Docker hub 官方公有仓库,可以让用户上传创建的镜像,以便用户的下载,快速搭建环境,但同时也带来了一些安全问题
-
如果有黑客在制作的镜像中植入木马、后门等恶意软件,一旦别的用户下载了这个镜像并加载成了容器,那么环境从一开始就不安全,可能会留出一个后门并暴露出一个端口
-
后续更没有什么安全可言,这样会方便黑客直接从后门进入干坏事,不过也没有这么容易,用户上传的镜像会首先放在官方的一个非安全区域,该平台会将其运行测试,确认无误后才会放至安全区域以供广大用户下载使用
②镜像使用有漏洞的软件
- 假设这样一个场景,你下载了一个镜像,但是里面 nginx 的版本较旧,而老版本意味着存在安全性漏洞,一般人只会觉得能运行起来就没问题了,但是你有没有想过为什么我们之前部署 nginx 时为什么要隐藏版本号?
- 所以下载镜像后,需要检查里面软件的版本信息,对应的版本是否存在漏洞,并及时更新打上补丁
③中间人攻击(篡改)
- 镜像在传输过程中可能被拦截(篡改),比如 ARP 欺骗攻击
- 目前新版本的 Docker 已经提供了相应的校验机制来预防这个问题(Hash 算法验证)
二、细谈 Docker 的架构缺陷与安全机制
Docker 本身的架构与机制就可能产生问题,例如这样一种攻击场景,黑客已经控制了宿主机上的一些容器&