CN103870767B - 基于ebp构造的栈栈帧内容保护方法 - Google Patents

基于ebp构造的栈栈帧内容保护方法 Download PDF

Info

Publication number
CN103870767B
CN103870767B CN201410102934.6A CN201410102934A CN103870767B CN 103870767 B CN103870767 B CN 103870767B CN 201410102934 A CN201410102934 A CN 201410102934A CN 103870767 B CN103870767 B CN 103870767B
Authority
CN
China
Prior art keywords
ebp
frame
stack
page
shadow
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
CN201410102934.6A
Other languages
English (en)
Other versions
CN103870767A (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.)
Sichuan University
Original Assignee
Sichuan University
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 Sichuan University filed Critical Sichuan University
Priority to CN201410102934.6A priority Critical patent/CN103870767B/zh
Publication of CN103870767A publication Critical patent/CN103870767A/zh
Application granted granted Critical
Publication of CN103870767B publication Critical patent/CN103870767B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine

Abstract

一种基于ebp构造的栈栈帧内容保护方法,包括1、初始化的步骤;2、当函数调用发生时,保存当前ebp寄存器数值,并更改其值为指向page所在内存页的步骤;3、在被调用函数执行期间,捕获其对ebp链的定位操作并对被调用函数所定位的栈帧提供保护的步骤;4、被调用函数执行完成返回时,查看栈帧内容和恢复的步骤。本发明中,被调用函数对栈中的栈帧定位操作被透明地重定向到影子栈帧中,被调用函数在随后针对目标栈帧的任何修改操作都将在影子栈帧中完成,实现了对原有栈帧的保护。同时,在被调用函数返回时,将原有栈帧同影子栈帧内容进行比较,可以确定被调用函数更改了系统中的哪些栈帧内容,为分析被调用函数的栈帧行为提供支持。

Description

