作者:胡俊 博士,北京工业大学讲师

可信3.0是我国在网络空间安全架构上的原始创新,是实现我国网络空间安全可信的有效手段,其内涵非常丰富。而理解可信3.0,也需要从网络安全的基本概念,或者说,从网络安全观来入手,才能够真正抓住其精髓。关于可信3.0的内涵,沈昌祥院士有专文介绍,也做过很多次报告。本文主要谈一下在学习、理解可信3.0和在可信3.0环境下开发的一些体会。

本文共分4部分内容:可信计算3.0的基本概念和学习思路、重塑网络安全观、理解可信体系架构、在实际环境中应用可信3.0技术。

一、可信3.0基本概念和学习思路

1、安全可信、可信计算和可信3.0(主动免疫可信)三个概念之间的关系

我国网络安全法、国家网络空间安全基本战略中都提出了安全可信的要求,网络安全等级保护标准中则以安全可信作为其核心理念,现在安全可信的概念比较火,可信计算和可信3.0也是频繁出现的概念。但是目前网络上安全可信、可信计算和可信3.0的理解是比较混乱的。一些IT新闻里宣传的“安全可信”,其实并非真正的安全可信。在这一节中,我们梳理一下这三个概念的关系。

我国现在非常重视网络安全问题,网络安全已经被提到国家安全的高度。而我国网络安全的基本要求是安全可信。它并非一个抽象的概念,在我国的等级保护制度中,对安全可信有比较明确的定义。

在我国的等级保护制度中,对重要信息系统安全可信的要求是构造一个安全管理中心支持的三重(安全计算环境、安全区域边界和安全通信网络)防御框架,从技术和管理两个方面进行设计,做到系统的 “可信、可控,可管”。更具体一点说,可信是指针对可信计算资源构造保护环境,从可信计算基(TCB)开始层层扩充,对计算资源进行保护,确保系统服务安全;可控则是针对信息资源(数据和应用)构建业务流程控制链,以访问控制为核心,实现主体(用户)按策略规则访问客体(信息资源),确保业务信息安全;可管则是保证资源安全必须实行科学管理,强调最小权限管理,高等级系统实行三权分离管理体制,禁止设不受控的超级用户。

可信3.0也就是主动免疫可信,则是我国在网络安全领域长期研究之后提出的一种系统化的实现安全可信的方法,这一方法其核心特点为构造计算部件和安全部件分离的双系统体系架构,安全部件构建完整的信任链条以保证其自身可信,通过安全部件对计算部件的主动监控实现系统流程的可控,通过主动运作的安全部件来支撑对系统安全的管理。这一方法具有通用性,可以有效地实现系统的安全可信。我国的可信计算系列标准对这一方法的组成和各核心部件进行了描述。

简而言之,我国网络空间安全要求安全可信,其具体含义是通过安全管理中心支持的三重防御框架实现“可信,可控,可管”,这个在我国等级保护标准中已明确。可信3.0则是实现安全可信的有效方法,其核心特点为双系统体系架构下的主动免疫可信,我国等级保护系列国家标准对其作出了规范。可信3.0技术具有通用性、先进性,可为我国网络空间安全提供有效支持。下图给出了三个概念之间关系的说明。

2、可信计算的时代划分和可信3.0的先进性

在计算机领域,“可信“在上世纪70年代已经作为系统可靠性的概念而提出。而后又发展到网络安全领域,目前在软件可靠性领域,可信这个概念仍旧有广泛的应用。但是,可信概念应用于网络安全时,其含义和其原始含义已经有了很大的区别。软件可靠性领域的“可信“和安全可信不是一回事。

