一种执行饱和寻址加载和存储操作的设备和方法与流程

文档序号:18939988发布日期:2019-10-23 01:04阅读:251来源:国知局
一种执行饱和寻址加载和存储操作的设备和方法与流程

本发明属内存安全领域,具体涉及一种饱和访存操作的处理方法和装置。



背景技术:

计算设备目前广泛应用于医疗、交通、基础设施和制造工业,负责诸如:物理世界的数据信息进行收集和处理、网络数据交换、数据处理分析计算和服务的提供。计算设备通常具有使用网络等方式进行数据交换、为人们日常生活提供实时服务和携带重要私密数据等特点;同时也是非法人员获取私密数据、针对各类服务进行破坏的集结点。目前针对计算设备的攻击层出不穷,且危害巨大,较出名的就有滴血攻击、蠕虫病毒等。目前针对计算设备的攻击主要是通过空间性攻击,即缓冲区溢出攻击,该类攻击抓住c/c++等语言在缓冲区未设置缓冲区边界的特征,进行缓冲区溢出攻击,迫使程序产生不正当的行为,以获取用户的关键数据或者使得整个服务瘫痪。

基于缓冲区溢出的软件攻击基本上可以通过cfi(控制流完整性)和dfi(数据流完整性)的检查机制,以异常或者错误的方式报出,但是无人监管的特点使得异常或者错误无法被处理,也使得检查变得无意义,其次该类检查机制大多通过软件的形式发现缓冲区溢出问题,往往有比较大的额外性能损失,虽然13年以来基于lowfatpointer思想以软硬件协同的方式检查缓冲区溢出具有较小的性能损失,但是lowfatpointer由于bima表示缓冲区基址和界限比较复杂,对于缓冲区溢出的判断还是有比较高的代价,需要进一步完善;主流的计算设备安全防御手段都是检测技术,一般采用一旦被攻击就会终止程序并报出异常信息或者仅报出异常信息,但攻击并未终止的方法。上述两种方法,前者会导致服务不可用,后者会导致用户私密数据同样被窃取。不能够较为合理的消除缓冲区溢出攻击,不能同时兼顾服务可用性和用户数据安全性的问题。

综上,针对这类关键性的计算设备,现有的缓冲区溢出检测机制,存在着额外性能损失较大、溢出异常无法及时处理和用户数据危险性较高的问题。

cn102033735b.寄存器扩展管理存储元数据,该篇专利针对的是元数据如何存储的,采用的是显示元数据存储;

cn107735775a.指针关联的范围信息执行指令,该篇专利同样是针对元数据如何存储的,是采用隐式元数据存储。

上述两篇专利,主要是提供元数据的来源,可以与本发明配合,但与本发明阐述的内容是不相同的。

thechericapabilitymodel:revisitingriscinanageofrisk该论文提出了一种权能模型来防止缓冲区越界,该论文是一种检测技术,本发明是一种消除技术,即在安全运行模式下,可以保证用户程序的运行而不中断程序的执行。



技术实现要素:

本发明的技术解决问题:克服现有技术的不足,提供一种执行饱和寻址加载和存储操作的设备和方法,能够在计算设备运行并发生缓冲区溢出时,根据元数据及时准确地发现,并选择上界或者下界作为实际访存的地址,消除缓冲区溢出行为,同时还要保证这一过程具有较小额外性能损失。

本发明是通过以下技术方案实现的:

一种执行饱和寻址加载操作的设备,包括:执行单元和寻址配置控制器,其中:

执行单元,用于接收和执行饱和寻址数据移动指令,根据指令包含的数组指针和数组指针对应的元数据计算指令包含的指针对应的数组的上界和下界位置,并选择合法界内的源位置,使得指令包含的数据从源位置加载到目的位置,其中指针元数据指用于计算出指令包含的指针对应缓冲区起止地址信息;如果加载操作的源位置高于上界位置或者低于下界位置,则将指令包含的数据从上界位置或下界位置传送到目的位置,否则从源位置传送到目的位置;

