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

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

Info

Publication number
CN103853662B
CN103853662B CN201410060565.9A CN201410060565A CN103853662B CN 103853662 B CN103853662 B CN 103853662B CN 201410060565 A CN201410060565 A CN 201410060565A CN 103853662 B CN103853662 B CN 103853662B
Authority
CN
China
Prior art keywords
function
stack frame
stack
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.)
Active
Application number
CN201410060565.9A
Other languages
English (en)
Other versions
CN103853662A (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

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 CN103853662A (zh) 2014-06-11
CN103853662B true 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)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104714885B (zh) * 2015-02-13 2017-12-01 小米科技有限责任公司 栈溢出位置的检测方法及装置
US11616719B2 (en) * 2015-10-23 2023-03-28 Netflix, Inc Techniques for determining client-side effects of server-side behavior using canary analysis
CN107229862B (zh) * 2017-06-06 2019-11-12 电子科技大学 基于模拟栈和线程注入的一种rop攻击栈溢出防护方法

Citations (2)

* 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 上海华为技术有限公司 一种任务栈溢出检测方法、装置及计算机系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101334172B1 (ko) * 2007-01-05 2013-11-28 삼성전자주식회사 임베디드 시스템의 스택 오버플로우 방지 방법 및 장치

Patent Citations (2)

* 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 上海华为技术有限公司 一种任务栈溢出检测方法、装置及计算机系统

Also Published As

Publication number Publication date
CN103853662A (zh) 2014-06-11

Similar Documents

Publication Publication Date Title
Vila et al. Theory and practice of finding eviction sets
CN102663312B (zh) 一种基于虚拟机的rop攻击检测方法及系统
CN105224864B (zh) 一种抵御代码重用攻击的工作进程随机化方法及系统
CN102096786A (zh) 基于硬件虚拟化的跨平台安全保护系统
CN105022956B (zh) 一种抵御代码重用攻击的方法
CN103853662B (zh) 一种航天软件系统溢出检测和破坏限制机制
CN109840410A (zh) 一种进程内数据隔离与保护的方法和系统
CN105980993A (zh) 用于辨识对应目标内存地址的内存属性单元的区域的区域辨识操作
RU2015107219A (ru) Способы, системы и машиночитаемый носитель для активного контроля, защиты памяти и проверки целостности целевых устройств
CN102566924B (zh) 加强安全保护的软键盘运行处理方法
CN107025405A (zh) 使用安全堡垒提高云可用性和硅隔离的方法
Zhang et al. Triggering rowhammer hardware faults on arm: A revisit
CN104008329A (zh) 一种基于虚拟化技术的软件隐私泄露行为检测方法及系统
CN105488388A (zh) 一种基于cpu时空隔离机制实现应用软件行为监控系统的方法
US10528729B2 (en) Methods and systems for defending against cyber-attacks
CN108205615A (zh) 一种优化可信基础组件的实现系统及其实现方法
MX2021013230A (es) Ejecucion de llamadas de sistema en espacio de direccion aislado en el nucleo de sistema operativo.
CN103995705A (zh) 一种操作系统地址空间随机化分配系统及方法
CN101309149A (zh) 一种地址处理方法和装置
CN102521079B (zh) 软件栈缓冲区溢出的容错方法
CN104714834B (zh) 一种空间确定的任务调度方法
CN107203716B (zh) 一种Linux内核轻量级结构化保护方法及装置
CN109614274A (zh) 处理器指令Cache单粒子翻转软错误的防护方法
CN103019865B (zh) 虚拟机监控方法和系统
Allende et al. Towards linux for the development of mixed-criticality embedded systems based on multi-core devices

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.