我们可以把软件可靠性领域的“可信“看做可信1.0,它主要关注的是主机可靠性,通过增加冗余备份、容错算法等技术实现,在非安全领域,可信1.0还有很广泛的应用。但安全领域冗余是解决不了主动的恶意攻击问题的,因此国外TCG组织提出基于可信的硬件构造可信软件栈,基于密码学和硬件安全技术实现调用过程中可信部件的行为可信,通过这些可信行为来支撑阶段的可信。这里可信部件是被计算部件调用的,在可信机制中是被动的一方。我们把它叫做可信2.0,也叫被动可信。被动可信能够增强节点的可信,但它存在着很多局限性,并且其可信的实现严重依赖于计算部件如操作系统和应用自身的可信。我国从网络安全的基本理论出发,总结信息安全和可信计算的理论,经长期研发后,提出了可信3.0的理论。这一理论面向网络安全,提出计算部件和可信部件分别构成逻辑上独立的系统,可信部件主动监控计算部件以实现系统可信。这一理论中可信部件不依赖于操作系统和核心应用,可独立发展,解决了可信2.0面临的很多问题,适合搭建安全管理中心集中管理的三重防御体系,是适合我国网络安全要求的可信计算理论。

可信3.0是基于我国网络安全实际情况,由我国相关科研人员自行研发,面向网络安全的创新体系架构。可信1.0主要考虑通过备份等机制增强系统可靠性,它是在系统中添加冗余,再通过一个实现容错算法的层来实现;可信2.0基于可信平台模块(TPM)等可信根,实现一个软硬件结合的被动组件,向系统硬件、操作系统和应用提供可信调用接口,系统可以使用这些接口实现特定的可信功能;可信3.0则构造一个逻辑上可以独立运行的可信子系统,通过这一可信子系统,以主动的方式监控宿主信息。从三种可信理论的概要结构图中,我们可以看到明显的区别和升级过程,这就是我们定义可信1.0、可信2.0和可信3.0的依据。

可信3.0是个新的体系,学习可信3.0需要跳出一些传统安全的理念。大家可以分三个阶段来学习可信3.0,首先是从更宏观的尺度上重塑网络安全观,第二步则是理解我国提出的主动可信体系架构,第三步则是结合实际安全需求研究基于可信3.0的解决方案,并体会到可信3.0的优势。

二、重塑网络安全观

可信3.0理论的奠基人沈昌祥院士非常重视学生的基础是否扎实,包括密码学基础,操作系统基础和网络安全理论基础。但是在某次对话中,当我试着联系传统安全理论和可信3.0时,沈院士的指导则是“忘掉它!”。

院士当然不是让我彻底忘掉传统安全理论。我的理解是,我们要了解现有的信息安全理论是有局限性的,思路要跳出既有的安全技术,不要被当前的习惯性结论束缚,从更基础、更本源的角度理解安全,真正理解之后,就可以把传统的信息安全理论再捡起来,并且灵活应用了。

重塑网络安全观,是因为现有计算机理论体系并没有很好地把“安全”给包容起来,从原理和方法论角度来看,对网络安全并没有非常清晰的解读。我国网络安全正处于一个比较严峻的形式状态,网络安全必须要掌握在自己手里,想要做到这一点,必须要有科学的方法。另外,我国IT产业相对弱势,如果想要崛起,想要摆脱技术桎梏,就更需要采用科学的方法,不然网络安全很难发展起来。此外,科学的网络安全理论和方法是存在的,即使现在找不到完美的答案,也要努力保持正确的方向。

沈院士提出,网络空间安全极其脆弱,根本原因是网络安全有三个基本问题没有解决好。这三个问题是计算科学问题、体系结构问题和计算模式问题。前两个问题理论性比较强,我们不展开论述。我们简单讨论下第三个问题。

从软件工程角度,一个软件的开发过程要经过需求分析、概要设计、详细设计、然后集中测试、验收、部署,经过了完整的开发过程的软件,我们用起来是比较放心的,因为做了充分的测试。如果项目经理不走正常开发流程,要求强行更改功能,我们知道这是错误的,会对应用稳定性带来负面影响。但是,这个开发流程没有为安全留出位置,一旦发生了安全问题,该怎么办呢?常见方法是针对安全问题打个补丁,而打补丁这个行为像不像项目经理强行添加功能?我们知道这种行为既不能保证安全机制完整,也不能保证原应用的稳定可靠运行。那么以安全为名义,就能让原本不合理的行为变合理吗?打的补丁我们有能力对其进行归零测试吗?不能的话又怎么保证补丁的可靠性呢?

