虚拟机VS容器 安全比拼谁更胜一筹互联网
我们经常说,“HTTPS很安全”或者“HTTP不安全”,但其实我们的意思是“HTTPS很难被窥探,中间人攻击很难执行”。
然而,HTTPS已经被黑客入侵,在某些情况下,HTTP足够安全。此外,如果我们在支持HTTPS的常见部署中发现可利用的漏洞,HTTPS可成为黑客网关,直到漏洞被修复。
HTTP和HTTPS是在IETF RFCs 7230-7237和2828中定义的协议。HTTPS被设计为安全的HTTP,但HTTPS安全HTTP不安全的说法隐藏着重要的例外情况。
虚拟机(VM)和容器没有严格的定义,也没有故意设计成对方更安全。
为什么我认为VM比容器更安全
在战争和软件中,分治法是胜利策略。当架构将单一复杂的难以解决的安全问题分解成更容易的问题时,在大多数情况下,结果会比解决所有问题的单一解决方案更加好。
容器是分治法应用于应用程序的示例。通过将每个应用程序锁定在自身,一个应用程序的漏洞将不会影响其他容器中的应用程序。虚拟机也是采用分治法,但它们在隔离方面走的更远。
在隔离应用程序中的漏洞不会直接影响其他应用程序,但隔离的应用程序可能会破坏与其他容器共享的单个操作系统,并影响所有容器。当使用共享操作系统时,应用程序、容器和操作系统部署堆栈中任何点的缺陷都会使整个堆栈的安全性失效,并危及物理机器。
虚拟化这样的分层架构可分离每个应用程序的执行堆栈,一直到硬件,这可消除应用程序相互干扰的可能性。此外,每个应用程序堆栈之间的接口被定义和限制,以防止被滥用。这可保护应用程序免受其他应用的影响。
虚拟机将控制用户活动的操作系统与控制访客操作系统及硬件之间交互的虚拟管理程序分隔。VM访客操作系统控制用户活动,但不会控制硬件交互。应用程序或访客操作系统中的漏洞不可能会影响物理硬件或者其他虚拟机。当虚拟机访客操作系统和支持容器的操作系统相同时(通常都是这种情况),相同的漏洞将会影响运行该操作系统的所有其他容器,但不会危及其他虚拟机。因此,虚拟机水平将应用程序分离,并垂直分离操作系统与硬件。
VM开销
VM的额外安全性是需要成本的。在计算系统中,控制转移总是很昂贵,无论是在处理器周期还是其他资源中。执行堆栈存储和重置,外部操作可能需要暂停或者被允许完成等。
访客操作系统和虚拟管理程序之间的转换费用很高,并且需要经常发生。即使是特殊控制指令植入到处理器芯片中,控制转移开销会降低VM的整体效率。这种降低是否很显著?这很难说。通过管理控制转移,应用程序可调整为降低开销,并且,大多数服务器处理器现在被设计为简化控制转移。换句话说,这种降低程度取决于应用程序和服务器,但开销永远不能完全消除,只会减轻。
虚拟管理程序漏洞
让问题进一步复杂化,在VM架构中分隔层会带来另一个问题:虚拟管理程序漏洞。虚拟管理程序漏洞是单点故障,可能带来潜在巨大后果,特别是在公共云中。可想而知,单个黑客可在虚拟机中启动代码,控制其他公共云消费者拥有的应用程序,从而入侵整个公共云。
任何坚固的架构都可能存在缺陷,虚拟管理程序也不例外。
虽然目前并没有任何重大虚拟管理程序攻击事故,但从常见漏洞和披露(CVE)数据库来看,研究人员确实发现一些虚拟管理程序缺陷。管理程序开发人员和供应商已经很快修复漏洞,在2017年3月,微软发布安全公告MS17-008,其中涉及Hyper-V管理程序中7个已修复的漏洞,都被标记为严重。
笔者仍然认为VM比容器提供更好的安全性,但我们必须认真看待虚拟机的安全性。