寻址配置控制器,用于控制设备的运行模式,所述运行模式包括安全运行模式和调试程序模式;如果寻址配置控制器的配置输入的运行模式为安全运行模式,则直接按照执行单元的逻辑进行加载操作;配置输入的运行模式为调试程序模式,如果待加载地址存在越界问题,则执行单元终止此次加载操作,并给出中断、例外、信号或者越界信息;如果在加载过程中发生异常,则执行单元直接报出加载例外、异常或者信号,终止此次加载操作。

所述设备应用于处理器内部的运算单元或应用于内存控制器、tlb地址翻译单元、内存管理单元mmu、dma控制器及整个计算机各项组成部分中。

所述指针元数据存储在寄存器、存储器及任何存储指针元数据信息的存储装置内;同时元数据至少包含一个用于计算访存地址对应缓冲区上下界或者一个用于判断是否存在越界可能的元数据信息。

所述设备应至少包含实际访存所指向的地址信息的输出,或包含一个任何与实际访存的地址相对应的地址、元数据及是否越界的信号或者异常的输出。

一种执行饱和寻址加载操作的处理器,包括:

执行单元,响应计算系统所包含的处理器所支持的饱和寻址数据移动指令,首先从指令中获取指令包含的数组指针和数据,再从所述的存储装置获得数组指针元数据并计算出缓冲区对应上下界,最后判断数据指针是否越界,如果越界则将指令包含的数据,从上界或者下界的源位置加载到目的位置,其中所述数组指针元数据是指用于计算出指针对应缓冲区起始地址信息;如果加载操作的源位置高于上界位置或者低于下界位置,则将数据从上界位置或下界位置传送到目的位置,否则从源位置传送到目的位置;以及如果处理器处于安全运行模式,则直接进行加载操作;如果处于调试程序模式,则终止此次加载操作,并给出越界例外或者信号及越界元数据;以及如果在加载过程中发生异常,则直接报出加载异常或者信号及元数据,终止此次加载操作。

一种执行饱和寻址加载操作的方法,包括以下步骤:

响应饱和寻址数据移动指令的执行,根据指令包含的数组指针对应的元数据计算出指令包含的数组指针对应的数组的上下界,选择合法界内地址,将指令包含的数据从源位置加载到目的位置,

其中如果待加载地址超出上界,则实际待加载源地址为上界地址;如果超出下界,则实际待加载源地址为下界地址,并根据实际待加载源地址从源位置加载数据到目的位置;

如果在加载过程中发生异常,则直接报出加载例外、异常或者信号及元数据,终止此次加载操作。

一种执行饱和寻址存储操作的设备,包括:执行单元、寻址配置控制器,其中:

执行单元,用于接收和执行饱和寻址数据移动指令,根据指令包含的数组指针和数组指针对应的元数据计算指令包含的指针对应的数组的上界和下界位置,并选择合法界内的源位置,使得指令包含的数据从源位置存储到目的位置,其中指针元数据指用于计算出指令包含的指针对应缓冲区起止地址信息;如果存储操作的源位置高于上界位置或者低于下界位置,则将指令包含的数据从上界位置或下界位置传送到目的位置,否则从源位置传送到目的位置;

寻址配置控制器,用于控制设备的运行模式,所述运行模式包括安全运行模式和调试程序模式;如果寻址配置控制器的配置输入的运行模式为安全运行模式,则直接按照执行单元的逻辑进行存储操作;配置输入的运行模式为调试程序模式,如果待存储地址存在越界问题,则执行单元终止此次存储操作,并给出中断、例外、信号或者越界信息;如果在存储过程中发生异常,则执行单元直接报出存储例外、异常或者信号,终止此次存储操作。

所述设备应用于处理器内部的运算单元或应用于内存控制器、tlb地址翻译单元、内存管理单元mmu和dma控制器及整个计算机各项组成部分中。

所述指针元数据信息存储在寄存器、存储器子系统,及任何存储指针元数据信息的存储装置均算在内;同时元数据至少包含一个用于计算访存地址对应缓冲区上下界或者一个用于判断是否存在越界可能的元数据信息。

所述设备应至少包含实际访存所指向的地址信息的输出,或包含一个任何与实际访存的地址相对应的地址、元数据及是否越界的信号或者异常的输出。

一种执行饱和寻址存储操作的处理器,包括:

执行单元,响应计算系统的处理器中执行饱和寻址数据移动指令,执行单元,响应计算系统所包含的处理器所支持的饱和寻址数据移动指令,首先从指令中获取指令包含的数组指针和数据,再从所述的存储装置获得数组指针元数据并计算出缓冲区对应上下界,最后判断数据指针是否越界,如果越界将指令包含的数据,从源位置存储到目的位置的上界或者下界,其中所述数组指针元数据是指用于计算出指针对应缓冲区起始地址信息;如果存储操作的源位置高于上界位置或者低于下界位置,则将数据从上界位置或下界位置传送到目的位置,否则从源位置传送到目的位置;以及如果处理器处于安全运行模式,则直接进行存储操作;如果处于调试程序模式,则终止此次存储操作,并给出越界例外或者信号及越界元数据;以及如果在存储过程中发生异常,则直接报出存储异常或者信号,终止此次存储操作。

一种执行饱和寻址存储操作的方法,包括以下步骤:

响应饱和寻址数据移动指令的执行,根据指令包含的数组指针对应的元数据计算出指令包含的数组指针对应的数组的上下界,选择合法界内地址,将指令包含的数据从源位置存储到目的位置,

其中如果待存储地址超出上界,则实际待存储源地址为上界地址;如果超出下界,则实际待存储源地址为下界地址,并根据实际待存储源地址从源位置存储数据到目的位置;

如果在存储过程中发生异常,则直接报出存储例外、异常或者信号及元数据,终止此次存储操作。

本发明具有以下优点:

(1)本发明针对计算设备缓冲区溢出提供了一种运行时消除技术。能够在计算设备运行发生缓冲区溢出时,消除缓冲区越界的可能,不会污染破坏内存中其他任一地址的信息,从根源上消除软件攻击的可能;

(2)给出的硬件设计方案,与常规的软件方法需要多条指令协同实现所不同,仅需在一条访存指令内通过硬件判断指针是否存在缓冲区越界的可能,具有较小的性能损失;在指令系统层面使得访存指令有饱和访存的特性,能够使得用户程序更加安全高效。

附图说明

图1是微胖指针格式图;

图2是隐式metadata寄存器作为本发明的输入示意图;

图3是饱和访存模型流程图;

图4是安全模式规则图;

图5是调试模式规则图;

图6是硬件实例安全指针操作单元示意图。

具体实施方式

下面结合附图和实例详细解释本发明,以便清楚地本发明的目的、技术方案和优点。应当注意此处附图和实例仅解释本发明,不用于限定本发明。以下通过一种微胖指针存储格式来说明本发明是如何根据缓冲区界限信息工作的,然后给出一种硬件的运行模式和硬件设计原型,最后给出一种基于本发明的指令系统。

目前以c语言为基础的代码中大量充斥着缓冲区,而c语言中无论是栈中分配的缓冲区、堆中动态分配的缓冲区,还是全局变量初始化的缓冲区,所有的缓冲区的size是根据编写者基于程序的功能设计定义的,因此在不考虑恶意后门和采用某些技巧性的代码外,正确的代码中包含的缓冲区尺寸应该是满足程序执行所需要的,但是这些缓冲区尺寸信息由于是编写者在程序实际运行前设计的,往往会被一些恶意的攻击人员利用缓冲区尺寸固定不可变且c语言内不自带缓冲区是否溢出的检查的特性而进行攻击。此类攻击往往是针对字符串或者文件缓冲区进行攻击,这类缓冲区的特点是通常结束标志往往是’\0’或者eof等等,一旦缓冲区结尾不是结束符,与之对应的glibc函数会认为直到结束符才是缓冲区结束,从而造成缓冲区越界等一些列问题。饱和访存的设计基础来源于,如果能够将结束符合理的写在缓冲区的结尾处,那么该缓冲区在glibc函数中就不会发生缓冲区越界现象,从而消除掉缓冲区越界。

基于上述,本发明设计,当发生缓冲区的越界的读写时,都要读写到界上,特别是针对下界溢出,做到假如一个带有攻击性的输入,即使缓冲区越界发生,一定会把结束符写到缓冲区的下界上,使得缓冲区结尾合法有效,保障了缓冲区不会被越界。同时该方法还可以扩展到其他类型的缓冲区,保障缓冲区越界读写的不会发生。因此本发明可以将恶意攻击的行为转变为程序由于缓冲区数据不合理(由于攻击输入不是正常的数据输入)而导致的功能性错误,阻止了对数据和服务的攻击,同时还能提供给代码编写者以错误提示。此外,为了不干扰到缓冲区原本内存储的数据,本发明也可以配合缓冲区填充技术共同使用。