从“Wannacry病毒”发作的时间线上,我们可以看得更清楚些。这个病毒一开始出现时,很多人在网络上说,这就是你不打补丁的结果。其实这个病毒最早是在2016年8月由“影子经纪人”(Shadow Breakers)的黑客组织泄露的,但是他什么时候发现的呢?我们不知道。我们只知道是美国NSA公布的,所以在很早之前,如果NSA用这个漏洞攻击你,你是不知道的,到16年8月,我们知道了这个漏洞可以攻击网络,但是你没有任何防护办法,到2017年3月微软给出“永恒之蓝”补丁,打补丁可以防范基于永恒之蓝的攻击,5月份的时候,这个病毒发作。也就是说,我们打补丁的行为,其实只是保证了17年3月之后对wannacry病毒的抵抗能力,在此之前,打补丁不能抵抗基于“永恒之蓝”漏洞的攻击,在此之后,我们也不能保证系统对其它漏洞有抵抗能力。更糟糕的是,如果补丁因为测试不足而存在新漏洞,或者干脆存在后门,那么打补丁这个行为反而会带来新的问题。而这已经是现实发生过的事情。大家是否已经感觉WIN10越来越不好用?你打一个补丁,可能就影响了某些软件无法正常使用。我国等级保护标准已经明确要求,工控系统如果需要打补丁,在打补丁之前一定要有严格的安全测试。

所以说,现有的很多网络安全解决思路,像打补丁、防火墙、防病毒、入侵检测等“老三样”解决方法,追根溯源来看,是有局限性的,不能从根本上解决问题。要从根本上解决网络安全问题,就需要正本清源,这也就是重塑网络安全观的缘由。

可信3.0的网络安全观,就是从根源上考虑安全可信解决方法的网络安全观。我们叫它主动免疫机制,不是说它从生物免疫机制中借来了什么神奇技术,而是它借鉴生物免疫的思想,从体系架构上进行了的重构,我们考虑免疫系统具体是怎么运作的,第一,它属于独立运作,不受大脑控制;第二,免疫系统是识别自己与非己,并排斥非己部分。这些做法在网络安全架构中是有其合理性的,能够为网络信息系统培育“免疫能力”,对未知病毒和攻击手段产生抵抗力。可信3.0借鉴这一思想,从计算科学理论、体系架构和计算模式上提出了入手,构建了自己的安全观。

从计算科学理论上说,可信3.0认为网络安全的目标是确保为完成计算任务的逻辑组合不被篡改和破坏,实现正确计算。就是说我们不能靠着修修补补,或者是积累攻击特征来解决网络安全问题,这个不利于整体安全防护,我们要根据完成计算任务的逻辑组合自身的特点来区分“自己”和“非己”,保障“自己”的正确执行,禁止 “非己”。这决定了我们安全机制需要以定制的访问控制为核心,这个也符合经典的网络安全理论和网络安全的最新发展趋势。

从体系架构上说,它对传统冯诺依曼架构做了大手术,构造了独立于传统冯诺依曼架构的可信部件组成的子系统,传统架构则成为计算部件。但这样的架构解耦了计算部件和可信部件,反而减小了对传统架构的影响,让我们可以保持传统架构基本不变,同时,因为屏蔽了计算部件对可信部件的访问,保障可信部件的可信性也变得更容易了。

从计算模式上来说,实现双体系架构后,我们的安全可信体系就可以从系统中分离出来。我们可以从环境入手,具体就是从底层软/硬件、操作系统、网络的控制点入手,通过可信部件进行统一的组织管理,构造出安全管理中心集中管理的三重防御体系。有这个防御体系为基础,我们既可以根据应用安全需求和系统环境,定制系统安全可信策略,通过可信部件监控应用的行为,根据策略允许可信的行为,对不可信的行为采取对应措施。这样的安全机制具有通用性和灵活性,对应用影响更小,部署成本也更低。这就是等级保护中提出的 “一个中心,三重防御”的主动免疫防护框架。

可信安全管理中心支持下的主动免疫防护框架。第一,要保证计算环境(个体)有免疫能力;第二,要有可信边界;第三,来往的信息(人)要审查、要控制、要可信安全,更重要的是整个社会体系要管理。防护框架可根据实际需求制定安全规则,并转化为策略来部署实施,和现在防疫措施同样道理。最终我们要达到的效果是:攻击者进不去、非授权者重要信息拿不到、窃取保密信息看不懂、系统和信息改不了、系统工作瘫不成、攻击行为赖不掉。将保密性、可控性、完整性、可用性、不可否认性牢牢掌控。

三、理解可信体系架构

上节我们提到可信3.0有先进的理念,但我们必须有明确的架构设计,才能落实这些理念。好消息是,这个架构已经明确,并以我国可信计算系列标准的形式明确下来了。我们的可信架构有一系列创新,以确保可信计算的功能能够更好地实现,下图是我国可信计算架构的大致情况:

上面列出的这些可信部件不是简单地堆在一起,而是构成了一个有机的整体,并且与安全管理中心、系统的访问控制机制和其它节点的可信部件对接,形成了分布式的可信子系统,实现对主体(应用进程)的监控和对客体(数据资源)的验证。其流程图如下所示。这个图是用来跑流程的,可以基于这个图来设计基于可信3.0的安全解决方案中的安全策略部署与安全审计流程。

图中所列出的部件由底层向上层层部署,但并非任何时候都需要完整部署。在安全要求较高的场合,需要构造完整信任链时,控制芯片、双融主板、可信软件和可信连接等可信部件一个都不能少,但在安全要求不是很高的场合,也可考虑不使用双融主板,在总线上连接控制芯片,甚至于硬件上仅保留可信密码芯片来提供可信密码功能支持,通过可信软件来实现可信子系统。这种系统就可以在现有系统基础上增加很低的成本来实现。它的缺点则是没有完整的信任链条,遇到真正强力的攻击就不行了。但更靠谱一点的现有系统加固实现,国内有一些公司有这类产品,它可以保持对现有系统的兼容性,还可以建立完整的运营链条,但是它达不到结构化要求,就是它可以达到三级防护,准四级防护,但是四级以上,达不到。想达到四级以上的结构化安全还是需要扎扎实实的把工作做好,基础打好了,未来可以持续发展。有追求的我国网络安全公司还是应该向结构化实现的方向努力。

实现结构化安全,需要对计算部件中的操作系统深入了解和掌握。深入到什么程度呢?沈院士提出了“五可”的理念,包括可知、可编、可重构、可信和可用。可知,就是对合作方开放全部源代码,开放到什么程度呢?不是只有一堆代码就完事儿了,而是你要能把代码编码成你可知的系统,要心里有数,不能盲从;可编,即要基于对源代码的理解,能自主改写代码,编写一些功能,我觉得现在不少做国产操作系统的人还没有达到可编的状态;可重构,即面向具体的应用场景和安全需求,对核心技术要素进行重构,形成定制化的新的体系结构;可信,即通过可信计算技术增强自主系统免疫性,防范未知漏洞攻击影响系统安全性,使国产化真正落地;可用,即做好应用程序与操作系统的适配工作,确保自主系统能够替代国外产品。

前面讲了可信3.0的理念和架构,下面我们在对比一下国外可信计算的一些前沿技术。Intel, AMD, ARM都有自己的可信执行环境概念,但是他们的概念其实还是没有做思路上的彻底改变,所以有些问题解决的并不好,比如可信执行环境里该运行什么内容?可信执行环境与原始系统如何互动?如何避免侧信道攻击?这三个问题,归根结底还是体系架构的问题,国外也并没有给出具体的解决方法,而主动免疫架构针对这三个问题给出了具体的回答。

现在还有一个很火的舶来概念“零信任架构”。零信任架构的核心概念包括统一于身份的授权管理,业务安全访问,持续信任评估,动态访问控制等,这些和可信3.0有相通的地方。但这些并不是零信任的原创,我国等级保护标准也可以直接间接地推出这些需求。并且,零信任也没有在我们第二节所述的三个基本问题上给出回答,这使得零信任中的“信任”这个概念也缺少一个坚实的基础。

可信3.0中的可信是从哪里来的呢?单从网络系统上看,似乎是从信任根开始。但其实质是现实世界中的信任在网络空间的映射,这个映射在网络空间有清晰和明确的对应关系。而零信任中的信任则是模糊化了,没有说清楚其来源,它只是在无法构造完整信任链条情况下的一种妥协措施,是可信3.0的子集。我们要看到零信任在计算理论、体系架构和计算模式上的缺失,不要迷信,尤其是不应该基于零信任来解读网络空间安全,这样既缺乏科学依据,也与我国等级保护制度不符。但零信任和可信3.0相通的地方我们也不妨学习吸收,比如对应用流程的梳理,控制机制的实现等等。“零信任架构”的思想与传统安全理念也存在一些冲突之处。我们可以预测零信任发展到后面,会遇到一些问题。比如:

① 零信任架构自身安全如何保证?因为零信任架构整体比较大,不符合安全里的“最小独立化”要求。

② 集中可信后,各部件如何可信?零信任架构的信任如何扩展到每一个节点上?

③ 零信任架构到处插防控,那用户怎么选择在适宜位置放置这些防控机制?零信任架构对应用开发习惯有多大冲击?这个在可信2.0TCG中是有教训的,TCG搞了一个特别复杂的TSS结构,现在打算全部推翻重来,那么零信任架构会不会再重蹈覆辙?

④ 零信任架构对系统性能是否会带来不可预测的影响?如什么都要回到中间去做判断,那什么时候去做,要花费多少时间,不是简单就能搞定的,要经过重重验证,这些验证对性能影响有多大?

做零信任的同志们,如果将来遇到这些问题,欢迎大家再来和我们交流讨论,可信3.0对这些问题有自己的解决思路,或许能够提供帮助。

四、结合实际安全需求

前面介绍了可信3.0的网络安全观及基本架构。那么,如何基于可信3.0提出实际的安全解决方案呢?首先,我们还是要遵循网络安全等级保护制度。

网络安全等级保护制度已经是我国法律规定的,所以如果做重要信息系统安全的话,就应当遵循它。做非网络安全等级保护系统的安全方案时,也可以借鉴学习它,因为这个制度不仅仅是一个规范,也是一个体系化的安全框架,有详细的技术指导。国标GB/T 25070-2019《网络安全等级保护安全设计技术要求》其实就给出了一个设计方法的指南。

网络安全等级保护制度所提出的要求看起来很复杂,但是只要我们抓住核心,就能够理解这些要求。下面这个图是网络安全等级保护制度中各级别的核心要求,理解了这些核心要求,再去看别的,就比较好懂了,具体的要求都是为了实现核心要求而设置的,而每一级别的可信保障要求,又是来支撑我们每一级的访问控制要求的。可信保障一级是自主保护,二级则开始按照指导保护,保护级别是“审计”,就是说如果说有一些违规的操作,会把它记录下来,比如审计的对象是谁,这个能否验证?还有审计信息,是否会被篡改?等保要求的应用程序验证和实际保护就达到目的了,所以我们看到可信保障是用来支撑安全审计保护的。三级可信保障是动态度量的要求,是用来支持三级的基于安全标记的强制访问控制的。我要做强制访问,得确定访问的主体和客体是否被别人冒充了,这个是要验证的,不验证的话,被人冒充了强制访问控制机制就失去意义了。那四级呢,实时关联感知,我们稍好提一下。五级我们一般接触不到,暂时不用考虑。

等保里要求安全可信,从“安全可信”这个语境上来讲,有一些概念可能在别的地方也见过,但不一定是一回事儿。以四级里的“态势感知”为例,大家想的“态势感知”可能是一块大屏幕,各种PB级感势 ,但是我们四级里“态势感知”有个前提,就是主体和客体的全面标记、全覆盖的访问控制和审计,我们还有自己的信任链条,这时,我们要基于这些审计信息,不再估算,或者用概率计算,而是根据信息实时分析得到态势感知结果,应该是根据我的访控规则和审计状况推理出来的,这个要完整信任链条,严格而全面的访问控制机制以及系统结构化安全作为支撑的。否则要是布个态势感知系统就上四级,那么四级也太容易达到了。

可信3.0有一个很大的优点,就是可以应用于各种新型信息系统中。每一个新型信息系统都有一个对应的安全可信解决方案。比如云计算-可信云,工控系统-可信工控,物联网-可信物联网,区块链,大数据,5G等等虽然还没有形成标准,但是我们相信以后也会有的。那为什么可信3.0适用于这些系统呢?因为其实各式各样的新型信息系统在安全可信角度是类似的,再复杂的机制到可信计算这里无非就是拓扑结构、信息流,可能性能与安全属性不同,但都需要安全可信区域边界、安全可信计算环境和安全可信通信网络,依托定制的可信部件,提供各具特色而内核又相通的解决方案。

我们举一个国家电网的例子,它做到了几点,第一、效率很高,实时调度;第二、不打补丁,免疫抗毒;第三、不改代码,方便实施;第四、精炼消肿,降低成本。

那么可信3.0是不是看这么大的一个系统,有这么多内容,是否很难学习掌握?其实可信3.0是一个体系架构,从0开始,什么地方都会有困难,毕竟除了学习可信3.0,还要将系统知识都学习了。但如果从生态角度看,我们只需要结合已有的知识,掌握我们需要掌握的部分,就可以了,由于可信部件和现有部件解耦,使得可信架构具备了通用性。所以只需要一小部分内容即可。那可信3.0当然也有多个侧面,大家可根据自己的需要了解一下:

核心部件TPCM、TSB等:需要设计和开发全新、通用的基础软硬件部件;

与传统系统的对接:深入掌握传统系统基础上,为传统系统添加主动监控机制添加;

安全可信功能的实现:以组件化,自动化、智能化,可视化方式实现安全可信功能;

安全可信策略的制定:梳理应用流程,明确权限,量体裁衣。

可信3.0实现了计算部件与可信部件的解耦,这就给我们学习安全可信带来了新的方法。我们可以把复杂的应用抽象为不同安全属性的节点和其间的信息流,甚至可以基于可信组件将这个过程模拟出来,针对这一模拟的应用流程寻找安全解决方案。而这一方案又可以映射到实际的信息系统中。北京工业大学在网络空间安全教学中已经开始应用这一方法来设计系统安全实训课程和教授可信计算技术。我们还基于这一方法设计了新型的网络安全竞赛题目,在一些比赛中试用并得到好评。下面是我们设计的一个访问控制实训题目,展示了透明于应用添加标记和实施访问控制的过程。

以上案例是在日常授课中所讲解的,我基于自行开发的一个TSB原型搭建的流程抽象,让学生在设计角度实现一个透明于应用的可信访问控制机制。我们基于TSB原型cube-1.3,提供了抽象的流程描述和透明安全机制添加方法,这个案例整体把一个大的安全系统问题变成了小的局部的安全问题。我们实际授课时,还会要求学生在基于可信密码的信任与数据保护、节点安全可信机制、网络连接安全可信、安全管理中心与安全可视化、安全攻防演练等方向进行发挥,而我们则会为学生提供多种组件,学生不用从头开始开发,可以直接用组件来搭建出一个安全的环境。目前我们还是只限于教学场景应用可信3.0,但我们的实际体验是可信3.0有着非常大的潜力,它不但能够提供安全的解决方案,其灵活性也是远超传统的安全解决方案,而成本方面,可信3.0需要一个积累过程,但其安全机制的可重用性极高,完成积累过程的可信3.0其成本上将有极大优势。

五、结语

最后,作者根据自己在可信3.0上的工作、教学、学习经验来给大家一些建议:首先、希望大家要增强自信心,对国家网安政策的信心,我们研究这么长时间是有成果的,然后要对自主创新有信心,同时对自己要求信心,要持续不断的投入研究,这样恒久的做一件事情,是能够成功的。第二、如果想把可信计算做下来,就要重视并吃透底层技术,比如底层硬件技术、操作系统内核技术、云虚拟化技术,不见得完全掌握,但至少能够把手伸进来,知道做哪些操作。第三、协同共建可信3.0生态,可信3.0不同方向、可信3.0与传统安全领域、安全可信与IT产业其它方向,都是要协同的,一定要加强。第四、重视开源技术的作用。第五、希望人才培养能够社区化,多建立一些学校,研究单位也多来参与。最后,希望大家在招聘时,多考虑北工大信息安全系的毕业生,他们在安全可信领域学到的内容是比较深入且可以结合实际的。

声明:本文来自工业菜园,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。