首页> 中国专利> 飞腾CPU上三态操作系统安全内核服务动态运行方法

飞腾CPU上三态操作系统安全内核服务动态运行方法

摘要

本发明公开了一种飞腾CPU上三态操作系统安全内核服务动态运行方法,步骤包括:将内核划分为不同特权等级的系统态和内核态,在内核态中建立服务框架作为安全内核服务的容器并建立安全内核服务调用接口,在系统态中建立虚拟驱动接口以支持用户态调用安全内核服务,CPU加电后加载服务框架及内置安全内核服务,载入系统服务模块加载部件并启动系统服务,服务框架提供安全内核服务并响应安全内核服务的动态加/卸载请求。本发明能够实现对系统特定硬件资源的安全保护、实现对操作系统核心服务的安全访问、高效支持系统的可信性确认,能够有效提升系统的安全性,降低传统内核漏洞引入的安全风险,并向用户提供高效灵活的可信计算生态环境。

著录项

  • 公开/公告号CN105022954A

    专利类型发明专利

  • 公开/公告日2015-11-04

    原文格式PDF

  • 申请/专利权人 中国人民解放军国防科学技术大学;

    申请/专利号CN201510392780.3

  • 申请日2015-07-07

  • 分类号G06F21/53(20130101);G06F21/57(20130101);

  • 代理机构43008 湖南兆弘专利事务所;

  • 代理人赵洪;谭武艺

  • 地址 410073 湖南省长沙市砚瓦池正街47号中国人民解放军国防科学技术大学计算机学院

  • 入库时间 2023-12-18 11:38:13

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-02-13

    授权

    授权

  • 2018-02-06

    著录事项变更 IPC(主分类):G06F21/53 变更前: 变更后: 申请日:20150707

    著录事项变更

  • 2018-02-06

    专利申请权的转移 IPC(主分类):G06F21/53 登记生效日:20180118 变更前: 变更后: 申请日:20150707

    专利申请权、专利权的转移

  • 2015-12-02

    实质审查的生效 IPC(主分类):G06F21/53 申请日:20150707

    实质审查的生效

  • 2015-11-04

    公开

    公开

说明书

技术领域

本发明涉及计算机操作系统的安全内核服务技术,具体涉及一种飞腾CPU上三态操作系统安全内核服务动态运行方法。

背景技术

1、操作系统以及内核设计当前所遇到的主要问题。

操作系统一般作为硬件之上直接运行的基础软件,其功能是直接控制和管理系统资源(包括软件、硬件),充分发挥硬件资源的性能;它常驻内存,并提供给应用程序和用户两种接口:操作接口和编程接口。用户通过操作接口,无需了解许多与硬件和系统软件的细节,就可以方便地使用计算机。各种程序可以使用编程接口让操作系统为其服务,并通过操作系统来使用硬件和软件资源。操作系统的种类相当多,各种设备安装的操作系统可从简单到复杂,可分为智能卡操作系统、实时操作系统、传感器节点操作系统、嵌入式操作系统、个人计算机操作系统、多处理器操作系统、网络操作系统和大型机操作系统。目前较为常见的操作系统有UNIX、Linux、Mac OS、Windows、iOS、Android等。

在软件工程思想和结构程序设计方法的影响下诞生的现代操作系统,几乎都是层次式的结构,操作系统的各项功能分别被设置在不同的层次上。如图1所示的现有技术的二态操作系统中,内核态下的模块为操作系统的服务模块,在内核态下,一些与硬件关联较紧密的服务模块,诸如时钟管理、中断处理、设备驱动等处于内核态的最底层,其次是运行频率较髙的服务模块,诸如进程管理、存储器管理和设备管理等,这两部分内容构成了操作系统的内核,其指令操作工作在内核态,内核态的需要访问硬件层的硬件资源的服务模块则通过设备接口访问硬件资源,并包含固件和系统加载模块用于实现操作系统的启动;应用程序基于内核态提供的各项服务运行,一般工作在用户态,用户态的应用程序通过系统调用接口来实现和内核态的服务模块进行交互。

如图1所示,操作系统一般使用系统调用接口作为用户态的用户程序和内核态的服务模块之间的交互接口。操作系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、进行I/0传输以及管理文件等),都必须通过系统调用接口方式向操作系统提出服务请求,并由操作系统代为完成。通过系统调用接口的方式来使用系统功能,可以保证系统的稳定性和安全性,防止用户随意更改或访问系统的数据或命令。通常,一个操作系统提供的系统调用接口命令有几十乃至上百条之多。这些系统调用构成了内核的主要服务接口,按功能大致可分为如下几类:

● 设备管理,完成设备的请求或释放,以及设备启动等功能。

● 文件管理,完成文件的读、写、创建及删除等功能。

● 进程控制,完成进程的创建、撤销、阻塞及唤醒等功能。

● 进程通信,完成进程之间的消息传递或信号传递等功能。

● 内存管理,完成内存的分配、回收以及获取作业占用内存区大小及始址等功能。

操作系统的体系结构是一个开放的问题,除了系统划分成用户态、内核态这种总体层次结构之外,内核态结构还细分形成了两种体系结构:大内核和微内核。

● 大内核系统将操作系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为应用提供高性能的系统服务。因为各管理模块之间共享信息,能有效利用相互之间的有效特性,所以具有无可比拟的性能优势。但随着操作系统的发展,内核提供的服务越来越多,形式越来越复杂,设计规模也急剧增长,操作系统也面临着“软件危机”困境。除了可靠性的降低,任何一个内核漏洞都会让恶意攻击者轻易控制整个系统。为解决操作系统的内核代码过于庞大带来的安全问题和复杂性问题,于是提出了微内核的体系结构。

