System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种进程内安全内存隔离的方法和系统技术方案_技高网
当前位置: 首页 > 专利查询>河海大学专利>正文

一种进程内安全内存隔离的方法和系统技术方案

技术编号:41061346 阅读:2 留言:0更新日期:2024-04-24 11:13
本发明专利技术公开了一种进程内安全内存隔离的方法和系统,包括执行流隔离步骤:为安全域和非安全域内的程序提供隔离的栈以及运行上下文,并提供调用门机制实现安全域的切换;内存访问插桩步骤:非安全域的编译时,在内存访问的位置插入低开销的越界检测代码,若访问地址在安全域的内存范围内则进行拦截;内存系统调用监控步骤:在操作系统内核中监控并拦截运行在非安全域中的程序通过系统调用更改安全域的内存区域属性的行为。本发明专利技术解决了现有的进程内安全内存隔离技术依赖特定硬件支持,以及性能开销过高的问题。

【技术实现步骤摘要】


技术介绍

1、日益复杂的应用程序面临着可信计算基(trusted computing base,tcb)过大的问题。目前,主流的应用程序具有极其复杂的软件栈。在整个软件栈中,应用程序自身的核心业务逻辑可能只占据很小一部分。然而,应用程序的全部依赖组件也被包含在tcb内,使tcb可能包含千万甚至上亿行代码。过大的tcb增大了应用程序的攻击面。为了缩小tcb,工业界和学术界提出可信执行环境(tee)技术。通过软/硬件方法构建一个应用程序执行的安全域doms,确保其中的程序和数据与非安全域domu隔离。tee技术将应用程序中安全域之外的内容全部排除tcb之外,大大减小了tcb的大小,提高了应用程序的安全性。

2、安全内存隔离是构建tee的重要组成部分。内存隔离的关键在于,禁止domu直接访问doms的内存。传统实现内存隔离的基本方法是将doms和domu放在不同的进程中,这将造成较大的上下文切换开销。因此,进程内安全内存隔离技术十分重要。

3、目前,主流的进程内安全内存隔离技术多数在硬件层面实现。如intel的softwareguard extension(sgx)和memory protection key(mpk)技术。纯硬件实现进程内安全内存隔离主要具有两个缺点,第一个是依赖特殊硬件支持。对于不支持相关特性的硬件平台,应用程序安全无法得到保护。第二个是性能开销高。在硬件层无法感知用户程序的语义信息,因此无法结合用户程序的特征减少安全检查带来的开销。如intel sgx技术,对于每一次内存访问时页表缓存(tlb)未命中的情况,均需进行一次安全检查,容易带来不必要的开销。

4、学术界也有在软件层面实现进程内安全内存隔离的研究。传统方法通常通过编译器对应用程序的所有内存访问插桩来实现,但目前已有技术性能开销过高,且完备性差。论文efficient software-based fault isolation中,使用比较和分支指令来判断并拦截非法内存访问,然而分支指令容易会造成处理器流水线停滞;论文sok:shining light onshadow stacks中提出了一种策略,在内存访问前插入额外的内存访问指令,其地址合法性由目标地址合法性决定,通过内存管理单元(mmu)的保护机制实现拦截,此做法会造成额外内存访问;此外,这些技术都只对内存访问进行检查,忽略了攻击者可能通过内存系统调用(如mprotect)更改安全域内存属性的问题。

5、因此,针对上述现有技术的缺陷,如何实现不依赖特殊硬件支持、性能开销低的进程内安全内存隔离这个技术问题有待解决。


技术实现思路

1、针对现有技术的缺陷,本专利技术的目的是提供一种进程内安全内存隔离方法和系统。

2、根据本专利技术提供的一种进程内安全内存隔离方法,包括:

3、执行流隔离步骤:为doms和domu内的程序提供隔离的栈以及上下文。并提供调用门实现从domu安全切换到doms;

4、内存访问插桩步骤:由编译器在domu的程序中内存访问的位置插入低开销的地址检测代码,若地址在doms内存范围内则进行拦截;

5、内存系统调用监控步骤:在内核中监控并拦截domu的程序通过内存系统调用更改doms内存区域属性的行为。

6、优选地,所述执行流隔离步骤包括:

7、步骤a1:应用程序在需要域切换时,手动调用调用门;

8、步骤a2:将所有寄存器值压入domu栈;

9、步骤a3:保存domu栈顶指针;

