书签 分享 收藏 举报 版权申诉 / 7

一种航天软件系统溢出检测和破坏限制机制.pdf

  • 上传人:li****8
  • 文档编号:6113130
  • 上传时间:2019-04-12
  • 格式:PDF
  • 页数:7
  • 大小:326.38KB
  • 摘要
    申请专利号:

    CN201410060565.9

    申请日:

    2014.02.21

    公开号:

    CN103853662A

    公开日:

    2014.06.11

    当前法律状态:

    授权

    有效性:

    有权

    法律详情:

    授权|||实质审查的生效IPC(主分类):G06F 11/36申请日:20140221|||著录事项变更IPC(主分类):G06F 11/36变更事项:发明人变更前:李尚杰 周启平 卓保特 程胜 陈星宇变更后:李尚杰 周启平 卓保特 程胜 陈星宇 王静 李宇明 魏明|||公开

    IPC分类号:

    G06F11/36

    主分类号:

    G06F11/36

    申请人:

    北京神舟航天软件技术有限公司

    发明人:

    李尚杰; 周启平; 卓保特; 程胜; 陈星宇

    地址:

    100094 北京市海淀区永丰路28号

    优先权:

    专利代理机构:

    北京世誉鑫诚专利代理事务所(普通合伙) 11368

    代理人:

    孙国栋

    PDF完整版下载: PDF下载
    内容摘要

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

    权利要求书

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

    2.  根据权利要求1中所述的航天软件系统溢出检测和破坏限制机制,其特征在于:所述任务运行栈根据函数调用顺序和后进先出的原则压入栈帧;每个栈帧设置一个编号,以表示其相对栈底的位置;根据栈帧的编号,一个栈帧编号为k,那么它所直接调用的所有函数的栈帧为k+1;双栈纠缠执行为:所有编号为奇数的栈帧被依次安排在一起,所有编号为偶数的栈帧被安排在一起,当一个函数调用子函数时,会完成如下操作:
    1)、call指令将返回值保存在父函数的栈帧中;
    2)、切换到子函数的栈帧;
    3)、复制函数参数到子函数栈帧;
    4)、分配局部变量空间;
    5)、继续子函数逻辑执行;
    6)、当子函数完成执行后,根据父函数栈帧中保存的返回地址返回父函数继续执行。

    3.  根据权利要求2中所述的航天软件系统溢出检测和破坏限制机制,其特征在于:所述步骤1)中,双栈纠缠执行的栈帧除了临时变量之外必须维持相应的控制结构;当发生函数调用和函数返回时,控制结构保证了栈帧之间的平滑 切换;
    双栈执行也必须维持栈帧之间的顺序关系,当调用一个函数时,须保证在正确位置上创建新的栈帧;当从一个函数返回时,必须保证能回到调用函数的栈帧上继续执行;在任务运行栈中,只有栈顶的栈帧是活动,其它栈帧是非活动的。

    4.  根据权利要求2中所述的航天软件系统溢出检测和破坏限制机制,其特征在于:所述步骤2)中双栈纠缠执行的函数调用过程为:首先,父函数为子函数准备参数,按照一定的顺序将参数压入栈中,然后调用call指令,将call指令下一条指令作为返回值压入栈中,并且将eip设定为被调用函数的入口地址继续执行;接下来的控制由子函数的程序逻辑决定,直到函数准备返回。

    5.  根据权利要求2中所述的航天软件系统溢出检测和破坏限制机制,其特征在于:所述双栈纠缠执行的函数返回过程的一个基本原则就是将栈的基本形态调整为执行call指令之前的形式;
    第1条指令将ptop指向的caller栈帧的顶部设置给寄存器,由于子函数已经完成计算,它的局部变量和临时空间将被丢弃,直接将寄存器设置为caller栈帧顶部是合理的;第2条指令将父函数栈帧顶地址设置为caller父函数的栈帧顶部,由于caller的父函数的栈帧下紧邻子函数的栈帧位置,因此,子函数的帧底就是父函数栈帧顶地址的值;第3、4条指令将栈帧基设置为寄存器,利用栈操作恢复caller的栈帧基地址;第5条指令则将父函数栈帧的基地址设置为caller的父函数栈帧基地址。至此,栈帧完全恢复到call指令执行之后的布局,上述过程完成了函数返回的准备工作;第6条指令ret返回。

    6.  根据权利要求5中所述的航天软件系统溢出检测和破坏限制机制,其特征在于:所述函数参数处理函数调用的参数由父函数准备,并且按照一定的规 则压入自己的栈帧中;而子函数则处于自己的栈帧进行操作;
    在双栈纠缠执行中,由于父函数的栈帧和子函数的栈帧是分割开的,直接利用父函数栈帧顶地址同时引用函数参数和局部变量是不现实的;父函数的栈帧顶由父函数栈帧顶地址指定。

    说明书

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

    关 键  词:
    一种 航天 软件 系统 溢出 检测 破坏 限制 机制
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:一种航天软件系统溢出检测和破坏限制机制.pdf
    链接地址:https://www.zhuanlichaxun.net/p-6113130.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1