● 微内核的体系结构将内核中最基本的功能(如进程管理等)保留在内核,而将那些不需要在核心态执行的功能移到用户态执行,从而降低了内核的设计复杂性。而那些移出内核的操作系统代码根据分层的原则被划分成若干服务程序,它们的执行相互独立,交互则都借助于微内核进行通信。微内核结构有效地分离了内核与服务、服务与服务,使得它们之间的接口更加清晰,维护的代价大大降低,各部分可以独立地优化和演进,从而保证了操作系统的安全性和可靠性。微内核结构的最大问题是性能问题,因为需要频繁地在核心态和用户态之间进行切换,操作系统的执行开销偏大。因此有的操作系统将那些频繁使用的系统服务又移回内核,从而保证系统性能。

2、当前操作系统的安全威胁。

影响操作系统安全性的因素很多。首先,操作系统是一个共享资源系统,支持多用户同时共享一套计算机系统的资源,有资源共享就需要有资源保护,涉及到各种安全性问题;其次,随着计算机网络的迅速发展,除了信息的存储和处理外,存在大量数据传送操作,于是就需要有网络安全和数据信息的保护,防止入侵者恶意破坏。为了理解现有的安全威胁(攻击)及其类型,将计算机系统和网络通信的安全要求分为四个方面:

● 机密性。要求计算机系统中的信息只能由被授权者进行规定范围内的访问。

● 完整性。要求计算机系统中的信息只能被授权用户修改,修改操作包括写、改写、改变状态、删除和创建等。

● 可用性。防止非法独占资源,每当合法用户需要时,总能访问到合适的计算机系统资源,为其提供所需的服务。

● 真实性。要求计算机系统能证实用户的身份,防止非法用户侵入系统,以及确认数据来源的真实性。

操作系统面临的安全威胁基本上代表了计算机系统面临的威胁。计算机病毒和黑客攻击是操作系统所受到的安全威胁中最为人们熟悉的两种形式。病毒本质上是一段具有自我复制能力及隐蔽性、传染性和潜伏性等特征的可执行代码;黑客攻击则表现为具备某些计算机专业知识和技术的人员通过分析挖掘系统漏洞和利用网络对特定系统进行窃密、破坏或占领。目前操作系统需要保护的主要目标是敏感数据不受非法窃取或破坏,这些敏感数据既可以是密钥、文档或者数据库,也可以是代码或者算法。

3、飞腾CPU平台简介。

飞腾系列通用处理器是由国防科技大学自主研发的高性能通用微处理器,面向事务处理和数据中心服务器需求,应用领域包括党政军办公业务系统、大数据处理、云计算应用等。其中的飞腾1500+系列CPU基于ARM64架构设计,兼容armv8指令集,包括通用型、嵌入式或桌面型和高性能计算型等多个型号。芯片使用成熟的SOC技术和28nm生产工艺,核心时钟频率1.5GHz,采用多核多线程体系结构,每颗CPU由4-16个SMP(对称多处理器)核心,具有强大的计算和事务处理能力。此外芯片上还集成多个存控单元和DDR3存储通道,PCIe 3.0 I/O接口,有效解决了IO瓶颈问题。

飞腾1500+系列CPU是一种字长为64位的ARM指令集兼容通用处理器,拥有4种运行级别EL0-EL3。和X86系列处理器ring0—ring3的作用类似,这些运行级别决定了处理器的指令执行和地址访问权限。其中EL0对应权限最低的用户程序执行模式;EL1对应传统操作系统的内核态执行模式;EL2对应虚拟机监控器hypervisor执行模式;EL3为最高特权态,运行安全监视器模式。CPU的体系结构设计和SoC的IO设计都为EL3特权态提供了特别支持,使一些自定义的计算资源、内存资源以及IO设备控制器只能从EL3态访问,对其它特权态隔离。换句话说,EL3特权态能够访问系统所有资源,通过配置可以开放有限资源供较低特权级访问。利用体系结构设计提供的异常处理机制,从较低特权态可以通过指令或者外部中断引发的异常陷入到EL3,从而切换到最高特权态的处理代码,EL3模式的代码也可以执行返回指令切换到某个较低特权态。

飞腾1500+系列CPU具备对TrustZone技术的支持。该技术将防护措施整合到处理核心、访存机制、总线和系统外围IP器件中,并通过软硬件的协同工作实现安全,并能最小化设备成本。TrustZone不是将受保护资产放在特定硬件模块内,而是提供机制可以将系统中的任何部分设置为受安全隔离,它提供了一个基础平台以供SoC设计者从一个组件范围中选取满足自己特定功能的组件实现受保护的安全环境。其基本思想是通过将所有的SoC硬件和软件进行分区,系统资源被划分为两个区:Secure world对应于安全分区,Normal world对应于普通分区。Secure world 资源不能被Normal world软硬件访问。处理器拥有两种虚拟态,一个作为Non-secure,另一个是Secure,并会提供在两个虚拟核之间安全切换的monitor mode机制,由主系统总线所发送的NS位值确定虚拟核的标识,并控制指令和数据的访问权限。Non-secure虚拟处理器只能访问Non-secure系统资源,但Secure虚拟处理器可以访问所有资源。MMU(Memory Management Unit)通过软件控制的转换表管理内存映射转换。对应于两个虚拟处理器,TrustZone硬件机制提供两个虚拟MMU。这样每个安全语境都有自己的转换表,可以独立控制地址映射。L1转换表条目格式中含有一个NS域,用于Secure态虚处理器确定它要访问哪种内存区域。Non-secure态虚处理器会忽略该域,内存访问总会使NS=1。这种设计使Secure态处理器可以访问两个态的内存。总线协议规范中为读和写信道都加入了额外的控制信号位,也就是Non-Secure位,简记为NS位,可以控制不同world的器件的访问许可。在飞腾处理器平台上,通过EL3态软件的控制,可以将需要的资源,包括内存、设备控制器等隔离到一个可信的安全域,实现独立的安全操作环境,对系统的其余部分提供服务。