本发明所举例的带有元数据的指针仅为了说明本发明可以应用于那些潜在场景,所需要一定的潜在条件,并不用于限定本发明,如已有论文lowfatpointer中提出的一种64位微胖指针存储格式如图1,一般为bima编码,即b代表块大小,i代表起始块号,m代表结束块号,a代表该指针指向的实际地址,则从i到m号之间块大小为2^b的区域即为缓冲区,a为缓冲区中的某个地址,比如b=1,i=1,m=7,a=0x7fffffff0007。根据图1,s的位宽为6,b=1,得到分配对齐地址0x7fffffff0000,缓冲区起始地址为0x7fffffff0002,结束为0x7fffffff000d,size=16。

指令包含的数组指针对应的元数据存储例子说明。除了上述微胖指针外,还有类似的intel公司隐式元数据寄存器技术存储指针元数据信息,如图2所示展示的是201和202即为隐式元数据寄存器,其中201就是普通的数据寄存器存储地址或者其他信息,202存储元数据信息,二者可以用作203安全指针操作单元的输入,203可能的流程图如图3所示,可能的硬件如图6所示。通过203得到实际的访存地址,发给204ram,并保证205处理器能够读写该部分的数据;arm/cheri等提出的显示元数据寄存器技术[3-4]存储指针上下界信息。上述几类技术是用于存储指针元数据信息,可以用作本发明中所涉及装置的潜在输入。同样用于说明本发明可以应用于那些潜在场景,所需要一定的潜在条件,并不用于限定本发明。此外,比如cheri、baggybound和广泛在编译中使用的asan等无论是软件还是硬件技术均为检测调试技术,一旦发生越界则直接报越界异常例外,与本发明的目标,即消除缓冲区越界并保证程序的正常执行有着较大的区别。

饱和寻址加载和存储操作的方法,是保证当一个内存访问时,实际的访存地址一定在缓冲区有效范围内,如果是单一基本数据类型,同样只会访存该数据类型对应的自己数;如果预计访存地址超出缓冲区有效范围,那么根据越出的是上界还是下界,使得实际访存地址变成上界或者下界。比如按照bima编码存储的指针0x7fffffff0007,就在合法的界内,但是如果一旦访问了0x7fffffff0017地址,那么就是上界溢出,则实际访存的发出去的地址为0x7fffffff000f;如果访问的是0x7ffffffe0007,那么就是下界溢出,则实际访存发出去的地址为0x7fffffff0000。这样使得所有的实际访存都会在缓冲区内。

本发明具体的流程图如图3所示。处理框301取出一条指令并解码,判断框302判断该指令是否有访存需求,如果不是,则继续回到处理框310,执行指令,执行完毕后到处理框301,取出新的指令,如果是那么则进入到饱和访存过程。处理框303根据指令获得了所需要的待访存地址,并根据输入框304得到指针的元数据信息,并进行判断如果没有元数据信息,则按照传统的访存指令,输出待访存地址到存储系统,否则进到判断框305,判断缓冲区是否越界。元数据的输入的具体例子为如图2中的202的隐式元数据寄存器的数据。如果不越界,则输出框306直接输出待访存地址,并继续取指;如果越界,则根据判断框307,如果不越上界,那么输出框308直接输出下界地址,并取下一条指令;如果越上界,那么输出框309直接输出上界地址减去待访存位宽,并取下一条指令。

本发明与截断思想等软件方法有较大的不同,该方法使用截断会阻止或者取消越界的访存行为,而本发明会允许访存,但是会重复读写在缓冲区的上下界上,保证访存行为发生在界内。

