2018年3月21-22日,由中国信息通信研究院主办、中国通信标准化协会支持的"OSCAR云计算开源产业大会"在国家会议中心举行。
随着云计算技术的日益发展,并开始进入“深水区”,开源技术与云计算融合的程度进一步加深,并开始成为产业发展的重要支撑。"OSCAR云计算开源产业大会"将邀请行业内多位大咖与权重人物共同探讨、交流云计算开源技术、研发、治理、产业化方面的经验,探索开源与云计算的创新发展新路径。
四川大学网络空间安全学院常务副院长、教授陈兴蜀《云技术安全能力及运行监管》演讲全文:
各位领导专家下午好,很高兴受邀来做这么一个报告。我就我们团队在这几年特别是在云计算安全能力还有运营监管方面做的一些事跟各位领导专家汇报一下,正好刚刚付处也提到了关于云计算的安全标准,以及在整个云计算环境下,像云服务商、第三方,包括我们云的客户相互之间是个什么关系,我会在后面的报告里面提到一些相关的研究。
我想介绍的内容是从三个方面,首先是云计算安全的一些研究工作。我这部分想针对现在比较系统的基于可信计算的虚拟机全生命周期安全方面给大家做一个介绍。第二部分介绍一下云计算服务安全能力的评估方法和工具,因为现在云计算服务商会通过不同的技术来提高自身的安全,但是这些安全能力如何?我们在过去几年里,现在国家层面像中央网信办做的云计算服务安全审查等等,在很大程度上我们还是用的通过访谈和相关文档进行审阅的方式去做安全能力审查的。所以,我们这里会提到通过一些工具的方式去完成。第三方面,我会介绍一下云服务运行监管方面我们做的标准和技术。
首先,为什么要做基于虚拟机全生命周期的安全防护?云计算是特别复杂的,在这上面会集成大量的安全技术服务,现在是软件定义一切,我们都可以把安全产品服务用软件的方式集成在云计算平台上。也就是说往往是用一个软件保护其他的软件,现在的问题就是说我们的安全软件谁来保护,在云计算平台上非常复杂,在这样的情况下到底安全的根子在哪?所以我们引入了可信计算。
这里我们提出了一个基于可信计算的全生命周期安全框架。为什么要提这件事情?在IaaS平台上,作为租户租用的虚拟机,它可能面临来自于互联网上的攻击,因为对于用户来讲,它也就是一台服务器而已。同时,作为云计算平台来讲,我们云计算平台上也可能会有恶意的操作人员,也有可能会有攻击者基于他的虚机对云计算平台进行渗透。所以在这种情况下,我们提出了一个如何来保护虚拟机全生命周期的安全,在单机环境下的运行现在已经很成熟了,我们的笔记本电脑和服务器上都带有可信芯片了,云计算情况下如何利用可信计算进行防护,开源社区方面已经有很多这方面的工作了,但是这里面一个是有bug,还有就是整套解决方案并不完整。
我们要建立一个从物理的可信计算平台开始,建立从物理主机到虚拟机的可信链,建立一个可信虚拟机。基于TPM建立vTPM,VTPM为每一个虚拟机提供了可信基,建立基于TPM到虚拟机再到虚拟机中的应用的可信传递,建立从基于TPM开始一直到虚机整个创建、启动、运行、迁移、删除等全生命周期的安全。
这里有一个概念,什么叫可信虚机?这是我们自己定义的,所谓可信虚机是指虚拟机自身及其所运行的运行环境都得到了基于可信计算技术的一个安全保护的虚拟机。这里面就提到了一个是可信虚拟机的可信性,它是来自于硬件的即TPM,另外,可信状态在云计算平台上也可以得到有效的跟踪和管理,也就是说我们要保证每一个虚拟机所使用的VTPM也是安全的。
可信虚拟机到底解决了哪些问题?因为我们一台服务器上面有一个可信的TPM,但是一台服务器往往会运行若干虚拟机。这时候就要实现一个TPM为多个虚拟机提供可信服务的关键技术,这部分实际上就是把可信端进行虚拟化。第二就是如何为可信虚拟机提供硬件的可信支持?因为我们知道虚拟机下面还有数据级操作系统,再往上才是我们的虚拟机,这里面就需要建立一个从硬件的可信根到虚拟机的可信根这样一个可信链的创建。另外,就是如何解决可信虚拟机的可信性的问题,因为我们如果只是说虚拟机从创建的时候它是可信的,这时候我们认为并没有实现它的全程保护,所以我们提出了一个可信虚拟机全生命周期的安全防护。
如何在云环境下有效运行可信虚拟机?这是什么概念呢?我们知道TPM在单台机器上应用OK的,但是当我们的云计算环境下采用它的时候,就意味着我们有很多的可信根,当你大规模部署时,如何有效的管理这些可信根就是一个问题了。所以在云环境下,我们需要对可信虚拟机的状态实施有效的实时监测和管理。围绕这些问题,我们是整套的解决方案就完成了。
这个就是基于可信计算的虚拟机全生命周期的安全框架,包括了从可信虚拟机的创建到它的存储,这里面的存储还涉及到一个迁移的问题,所以这里也有静态迁移解决方案和动态迁移解决方案。包括虚拟机的启动、快照、运行状态一直到退出直至销毁,我们都需要对其进行全程管理。而我们的云计算平台上专门建立了可信虚拟机的管理周期,一个是管理全生命周期,另外一个是对虚拟机的状态进行有效监测。
而这里会有一些关键的内容,主要是分两个方面,首先是针对可信虚拟机生命周期的保护,围绕虚拟机的创建、启动、运行、关闭、销毁、迁移的全生命周期建立安全机制,从而保障各个阶段都处于可信的状态。
另外就是在云计算平台上如何实现对虚拟机的全程状态监控,这里面就需要研究如何和云平台结合,因为我们如果不跟云平台结合,这就是一套独立的管理体系,管理就会非常复杂。这里就会要解决云计算平台上物理可信根和虚拟可信根的信息的相关搜集和验证机制,实时掌控我们的物理节点和虚拟机的可信状态,并且确保在云计算环境当中它的这些状态都是正常和有效的。
这个问题实际上也是在实际对可信计算应用中发现的,有些时候TPM可能已经出现问题了,但是虚机的运行还是正常的,这时候实际上它将会影响到虚机的运行,最后虚机的资源可能就不可用了,所以这种情况下都需要进行有效的验证。
这是我们建立起来的一个可信虚拟机全生命周期的防护,看上去比较复杂,实际上就是我们需要对每一个虚拟机,从VM的实力,从创建开始,包括它的进向文件一直到最后的运行、撤出、销毁,整个过程中都需要有相关的机制去保护。
主要有几个方面,首先是虚拟机可信环境的构建。这个可信环境的构建里就会涉及到,首先我们要基于硬件的TPM建立一个可信链,这个可信链的创建是从硬件的TPM到数字操作系统,再到Hypervisor再到虚机,然后还要建立一个基于VTPM的可信链,包括从VTPM到虚机的操作系统,再到虚机的应用,保证的是虚拟机运行的安全可靠。也就是说每一个虚机都有一个VTPM对它进行保护,相当于每一台服务器都有一个TPM为自己保护一样。在云计算平台上我们还要有效地创建可信虚拟机,这部分也是要做的一件事情,我如何和云计算平台进行整合。
这是一个可信链的层次,有一个简单的示意图。我们的TPM作为整个物理服务器上的可信根,它会对我们的操作系统进行一个安全度量,再到Hypervisor,再到上面的VTPM。VTPM就为虚机又建立了一个可信基,从而形成一个完整的可信链。
在云计算平台上创建可信虚机,我们需要先创建虚机,再来匹配相关联的VTPM,最后将VTPM的信息放到整个度量列表里,从而实现对每一个虚机的安全度量。
另外就是可信虚机的一个存储问题。这里面有一些关键技术要解决它,我们在研究当中专门提出了一个概念,叫做虚拟机实例文件头部的标签结构存储,对信息技术存储加密。为什么做这个事呢?因为我们在一些已有的开源实践当中发现,针对VTPM的实例文件往往是明文存储的,如果攻击者进入你的云计算平台,这些就都变成一个文件了,包括加密密钥也是作为文件写入里面的,所以我们做出了相关的研究工作并提出了解决方案。要通过存储在虚机当中实例文件的加密和标签信息来验证VTPM的身份,通过硬件的TPM在对VTPM的度量列表进行保护,实际上是一层一层度量的。最后再用VTPM的度量值来确保VTPM的实例没有被篡改,从而保障可信虚机的完整可信启动。
另外就是可信虚拟的运行问题,这也是基于VTPM的可信根来构建自身的可信链,我们在虚拟机上可以基于可信技术来进行数据的完整性、安全存储包括平台运行的证明。我们要通过远程证明的方式来证明虚机的运行状态是安全的。
另外是针对可信虚机退出流程,保存可信虚机的运行,相关的信息,在关闭可信虚拟机实例的同时,要度量并且更新VTPM的实例相关信息,从而实现对VTPM的加密。每一步处理一旦更新完成退出都有一个重新对数据加密保存的问题。
另外就是针对可信虚机快照的安全保护,主要是将可信虚机的文件模块化,指定对应VTPM的实例模块,加入到快照库里面,对快照信息进行一个安全可信的度量,也是为了防止被篡改。
针对可信虚机销毁的流程,包括对应的VTPM的实例、删除VTPM的实例以及相应的度量值,另外就是删除虚拟机内核的度量信息等等,通过一系列的操作,使得我们虚拟机删除的时候没有留下这些可能会影响到信息泄露的数据。
还有一个很重要的就是虚拟机的迁移,我们通过把可信计算和虚拟机迁移的行为进行结合,创建一套方法,适合于虚拟机静态迁移和动态迁移的应用场景,并且要确保虚拟机迁移前后数据是完整可信的,要确保虚拟机数据在迁移过程当中的传输安全,还有就是在迁移前后它的安全策略必须一致。因为我们的每一个虚机在它不同的物理机上面有自己的运行环境,而且它都有自己的安全策略。这时候就要保证当你的虚机发生迁移的时候,迁移前后的安全策略必须一致,而且这部分工作与Openstack相结合,实现虚拟机自动迁移。主要分成了六个方面的阶段,我就不细讲了。
刚才讲的是虚拟机从它的全生命周期里面我们可信计算的技术如何进行相应的安全防护,来对它的各种运行状态进行可信验证。我们还需要做的一件事情就是掌握可信虚机的运行状态,避免TPM和VTPM出现故障的时候,你的虚机还在工作,这就导致我的整个安全状态不一致了。所以这里涉及到对于物理可信根和虚拟可信根的状态收集,还有就是对它们的状态进行相应的验证,保证这些状态没有虚假地去更新。另外就是可信虚机安全调度的问题。
作为云计算平台上,针对可信的这些资源要实施统一的管理,包括可信根的信息采集和可信根的信息验证,以及可信虚机的安全调度,这部分工作把云平台的管理人员的功能,整个平台上会增加这个模块,使得所有基于可信计算实现的这些安全措施和云平台有机结合。
我刚才介绍的内容是针对云计算平台上我们如何基于可信计算来建立对虚拟机全生命周期的安全防护,这套解决方案我们现在已经全部实现,而且已经跟国内的公司合作以后进行产业化了。同时,这里面有一些关键的技术我们现在也在考虑把它进行开源以后给开源社区进行提交。
我要介绍的第二个方面的工作是关于云计算服务安全能力,这就是我刚才提到的,我们线了云计算服务提供商都会提我会集成相应的安全措施。但实际上我们在一些真实场景下发现,有很多时候这个安全措施有些是没有启用的,而且有些安全策略也是有问题的。所以这种情况下,我们如何通过自动化的方式去发现云计算平台上是否存在一些安全问题。
这个背景实际上也是因为我们在牵头制定国家的云计算服务安全指南和云计算服务安全能力要求这两项国家标准,这两项标准已经发布了。在这个过程中,我们就在考虑如何通过一些自动化的方式提供我们的评估安全能力的手段。
我们现在已经完成了一些工具,还有一些在研发当中,完成的工具我简单介绍一下。首先就是针对虚拟机的隐藏进程的检测工具。因为我们要对云计算服务商的安全能力进行检测,就不像以前了,以前大家在做第三方测评的时候,为什么我们说对云的测试难度很大?因为以前做第三方测评工作的时候,都是人家把产品系统给你拿过来,你就在自己的环境下进行测试。但云是一个生产环境,而且如果它离开它的那个环境,这个时候实际上很多东西已经无法测了,所以就意味着你必须要在生产环境下测试,但是这时候你又不能对它的生产环境进行实时修改,所以在这样的前提下我们研发了这样的工具。
这个虚拟机隐藏进程检测工具,我们有一个思路,就是看云服务商有没有能力检测一些恶意的进程。当我们的一个虚机在运行时,它有可能来自外部的攻击和恶意的进程,在隐藏过程当中,我们在云平台上能不能够进行有的检测?这就是我们这个工具要做的,所以实际上我们只需要部署一台虚机,在这个虚机上我们会通过Rootkit进行检测。我们的解决思路就是首先你不能修改Hypervisor上的代码,这时候我们要做的就是通过用户进程、内核进程链表和CPU运行队列进行交叉分析对比。现在在很多地方都在用,但是把这三类的进程信息进行交叉对比的也是我们首次提出来的。
通过这种方式,我就可以发现在虚机当中的一些隐藏的Rootkit,一旦检测到就意味着我们可以通过这样一个方式去做检测,那我们就要来判断云服务商有没有能力去做这样一个判断,它能不能有效地去报警。
第二个工具叫做虚拟机内存隔离检测工具。我们知道云计算平台上部署大量的虚机,这个时候它的内存上面有可能就会出现了内存共享的问题。我们就通过这样一个工具来检测。作为攻击者,他也有可能利用你的内存共享机制窃取用户的信息,所以在这里我们要想办法来检测你的进程之间是不是有重叠的内存页。也就是说如果你作为这个进程来讲,在某一个时间段的时候,你的内存页是不应该出现重叠的,这样才能够实现物理隔离。有一些进程肯定是有内存共享这样的一个需求的,针对这一部分内存页,我们就要确保这个进程去访问它的时候,只有只读权限,这个时候我们实现的是一种逻辑隔离,所以这个工具就需要去检测你的平台当中有没有做到相应的物理隔离。
它的实现方法有两个方面,一个是要获得虚拟机物理页的基地址集合,通过Linux操作系统的多级页表映射机来获取。还有虚拟机物理页读写权限获取。
第三个工具是虚拟机内存清除检测工具,虚拟机关机后按道理应该进行内存的及时清除,否则的话,很可能分配给其他的虚机了。这时候如果遇到攻击者,就有可能泄露前面用户留下来的数据。而我们这部分的检测就是来判定虚拟机关机前后相同物理内存当中的数据是否发生了变化,如果不一致,则证明该内存是安全的,也就是说它会有一系列的内存清理操作。当然这个数据不可能全做,比如说他全部写零或者写一,也不太现实,它会根据数据一致的物理页面总的虚拟机内存当中所占的比例来判断云服务商是否提供了内存清除机制。
第四个方面就是虚拟机磁盘挂载检测工具。比较容易理解,因为我们的磁盘可能会被重复挂载,最后会导致数据泄露,所以我们现在就做这样一个检测,在虚拟机运行的时候,对于对应的操作系统,你的进程是什么。另外,就是挂载镜像的文件是什么,和它的安全策略进行对比。
最后一个内容是关于云服务运行监管。刚才我提到了云计算服务,我们有安全审查,我们有各种各样的测评。测评完了最后一个情况就是云是实际在运行的,我们如何掌握运行当中的情况。所以,这里就涉及到我们如何对运行的云计算平台进行一个安全的运行监管。
监管的目的主要是四个方面,一个是合规性,是否是持续满足国家的相关法律法规,包括标准等等。还有就是可靠性,作为云服务商来讲,你有没有有效地去按照某项标准,相关的安全策略是不是都实施了,另外就是可控性和持续性,你的云计算服务没有异常中断。
这是运行监管的一个框架,这里面我们在标准里面已经进行了简化,在这个标准里只出现两个角色,一个是云服务商,一个是运算监管方,因为标准主要讨论的是技术问题。这个运行监管方由谁来承担?这是相关部门再根据他的需求去指定。这里面涉及到对云服务商来讲,他要满足对他的安全控制措施、变更管理和应急响应自身的监管,同时,他会通过接口,现在我们的做法都是通过人工的方式提交相关的材料,比如按季度、按年提交报告。我们下一步正在做的事情就是要做自动接口,通过相应的频率设置以后,把一些指标通过这个接口提交给监管方,然后进行评估验证,给出监管结果。
整个技术路线我们是基于开源云的这样一个方式来实现运行监管体系架构的研究,包括系统的开发。首先,针对云计算平台来讲,会对它的计算资源、网络资源,包括镜像资源和存储资源,以及整个运行情况,里面通过这个指标项采集,到底要做什么样的指标,包括接口的定义,这是我们目前正在做的事。因为运行监管这个国家标准的报批稿我们已经提交了,但是这个标准更多还是说的是一个框架,里面具体的指标项和接口,包括协议封装的方式,现在我们还在新标准的研究当中,也希望业界更多的人一起参与这个事情,大家共同来做这个运行监管。因为这件事是所有的云服务商大家最后都要去遵守的一件事情。
这里面涉及到了监管平台里的一些指标体系,包括监管对象是什么,如何做安全分析,最后来形成对整个云运行情况的可视化。目前我们正在做的验证就是针对工业云的,针对工业云里面的一些运行情况来进行了解,因为现在大家在工业系统上云已经成为一个趋势,如何来有效的了解上云的这些工业系统的情况,我们现在也正在做一些现场的系统验证和研发工作。
我主要的内容就是这几个方面,谢谢大家!