System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
技术介绍
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技术,对于每一次内存访问时页表缓存(
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所述的一种进程内安全...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。