10、步骤a4:将栈顶指针指向doms栈,完成栈切换;

11、步骤a5:跳转到doms的程序入口。

12、优选地,所述内存访问插桩步骤包括:

13、步骤b1:对程序中每条内存访问指令进行改写,并拦截目标地址在doms内存区域内的情况;

14、步骤b2:进行循环优化,将循环体内的地址检查逻辑逐级外提,并根据区间边界大小对可合并的地址检查进行合并。

15、优选地,所述步骤b1,包括:

16、步骤b1.1:在原始的内存访问指令前插入地址范围判断逻辑addr&ms==es(通常可通过按位与指令、比较指令来实现)。其中设ms代表doms私有内存区域的掩码,es代表doms私有内存区域的起始地址;

17、步骤b1.2:在原始的内存访问指令前插入条件传送指令,根据步骤b1.1的比较结果,将一个非法地址条件传送至目标地址寄存器;

18、步骤b1.3:保留原始的内存访问指令。

19、优选地,所述步骤b2内,循环优化的主要步骤包括:

20、步骤b2.1:识别所有可外提的检查。记检查操作c(xi,xj)表示检测地址区间[xi,xj]和doms的内存区域是否重叠,ran(e)表示e的值域。对于循环l内的c(xi,xj),当ran(xi)和ran(xj)都满足下列形式之一,则c可被提升到循环l外:λ1:range(e)是l的循环不变量;λ2:range(e)={s,s+k,s+2k,…,s+nk}。

21、步骤b2.2:外提所有可外提的检查c。对于λ1形式,直接外提c。对于λ2形式,外提c并将其重写为c(min{s,s+nk},max{s,s+nk})。外提操作将c从循环体内移至循环体外,且仅上升一级。

22、步骤b2.3:遍历每个基本块,识别各个基本块内的可合并检查。对于c1(a,b)和c2(c,d),当且仅当c-a和d-b均为常数,或c-b为常数且小于doms私有内存区域大小时地址区间[a,b]和[c,d]可被合并。

23、步骤b2.4:遍历每个基本块,对其内部的可合并检查进行合并。c-a和d-b均为常数时,合并结果为[min(a,c),max(b,d)]。c-b为常数且小于doms私有内存区域大小时,合并结果为[a,d]。

24、步骤b2.5:不断重复上述步骤,直到已无可外提的检查。

25、优选地,所述步骤内存系统调用监控步骤包括:

26、步骤c1:在程序初始化时,内核模块为doms中的程序和domu中的程序各生成一个键(key);

27、步骤c2:key被放置在各个程序的全局偏移量(got)表中。其对应的内存页被设为只读;

28、步骤c3:当用户程序进行系统调用时,其key被压入用户栈以便于身份验证;

29、步骤c4:内核模块对内存区域相关系统调用进行拦截,检测操作合法性。其他系统调用直接放行;

30、步骤c5:内核模块首先根据key确定操作的主体是doms程序还是domu程序;

31、步骤c6:若是doms程序,则直接放行;

32、步骤c7:若是domu程序,则检测系统调用传入的内存区间与doms内存区域是否有重叠部分。如果有,则禁止操作。否则放行。

33、根据本专利技术提供的一种进程内本文档来自技高网...

【技术保护点】

1.一种进程内安全内存隔离的方法,其特征在于,包括:

2.根据权利要求1所述的一种进程内安全内存隔离的方法,其特征在于,执行流隔离步骤:

3.根据权利要求1所述的一种进程内安全内存隔离的方法,其特征在于,内存访问插桩步骤:

4.根据权利要求3所述的一种进程内安全内存隔离的方法,其特征在于,步骤B1:

5.根据权利要求3所述的一种进程内安全内存隔离的方法,其特征在于,步骤B2:

6.根据权利要求1所述的一种进程内安全内存隔离的方法,其特征在于,内存系统调用监控步骤:

7.一种进程内安全内存隔离的系统,其特征在于,包括:

【技术特征摘要】

1.一种进程内安全内存隔离的方法,其特征在于,包括:

2.根据权利要求1所述的一种进程内安全内存隔离的方法,其特征在于,执行流隔离步骤:

3.根据权利要求1所述的一种进程内安全内存隔离的方法,其特征在于,内存访问插桩步骤:

4.根据权利要求3所述的一种进程内安全...

【专利技术属性】
技术研发人员:蔡淼沈俊儒
申请(专利权)人:河海大学
类型:发明
国别省市:

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

1