CN103853662A - 一种航天软件系统溢出检测和破坏限制机制 - Google Patents

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

Info

Publication number
CN103853662A
CN103853662A CN201410060565.9A CN201410060565A CN103853662A CN 103853662 A CN103853662 A CN 103853662A CN 201410060565 A CN201410060565 A CN 201410060565A CN 103853662 A CN103853662 A CN 103853662A
Authority
CN
China
Prior art keywords
function
stack
stack frame
father
subfunction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410060565.9A
Other languages
English (en)
Other versions
CN103853662B (zh
Inventor
李尚杰
周启平
卓保特
程胜
陈星宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Shenzhou Aerospace Software Technology Co.,Ltd.
Original Assignee
BEIJING SHENZHOU AEROSPACE SOFTWARE TECHNOLOGY Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by BEIJING SHENZHOU AEROSPACE SOFTWARE TECHNOLOGY Co Ltd filed Critical BEIJING SHENZHOU AEROSPACE SOFTWARE TECHNOLOGY Co Ltd
Priority to CN201410060565.9A priority Critical patent/CN103853662B/zh
Publication of CN103853662A publication Critical patent/CN103853662A/zh
Application granted granted Critical
Publication of CN103853662B publication Critical patent/CN103853662B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Executing Machine-Instructions (AREA)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

一种航天软件系统溢出检测和破坏限制机制
技术领域
本发明属于嵌入式操作系统开发领域,具体地说,涉及一种航天软件系统溢出检测和破坏限制机制。
背景技术
缓冲区溢出是航天器软件系统的一个重要的安全威胁。首先,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栈,那么它将破坏其他任务的数据,形成系统性破坏。这类破坏需要向操作系统报告。操作系统提供健康检查机制来处理系统性破坏。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (6)

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中所述的航天软件系统溢出检测和破坏限制机制,其特征在于:所述函数参数处理函数调用的参数由父函数准备,并且按照一定的规则压入自己的栈帧中;而子函数则处于自己的栈帧进行操作;
在双栈纠缠执行中,由于父函数的栈帧和子函数的栈帧是分割开的,直接利用父函数栈帧顶地址同时引用函数参数和局部变量是不现实的;父函数的栈帧顶由父函数栈帧顶地址指定。
CN201410060565.9A 2014-02-21 2014-02-21 一种航天软件系统溢出检测和破坏限制机制 Active CN103853662B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410060565.9A CN103853662B (zh) 2014-02-21 2014-02-21 一种航天软件系统溢出检测和破坏限制机制

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410060565.9A CN103853662B (zh) 2014-02-21 2014-02-21 一种航天软件系统溢出检测和破坏限制机制

Publications (2)

Publication Number Publication Date
CN103853662A true CN103853662A (zh) 2014-06-11
CN103853662B CN103853662B (zh) 2016-08-17

Family

ID=50861339

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410060565.9A Active CN103853662B (zh) 2014-02-21 2014-02-21 一种航天软件系统溢出检测和破坏限制机制

Country Status (1)

Country Link
CN (1) CN103853662B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104714885A (zh) * 2015-02-13 2015-06-17 小米科技有限责任公司 栈溢出位置的检测方法及装置
CN107229862A (zh) * 2017-06-06 2017-10-03 电子科技大学 基于模拟栈和线程注入的一种rop攻击栈溢出防护方法
CN108431782A (zh) * 2015-10-23 2018-08-21 奈飞公司 使用金丝雀分析确定服务器侧行为的客户端侧影响的技术

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1821951A (zh) * 2005-02-17 2006-08-23 松下电器产业株式会社 算术单元
CN101183331A (zh) * 2007-12-12 2008-05-21 上海华为技术有限公司 一种任务栈溢出检测方法、装置及计算机系统
US20080168460A1 (en) * 2007-01-05 2008-07-10 Samsung Electronics Co., Ltd. Method and apparatus for preventing stack overflow in embedded system

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1821951A (zh) * 2005-02-17 2006-08-23 松下电器产业株式会社 算术单元
US20080168460A1 (en) * 2007-01-05 2008-07-10 Samsung Electronics Co., Ltd. Method and apparatus for preventing stack overflow in embedded system
CN101183331A (zh) * 2007-12-12 2008-05-21 上海华为技术有限公司 一种任务栈溢出检测方法、装置及计算机系统

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104714885A (zh) * 2015-02-13 2015-06-17 小米科技有限责任公司 栈溢出位置的检测方法及装置
CN104714885B (zh) * 2015-02-13 2017-12-01 小米科技有限责任公司 栈溢出位置的检测方法及装置
CN108431782A (zh) * 2015-10-23 2018-08-21 奈飞公司 使用金丝雀分析确定服务器侧行为的客户端侧影响的技术
CN108431782B (zh) * 2015-10-23 2021-12-07 奈飞公司 使用金丝雀分析确定服务器侧行为的客户端侧影响的技术
US11616719B2 (en) 2015-10-23 2023-03-28 Netflix, Inc Techniques for determining client-side effects of server-side behavior using canary analysis
CN107229862A (zh) * 2017-06-06 2017-10-03 电子科技大学 基于模拟栈和线程注入的一种rop攻击栈溢出防护方法

Also Published As

Publication number Publication date
CN103853662B (zh) 2016-08-17

Similar Documents

Publication Publication Date Title
US20230114084A1 (en) Secured execution context data
CN103140841B (zh) 保护存储器的部分的方法和装置
US8732523B2 (en) Data processing apparatus and method for analysing transient faults occurring within storage elements of the data processing apparatus
EP3591565A1 (en) Computing device with increased resistance against rowhammer attacks
US10095538B2 (en) Systems and methods involving features of hardware virtualization, hypervisor, pages of interest, and/or other features
CN105224864B (zh) 一种抵御代码重用攻击的工作进程随机化方法及系统
CN102096786A (zh) 基于硬件虚拟化的跨平台安全保护系统
US20150212839A1 (en) Tracking transformed memory pages in virtual machine chain migration
EP3757860A1 (en) Providing improved efficiency for metadata usages
Juffinger et al. CSI: Rowhammer–Cryptographic security and integrity against rowhammer
US9122894B2 (en) Method and apparatus for encryption
Yuce et al. FAME: Fault-attack aware microprocessor extensions for hardware fault detection and software fault response
US10552345B2 (en) Virtual machine memory lock-down
EP3460709B1 (en) Devices and methods for secured processors
CN104461886A (zh) 一种控制流错误检测方法
CN103853662A (zh) 一种航天软件系统溢出检测和破坏限制机制
Chakraborty et al. Deep learning based diagnostics for rowhammer protection of DRAM chips
Chen et al. Memguard: A low cost and energy efficient design to support and enhance memory system reliability
JP2012190460A (ja) プロセッサのフォールト・トレランスを改善するための装置
US10908987B1 (en) Handling memory errors in computing systems
CN103996004A (zh) 一种基于虚拟化的高可用系统设计方法
Zhang et al. A Retrospective and futurespective of Rowhammer attacks and defenses on DRAM
CN106161391A (zh) 一种安全芯片及其对错误注入攻击的防御方法和装置
Shafiq et al. TCAMChecker: A software approach to the error detection and correction of TCAM-based networking systems
Loh et al. Fault tolerance through invariant checking for iterative solvers

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C53 Correction of patent of invention or patent application
CB03 Change of inventor or designer information

Inventor after: Li Shangjie

Inventor after: Zhou Qiping

Inventor after: Zhuo Baote

Inventor after: Cheng Sheng

Inventor after: Chen Xingyu

Inventor after: Wang Jing

Inventor after: Li Yuming

Inventor after: Wei Ming

Inventor before: Li Shangjie

Inventor before: Zhou Qiping

Inventor before: Zhuo Baote

Inventor before: Cheng Sheng

Inventor before: Chen Xingyu

COR Change of bibliographic data

Free format text: CORRECT: INVENTOR; FROM: LI SHANGJIE ZHOU QIPING ZHUO BAOTE CHENG SHENG CHEN XINGYU TO: LI SHANGJIE ZHOU QIPING ZHUO BAOTE CHENG SHENG CHEN XINGYU WANG JING LI YUMING WEI MING

C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 100094 No. 28, Yongfeng Road, Beijing, Haidian District

Patentee after: Beijing Shenzhou Aerospace Software Technology Co.,Ltd.

Address before: 100094 No. 28, Yongfeng Road, Beijing, Haidian District

Patentee before: BEIJING SHENZHOU AEROSPACE SOFTWARE TECHNOLOGY Co.,Ltd.