饱和寻址加载和存储操作的设备的寻址配置控制器用于配置本发明的运行模式。本发明不局限任何的硬件运行模式,但是本发明采用至少包含两种:安全运行模式和调试程序模式。该模式是由配置的决定的。安全运行模式是针对计算设备被放置提高高效稳定的线上服务准备的,所以不能报例外中断执行,特别是某些服务必须时刻运转,不能停止,因此使用饱和访存、不报例外、不存储异常信息模式,一旦缓冲区存在溢出访问或者写入,则直接将要访问或者写入的地址变为上下界。之所以采用该模式的原因是,往往缓冲区溢出的原因是网络传输被攻击,导致传输的内容与预期不符,想通过缓冲区溢出的方式,攻击服务设备。而这种待攻击的缓冲区在服务设备内通常是char类型的数组,传输的内容也通常是字符串,采用饱和读写既能保证内存不会被污染,同时服务设备也能正常运行,最重要的是即使传输内容远大于缓冲区大小,也能保证缓冲区最后一个字节的内容为’\0’,使得字符串能够合理地结束,避免其余的攻击。而决定当前硬件采用的是安全模式只需要修改多选器的规则即可,规则如图2所示。

调试程序模式主要是针对开发人员在实际开发过程中,为了防止程序内可能存在缓冲区溢出的隐患而提供的调试接口,与安全模式不同的是,一旦程序发生缓冲区越界现象,则立即报出例外,中断程序的执行,并给出相关的元数据信息。同样决定当前硬件采用的是调试模式只需要修改多选器规则即可,规则如图3所示。

在计算设备内部提供一个寄存器专门用于保留当前安全指针处理单元的运行模式配置信息,任何扩展的运行模式只需在此配置并使用即可,该寄存器只面向操作系统提供修改。

指针安全处理单元是一种饱和寻址加载和存储操作的设备,以下内容仅以此做说明解释,并不用于限定本发明。在原有的各类操作上,添加判断地址是否存在越界问题,为了在判断越界时,尽量减少性能损失,采用在正常处理指令语义的同时,多个比较器并行判断是否越上界或者下界,并通过多选器,选在输出的结果到底是什么。通过lb指令的结构在进一步说明,如图4所示。其中spu是安全指针操作单元。具体流程说明如下:

(1)spu根据输入的上下界元数据信息,分别对应一个比较器,每一个比较器还有一个输入是待访存地址,根据比较器是比大还是比小输出比较的结果;

(2)比较的结果,最后会作用于多选器,从上界,下界和并行三个中选择一个,作为输出,即最终的实际访存指针;

(3)根据配置项的不同,选择安全运行模式或者调试程序模式,如饱和寻址加载和存储操作的设备的寻址配置控制器所述。

根据指针安全处理单元的设计能够看出,如果把指针安全处理单元作为流水线中的一级,那么延缓流水级周期的只在原来的加法器基础上增加了一层比较器和一个多选器,对性能的影响比较小。

通过上述结构也能看出,每一条扩展指令在实际执行的过程中,都伴随着指针是否越界检查的操作,并通过多选器,确保得到非越界地址或者例外等,针对基本集的load/store指令的实现,也与之类似,确保所有的操作,不会出现缓冲区越界的问题。

饱和寻址加载和存储操作的处理器响应的指令是指饱和寻址加载和存储操作的处理器所支持的指令系统中用于饱和寻址加载和存储操作的指令,本发明所举实例是基于risc-vs位指令系统,一种继承扩展自risc-v位指令系统,仅以此做说明解释,本发明所响应的指令事实上是可以扩展任意一个已有的指令系统上的。下面详细解释我们扩展的risc-vs指令系统。为每个基本集中load/store指令添加指针安全操作语义,具体设计如下:

(1)根据寄存器中存储的基地址和偏移量,得到的新地址,如果越界,则采用饱和存储或者加载操作,使得load/store发出的或者指针运算结果地址为上界或者下界减去访存宽度(即word、halfword和byte,对应8、4、2和1字节宽度);

(2)如果新地址不存在越界问题,根据新地址,加上访存宽度,如果越界,则采用饱和存储或者加载操作使得load/store发出的或者指针运算结果地址为上界或者下界减去访存宽度;

(3)如果均不越界,则按正常计算得到的地址进行操作。

提供以上实施例仅仅是为了描述本发明的目的,而并非要限制本发明的范围。本发明的范围由所附权利要求限定。不脱离本发明的精神和原理而做出的各种等同替换和修改,均应涵盖在本发明的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1