基于ebp构造的栈栈帧内容保护方法
技术领域
本发明涉及计算机系统安全技术领域,具体来讲是一种基于ebp构造的栈栈帧内容保护方法。
背景技术
栈保存着程序在运行过程中产生的数据以及用于函数调用与返回的控制信息,x86架构下,相同特权级内的函数调用不会引起栈切换,使得栈在发起调用的函数(调用者,caller)与被调用函数(被调用者,callee)之间共享。当被调用函数在执行时,调用者运行所需数据已经存在于栈内,被调用者则可轻易获取并修改这些信息。
在基于ebp(extended base pointer,拓展基址指针寄存器)构造的栈中,每一次函数调用都产生一个栈帧(stack frame),栈帧中保存着该次函数调用对应参数、返回地址以及该函数在运行过程中产生的数据。各个栈帧通过ebp连通,形如单向链表,链表表头由当前ebp寄存器指定。如图1所示,包含三个函数栈帧A、B和C,所示函数调用顺序为函数C调用函数B,函数B调用函数A,系统当前正在运行函数A中的代码。当前ebp寄存器保存着栈帧A中的[ebp]所在地址([ebp]表示压入栈中的ebp寄存器,参照图1箭头1所示),A.[ebp]则记录着B.[ebp]所在地址,B.[ebp]中保存着C.[ebp]所在栈中的地址,形成形如ebp->A.[ebp]->B.[ebp]->C.[epp]的单向ebp链。函数A对应栈帧为系统中的最新栈帧,函数A中的代码便可通过上述关系去遍历当前系统中的所有栈帧,继而读取甚至修改各个栈帧的内容。
当前针对系统栈的保护主要集中在防护缓冲区溢出(buffer overflow)和ROP(面向返回地址编程,return oriented programming)攻击上,而忽略了栈帧内容本身的安全性。
发明内容
本发明的目的是提供一种基于ebp构造的栈栈帧内容保护方法,通过监控系统栈中的已有ebp链,继而拦截并修改被调用函数对栈帧所进行的定位操作,使得被调用函数定位到错误的内存处,达到对原有栈帧的保护。
实现本发明目的的技术方案如下:一种基于ebp构造的栈栈帧内容保护方法,包括初始化的步骤,包括
1.1 向内核申请一个内存页,其首地址记为page;
1.2 将page对应页表项标记为不存在;
当函数调用发生时,保存当前ebp寄存器数值,并更改其值为指向page所在内存页的步骤,包括
2.1 产生一个计数器i,初值赋为0;
2.2 当函数调用发生时,保存当前ebp寄存器数值为ebp_old,更改当前ebp寄存器数值为ebp_new,使得ebp_new=page+i;
在被调用函数执行期间,捕获其对ebp链的定位操作并对被调用函数所定位的栈帧提供保护的步骤,包括
3.1 若被调用函数通过ebp链去定位系统之前的已有栈帧,则触发缺页中断;否则,等待函数调用返回;
3.2 在缺页中断处理中,判断CR2寄存器数值是否等于ebp_new;若相等,则根据ebp_new数值计算其相对于page的偏移量i=ebp_new–page;若不相等,则等待函数调用返回;
3.3 拷贝栈帧frame_i的内容到其它内存处形成影子栈帧frame_i_shadow;
3.4 累加计数器i,即i=i+1;
3.5 将page+i赋值给frame_i_shadow.[ebp],所述frame_i_shadow.[ebp]为压入影子栈帧frame_i_shadow的ebp寄存器;
3.6 通过指令模拟操作,将被调用函数对上述步骤3.3中栈帧frame_i的定位操作重定向到frame_i_shadow.[ebp]所在地址处,形成虚拟ebp链;
3.7 转步骤3.1;
被调用函数执行完成返回时,查看栈帧内容和恢复的步骤,包括
4.1 比较各个影子栈帧frame_i_shadow与原有栈帧frame_i的内容,查看其内容是否被更改;
4.2 将保存的ebp_old数值恢复到当前ebp寄存器中。
进一步地,所述指令模拟操作包括:
分析当前被调用函数触发缺页的指令,将其中寻址内存地址ebp_new处的操作数改为寻址地址frame_i_shadow.[ebp],再模拟出修改后的临时指令;
将返回地址数值改为指向当前被调用函数触发缺页的指令的下一条指令所在地址。
本发明的有益效果在于:被调用函数对栈中的栈帧定位操作被透明地重定向到影子栈帧中,被调用函数在随后针对目标栈帧的任何修改操作都将在影子栈帧中完成,不会影响到系统中原有栈帧的安全,实现了对原有栈帧的保护。同时,在被调用函数返回时,将原有栈帧同影子栈帧内容进行比较,可以确定被调用函数更改了系统中的哪些栈帧内容,为分析被调用函数的栈帧行为提供支持。
附图说明
图1是基于ebp构造的栈结构示意图;
图2是本发明的流程图;
图3是压入栈中被修改的ebp寄存器的示意图;
图4是拷贝栈帧的内容形成影子栈帧的示意图;
图5是虚拟ebp链的形成示意图;
图6是两次定位操作产生的虚拟ebp链的示意图。
具体实施方式
本发明的总体思路是:当函数调用发生时,更改当前ebp寄存器数值,使其指向系统中一个不存在的内存页。被更改后的ebp会被系统压入到栈中形成[ebp],若被调用函数通过ebp链定位系统已有栈帧,则会触发缺页异常。在缺页异常中将被调用函数定位的栈帧内容拷贝到其它内存地址处形成影子栈帧,通过指令模拟技术将被调用函数的栈帧定位操作重定向到影子栈帧中。
下面结合附图具体描述本发明的实施方式。
如图2所示,基于ebp构造的栈栈帧内容保护方法,包括
1、初始化的步骤,包括
1.1 向内核申请一个内存页,其首地址记为page;
1.2 将page对应页表项标记为不存在;
上述初始化的步骤,申请page内存页用于引发缺页中断。
2、当函数调用发生时,保存当前ebp寄存器数值,并更改其值为指向page所在内存页的步骤,包括
2.1 产生一个计数器i,初值赋为0;计数器i用于标记系统中的栈帧。
2.2 当函数调用发生时,保存当前ebp寄存器数值为ebp_old,更改当前ebp寄存器数值
为ebp_new,使得ebp_new=page+i;该值随后会被压入栈中,如图3中栈帧A所示。
3、在被调用函数执行期间,捕获其对ebp链的定位操作并对被调用函数所定位的栈帧提供保护的步骤,包括
3.1 若被调用函数通过ebp链去定位系统之前的已有栈帧,则触发缺页中断;否则,等待函数调用返回;如图3所示,此时,原有ebp链已经断裂,page所在内存页在页表项中被标记为不存在,引用1处的[ebp]去定位栈B会触发缺页中断。
3.2 在缺页中断处理中,判断CR2寄存器数值是否等于ebp_new;若相等,则根据ebp_new数值计算其相对于page的偏移量i=ebp_new–page;若不相等,则等待函数调用返回;其中,CR2为页故障线性地址寄存器,用来保存最近一次出现页故障时的虚拟地址。
3.3 拷贝栈帧frame_i的内容到其它内存处形成影子栈帧frame_i_shadow;如图4所示,拷贝栈帧B的内容,形成影子栈帧frame_B_shadow。
3.4 累加计数器i,即i=i+1;
3.5 将page+i赋值给frame_i_shadow.[ebp];
3.6 通过指令模拟操作,将被调用函数对上述栈帧的定位操作重定向到frame_i_shadow.[ebp]所在地址处,形成虚拟ebp链;如图5所示,重定向被调用函数的栈帧定位操作到影子栈帧中,形成一个虚拟的ebp链,如箭头2所示。箭头1处的内容并不实际指向frame_B_shadow,通过重定向操作,使得被调用函数感觉存在箭头2所示的指向关系,即让当前栈帧的前一个栈帧看起来是frame_B_shadow。
其中,指令模拟(Instruction simulation,参见维基百科http://en.wikipedia.org/wiki/Instruction_set_simulator))包括:1、分析当前被调用函数触发缺页的指令,将其中寻址内存地址ebp_new处的操作数改为寻址地址frame_i_shadow.[ebp],再模拟出修改后的临时指令;2、将返回地址数值改为指向当前被调用函数触发缺页的指令的下一条指令所在地址。此处的返回地址指等缺页中断执行完成后,用于返回被调用函数的地址。
3.7 转步骤3.1;
如图6所示,被调用函数通过frame_B_shadow继续定位之前栈帧C,产生一个新的影子
栈帧frame_C_shadow,形成A--->frame_B_shadow--->frame_C_shadow的虚拟栈帧关系。
4、被调用函数执行完成返回时,查看栈帧内容和恢复的步骤,包括
4.1 比较各个影子栈帧frame_i_shadow与原有栈帧frame_i的内容,查看其内容是否被更改;这里,将原有栈帧同影子栈帧内容进行比较,可以确定被调用函数更改了系统中的哪些栈帧内容,为分析被调用函数的栈帧行为提供支持。
4.2 将保存的ebp_old数值恢复到当前ebp寄存器中。

Claims (2)

1.一种基于ebp构造的栈栈帧内容保护方法,其特征在于,包括
初始化的步骤,包括
1.1向内核申请一个内存页,其首地址记为page;
1.2将page对应页表项标记为不存在;
当函数调用发生时,保存当前ebp寄存器数值,并更改其值为指向page所在内存页的步骤,包括
2.1产生一个计数器i,初值赋为0;
2.2当函数调用发生时,保存当前ebp寄存器数值为ebp_old,更改当前ebp寄存器数值为ebp_new,使得ebp_new=page+i;
在被调用函数执行期间,捕获其对ebp链的定位操作并对被调用函数所定位的栈帧提供保护的步骤,包括
3.1若被调用函数通过ebp链去定位系统之前的已有栈帧,则触发缺页中断;否则,等待函数调用返回;
3.2在缺页中断处理中,判断CR2寄存器数值是否等于ebp_new;若相等,则根据ebp_new数值计算其相对于page的偏移量i=ebp_new–page;若不相等,则等待函数调用返回;
3.3拷贝栈帧frame_i的内容到其它内存处形成影子栈帧frame_i_shadow;
3.4累加计数器i,即i=i+1;
3.5将page+i赋值给frame_i_shadow.[ebp],所述frame_i_shadow.[ebp]为压入影子栈帧frame_i_shadow的ebp寄存器;
3.6通过指令模拟操作,将被调用函数对上述步骤3.3中栈帧frame_i的定位操作重定向到frame_i_shadow.[ebp]所在地址处,形成虚拟ebp链;
3.7转步骤3.1;
被调用函数执行完成返回时,查看栈帧内容和恢复的步骤,包括
4.1比较各个影子栈帧frame_i_shadow与原有栈帧frame_i的内容,查看其内容是否被更改;
4.2将保存的ebp_old数值恢复到当前ebp寄存器中。
2.如权利要求1所述的基于ebp构造的栈栈帧内容保护方法,其特征在于,所述指令模拟操作包括
分析当前被调用函数触发缺页的指令,将其中寻址内存地址ebp_new处的操作数改为寻址地址frame_i_shadow.[ebp],再模拟出修改后的临时指令;
将返回地址数值改为指向当前被调用函数触发缺页的指令的下一条指令所在地址。
CN201410102934.6A 2014-03-19 2014-03-19 基于ebp构造的栈栈帧内容保护方法 Active CN103870767B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410102934.6A CN103870767B (zh) 2014-03-19 2014-03-19 基于ebp构造的栈栈帧内容保护方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410102934.6A CN103870767B (zh) 2014-03-19 2014-03-19 基于ebp构造的栈栈帧内容保护方法

Publications (2)

Publication Number Publication Date
CN103870767A CN103870767A (zh) 2014-06-18
CN103870767B true CN103870767B (zh) 2017-02-01

Family

ID=50909289

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410102934.6A Active CN103870767B (zh) 2014-03-19 2014-03-19 基于ebp构造的栈栈帧内容保护方法

Country Status (1)

Country Link
CN (1) CN103870767B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106203076B (zh) * 2016-06-24 2020-03-17 武汉绿色网络信息服务有限责任公司 一种利用ebp判断恶意文件的方法
CN108363930B (zh) * 2018-03-21 2020-06-12 中国人民解放军战略支援部队信息工程大学 一种内存数据保护方法及系统
CN110874301B (zh) * 2018-08-30 2022-09-13 腾讯科技(深圳)有限公司 程序卡顿信息的获取方法和装置
CN109376022B (zh) * 2018-09-29 2021-12-14 中国科学技术大学 一种提升Halide语言在多核系统执行效率的线程模型实现方法
CN109785537B (zh) * 2018-12-29 2022-09-30 奇安信安全技术(珠海)有限公司 一种atm机的安全防护方法及装置
CN111209042B (zh) * 2020-01-06 2022-08-26 北京字节跳动网络技术有限公司 一种建立函数栈的方法、装置、介质和电子设备
CN112882695B (zh) * 2021-03-02 2023-11-28 百果园技术(新加坡)有限公司 传参方法、装置、计算机设备及存储介质
CN113238800B (zh) * 2021-05-25 2022-06-28 上海安路信息科技股份有限公司 堆栈帧结构和函数调用方法及系统
CN114781322B (zh) * 2022-04-24 2023-04-25 苏州睿芯集成电路科技有限公司 Cpu芯片仿真加速中针对无mmu环境的内存状态恢复方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1885275A (zh) * 2005-06-20 2006-12-27 中兴通讯股份有限公司 一种嵌入式系统及其实时内存监控处理方法
CN101866406A (zh) * 2010-06-18 2010-10-20 中国科学院软件研究所 一种栈溢出攻击防御方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8375373B2 (en) * 2010-04-19 2013-02-12 Microsoft Corporation Intermediate language support for change resilience

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1885275A (zh) * 2005-06-20 2006-12-27 中兴通讯股份有限公司 一种嵌入式系统及其实时内存监控处理方法
CN101866406A (zh) * 2010-06-18 2010-10-20 中国科学院软件研究所 一种栈溢出攻击防御方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
《通信领域中嵌入式软件异常处理模块分析与实现》;何先波等;《计算机工程》;20070531;第33卷(第9期);第69-71页 *

Also Published As

Publication number Publication date
CN103870767A (zh) 2014-06-18

Similar Documents

Publication Publication Date Title
CN103870767B (zh) 基于ebp构造的栈栈帧内容保护方法
US8046544B2 (en) Garbage collection barrier with direct user mode traps
JP2014174998A5 (zh)
JP5608594B2 (ja) プレロード命令制御
KR101665219B1 (ko) 네스티드 에뮬레이션 및 동적 링킹 환경
JP2010282252A5 (zh)
WO2008005825A3 (en) Methods, systems, and computer program products for providing access to addressable entities using a non-sequential virtual address space
CN102663312A (zh) 一种基于虚拟机的rop攻击检测方法及系统
CN114730249A (zh) 不同类型的存储器之间的页迁移的减少
CN102662726B (zh) 虚拟机的模拟方法和计算机设备
CN106294089A (zh) 辅助对被监控内存空间的访问监控的方法和装置
JP5318197B2 (ja) ホストデータ処理装置内におけるデバイスエミュレーションのサポート
US20060184713A1 (en) Method for operating a virtual machine computer system running guest operating systems on a central processing means virtualized by a host system having register stack engine functionality
JP2022505011A (ja) メモリ・アクセスを制御するための装置及び方法
CN107239410B (zh) 基于动态插桩的大块内存分配系统及方法
EP3341834B1 (en) Exception handling
US11397541B2 (en) Controlling guard tag checking in memory accesses
CN107818034A (zh) 监测计算机设备中的进程的运行空间的方法以及装置
US20190026649A1 (en) System and method for generating a file execution record of address tuples
JP2001265620A (ja) Romのプログラムデバッグ方式
CN109144575A (zh) 跨操作系统运行应用的装置、方法、电子设备和存储器
TWI660307B (zh) 二元碼轉譯裝置及方法
CA2557688A1 (en) System and method for implementing software breakpoints in an interpreter
CN105988811B (zh) 获取操作系统的内核控制流程图的方法和装置
CN103197957B (zh) 一种用户程序执行时页面复制方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant