导语:卡巴斯基实验室对网络安全市场流行的安全技术进行了分析,他们研究操作系统开发人员究竟为嵌入式系统提供了哪些安全技术。我们的主要兴趣是这些操作系统如何解决与网络安全相关的问题。
上一篇文章,我介绍的是单片系统和基于单片内核的操作系统,本文我会接着给大家介绍有关基于微内核的操作系统的安全性分析。
Android操作系统
2017年8月22日,谷歌正式发布了Android 8.0的正式版,其正式名称为:Android Oreo。
2017年12月5日,谷歌正式发布了Android 8.1的正式版,目前是Android操作系统的最新版本。
据开发人员介绍,Android 8.0以后的版本,都包含大量新的信息安全机制。该操作系统中的关键安全功能旨在最大程度的缓解漏洞利用和减少攻击面,其中还使用了最小权限原则,另外API设计和体系架构也发生了重要变化。具体如下所示:
1.对已经授权的应用程序进行智能保护;
2.在应用程序和操作系统更新期间进行高级验证,以防止常见类型的攻击,其中就包括数据库回滚机制(RollBack)的实现;
3.内置了对HSM(硬件安全模块)的支持;
4.seccomp过滤器的应用程序沙箱(安全计算限制了应用程序进行系统调用的能力)和WebView组件是隔离的。Android的seccomp过滤器会阻止某些系统调用,如swapon/swapoff(已被卷入一些安全攻击)和关键控制系统调用(对应用没有作用);
5.支持一组加密配置文件(不同配置文件使用不同的密钥集);
6.内置了对使用物理密钥的双因素身份验证的支持;
7.采用了复杂的应用程序路径,这样应用程序再也不能在它的原来的静态位置被找到。相反,应用程序每次都会被安装到新的位置,并且必须对系统进行特殊调用才能访问应用程序;
8.停止支持过时和易受攻击的协议和算法,如SSL v3.0;
毋庸置疑,这些都是必要和有用的措施,使攻击者利用漏洞和获得root权限的难度大大增加。
但是,大家都知道Android是基于Linux内核的操作系统,所以不应忘记Linux系统本身的漏洞。Android中一直在不断发现新的漏洞,其中很大一部分都能够执行任意代码。
微内核操作系统
综上所述,一个可能的解决方案就是使用微内核系统架构。微内核(Micro kernel)是提供操作系统核心功能的内核的精简版本,它设计成在很小的内存空间内增加移植性,提供模块化设计,以使用户安装不同的接口,如DOS、Workplace OS、Workplace UNIX等。IBM、Microsoft、开放软件基金会(OSF)和UNIX系统实验室(USL)等新操作系统都采用了这一研究成果的优点。简而言之就是,微内核仅提供过程管理的基本功能和最少的硬件抽象集。大部分工作是在专用用户进程的帮助下完成的,这些用户的进程是不在内核的地址空间中运行的。这就有助于显着减少内核服务的攻击面,而操作系统的内核可以使用形式化验证(Formal Verification)方法(这要感谢代码库数量非常小的)进行严格验证。要了解有关验证的更多信息,以及它与一般验证的不同之处,请查看Ekaterina Rudina写的这篇文章。
从信息安全角度看,微内核系统架构的安全性优势已经显示出来了,例如分离内核方法以及使用MILS系统结构。目前市场上已经开始大量出现了使用不同类型的微内核操作系统,比如QNX、INTEGRITY RTOS、Genode、基于L4微内核的操作系统及其他衍生版本。
QNX:QNX操作系统是由加拿大QSSL公司(QNX Software System Ltd.)开发的分布式实时操作系统。该操作系统既能运行于以Intel X86、Pentium等CPU为核心硬件环境下,也能运行于以PowerPC、MIPS等CPU为核心的硬件环境。QNX操作系统符合POSIX基本标准和实时标准,使其应用可以方便的进行移植。
INTEGRITY RTOS:INTEGRITY是Green Hills Software公司开发的一个安全、无版权税的实时操作系统。由于没有那些80年代就已经存在的RTOS需要考虑的兼容性问题,INTEGRITY从设计时就应用最新的RTOS技术,并且包含了前所未有的面向电信、国防、网络、医疗器械行业应用需要的可靠性、可用性、服务性。INTEGRITY RTOS是首个根据“POSIX:IEEE和Open Group认证”计划和最新的IEEE 1003.1-2003系统接口产品标准进行认证的操作系统。INTEGRITY使用基于硬件的内存保护机制来隔离和保护内核和用户任务,防止误操作和恶意攻击。基于面向对象的设计允许对数据、通信、独立组件和系统进行严格的访问权限控制和验证。它严格遵循可证实的资源请求从而允许嵌入系统设计者能够保证资源的可用性。F-16、F-22战机使用了Integrity实时操作系统,NASA的Space Technology 5(ST5)mission中也使用了Integrity实时操作系统。
在此,我想稍微介绍一下L4微内核,它是微内核操作系统演化至今的结果。今天,L4实际上已是微内核操作系统开发中的实际标准。
L4微内核
近几年来,L4微内核越来越受到大家的关注。最初开发L4微内核只是为了证明创建适用于实际通用操作系统的微内核是可以行得通的。这种尝试可以被认为是相当成功的,现在已经有一整套利用L4的研究和商业项目。目前,L4微内核已经被移植到大量的硬件平台上了。需要注意的是,基于L4的解决方案支持硬实时模式下的操作。硬实时(hard real-time)系统是指能够在指定的期限完成实时任务(即便在最坏的处理负载下也能如此)的操作系统。
在当前支持的微内核实现中,目前有以下版本:
1.seL4 :第一个正式验证的微内核,目前仍在积极开发中;
2.Codezero:K4微内核的商业应用版本。内核的源代码在GPLv3许可下可用,而附加模块和库的源代码是封闭的,要想操作必须得经过商业许可;
3.OC :由德累斯顿工业大学开发并根据GPLv2许可开发的版本,需要商业许可才能使用;
对于以上列出的操作系统,你是可以使用不同的虚拟化解决方案的。还有其他基于L4微内核的虚拟化解决方案也是值得一提的,它们是OKL4,NOVA和PikeOS操作系统。
L4系列的微内核也了用于以下操作系统:
1.Genode;
2.TUD:OS:是德累斯顿工业大学基于L4Re开发的操作系统,L4Re是基于L4的解决方案框架。
3.CAamkES:由Data61的Trustworthy Systems Research Group机构开发的基于L4微内核的框架。
4.L4Linux:基于L4系列内核并把Linux操作系统移植过来的系统。所以在这个L4的实现中,Linux扮演与其他L4应用程序(包括实时组件)同时运行的用户模式服务的角色,Linux内核版本目前已经到了4.14版,支持x86和ARM的硬件平台。
从安全角度来看,seL4内核是L4系列中最重要的一个版本。
微内核seL4实现了object-capability模型,并其进行了形式化验证,这意味着操作系统的属性可以在特定的概念和假设下得到保证,这就使整体解决方案的保护机制得到了提升。但是,如果输入假设不正确,则可能会出现问题。例如,在seL4验证过程中,形式模型的一个重大缺陷是它排除了几个进程同时执行的可能性,你可以设想一个单处理器系统出现阻塞中断的情形。
object-capability模型提供了对系统行为的详细控制,但绝不能借助它来描述所有的安全性属性。还有许多其他的安全模型,它们的属性是无法基于object-capability模型来表达的。例如,安全属性可能取决于系统状态、考虑到时间关系等。为了描述这些属性,需要在安全解决方案中添加额外的机制,如果是这种情况下,seL4的优势就将丧失。
KasperskyOS就使用了seL4中的许多思想,但是,它也允许使用卡巴斯基安全系统(Kaspersky security System ,KSS)作为KasperskyOS体系架构的一部分来描述任何安全属性。
混合操作系统
混合内核是把单片和微内核系统架构的属性组合在了一起,基于混合内核的操作系统体系架构本质上是一个经过改良的微内核,它允许在内核空间中执行操作系统模块以加速操作。
使用混合内核的操作系统目前已经在市场上出现了,开发它的主要想法就是尝试使用微内核体系架构的优势,同时尽可能多地保留经过充分测试的单内核代码。然而,就算在混合操作系统中,信息安全问题仍未解决,因为攻击面仍然很大。
为什么至今市面上的操作系统都无法满足嵌入式系统的要求
许多传统的操作系统最初都是在没有考虑安全的情况下开发的,后期再引入安全功能后,会带来很多问题,比如原有的功能机制将停止运行,并出现兼容性问题。但出于各种原因,开发者不可能完全重新设计这些体系架构,所以只能修修补补,增加一些与安全性相关的属性。有很多这样的解决方案的例子,其中就包括QNX,Linux和FreeBSD。
只有那些在系统一开发时,就考虑的信息安全的操作系统才能确保真正的安全机制,且不会影响各种运行功能。经过安全设计的操作系统有seL4,INTEGRITY RTOS,MUEN RTOS,KasperskyOS等。
KasperskyOS介绍
KasperskyOS是卡巴斯基实验室从头打造的一款系统,与2017年2月正式发布,它不基于市面上的任何操作系统,比如Linux,开发过程前后经历了14年。按照卡巴斯基实验室的说法,KasperskyOS不是为家用PC而作的,设计KasperskyOS的目的就是为了保护工业系统和嵌入式设备(物联网)免受第三方或恶意代码执行的网络攻击。
之所以会有KasperskyOS的出现,是因为目前流行的一些操作系统在设计的时候并没有过多的考虑到安全性,特别是针对新兴的物联网。所以与其对原有的系统修修补补,还不如从头做一个新系统简单和安全。
按着卡巴斯基实验室的预估,KasperskyOS几乎是不可能被黑,因为KasperskyOS内置的安全系统可以控制应用程序操作和系统模块。攻击者要想破解安装有KasperskyOS设备的数字签名,就需要一台量子计算机。
KasperskyOS使用的是微内核体系结构,其中微内核系统工具将系统划分为安全域或KasperskyOS术语中的“实体(entities)”。所有安全域(进程间通信,IPC)之间的所有通信都是使用微内核执行的,并由其控制,任何通信都不允许绕过微核。
所有通信都是分类的,实体的接口用IDL(接口定义语言)描述,只有这个接口可以用于IPC,这是KasperskyOS与其他大多数操作系统差别很大的地方。
KasperskyOS的微内核与卡巴斯基安全系统(KSS)联合运行,KSS是计算安全判断的子系统。对于每个IPC,KasperskyOS微内核都会向KSS请求一个安全判断,并将其作为允许或阻止该特定IPC的基础。对于安全判断计算,不仅要考虑到通信的事实和类型,还要考虑系统的拓扑结构,通信发生的环境以及在一组正式安全框架内描述的分配策略。
KSS支持大量的正式安全模型,例如域型强制实行模型 (Domain Type Enforcement,DTE);Object Capability模型;RBAC(Role-Based Access Control )基于角色的访问控制,简单地说,一个用户拥有若干角色,每一个角色拥有若干权限,这样,就构造成“用户-角色-权限”的授权模型,不同时序逻辑方言(diverse temporal logic dialect)等等。当KasperskyOS需要时,可以添加这些新模型。
这就为开发人员提供了一个灵活的工具,可根据需要以高度详细的级别描述安全策略。安全策略是用高级语言定义的,这大大简化了按照规定的要求验证解决方案。这也使得对所描述的属性进行形式验证成为可能。
随着解决方案逐渐变得越来越复杂,不同的协议、算法、功能等的增加不可能保证其中没有漏洞。必须采取特殊措施确保这些漏洞无法被利用,或者其利用时不会导致不良后果。这些保护措施应该包括隔离进程,限制对资源的访问,攻击检测系统和对策等。在这种情况下,安全属性必须由系统的可信组件来保证,即由操作系统内核,安全特性,子系统特定类型的保护,如密码保护等。
与此同时,需要以一种越来越详细的方式来定义相关的安全策略,当政策细化的能力达到极限时就会出现这种情况。例如,基于Capability模型的策略可以允许或拒绝对某个资源的访问。在这种情况下,所需的安全性属性被认为是功能性需求,并在解决方案的代码中与其他功能一起实施。这导致需要控制的代码量的逐渐增长,并确保其可验证性成为越来越具有挑战性的任务。因此,解决方案再次变得不安全。
但是,在KasperskyOS和KSS的帮助下,可以根据需要提供详细的安全属性描述,并且通过分解解决方案,选择包含所需的最低功能要求验证的有限单个模块集。这样,这些模块就可以被视为独立的,验证也变得容易了。
KasperskyOS可以生成负责实现解决方案安全策略的KSS的代码库,并正式验证,从这个意义上讲,它是可信的。这就解决了代码库不受控制地增长的问题,而代码库则是安全的源头。
由于安全属性的定义与功能逻辑无关,因此开发人员可以为其解决方案构建一个安全系统,而无需考虑具体组件的实施细节。
KasperskyOS所描述的功能使开发一个绝对安全的解决方案成为可能,步骤如下:
1.威胁分析和威胁建模;
2.开发一套正式的安全策略以应对第1步中描述的威;
3.将解决方案分解成安全域,并根据步骤2获得的数据定义IPC接口;
4.根据步骤3获得的数据执行解决方案,并执行与步骤2获得的结果一致的安全策略;
这就确保了KasperskyOS的主要优势,即可以构建复杂的系统以满足特定的信息安全特性。
KasperskyOS在Kaspersky安全管理程序(KSH)应用程序的帮助下支持虚拟化,它可以与KSS一起实现与管理程序内部资源的虚拟机访问控制相关的安全策略。KSH是一款轻量级解决方案,这使得验证其代码库成为可能,这还意味着它可以被视为可信平台的一部分。即使在没有发生跨域交互的情况下,Kaspersky安全管理程序也可以将KSS的安全判断应用于其内部进程。KasperskyOS的此功能在任何其他虚拟化解决方案中都没有出现过,它们只能设置规则来定义特定虚拟机如何与系统的其他隔离组件进行交互。
总结
在物联网时代,围绕联网设备的网络安全问题正变得越来越重要。卡巴斯基实验室的研究人员认为,操作系统的安全性决定了整个嵌入式系统的整体网络安全水平。不幸的是,在传统的操作系统的开发过程中,信息安全问题还没有得到充分的考虑。上文提到的近一半操作系统,信息安全方面的问题要么没有得到解决,要么解决的不令人满意的。
小编希望本文能够让那些嵌入式系统操作系统的开发者更加关注网络安全问题,另外,帮助用户为他们的项目选择合适的放心的操作系统。