一种航天软件系统溢出检测和破坏限制机制技术方案

技术编号:10126358 阅读:142 留言:0更新日期:2014-06-12 18:10
本发明专利技术公开了一种航天软件系统溢出检测和破坏限制机制,其特征在于:步骤如下:将任务运行栈分割成平均的两部分,函数的调用分别交叉在两个栈中进行,实现缓冲区溢出检测和破坏限制;首先是溢出检测和破坏限制栈空间被分割为2部分,确保了至少1/2栈的有效性;其次是改变了函数返回时控制流转移的方向,使得控制流转移和溢出具有异向性。本发明专利技术使得缓冲区溢出检测和破坏限制成为可能,改变了函数返回时控制流转移的方向,使得控制流转移和溢出具有异向性。

【技术实现步骤摘要】
【专利摘要】本专利技术公开了一种航天软件系统溢出检测和破坏限制机制,其特征在于:步骤如下:将任务运行栈分割成平均的两部分,函数的调用分别交叉在两个栈中进行,实现缓冲区溢出检测和破坏限制;首先是溢出检测和破坏限制栈空间被分割为2部分,确保了至少1/2栈的有效性;其次是改变了函数返回时控制流转移的方向,使得控制流转移和溢出具有异向性。本专利技术使得缓冲区溢出检测和破坏限制成为可能,改变了函数返回时控制流转移的方向,使得控制流转移和溢出具有异向性。【专利说明】一种航天软件系统溢出检测和破坏限制机制
本专利技术属于嵌入式操作系统开发领域,具体地说,涉及一种航天软件系统溢出检测和破坏限制机制。
技术介绍
缓冲区溢出是航天器软件系统的一个重要的安全威胁。首先,C语言仍然是航天软件的主要开发语言。尽管航天软件开发仅利用C语言的一个相对安全子集,但是C语言的安全威胁并没有得到彻底解决。其次,受能耗、抗辐照增强等多方面的影响,航天器计算机系统处理能力有限,没有提供传统的保护机制。例如,大多数航天器板载计算机都不提供内存管理单元(MMU)。所有的软件都在同一地址空间、同一权限级别下运行,这使得缓冲区溢出导致的后果更为严重。再次,航天软件系统需要与大量不可靠外部设备如传感器、激励器等交换数据;而这些不可靠、不可信的数据成为溢出数据的来源。最后,外太空的高能粒子或者宇宙射线引起的单粒子翻转、多粒子翻转、单粒子击穿等可以从软件系统内部触发溢出。当前有多种预防和检测缓冲区溢出的方法,如基于金丝雀的Stackguard、返回地址随机化、地址空间随机化等,但是传统的缓冲区溢出检测和防御技术无法有效的抵御航天软件中的溢出威胁。主要原因如下:这些防御技术基于恶意用户攻击假设,其目的是防御攻击者获取系统控制权,如地址空间随机化、输入检查、影子返回地址栈等。而航天软件系统的溢出防御主要目的是破坏限制,避免安全关键的软件被破坏。有效地对恶意攻击的防御并不意味着减少溢出自身的破坏。航天软件系统缺乏硬件保护机制支持。而一些传统的保护机制依赖硬件能力,如SmashGuard修改硬件call和ret指令语义来检查栈溢出。航天软件系统运行于计算能力受限的硬件平台之上,以单地址空间为组织方式,缺乏任务之间的破坏保护机制,溢出处理机制应当兼顾这方面的要求。
技术实现思路
本专利技术要解决的技术问题是克服上述缺陷,提供一种航天软件系统溢出检测和破坏限制机制,将任务运行栈分割成平均的两个部分,函数的调用分别交叉在两个栈中进行。这种方法使得缓冲区溢出检测和破坏限制成为可能。首先,栈空间被分割为2部分,确保了至少1/2栈的有效性。其次,改变了函数返回时控制流转移的方向,使得控制流转移和溢出具有异向性。为解决上述问题,本专利技术所采用的技术方案是:一种航天软件系统溢出检测和破坏限制机制,其特征在于:所述溢出检测和破坏限制机制是一种基于双栈纠缠执行的缓冲溢出检测和破坏隔离机制,步骤如下:将任务运行栈分割成平均的两部分,函数的调用分别交叉在两个栈中进行,实现缓冲区溢出检测和破坏限制;首先是溢出检测和破坏限制栈空间被分割为2部分,确保了至少1/2栈的有效性;其次是改变了函数返回时控制流转移的方向,使得控制流转移和溢出具有异向性。作为一种改进,所述任务运行栈根据函数调用顺序和后进先出的原则压入栈帧;每个栈巾贞设置一个编号,以表不其相对栈底的位置;根据栈巾贞的编号,一个栈巾贞编号为k,那么它所直接调用的所有函数的栈帧为k+Ι ;双栈纠缠执行为:所有编号为奇数的栈帧被依次安排在一起,所有编号为偶数的栈帧被安排在一起,当一个函数调用子函数时,会完成如下操作:l)、call指令将返回值保存在父函数的栈帧中;2)、切换到子函数的栈帧;3)、复制函数参数到子函数栈帧;4)、分配局部变量空间;5)、继续子函数逻辑执行;6)、当子函数完成执行后,根据父函数栈帧中保存的返回地址返回父函数继续执行。作为一种改进,所述步骤I)中,双栈纠缠执行的栈帧除了临时变量之外必须维持相应的控制结构;当发生函数调用和函数返回时,控制结构保证了栈帧之间的平滑切换;双栈执行也必须维持栈帧之间的顺序关系,当调用一个函数时,须保证在正确位置上创建新的栈帧;当从一个函数返回时,必须保证能回到调用函数的栈帧上继续执行;在任务运行栈中,只有栈顶的栈帧是活动,其它栈帧是非活动的。作为一种改进,所述步骤2)中双栈纠缠执行的函数调用过程为:首先,父函数为子函数准备参数,按照一定的顺序将参数压入栈中,然后调用call指令,将call指令下一条指令作为返回值压入栈中,并且将eip设定为被调用函数的入口地址继续执行;接下来的控制由子函数的程序逻辑决定,直到函数准备返回。作为一种改进,所述双栈纠缠执行的函数返回过程的一个基本原则就是将栈的基本形态调整为执行call指令之前的形式;第I条指令将ptop指向的caller栈巾贞的顶部设置给寄存器,由于子函数已经完成计算,它的局部变量和临时空间将被丢弃,直接将寄存器设置为caller栈帧顶部是合理的;第2条指令将父函数栈帧顶地址设置为caller父函数的栈帧顶部,由于caller的父函数的栈帧下紧邻子函数的栈帧位置,因此,子函数的帧底就是父函数栈帧顶地址的值;第3、4条指令将栈帧基设置为寄存器,利用栈操作恢复caller的栈巾贞基地址;第5条指令则将父函数栈巾贞的基地址设置为caller的父函数栈中贞基地址。至此,栈帧完全恢复到call指令执行之后的布局,上述过程完成了函数返回的准备工作;第6条指令ret返回。作为一种改进,所述函数参数处理函数调用的参数由父函数准备,并且按照一定的规则压入自己的栈帧中;而子函数则处于自己的栈帧进行操作;在双栈纠缠执行中,由于父函数的栈帧和子函数的栈帧是分割开的,直接利用父函数栈帧顶地址同时引用函数参数和局部变量是不现实的;父函数的栈帧顶由父函数栈帧顶地址指定。由于采用了上述技术方案,与现有技术相比,本专利技术是一种基于双栈纠缠执行的缓冲溢出检测和破坏隔离机制。该机制将任务运行栈分割成平均的两个部分,函数的调用分别交叉在两个栈中进行。这种方法使得缓冲区溢出检测和破坏限制成为可能。首先,栈空间被分割为2部分,确保了至少1/2栈的有效性。其次,改变了函数返回时控制流转移的方向,使得控制流转移和溢出具有异向性。【具体实施方式】实施例:一种航天软件系统溢出检测和破坏限制机制,所述溢出检测和破坏限制机制是一种基于双栈纠缠执行的缓冲溢出检测和破坏隔离机制,步骤如下:将任务运行栈分割成平均的两部分,函数的调用分别交叉在两个栈中进行,实现缓冲区溢出检测和破坏限制;首先是溢出检测和破坏限制栈空间被分割为2部分,确保了至少1/2栈的有效性;其次是改变了函数返回时控制流转移的方向,使得控制流转移和溢出具有异向性。在本实施例中,所述任务运行栈根据函数调用顺序和后进先出的原则压入栈帧;每个栈巾贞设置一个编号,以表不其相对栈底的位置;根据栈巾贞的编号,一个栈巾贞编号为k,那么它所直接调用的所有函数的栈帧为k+Ι ;双栈纠缠执行为:所有编号为奇数的栈帧被依次安排在一起,所有编号为偶数的栈帧被安排在一起,当一个函数调用子函数时,会完成如下操作:l)、call指令将返回值保存在父函数的栈帧中;2)本文档来自技高网
...

【技术保护点】
一种航天软件系统溢出检测和破坏限制机制,其特征在于:所述溢出检测和破坏限制机制是一种基于双栈纠缠执行的缓冲溢出检测和破坏隔离机制,步骤如下:将任务运行栈分割成平均的两部分,函数的调用分别交叉在两个栈中进行,实现缓冲区溢出检测和破坏限制;首先是溢出检测和破坏限制栈空间被分割为2部分,确保了至少1/2栈的有效性;其次是改变了函数返回时控制流转移的方向,使得控制流转移和溢出具有异向性。

【技术特征摘要】

【专利技术属性】
技术研发人员:李尚杰周启平卓保特程胜陈星宇
申请(专利权)人:北京神舟航天软件技术有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1