热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

容器技术的安全挑战与解决方案

本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。

容器是IT领域最热门的软件理念。共享虚拟机通用部分这一概念——包括共享操作系统,管理工具,甚至应用程序,减少了任意镜像占用内存的这一主要因素,同时节省了网络带宽与许多副本上加载的基本相同的代码。

这些节省意义很大,初步估计容器支持降低三到五倍的实例数量,相比于某些情况下的传统的基于虚拟机管理程序的方法显得更加有效,例如在VDI市场的应用。值得注意的是,容器的创建和部署仅需要虚拟机的小部分时间和空间。

容器在经济性方面要比基于虚拟机管理程序的虚拟化好很多,然而容器是一项新技术,不成熟且还需要经过很多我们了解的虚拟化方式普及中曾经遇到过的问题。虽然许多公司都在不同层面利用容器进行工作,大多数人还是会承认有一些担心。

爆发的担忧

最关键的问题是多租户保护。虚拟机管理程序已经远远超过了十年,而且更重要的是,经历了许多CPU的产品周期。英特尔和AMD已经在虚拟机管理程序中添加相应功能,防止有关的内存交叉使用的行为。

这些功能的保护系统在本地没有存储驱动器,但本地用于加速应用程序实例的出现,意味着数据会被擦除,特别是SSD的数据,可能会在不同租户间被暴露。虚拟机管理程序供应商随机应变,现在将区块标记成未写入的状态。如果一个实例试图读取某一尚未写入的区块,虚拟机管理程序会发送全零指令并隐藏相关区块的所有数据。

没有这些保护功能,虚拟机管理程序将很不安全,任何人可以通过其他实例来获取数据的访问权。在某一服务器中的所有容器间,共享某一单独的操作系统镜像,能将硬件内存保护措施无效化,这就是并不成熟的容器技术在发展中所遇到的存储问题。

这两个问题可以通过在虚拟机中运行容器来缓解。这将保护在某一虚拟机中的容器无法被其他虚拟机通过交叉内存漏洞访问,同时虚拟机管理程序提供了所需的存储保护。包括Azure在内的所有主流云与虚拟机管理程序,现在都支持容器技术。

保护机制可能需要一定成本,尽管如此,因为在大量构建虚拟机规模之时需要优先创建容器。这两项技术运行在不同的时间尺度上,容器部署时间以毫秒计算,虚拟机部署则以秒计算。即使存在这些限制,基于虚拟机的容器是一种可行的方法,也是截至目前最常见的部署方法。业内已经在努力发展轻量级的虚拟机管理程序。例如,英特尔纯净容器技术(Intel Clear Containers)是一个以创建容器为目的的虚拟机管理程序。在其他方面,它使用核心的同页合并来安全地共享内存页之间的虚拟机,从而减少内存占用。VMware还支持容器,鉴于该公司在虚拟化方面的优势,对许多部门的运营方面的信心有重要作用。

用户访问控制

除了多租户问题,容器还存在特权升级的风险,某一应用程序获得根访问权限后,便可以获得主机的控制权。另一个问题是一个拒绝服务(Denial-Of-Service)攻击,或者即使是某个由bug造成的问题,所有的资源都能被某一单一容器控制。这些问题在容器环境中更容易出现。举例来说,Docker与主机系统的共享其命名空间,这种情况在基于虚拟化管理程序的环境中是永远不会出现的。

越权攻击可以通过启动时选择普通用户而非根用户的方式来缓解。在Docker中,这表示要在启动命令中加入代码-u。通过去掉SUID来启动这一修正。容器间独立的命名空间可以有效限制恶意软件控制服务器的存储空间。控件组可用于设置资源限制,并阻止拒绝服务攻击吸收服务器的资源。

中毒的镜像

是容器免受攻击的另一重保护,特别是在私有云,是使用受信任的公共库的镜像。今天,几乎所有的混搭使用代码都是用公共库的源代码来构建应用程序。这节省了巨大的开发时间和成本,因此对于IT预算紧张的应用场景,此种方式就显得很有实践意义。然而,大量的安全隐患也同时存在。即使是“高级”的库也可能会传播恶意软件,并且在最近的案例中发现,这样的代码已隐藏在流行的代码库有很多年。

来自受信任库的代码仍然容易受到病毒的侵入。对当今所使用的任何环境,镜像的控制都是关键问题,而不仅仅针对容器。使用支持镜像签名的可信任库,并当镜像加载到库中时,使用这些签名来验证,通过验证后再放行进入容器。这些服务是用来进行签名验证的,同时正确使用这些服务将保护你免受恶意软件的渗透。Docker Hub和Quay是两款可以信任的公共容器注册室。

另一个问题在容器上不是很明显,但在使用容器的传统微服务环境下比较严重,即用户所期望控制它们所运行的程序混搭。这使得存储库控制有点像溜猫。兼具源标识和签名检查的强制用户级验证对于稳定和安全的环境至关重要。在GitHub的Docker安全测试是一种能够检查许多已知安全问题的功能。为用户访问而建设自己的验证镜像库可能是这种方法的最终体现,但缺点在于,程序员很难保持一致并且缺乏灵活性,而库管理员能够几乎可以确定绕过这一验证机制。任何存储库都必须具有非常严格的安全机制,当从第三方存储库获取镜像时,确保其对用户端没有写入权限。要提高镜像库的管理水平,可考虑使用泊Docker的注册服务器或CoreOS Enterprise Registry。

验证和加密

对镜像中的应用程序和操作系统的版本控制是与漏洞有关的区域。同样,这不仅是容器特有的问题,但容器极其快速的变革和Docker对操作代码结构的取代趋势,并将他们替换成新版本是需要很强的制度约束。错位的版本通常提供会提供攻击的可能。

镜像扫描工具可用来自动化镜像并完成文件验证。Docker上有Nautilus工具,而CoreOS上则有Clair工具。如何进行静态或动态下的镜像加密问题仍然悬而未决。一般来说,漏洞文件的加密保护越多,我们要对抗勒索软件就越困难。对于镜像,加密应该起到阻止病毒或木马攻击镜像代码,并且再加上签名扫描和验证列表,便可远离勒索软件。在这方面,镜像相对于虚拟机管理程序有着明显的优势。与周围许多的镜像文件相比,服务器上的加密和解密负载要少得多。

容器守护进行时另一个漏洞点。它是管理容器的进程,并且如果被攻陷,便可以访问系统中的任何内容。限制访问是在保证守护进程安全的第一步。如果守护进程在网络上运行,那么加密传输是必要的,而使用小型化的Linux配置能够有效减少被攻击的可能。

有了上述的这些,我们便有了创建容器和建立其镜像的安全环境的基础。保护运行中的容器栈仍需继续努力。在监控区有个很不错的初期活动处理方法,它为控制动荡的实例混合提供了第一步的可能。CAdvisor是一款很好的容器监控开源工具,同时Docker提供数据命令。这些工具能够独立保证数据过载,因此它们的输出需要输入合适的分析软件包,像Splunk或Sumo Logic’s Docker 日志分析应用程序那样。通过建立正常操作的基线,任何由于恶意软件造成的异常访问的痕迹,都可以阻止并修复。

容器技术在短短几年里已经有了长足的发展。安全的环境确实需要很强的制度约束,但显而易见的是容器社区在相关领域,如镜像管理方面处于领先态势。

我们可以期待在未来1-2代的CPU中将出现对容器的硬件原生支持,就像CPU和当今的虚拟机管理程序配合那样。当其成为现实时,我们可以期待简化的裸金属容器部署的实现。未来还有许多挑战,如将软件定义的基础设施集成到容器的生态系统之中。容器在安全方面与虚拟机技术持平,同时在灵活性和部署速度方面更胜一筹。

本文转自d1net(转载)


推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
author-avatar
AT
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有