发布网友 发布时间:2022-04-30 07:19
共4个回答
热心网友 时间:2022-04-09 10:53
以Docker 容器的安全问题为例
(1) Docker 自身安全
Docker 作为一款容器引擎,本身也会存在一些安全漏洞,CVE 目前已经记录了多项与 Docker 相关的安全漏洞,主要有权限提升、信息泄露等几类安全问题。
(2) 镜像安全
由于Docker 容器是基于镜像创建并启动,因此镜像的安全直接影响到容器的安全。具体影响镜像安全的总结如下。
镜像软件存在安全漏洞:由于容器需要安装基础的软件包,如果软件包存在漏洞,则可能会被不法分子利用并且侵入容器,影响其他容器或主机安全。
仓库漏洞:无论是Docker 官方的镜像仓库还是我们私有的镜像仓库,都有可能被攻击,然后篡改镜像,当我们使用镜像时,就可能成为攻击者的目标对象。
用户程序漏洞:用户自己构建的软件包可能存在漏洞或者被植入恶意脚本,这样会导致运行时提权影响其他容器或主机安全。
(3) Linux 内核隔离性不够
尽管目前Namespace 已经提供了非常多的资源隔离类型,但是仍有部分关键内容没有被完全隔离,其中包括一些系统的关键性目录(如 /sys、/proc 等),这些关键性的目录可能会泄露主机上一些关键性的信息,让攻击者利用这些信息对整个主机甚至云计算中心发起攻击。
而且仅仅依靠Namespace 的隔离是远远不够的,因为一旦内核的 Namespace 被突破,使用者就有可能直接提权获取到主机的超级权限,从而影响主机安全。
(4) 所有容器共享主机内核
由于同一宿主机上所有容器共享主机内核,所以攻击者可以利用一些特殊手段导致内核崩溃,进而导致主机宕机影响主机上其他服务。
既然容器有这么多安全上的问题,那么我们应该如何做才能够既享受到容器的便利性同时也可以保障容器安全呢?下面我带你来逐步了解下如何解决容器的安全问题。
如何解决容器的安全问题?
(1) Docker 自身安全性改进
事实上,Docker 从 2013 年诞生到现在,在安全性上面已经做了非常多的努力。目前 Docker 在默认配置和默认行为下是足够安全的。
Docker 自身是基于 Linux 的多种 Namespace 实现的,其中有一个很重要的 Namespace 叫作 User Namespace,User Namespace 主要是用来做容器内用户和主机的用户隔离的。在过去容器里的 root 用户就是主机上的 root 用户,如果容器受到攻击,或者容器本身含有恶意程序,在容器内就可以直接获取到主机 root 权限。Docker 从 1.10 版本开始,使用 User Namespace 做用户隔离,实现了容器中的 root 用户映射到主机上的非 root 用户,从而大大减轻了容器被突破的风险。
因此,我们尽可能地使用Docker 最新版本就可以得到更好的安全保障。
(2) 保障镜像安全
为保障镜像安全,我们可以在私有镜像仓库安装镜像安全扫描组件,对上传的镜像进行检查,通过与CVE 数据库对比,一旦发现有漏洞的镜像及时通知用户或阻止非安全镜像继续构建和分发。同时为了确保我们使用的镜像足够安全,在拉取镜像时,要确保只从受信任的镜像仓库拉取,并且与镜像仓库通信一定要使用 HTTPS 协议。
(3) 加强内核安全和管理
由于仅仅依赖内核的隔离可能会引发安全问题,因此我们对于内核的安全应该更加重视。可以从以下几个方面进行加强。
宿主机及时升级内核漏洞
宿主机内核应该尽量安装最新补丁,因为更新的内核补丁往往有着更好的安全性和稳定性。
使用Capabilities 划分权限
Capabilities 是 Linux 内核的概念,Linux 将系统权限分为了多个 Capabilities,它们都可以单独地开启或关闭,Capabilities 实现了系统更细粒度的访问控制。
容器和虚拟机在权限控制上还是有一些区别的,在虚拟机内我们可以赋予用户所有的权限,例如设置cron 定时任务、操作内核模块、配置网络等权限。而容器则需要针对每一项 Capabilities 更细粒度的去控制权限,例如:
cron 定时任务可以在容器内运行,设置定时任务的权限也仅限于容器内部;
由于容器是共享主机内核的,因此在容器内部一般不允许直接操作主机内核;
容器的网络管理在容器外部,这就意味着一般情况下,我们在容器内部是不需要执行ifconfig、route等命令的 。
由于容器可以按照需求逐项添加Capabilities 权限,因此在大多数情况下,容器并不需要主机的 root 权限,Docker 默认情况下也是不开启额外特权的。
最后,在执行docker run命令启动容器时,如非特殊可控情况,–privileged 参数不允许设置为 true,其他特殊权限可以使用 --cap-add 参数,根据使用场景适当添加相应的权限。
使用安全加固组件
Linux 的 SELinux、AppArmor、GRSecurity 组件都是 Docker 官方推荐的安全加固组件。下面我对这三个组件做简单介绍。
SELinux (Secure Enhanced Linux): 是 Linux 的一个内核安全模块,提供了安全访问的策略机制,通过设置 SELinux 策略可以实现某些进程允许访问某些文件。
AppArmor: 类似于 SELinux,也是一个 Linux 的内核安全模块,普通的访问控制仅能控制到用户的访问权限,而 AppArmor 可以控制到用户程序的访问权限。
GRSecurity: 是一个对内核的安全扩展,可通过智能访问控制,提供内存破坏防御,文件系统增强等多种防御形式。
这三个组件可以*一个容器对主机的内核或其他资源的访问控制。目前,容器报告的一些安全漏洞中,很多都是通过对内核进行加强访问和隔离来实现的。
资源*
在生产环境中,建议每个容器都添加相应的资源*。下面给出一些执行docker run命令启动容器时可以传递的资源*参数:
1 --cpus * CPU 配额
2 -m, --memory *内存配额
3 --pids-limit *容器的 PID 个数
例如我想要启动一个1 核 2G 的容器,并且*在容器内最多只能创建 1000 个 PID,启动命令如下:
1 $ docker run -it --cpus=1 -m=2048m --pids-limit=1000 busybox sh
推荐在生产环境中*CPU、内存、PID 等资源,这样即便应用程序有漏洞,也不会导致主机的资源完全耗尽,最大限度降低安全风险。
(4) 使用安全容器
容器有着轻便快速启动的优点,虚拟机有着安全隔离的优点,有没有一种技术可以兼顾两者的优点,做到既轻量又安全呢?
答案是有,那就是安全容器。安全容器是相较于普通容器的,安全容器与普通容器的主要区别在于,安全容器中的每个容器都运行在一个单独的微型虚拟机中,拥有独立的操作系统和内核,并且有虚拟化层的安全隔离。
安全容器目前推荐的技术方案是Kata Containers,Kata Container 并不包含一个完整的操作系统,只有一个精简版的 Guest Kernel 运行着容器本身的应用,并且通过减少不必要的内存,尽量共享可以共享的内存来进一步减少内存的开销。另外,Kata Container 实现了 OCI 规范,可以直接使用 Docker 的镜像启动 Kata 容器,具有开销更小、秒级启动、安全隔离等许多优点。
热心网友 时间:2022-04-09 12:11
网络安全威胁
相比传统的云平台,容器云平台在网络方面一般会有比较大的差异,伴随着这些差异的引入,也引入了一些网络方面的安全问题。比如因为网络隔离模型的变化、资源共享方式的变化而出现的新的安全隐患,针对这两点变化我们分别看下他们带来的安全问题。
1. 网络模型
容器云平台中网络隔离大多使用逻辑隔离代替物理隔离。
物理隔离一般不会直接或者间接的连接公共网络,企业采用物理隔离网络一般是为了保护自己的各种各样的硬件设备和通信链路不被攻击,常见的攻击来自自然灾害、人为破坏等,被保护的硬件实体设备常见的有企业的路由器、工作站和其他的各种网络服务器等。从实际情况来看,一般只有使用了内网和公共网进行的物理隔离才能真正保证内部信息网络不被来自外界的攻击影响,比如来自黑客的攻击。
网络的逻辑隔离一般需要借助逻辑隔离设备来实现,从名称即可看出逻辑隔离器是不同网络间的一种中间件,用于连接不同的网络,常见的网络逻辑设备主要有防火墙、网关等。需要注意的是被隔离的网络之间仍然有物理的数据链路进行联通,被联通的两个网络之间不能直接的进行数据交换。
相比逻辑隔离物理隔离的安全性更高,企业网络多采用物理隔离代替逻辑隔离,以此来保证不同级别的组织或者部门的信息安全。容器云平台网络上采用逻辑隔离,来隔离不同的租户或者项目,一定程度上增加了云平台在网络方面的安全隐患。
2. 资源共享
容器云在网络方面的安全问题,除了上面我们讲到的网络逻辑隔离引入的问题,还有资源共享方面的问题。和传统的云平台一样,容器云平台一般也会有多租户的需求(公有云肯定会有多租户的存在,即使是私有云一般也会有多租户的需求,比如不同的子公司、同公司不同的部门一般都会有多个租户的需求)。
相比传统的云平台,容器云的多租户资源共享引入了更多的风险,在容器云中多个租户共享计算资源,很可能会因为隔离措施不当导致不同租户的逻辑网络被意外打通(国内某知名云厂商曾经发生过类似的问题),导致用户的资源被其他的用户意外的访问到,这种情况下用户可能会被其他的用户恶意攻击,导致数据泄露等严重的问题。容器云平台中通常借助网络防火墙/IPS来进行虚拟化,这种方式也是很常用的方式但是进入云平台之后,尤其是在用户众多的公有云场景中,网络防火墙这种虚拟化方式就不会暴露出虚拟化能力不足的问题,这个问题会导致已经建立的静态网络分区与隔离模型不能满足容器云中动态资源的共享需求。
主机安全威胁
容器云平台目前基本以Docker 容器和kubernetes 容器编排(kubernetes为主流,当然也有支持多种编排工具的厂商)。了解Docker 的同学应该都知道Docker 容器是通过命名空间(namespace)的方式将文件系统、进程、各种设备、网络等资源进行了隔离。除了对资源的隔离,Docker容器还对容器具有的权限进行了*,对CPU、内存等资源的使用也进行了相应的*。对Docker 容器资源的*、隔离的目的是为了让容器之间互不影响。
容器与容器所在的宿主机共享内核、文件系统、各种硬件等资源。容器可以部署在物理机上,也可以选择部署在虚拟主机上。
由于Docker 容器与宿主机共享内核、文件系统等资源,Docker 本身的隔离性不如虚拟机主机完善,因此如果Docker 自身出现漏洞,可能会波及问题Docker 容器所在的宿主机,由于Docker 容器所在的宿主机上可能存在当前租户的其他容器,也可能存在其他租户的容器,所以问题最终可能会影响到其他的容器,并可能会破坏容器云平台上的宿主机。
热心网友 时间:2022-04-09 13:46
容器安全需要综合使用工具、策略和流程来遏制安全威胁,常见的容器安全威胁有“构建环境安全”、“运行时安全”、“操作系统安全”以及“编排管理安全”,青藤云安全在容器安全领域有较好口碑和较专业技术能力,值得推荐。热心网友 时间:2022-04-09 15:37
容器安全需要综合使用工具、策略和流程来遏制安全威胁,常见的容器安全威胁有“构建环境安全”