本发明属于工业控制自动化的技术领域,尤其涉及一种基于内存隔离的可信plc嵌入式系统。
背景技术:
随着嵌入式微处理器的性能日益增强,plc设备在工业自动化领域被大量应用。但是plc设备的安全问题没有受到足够的重视和针对性的解决,安全问题变得尤为重要。近年来,可信计算成为计算机信息安全领域一个热门方向,它的总体目标是提高计算机系统的安全性。由于plc系统是从通用计算机系统中进行软硬件裁剪得到的,因此可以将可信计算的思想引入到plc嵌入式系统中,从而从根本上提高plc嵌入式系统的安全性。
plc嵌入式系统内存安全问题是许多攻击的根源,可信执行环境下的内存完整性保护主要包括代码完整性、内存数据完整性和运行时控制流完整性等几个方面。然而纯粹的某一类完整性保护方法已不能完全保证plc嵌入式系统的完整性,在考虑完整性保护对象时存在片面性。
技术实现要素:
本发明的目的是提供一种基于内存隔离的可信plc嵌入式系统,实现实时动态监测保护内存安全,为plc嵌入式系统安全代码的执行提供完整的系统隔离,可以抵御多类攻击入侵,并且不影响系统的正常运行效率。
为解决上述问题,本发明的技术方案为:
一种基于内存隔离的可信plc嵌入式系统,采用影子页表机制实现虚拟地址到机器地址的转换,所述可信plc嵌入式系统包括安全内存访问模块;
所述安全内存访问模块包括实时动态监测单元及影子页表访问单元,其中,所述实时动态监测单元通过内核校验模块实现影子页表的动态完整性检查;
所述影子页表访问单元通过内核校验模块激活影子页表,对客户机的虚拟地址进行身份验证,判断是否已保存所述虚拟地址;若是,则返回空;若否,则抽取客户机页表实体,判断所述客户机页表实体是否有效;若否,则标注异常;若是,则抽取客户机编号,判断是否需要将虚拟地址转换为机器地址;若是,则返回空;若否,则根据客户机的访问权限更新影子页表,从而实现内存数据的安全可信。
根据本发明一实施例,所述实时动态监测单元实时接收校验请求,并将校验请求发送给内核校验模块,所述内核校验模块基于可信计算对影子页表在内存中的映像进行校验;所述映像处于内存中的可寻址地址中。
根据本发明一实施例,所述可信plc嵌入式系统还包括可信启动模块,所述可信启动模块以用于内存隔离的安全隔离模块为信任根,采用轻量级启动技术加载bootrom程序、操作系统及应用程序。
根据本发明一实施例,所述安全隔离模块将plc设备的硬件分为安全区硬件及非安全区硬件,所述安全区硬件包括cpu、存储bootrom专用的flash及ram,所述非安全区硬件包括存储器、exram、以太网及串口;
在bootrom程序加载过程中,采用tpm模块连接所述安全隔离模块;
bootrom程序启动后,执行硬件自检;同时,tpm模块对存储器中的固件程序进行度量,若未发现异常,则开启cpu与存储器之间的透传通道。
根据本发明一实施例,在bootrom加载可信的存储器固件到ram,并在ram中启动bsp驱动的过程中,所述可信启动模块进行系统进程的初始化,并开启监控器、区间通讯及plc运行时序;
所述tpm模块通过非对称加解密算法验证存储器中的用户存储数据的合法性,若验证通过,则将用户存储数据的接口通过安全隔离模块透传给cpu。
根据本发明一实施例,在对存储器中的数据进行可信读写的过程中,安全隔离模块的i/o接口连接cpu,所述安全隔离模块通过时序模拟将cpu的读写操作指令转发到存储器,并对存储器的数据进行校验,实现可信读写。
本发明由于采用以上技术方案,使其与现有技术相比具有以下的优点和积极效果:
本发明一实施例中的基于内存隔离的可信plc嵌入式系统,针对现有的plc嵌入式系统在完整性保护上存在片面性而易受攻击入侵的问题,通过在传统嵌入式实时操作系统的基础上,通过可信嵌入式系统启动、可信flash数据读写实现轻量级可信启动,并通过实时动态监测防护技术访问影子页表,实现实时动态监测保护内存安全,为plc嵌入式系统安全代码的执行提供完整的系统隔离,在对系统性能几乎没有影响的基础上组成可信plc嵌入式系统,抵御多类攻击入侵。
附图说明
图1为本发明一实施例中的基于内存隔离的可信plc嵌入式系统的运行环境示意图;
图2为本发明一实施例中的基于内存隔离的可信硬件的架构图;
图3为本发明一实施例中的可信plc嵌入式系统的示意图;
图4为本发明一实施例中的可信启动示意图;
图5为本发明一实施例中的嵌入式可信技术示意图;
图6为本发明一实施例中的影子页表机制原理图;
图7为本发明一实施例中的实时动态监测流程图;
图8为本发明一实施例中的影子页表访问流程图。
具体实施方式
以下结合附图和具体实施例对本发明提出的一种基于内存隔离的可信plc嵌入式系统作进一步详细说明。根据下面说明和权利要求书,本发明的优点和特征将更清楚。
plc设备安全可信的关键在于其核心嵌入式系统的安全可信,本发明通过一种基于内存隔离的可信plc嵌入式系统,在传统嵌入式实时操作系统的基础上,通过可信嵌入式系统启动、可信flash数据读写实现轻量级可信启动,通过安全任务调度、安全数据访问、区间通讯、任务监控器、堆栈备份与恢复、安全内存访问、实时动态监测防护技术等安全机制实现嵌入式可信,安全内存访问通过实时动态监测防护技术访问影子页表,实现实时动态监测保护内存安全,为plc嵌入式系统安全代码的执行提供完整的系统隔离,在对系统性能几乎没有影响的基础上组成可信plc嵌入式系统。通过内存隔离机制使plc嵌入式系统的运行时软件具备分辨可信内存访问和不可信内存访问的能力,对不可信的内存访问建立有效的防治方法和措施,从而实现plc嵌入式系统的“内生安全”。
在具体介绍本发明基于内存隔离的可信plc嵌入式系统之前,首先对该可信plc嵌入式系统的执行环境作简要描述,该执行环境包括嵌入式可信硬件、嵌入式可信应用层构成,请参看图1。其中,嵌入式可信硬件在嵌入式控制器的基础上增加具有数据加解密、完整性检查、校验和内存隔离等功能的安全隔离模块,将数据在安全硬件和非安全硬件之间实现隔离。
具体的,嵌入式可信硬件设计将硬件划分为安全区硬件和非安全区硬件,请参看图2。安全区硬件包括cpu芯片、存储bootrom专用的flash芯片、ram芯片等,这些硬件组成嵌入式最小可运行系统;非安全区硬件包括存储器、exram、以太网、串口等,实现外部通讯和存储功能,容易受到外部数据的入侵和破坏。以安全隔离模块作为可信根,基于专用芯片构建防护隔离区实现两个区间的隔离,通过管路保护与隔离技术、专用芯片双口ram技术、时序仿真技术等将安全区和非安全区进行连接,保障可信的通信接口和链路,并通过身份认证、hash验证、对称加密/非对称加密等技术实现外界数据安全交换。
基于内存隔离的嵌入式可信硬件可保证数据的高速访问,实现不影响嵌入式系统运行实时性基础上的plc嵌入式硬件可信安全。对内存地址进行可信分离,划分成普通区和安全区,当cpu的请求不涉及安全时,则安全隔离模块采用高速透传的方式;当cpu的请求涉及到安全时,安全隔离模块采用轻量级算法等方法对数据进行加解密并检查数据的正确性,在几乎不影响控制系统运行速度的基础上保证系统的安全性。此外,嵌入式可信硬件还包括逻辑控制模块,从逻辑上保证安全区程序可以访问ram与exram,非安全区程序只能访问exram,进一步保障了安全区的数据安全。这里的透传为透明传输(pass-through),指的是在通讯中不管传输的业务内容如何,只负责将传输的内容由源地址传输到目的地址,而不对业务数据内容做任何改变。
而嵌入式可信应用层是在plc运行时软件的基础上,将用户算法、用户通讯、用户存储等不可信的应用程序通过构建包含网络通讯程序、故障检测程序、总线通讯程序的可信应用程序和包含身份认证组件、对称/非对称加密组件、hash算法组件、入侵检测组件的可信应用组件,实现plc关键应用程序的安全可信。
上面简要地介绍了一下本发明基于内存隔离的可信plc嵌入式系统的执行环境,下面对该基于内存隔离的可信plc嵌入式系统作详细地描述。
请参看图3,该基于内存隔离的可信plc嵌入式系统在传统嵌入式实时os内核基础上优化操作系统空间,并采用轻量级可信启动技术与嵌入式可信技术保障嵌入式系统层面的安全可信。相应的,该可信plc嵌入式系统采用可信启动模块实现轻量级可信启动技术。这里的轻量级是相对于重量级的一种说法,如在软件方法中,通常有用来编写计算机程序的一套规则和惯例。重量级方法具有很多规则、惯例、和文档,正确地遵循它们需要训练及时间;而轻量级方法仅具有很少的一些规则和惯例,或者说,这些规则和惯例遵守起来很容易。
具体的,该可信启动模块以安全隔离模块为信任根起点,从系统加电开始,到固件加载、可信微内核开启和可信运行环境的建立,再到可信应用程序的执行和可信外部通信的建立,构建完整的信任链,逐级认证,未获认证的程序不能执行,从而使plc设备实现自身免疫,构建可信执行环境。轻量级可信启动技术利用嵌入式系统flash在出厂时可从物理上设定为只读的特性,对保存于不可篡改flash中的bootrom免去tpm验证,物理上确保内核安全可信的同时缩短了启动时间,并且由于操作系统采用微内核结构,缩减了系统空间,进一步减少了验证时间。
根据可信plc嵌入式系统运行的阶段,轻量级可信启动技术可进一步分为可信嵌入式系统启动技术与可信flash数据读写技术。
嵌入式系统的可信启动过程分为两个阶段,请参看图4。在确保系统可信安全的前提下,实现plc设备十秒内快速启动。
第一阶段为bootrom程序加载过程。在可信嵌入式系统中,bootrom存放在专用的flash芯片中,flash芯片开启写保护,无法被外界篡改。系统上电后,cpu从专用flash芯片加载bootrom程序,tpm模块连接隔离芯片,也随bootrom同时开始工作。bootrom启动后首先执行硬件自检,包括ram、时钟、pci、以太网等。同时,隔离芯片上电后通过tpm对存储器中的固件程序进行度量,如果验证通过则开启cpu与存储器间的透传通道,进入第二阶段;否则引起异常并进行错误处理。其中,tpm模块为(trustedplatformmodule,可信赖平台模块),它能有效地保护pc、防止非法用户访问。符合tpm的芯片首先必须具有产生加解密密匙的功能,此外还必须能够进行高速的资料加密和解密,以及充当保护bios和操作系统不被修改的辅助处理器。
第二阶段为操作系统和应用加载过程,bootrom加载可信的存储器固件到ram,在ram中启动bsp(boardsupportpackage)驱动层和可信操作系统微内核。bsp驱动进行可信硬件的初始化,嵌入式系统进行系统进程的初始化,并开启监控器、区间通讯等核心组件。嵌入式系统启动完毕后,开启plc运行时、总线通讯等可信应用层用户程序。tpm模块通过非对称加解密算法验证存储器中用户存储数据的合法性,如果合法,则将用户存储数据区的接口通过隔离芯片透传给cpu。同时,隔离区负责对包括以太网、串口、can等对外通讯接口进行验证和加解密后透传给cpu。
可信flash数据读写技术中,存储器内通常保存了用户的逻辑程序和一些重要的用户配置参数,也可能包含了非法和被篡改的用户数据。对于存储器芯片内数据的可信读写,通过基于国产tpm的内存隔离专用芯片来实现。在嵌入式可信硬件层,cpu无法直接和存储器芯片通讯,而是连接了隔离芯片的i/o脚。隔离芯片通过时序模拟,将cpu的读写操作指令转发到存储器,并通过安全隔离模块对存储器的数据进行校验,实现对存储器上用户数据的保护。用户进行flash关键数据读写操作,如需要进行下载和加载时,必须经由安全隔离模块进行可信验证才能进行。而安全隔离模块本身也会记录每次关键操作的操作记录数据,并可通过可信通信平台传输给远程安全服务器,做到关键数据的实时监控和完整记录。
嵌入式可信技术在传统嵌入式实时操作系统的基础上增加了安全任务调度机制、任务监控器、安全数据访问、堆栈备份与恢复、区间通讯及安全内存访问,这六项安全机制与技术,并配合外围内存隔离芯片的功能实现高效的安全数据访问接口,降低cpu占用率。嵌入式可信技术是操作系统层面可信保障的重要组成部分,是信任链在操作系统层传递的关键。嵌入式可信技术框图请参看图5。
1)安全任务调度功能包括:安全任务堆栈数据的合法性检查、任务状态管理、任务死锁安全防护、任务资源占用率检查等基本功能。通过安全任务调度功能,可以及时做到系统中任务的安全检查与防范的目的,使得整个系统在健康稳定的状态下得以运行。
2)任务监控器是基于os层的具有管理和恢复安全任务的一项调度监控机制,其主要功能是管理和监控所有安全任务与普通区交互数据的过程,并且将任务运行状态及时发送给cpu,确保安全任务运行在可信环境下。
3)安全数据访问是保证数据完整和不被篡改的一项重要进程。其主要工作流程是,基于安全隔离模块对存储器的中存储的参数与文件等数据进行可信度量,之后cpu读取安全隔离模块处理后的数据再进行确认和使用,以达到数据可信、运算可信的目的。
4)堆栈备份与恢复是保证安全任务正常运行的一项重要工作。其工作过程是,cpu会适时的对安全任务的堆栈区的数据进行备份工作,当安全任务的堆栈区数据异常时,会将备份的数据恢复进来,以保证安全任务的正常运行。
5)区间通信是一套安全、隐蔽、可靠、低代价的通信机制,是可信调度技术的一项重要的功能。当任务与外界普通区的数据交互时,需要经过安全隔离模块的检查、加密、解密等处理工作,之后才将数据加载到安全区的ram中进行运算。该机制可有效地抵制外界普通区的数据被恶意篡改对系统产生的风险。
6)安全内存访问是保证cpu读取普通区数据的唯一通道。安全隔离模块获取到普通区的数据时,首先进行安全运算,之后才会通过双口ram接口供cpu使用,最终保证了来自普通区数据的安全可信。
其中,对于安全内存访问,本实施例基于内存隔离的可信plc嵌入式系统以安全内存访问模块采用影子页表机制实现虚拟地址到机器地址的转换,从而实现cpu读取内存数据的安全可信。
其中,影子页表机制请参看图6,具体如下:在传统的操作系统进行地址转换时,首先通过通过分段机制将逻辑地址转为线性地址,然后再通过页表机制转为机器地址。在linux中,对于一般的不支持pae和pse的32位系统,主要采用了两级页表机制,页目录表pgd和页表pt,在这里又称为l2级页表和l1级页表,如果有更高级别的页表,比如四级页表,那么最高的那层称为l4级页表,剩下的分别为l3级,l2级和l1级。对于一个32位的线性地址,操作系统通过cr3寄存器找到pgd所在机器页,然后加上线性地址的最高10位地址,就可以找到pt所在的机器页,然后再加上线性地址的中间10位地址,就可以获得线性地址的所对应的机器页,然后再加上线性地址的最后12位就可以获得该线性地址最后对应的机器地址。
当操作系统被虚拟化,并采用了影子页表机制后,guestos仍通过上述机制进行寻址,即虚拟机监控器那层对guestos是透明的。但是它通过cr3查找pgd时,存储在cr3寄存器中的值并不是guestos所认为的cr3的值,而是指向影子页表的hostcr3值。这样客户机的页表维护的是线性地址到物理地址的转换;而影子页表维护的是线性地址到相应的机器地址的转换。在进行地址转换时,真正使用的是影子页表。
该安全内存访问模块包括实时动态监测单元及影子页表访问单元。其中,实时动态监测单元通过内核校验模块实现影子页表的动态完整性检查。具体的,该实时动态监测单元实时接收校验请求,并将校验请求发送给内核校验模块,内核校验模块基于可信计算对影子页表在内存中的映像进行校验。这些影子页表在内存中的映像处于内存中的可寻址地址中。在校验的过程中,根据内核的划分,对代码及参数堆栈分别进行校验;并采用动态检查的方式,即在任意需要的时刻,都能对校验对象(影子页表)进行校验,还可以通过安全隔离模块保护完整性检查并对校验结果进行签名以提高整个嵌入式系统的安全性。
该实时动态监测单元对影子页表的校验流程,请参看图7。校验代理处于用户空间,用户的校验请求通过其接口提交给内核校验模块。内核校验模块处于内核空间,完成整个动态校验的主体工作。嵌入式系统预先为活动的每个影子页表制作一个映像,该映像完全反应了内存的功能和信息。对影子页表的动态完整性检查,就是在接收到校验请求的任意时刻,对校验目标(某个影子页表)在内存中的映像进行校验,这些映像处于内存中的某个可寻址的位置。
而影子页表访问单元通过内核校验模块激活影子页表,对客户机的虚拟地址进行身份验证,判断是否已保存所述虚拟地址;若是,则返回空指针;若否,则抽取客户机页表实体,判断所述客户机页表实体是否有效;若否,则标注页面错误,系统需要进行异常处理;若是,则抽取客户机编号,判断是否需要将虚拟地址转换为机器地址;若是,则返回空指针;若否,则根据客户机的访问权限更新影子页表,从而实现内存数据的安全可信。上述影子页表的访问流程请参看图8。
该可信plc嵌入式系统通过安全内存访问模块可实现实时动态监测保护内存安全,为plc嵌入式系统安全代码的执行提供完整的系统隔离,可以抵御多种攻击入侵,并且不影响系统的运行效率。
上面结合附图对本发明的实施方式作了详细说明,但是本发明并不限于上述实施方式。即使对本发明作出各种变化,倘若这些变化属于本发明权利要求及其等同技术的范围之内,则仍落入在本发明的保护范围之中。