综上所述,针对飞腾CPU平台乃至所有CPU计算平台,如何实现操作系统安全内核服务的安全、可靠、高效、灵活地运行,已经成为一项亟待解决的关键的技术问题。

发明内容

本发明要解决的技术问题是:针对现有技术的上述技术问题,提供一种能够实现对系统特定硬件资源的安全保护、实现对操作系统核心服务的安全访问、高效支持系统的可信性确认,能够有效提升系统的安全性,降低传统内核漏洞引入的安全风险,并向用户提供高效灵活的可信计算生态环境的飞腾CPU上三态操作系统安全内核服务动态运行方法。

为了解决上述技术问题,本发明采用的技术方案为:

一种飞腾CPU上三态操作系统安全内核服务动态运行方法,步骤包括:

1)保持用户态下应用程序的最低特权等级不变,将操作系统的内核划分为次低特权等级的系统态和最高特权等级的内核态,在内核态中建立动态安全内核服务框架作为安全内核服务的容器,并通过安全内核服务调用接口SKSC向系统态的系统服务提供服务;通过系统态提供操作系统中除安全内核服务以外的操作系统内核功能服务,通过系统调用接口向用户态的应用程序提供服务,并在系统态中建立虚拟驱动接口以支持用户态的应用程序调用安全内核服务;

2)在CPU加电后,通过内核态下的安全固件加载动态安全内核服务框架及内置的安全内核服务;

3)通过所述安全固件载入系统服务加载启动部件OSLM,通过系统服务加载启动部件OSLM在系统态下启动系统服务;

4)动态安全内核服务框架基于已加载的安全内核服务提供服务并响应安全内核服务的动态加载请求和动态卸载请求。

优选地,所述步骤1)中通过安全内核服务调用接口SKSC向系统态的系统服务提供服务时,所述安全内核服务调用接口SKSC不允许传递用户态的内存指针。

优选地,所述步骤2)的详细步骤包括:

2.1)在CPU加电前,对存储的安全固件进行可信验证,如果可信验证不通过,则报错并停止启动;如果可信验证通过,则在CPU加电、内核态下的安全固件完成基本初始化后,通过所述安全固件设定具有最高特权等级的安全存储模块;

2.2)通过所述安全固件加载所述安全存储模块的驱动程序;

2.3)通过所述安全固件加载动态安全内核服务框架,继而检测并加载安全固件中内置的安全内核服务;

2.4)通过所述安全固件初始化动态安全内核服务框架中用于实现安全内核服务全局入口管理和分配的安全内核服务监控模块,通过所述安全内核服务监控模块记录已加载完成的内置的安全内核服务。

优选地,所述步骤2.4)中的安全内核服务监控模块基于服务记录整形数组KSN2SKS[]和服务描述符数组SKSDISCRIPTOR[]来实现安全内核服务全局入口管理和分配;所述服务记录整形数组KSN2SKS[]用于记录来自SKSC的服务调用号和具体安全内核服务之间的对应关系,其下标对应内核服务调用号KSN,其每一个元素的值为服务描述符数组SKSDISCRIPTOR[]的索引号;所述服务描述符数组SKSDISCRIPTOR[]用于记录所有已加载的安全内核服务,每一个元素为一个安全内核服务的描述结构。

优选地,所述服务描述符数组SKSDISCRIPTOR[]的字段包括安全内核服务对应服务映像的地址段首部Header、重定位地址Relocation、代码段和数据段data,所述代码段包括初始化函数指针Init、服务处理函数指针Handler。

优选地,所述步骤2.4)中记录已加载完成的内置的安全内核服务的步骤包括:

2.4.1)针对每一个已加载完成的内置的安全内核服务,分配内核服务调用号KSN的号段,在服务描述符数组SKSDISCRIPTOR[]中建立对应的描述结构,在服务记录整形数组KSN2SKS[]中生成内核服务调用号KSN的号段和服务描述符数组SKSDISCRIPTOR[]中的描述结构之间的映射关系;

2.4.2)针对每一个内置的安全内核服务,读取对应的服务映像中携带的数据结构,在具有最高特权等级的安全内存中为该服务分配执行内存空间并将安全内核服务的服务映像复制到该内存空间中,将该执行内存空间的首地址由服务描述符数组的地址段首部Header结构记录;对该执行内存空间中待运行的服务映像进行地址重定位改写,将重定位改写的地址由服务描述符数组的重定位地址Relocation记录;将该执行内存空间中待运行服务映像中的初始化函数地址和服务处理函数地址分别写入服务描述符数组的初始化函数指针Init和服务处理函数指针Handler,并调用重定位后的初始化函数Init()进行初始化,如果初始化成功,则将内核服务调用号KSN的号段作为反馈参数随着安全内核服务加载成功的消息返回给安全内核服务调用接口SKSC的调用方,重定位后的初始化函数Handler()开始等待来自安全内核服务调用接口SKSC的调用;否则如果初始化失败则返回服务加载失败,则释放加载失败的安全内核服务在服务记录整形数组KSN2SKS[]和服务描述符数组SKSDISCRIPTOR[]中的资源。

优选地,所述步骤3)的详细步骤包括:

3.1)通过所述安全固件载入系统服务加载启动部件OSLM到次低特权等级的内存中;

3.2)将CPU指令指针寄存器修改为系统服务加载启动部件OSLM的入口指令地址,并将系统服务加载启动部件OSLM的特权态切换为用户态对应的次低权限;

3.3)通过所述系统服务加载启动部件OSLM在系统态下加载系统服务模块对应的内核,并建立用于实现用户态的应用程序调用内核态下安全内核服务的虚拟驱动接口。

优选地,所述步骤4)中基于已加载的安全内核服务提供服务的具体步骤包括:当用户态的应用程序请求安全内核服务时,用户态的应用程序通过系统调用接口调用系统态下的虚拟驱动接口陷入系统态,系统态下的系统服务将虚拟驱动接口的调用转换为安全内核服务调用接口SKSC的调用陷入内核态,内核态下的动态安全内核服务框架根据安全内核服务调用接口SKSC的调用请求的内核服务调用号KSN,指定对应的安全内核服务处理并依次通过安全内核服务调用接口SKSC、虚拟驱动接口、系统调用接口将服务结果逐层返回给用户态下请求安全内核服务的应用程序。

优选地,所述步骤4)中响应安全内核服务的动态加载请求和动态卸载请求的详细步骤包括:

4.1)所述动态安全内核服务框架监控接收用户态下的应用程序依次通过系统调用接口、虚拟驱动接口、安全内核服务调用接口SKSC发出动态加载请求或者由安全存储模块引发的安全内核服务的动态加载请求和动态卸载请求,当收到动态加载请求时,跳转执行步骤4.2);当系统关闭或者收到动态卸载请求时,跳转执行步骤4.6);

4.2)所述动态安全内核服务框架基于加载的安全存储模块的驱动程序扫描用户的文件系统或者安全存储模块,搜索符合给定文件名的加密的服务映像文件,如果搜索失败,则返回安全内核服务加载失败并跳转执行步骤4);如果搜索成功,则将用户的文件系统或者安全存储模块中加密的服务映像文件下载到具有最高特权等级的安全内存中的缓冲区,并在缓冲区内解密为明文,如果解密失败,则返回安全内核服务加载失败并跳转执行步骤4);如果解密成功,则跳转执行下一步;

4.3)所述动态安全内核服务框架对已解密的服务映像明文中的服务发布者和签名进行合法性验证,如果验证为非法,则返回安全内核服务加载失败并跳转执行步骤4);如果验证为合法,则跳转执行下一步;

4.4)针对该验证为合法的安全内核服务,分配内核服务调用号KSN的号段,在服务描述符数组SKSDISCRIPTOR[]中建立对应的描述结构,在服务记录整形数组KSN2SKS[]中生成内核服务调用号KSN的号段和服务描述符数组SKSDISCRIPTOR[]中的描述结构之间的映射关系;

4.5)针对该验证为合法的安全内核服务,读取对应的服务映像中携带的数据结构,在具有最高特权等级的安全内存中为该服务分配执行内存空间并将安全内核服务的服务映像复制到该内存空间中,将该执行内存空间的首地址由服务描述符数组的地址段首部Header结构记录;对该执行内存空间中待运行的服务映像进行地址重定位改写,将重定位改写的地址由服务描述符数组的重定位地址Relocation记录;将该执行内存空间中待运行服务映像中的初始化函数地址和服务处理函数地址分别写入服务描述符数组的初始化函数指针Init和服务处理函数指针Handler,并调用重定位后的初始化函数Init()进行初始化,如果初始化成功,则将内核服务调用号KSN的号段作为反馈参数随着安全内核服务加载成功的消息返回给安全内核服务调用接口SKSC的调用方,重定位后的初始化函数Handler()开始等待来自安全内核服务调用接口SKSC的调用,跳转执行步骤4);否则如果初始化失败则返回服务加载失败,则释放加载失败的安全内核服务在服务记录整形数组KSN2SKS[]和服务描述符数组SKSDISCRIPTOR[]中的资源,跳转执行步骤4);

4.6)卸载指定的安全内核服务,释放被卸载安全内核服务在服务记录整形数组KSN2SKS[]和服务描述符数组SKSDISCRIPTOR[]中的资源;如果卸载指定的安全内核服务操作是由收到动态卸载请求触发的则跳转执行步骤4)。

本发明飞腾CPU上三态操作系统安全内核服务动态运行方法具有下述优点:

1、安全可靠性高。本发明保持用户态下应用程序的最低特权等级不变,将操作系统的内核划分为次低特权等级的系统态和最高特权等级的内核态,从而通过三态操作系统结构实现了一个新的内核态,受到严格的特权保护,三态之间通过系统调用接口、安全内核服务调用接口SKSC两种接口实现调用,用户态程序仅同系统态代码有交互接口,同内核态没有任何直接交互,从而能够有效减少了通过系统漏洞非法访问内核态服务的风险,具有安全可靠性高的优点,能够实现对系统特定硬件资源的安全保护、实现对操作系统核心服务的安全访问、高效支持系统的可信性确认,能够有效提升系统的安全性,降低传统内核漏洞引入的安全风险,并向用户提供高效灵活的可信计算生态环境。

2、运行高效。本发明仅将少部分涉及安全操作的安全内核服务单独隔离在内核态运行,大部分传统内核服务仍然共处在系统态代码中,因此只有安全操作才会引导系统态和内核态之间的状态切换开销,非安全操作不存在系统态和内核态之间的状态切换开销,因此避免了微内核系统服务之间大量的状态切换开销,在提高安全性的同时不会明显降低系统运行效率,具有运行高效的优点。

3、运行成本低。本发明支持安全内核服务的动态加载和卸载,因此针对现有技术专用器件实现的可信模块能够以软件形式的安全内核服务在系统CPU上执行,能够充分利用系统CPU的高性能提高算法的执行效率,部署简单,运行效率高,而且还能够有效降低安全运行的硬件采购、维护成本。

4、灵活性及可扩展性好。本发明支持安全内核服务的动态加载和卸载,可以将需要保护的安全服务动态加载/卸载到内核态,灵活性及可扩展性好,而且还有效克服了传统可信部件难以升级的缺陷。

5、兼容性强。本发明的三态操作系统将传统操作系统中用户态的环境以及系统态下的绝大部分系统服务保持不变,仅仅是将安全内核服务基于动态安全内核服务框架进行分层和隔离,因此能够对操作系统的改动非常小,能够方便地可以整合其它现有的安全机制。以可信技术为例,本发明可以通过三态结构将传统可信部件的大部分功能在内核态实现,不但能够提升系统整合度,还降低了系统的成本。

附图说明

图1为现有技术的操作系统架构示意图。

图2为应用本发明实施例方法的硬件平台结构示意图。

图3为本发明实施例的基本流程示意图。

图4为本发明实施例的三态操作系统的架构示意图。

图5为本发明实施例中服务记录整形数组和服务描述符数组之间的映射关系示意图。

图6为本发明实施例中动态加载安全内核服务的流程示意图。

具体实施方式

如图2所示,本实施例具体以在飞腾1500A处理器平台上实现为例进行说明。基于SoC(System on Chip)的飞腾1500A处理器平台包含有多(4~16)个处理核、访存控制器MCU、DDR3内存,基于AMBA总线的USB控制器、SATA控制器、FLASH存储器,以及多个支持PCIE3.0协议的插槽。此外,该平台还包括一个简单的CRTM模块仅通过SPI总线和Flash存储器连接,用于在主CPU加电前对Flash存储器的内容进行可信性验证。

如图3所示,本实施例飞腾CPU上三态操作系统安全内核服务动态运行方法的步骤包括:

1)保持用户态下应用程序的最低特权等级不变,将操作系统的内核划分为次低特权等级的系统态和最高特权等级的内核态,在内核态中建立动态安全内核服务框架作为安全内核服务的容器,并通过安全内核服务调用接口SKSC向系统态的系统服务提供服务;通过系统态提供操作系统中除安全内核服务以外的操作系统内核功能服务,通过系统调用接口向用户态的应用程序提供服务,并在系统态中建立虚拟驱动接口以支持用户态的应用程序调用安全内核服务;

2)在CPU加电后,通过内核态下的安全固件加载动态安全内核服务框架及内置的安全内核服务;

3)通过安全固件载入系统服务加载启动部件OSLM,通过系统服务加载启动部件OSLM在系统态下启动系统服务;

4)动态安全内核服务框架基于已加载的安全内核服务提供服务并响应安全内核服务的动态加载请求和动态卸载请求。

如图4所示,本实施例将传统操作系统的应用态-内核态两层结构被扩展为用户态-系统态-内核态三层结构,在注重对传统操作系统和应用程序的兼容的宗旨下,仅对传统操作系统内核源代码进行少量修改,保留了绝大多数传统操作系统的内核功能,通过增加部分固件功能代码,传统操作系统的内核实现在本实施例中则被切分成不同特权等级的两部分,即内核态下的安全核心部分(EL3)和系统态下的系统服务功能部分(EL1),在内核态中建立动态安全内核服务框架作为安全内核服务的容器,为操作系统内核态下的安全内核服务的调用实现了内核态下面向系统态的安全内核服务调用接口SKSC(Secure Kernel Service Call),实现了对内核态服务模块的动态加载和调度,从而提供了内核态服务的安全运行能力,并对操作系统的可信启动提供了支持。本实施例扩展出的内核态作为安全防护的核心和资源安全隔离的屏障,出于多方面考虑,CPU设计为在加电后首先执行内核态对应的特权级指令,因此内核态代码由安全固件首先加载执行。此外,为了方便开发和管理,需要内核态功能包含有多个安全内核服务,并能分别加载和调度执行,所以本实施例在内核态中建立动态安全内核服务框架作为安全内核服务的容器,在CPU加电后首先执行,动态安全内核服务框架以在线方式动态加载安全内核服务,并可以动态卸载安全内核服务。本实施例将传统操作系统的应用态-内核态两层结构被扩展为用户态-系统态-内核态三层结构,使得针对安全内核服务涉及的安全操作需要触发到内核态的切换,但是对于绝大多数的非安全操作而言,其执行流程仍和传统Linux操作系统保持一致,没有引入状态切换等开销,因此引入的额外开销非常小,保持了系统的高效性。

本实施例中,构成三态操作系统的用户态-系统态-内核态三层结构如下:

(1)用户态:用户态下应用程序的最低特权等级在本实施例和传统的操作系统中保持不变,即内核外环境以及系统调用接口完全不变,应用态运行在EL0特权等级。因此,用户态下应用程序二进制代码可完全复用传统操作系统下的应用程序二进制代码,能兼容传统操作系统的应用程序。

(2)内核态:内核态下的安全核心部分提供和安全问题紧密相关的安全内核服务,例如密码服务、权限管理服务、安全日志服务等,运行在EL3特权等级,安全核心部分的动态安全内核服务框架作为安全内核服务的容器,通过安全内核服务调用接口SKSC向系统态的系统服务提供服务;安全内核服务既可以是建立在安全硬件资源上的硬件相关安全内核服务,也可以是不建立在安全硬件资源上的普通安全内核服务。

(3)系统态:系统态下的系统服务功能部分提供传统操作系统内核的大部分功能性的系统服务,并通过系统调用接口向用户态的应用程序输出传统内核服务,工作在EL1特权等级,系统态中建立有虚拟驱动接口以支持用户态的应用程序调用安全内核服务。

本实施例中,步骤1)中通过安全内核服务调用接口SKSC向系统态的系统服务提供服务时,安全内核服务调用接口SKSC不允许传递用户态的内存指针。由于安全内核服务调用接口SKSC不允许传递用户态的内存指针,这就很大程度上避免了恶意应用程序通过漏洞溢出等方式改变内核态代码的正常执行路径,因此提高了内核态资源的隔离性和抗攻击性。

本实施例中,步骤2)的详细步骤包括:

2.1)在CPU加电前,对存储的安全固件进行可信验证,如果可信验证不通过,则报错并停止启动;如果可信验证通过,则在CPU加电、内核态下的安全固件完成基本初始化后,通过安全固件设定具有最高特权等级的安全存储模块;本实施例中,对存储的安全固件进行可信验证具体是基于CRTM模块(可信度量根的核心,core root of trust for measurement)实现的,用于确保安全固件的可信度,防止安全固件被篡改;

2.2)通过安全固件加载安全存储模块的驱动程序;

2.3)通过安全固件加载动态安全内核服务框架,继而检测并加载安全固件中内置的安全内核服务;

2.4)通过安全固件初始化动态安全内核服务框架中用于实现安全内核服务全局入口管理和分配的安全内核服务监控模块,通过安全内核服务监控模块记录已加载完成的内置的安全内核服务。

安全存储模块是保证安全内核服务动态运行的基础。参见图2,其中阴影填充的DDR3内存、USB控制器和Flash存储器为本实施例设置的具有最高特权等级的安全存储模块,其仅仅是具有EL3权限的代码(安全内核服务)才能够进行访问和操作,下文中分别称为secure DDR、secure USB和secure Flash。secure DDR用于解压安全内核服务的服务映像文件;secure Flash用于放置安全固件(内置动态安全内核服务框架及部分内置的安全内核服务);secure USB用于动态加载额外的内核安全服务。本实施例中涉及的安全内核服务具体包括核心可信模块服务KTPM和核心系统认证服务KAS,核心可信模块服务KTPM集成安全固件中,在安全固件初始化动态安全内核服务框架中直接通过secure Flash加载,核心系统认证服务KAS为后续借助secure USB动态加载。需要说的是,secure DDR、secure USB和secure Flash的安全设置具体是指基于TrustZone设置设定相关寄存器和数据结构实现的, TrustZone设置为飞腾1500A处理器平台的自带功能,故在此不再详述。毫无疑问,除了飞腾1500A处理器平台以外的其他CPU平台而言,只要该CPU平台具有安全存储设备的功能支持,其同样也可以设置安全存储模块。

本实施例中,步骤2.4)中的安全内核服务监控模块基于服务记录整形数组KSN2SKS[]和服务描述符数组SKSDISCRIPTOR[]来实现安全内核服务全局入口管理和分配;服务记录整形数组KSN2SKS[]用于记录来自SKSC的服务调用号和具体安全内核服务之间的对应关系,其下标对应内核服务调用号KSN(Kernel Service Number),其每一个元素的值为服务描述符数组SKSDISCRIPTOR[]的索引号;服务描述符数组SKSDISCRIPTOR[]用于记录所有已加载的安全内核服务,每一个元素为一个安全内核服务的描述结构。服务记录整形数组KSN2SKS[]和服务描述符数组SKSDISCRIPTOR[]之间为多对一的映射关系,这是由于每一个安全内核服务只有一个服务描述符,但是却可能被分配多个内核服务调用号KSN。

如图5所示,服务记录整形数组KSN2SKS[]中元素index1和index2都映射至服务描述符数组SKSDISCRIPTOR[]中的元素index0,服务记录整形数组KSN2SKS[]中元素index3~index5都映射至服务描述符数组SKSDISCRIPTOR[]中的元素index1。动态安全内核服务框架会首先注册一个KSN映射到自身提供安全内核服务监控模块中的服务加载处理函数,从而以实现动态加载安全内核服务的安全内核服务调用接口SKSC。此后,在上层请求加载新的安全内核服务时,由该服务加载处理函数为新安全内核服务分配KSN号段,初始化对应的服务描述符数组SKSDISCRIPTOR[]中的元素,并在服务记录整形数组KSN2SKS[]数组中建立映射关系。本实施例基于服务记录整形数组KSN2SKS[]和服务描述符数组SKSDISCRIPTOR[]来实现对安全内核服务的动态管理,使得动态安全内核服务框架拥有在线加载和卸载安全内核服务的能力,确保在线加载和卸载安全内核服务的快捷高效。如果框架在服务加载过程中出现任何错误,服务加载处理函数都将直接返回错误,并释放在服务记录整形数组KSN2SKS[]和服务描述符数组SKSDISCRIPTOR[]中的资源,这样虽然可能给服务记录整形数组KSN2SKS[]引入“碎片”,但如果服务记录整形数组KSN2SKS[]资源足够多或者服务加载卸载的频率不高,则碎片效应带来的影响可不予考虑。本实施例中为新安全内核服务分配的KSN号段为连续的号段,此外也可以分配不连续的号段。

本实施例中,服务描述符数组SKSDISCRIPTOR[]的字段包括安全内核服务对应服务映像的地址段首部Header、重定位地址Relocation、代码段和数据段data,代码段包括初始化函数指针Init、服务处理函数指针Handler。

本实施例中,本实施例支持最多256个内核服务号和最多32个内核服务。因此,服务记录整形数组KSN2SKS[]的长度为256,服务描述符数组SKSDISCRIPTOR[]的长度为32。

服务记录整形数组KSN2SKS[]的C语言表述的伪代码为:Int KSN2SKS[256];

服务描述符数组SKSDISCRIPTOR[]的C语言描述的伪代码为:

Struct SKSD{

Struct header h;

Struct relocation r;

Int (*handler)();

Int (*init)();

Strcut data d;

}SKSDISCRIPTOR[32];

上述伪代码中,Struct header h表示服务映像的地址段首部Header,Struct relocation r表示重定位地址Relocation,Int (*handler)() 表示服务处理函数指针Handler,Int (*init)() 表示初始化函数指针Init,Strcut data d表示数据段data。

本实施例中,步骤2.4)中记录已加载完成的内置的安全内核服务的步骤包括:

2.4.1)针对每一个已加载完成的内置的安全内核服务,分配内核服务调用号KSN的号段,在服务描述符数组SKSDISCRIPTOR[]中建立对应的描述结构,在服务记录整形数组KSN2SKS[]中生成内核服务调用号KSN的号段和服务描述符数组SKSDISCRIPTOR[]中的描述结构之间的映射关系;

2.4.2)针对每一个内置的安全内核服务,读取对应的服务映像中携带的数据结构,在具有最高特权等级的安全内存中为该服务分配执行内存空间并将安全内核服务的服务映像复制到该内存空间中,将该执行内存空间的首地址由服务描述符数组的地址段首部Header结构记录;对该执行内存空间中待运行的服务映像进行地址重定位改写,将重定位改写的地址由服务描述符数组的重定位地址Relocation记录;将该执行内存空间中待运行服务映像中的初始化函数地址和服务处理函数地址分别写入服务描述符数组的初始化函数指针Init和服务处理函数指针Handler,并调用重定位后的初始化函数Init()进行初始化,如果初始化成功,则将内核服务调用号KSN的号段作为反馈参数随着安全内核服务加载成功的消息返回给安全内核服务调用接口SKSC的调用方,重定位后的初始化函数Handler()开始等待来自安全内核服务调用接口SKSC的调用;否则如果初始化失败则返回服务加载失败,则释放加载失败的安全内核服务在服务记录整形数组KSN2SKS[]和服务描述符数组SKSDISCRIPTOR[]中的资源。

本实施例中仅仅内置核心可信模块服务KTPM一个安全内核服务,因此仅仅只需要针对核心可信模块服务KTPM进行之前前述的步骤2.4.1)~2.4.2);毫无疑问,也可以根据需要内置更多的安全内核服务,其原理与本实施例相同,故在此不再赘述。

本实施例中,动态安全内核服务框架作为安全内核服务的容器,其主要功能包括:a)、统一监控和管理安全内核服务的加载和卸载。安全内核服务工作在最高特权态,系统服务代码通过安全内核服务接口调用接口SKSC陷入到内核态调用安全内核服务,通过内核服务调用号KSN呼叫所需的服务;b)、获取动态加载的安全内核服务的服务映像。加载安全内核服务时,安全内核服务实例以加密映像方式在线传给动态安全内核服务框架,安全内核服务的服务映像既可以从用户态载入,又可以从安全内核隔离独占的设备(如安全存储器、安全串口等)上加载;c)、签名服务发布者的签名。动态安全内核服务框架具备服务发布者签名验证的能力,依据安全内核服务明文映像的签名可以判断该服务的来源是否合法;d)、解密以及读取安全内核服务的信息。解密后的安全内核服务映像具备地址段首部、一个重定位模块、以及代码段和数据段,其中代码段一般包含一个初始化函数Init()和一个初始化函数Handler()。动态安全内核服务框架依据地址段首部和重定位模块给服务分配安全内存,加载待执行服务代码到安全内存,对待执行代码进行地址重定位,调用服务代码的初始化函数Init(),然后等待初始化函数Handler()被安全内核服务接口调用接口SKSC调用。

本实施例中,步骤3)的详细步骤包括:

3.1)通过安全固件载入系统服务加载启动部件OSLM到次低特权等级的内存中;

3.2)将CPU指令指针寄存器修改为系统服务加载启动部件OSLM的入口指令地址,并将系统服务加载启动部件OSLM的特权态切换为用户态对应的次低权限;

3.3)通过系统服务加载启动部件OSLM在系统态下加载系统服务模块对应的内核,并建立用于实现用户态的应用程序调用内核态下安全内核服务的虚拟驱动接口。系统服务模块对应的内核是修改过的Linux内核,它和标准Linux内核的显著区别是加入了安全内核服务调用接口SKSC的接口函数,从而基于安全内核服务调用接口SKSC将内核分隔为系统态和内核态,并创建了虚拟驱动接口以供应用层调用安全内核服务。用户态的应用程序请求安全内核服务的方式是利用系统调用接口访问上述虚拟驱动接口,该调用引发陷入到系统态,并由系统服务处理后转换为安全内核服务调用接口SKSC,陷入到内核态,由内核服务处理后逐层返回,最终通过系统调用的返回将服务结果交给用户程序。

本实施例中,步骤4)中基于已加载的安全内核服务提供服务的具体步骤包括:当用户态的应用程序请求安全内核服务时,用户态的应用程序通过系统调用接口调用系统态下的虚拟驱动接口陷入系统态,系统态下的系统服务将虚拟驱动接口的调用转换为安全内核服务调用接口SKSC的调用陷入内核态,内核态下的动态安全内核服务框架根据安全内核服务调用接口SKSC的调用请求的内核服务调用号KSN,指定对应的安全内核服务处理并依次通过安全内核服务调用接口SKSC、虚拟驱动接口、系统调用接口将服务结果逐层返回给用户态下请求安全内核服务的应用程序。

本实施例中,步骤4)中响应安全内核服务的动态加载请求和动态卸载请求的详细步骤包括:

4.1)动态安全内核服务框架监控接收用户态下的应用程序依次通过系统调用接口、虚拟驱动接口、安全内核服务调用接口SKSC发出动态加载请求或者由安全存储模块引发的安全内核服务的动态加载请求和动态卸载请求,当收到动态加载请求时,跳转执行步骤4.2);当系统关闭或者收到动态卸载请求时,跳转执行步骤4.6);

4.2)动态安全内核服务框架基于加载的安全存储模块的驱动程序扫描secure USB(也可以采用其他类型的安全存储模块,例如secure DDR和secure Flash以及其他类型的安全存储设备来提供加密的服务映像文件,此外还可以通过用户的文件系统来提供加密的服务映像文件),搜索符合给定文件名的加密的服务映像文件,如果搜索失败,则返回安全内核服务加载失败并跳转执行步骤4);如果搜索成功,则将用户的文件系统或者安全存储模块中加密的服务映像文件下载到具有最高特权等级的安全内存secure DDR中的缓冲区,并在缓冲区内解密为明文,如果解密失败,则返回安全内核服务加载失败并跳转执行步骤4);如果解密成功,则跳转执行下一步;

4.3)动态安全内核服务框架对已解密的服务映像明文中的服务发布者和签名进行合法性验证,如果验证为非法,则返回安全内核服务加载失败并跳转执行步骤4);如果验证为合法,则跳转执行下一步;

4.4)针对该验证为合法的安全内核服务,分配内核服务调用号KSN的号段,在服务描述符数组SKSDISCRIPTOR[]中建立对应的描述结构,在服务记录整形数组KSN2SKS[]中生成内核服务调用号KSN的号段和服务描述符数组SKSDISCRIPTOR[]中的描述结构之间的映射关系;

4.5)针对该验证为合法的安全内核服务,读取对应的服务映像中携带的数据结构,在具有最高特权等级的安全内存中为该服务分配执行内存空间并将安全内核服务的服务映像复制到该内存空间中,将该执行内存空间的首地址由服务描述符数组的地址段首部Header结构记录;对该执行内存空间中待运行的服务映像进行地址重定位改写,将重定位改写的地址由服务描述符数组的重定位地址Relocation记录;将该执行内存空间中待运行服务映像中的初始化函数地址和服务处理函数地址分别写入服务描述符数组的初始化函数指针Init和服务处理函数指针Handler,并调用重定位后的初始化函数Init()进行初始化,如果初始化成功,则将内核服务调用号KSN的号段作为反馈参数随着安全内核服务加载成功的消息返回给安全内核服务调用接口SKSC的调用方,重定位后的初始化函数Handler()开始等待来自安全内核服务调用接口SKSC的调用,跳转执行步骤4);否则如果初始化失败则返回服务加载失败,则释放加载失败的安全内核服务在服务记录整形数组KSN2SKS[]和服务描述符数组SKSDISCRIPTOR[]中的资源,跳转执行步骤4);

4.6)卸载指定的安全内核服务,释放被卸载安全内核服务在服务记录整形数组KSN2SKS[]和服务描述符数组SKSDISCRIPTOR[]中的资源;如果卸载指定的安全内核服务操作是由收到动态卸载请求触发的则跳转执行步骤4)。

本实施例中的核心系统认证服务KAS是通过secure USB动态加载的,以加载核心系统认证服务KAS为例,虚拟驱动接口向内核态的动态安全内核服务框架传送动态加载请求,告诉动态安全内核服务框架加载核心系统认证服务KAS,以及核心系统认证服务KAS对应的服务映像的文件名。动态安全内核服务框架利用USB驱动程序扫描热拔插存储设备,并搜索符合给定文件名的映像文件。如果搜索失败,则直接返回错误。如果找到了指定文件,则将加密映像下载到安全内存secure DDR的一个缓冲区,并在缓冲区进行解密;如果解密失败,则返回安全内核加载失败,否则验证服务发布者信息;如果服务发布者非法则返回服务加载失败,否则进行资源分配和KSN映射,其中资源分配不但包含分配和初始化数据结构,还包括为服务映像分配执行内存并将映像复制到该内存;然后动态安全内核服务框架对内存中的映像进行地址重定位改写;最后动态安全内核服务框架调用重定位后核心系统认证服务KAS的初始化函数Init(),如果初始化成功,则核心系统认证服务KAS服务就绪,否则返回核心系统认证服务KAS加载失败。

需要说的是,本实施例仅仅是以飞腾1500+系列CPU为例,来对本发明飞腾CPU上三态操作系统安全内核服务动态运行方法来进行示例性的说明。毫无疑问,在支持不同的等级权限、硬件支持安全存储模块的前提下,本实施例的技术方案同样也可以适用于其它系列的飞腾CPU上操作系统安全内核服务动态运行,而且还可以进一步推广到其它通用CPU上操作系统安全内核服务动态运行。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号