[发明专利]基于地址随机和段隔离的全局偏移表保护方法有效
申请号: | 201510463850.X | 申请日: | 2015-07-31 |
公开(公告)号: | CN105095762B | 公开(公告)日: | 2017-10-10 |
发明(设计)人: | 林键;郭玉东;周少皇;何红旗;董卫宇;王立新;蔄羽佳 | 申请(专利权)人: | 中国人民解放军信息工程大学;上海红神信息技术有限公司 |
主分类号: | G06F21/56 | 分类号: | G06F21/56 |
代理公司: | 郑州大通专利商标代理有限公司41111 | 代理人: | 陈大通 |
地址: | 450052 河*** | 国省代码: | 河南;41 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 地址 随机 隔离 全局 偏移 保护 方法 | ||
技术领域
本发明涉及计算机可执行文件安全技术领域,特别涉及一种基于地址随机和段隔离的全局偏移表保护方法。
背景技术
在动态链接的ELF程序中,所引用的外部符号分为两大类,一是对外地全局数据(如全局变量)的引用,二是对外地全局函数的调用;引用和调用的位置分布在整个可执行程序中。为了便于管理,ELF格式的可执行文件中定义了两个节.got和.got.plt,称为全局偏移表GOT(Global Offset Table),专门用于集中存放可执行程序引用的各全局符号和函数的目的地址,其中,全局数据符号的目的地址记录在.got节中,全局函数符号的目的地址记录在.got.plt节中。
出于执行效率的考虑,ELF程序通常采用延迟解析机制,只有在第一次真正引用时才对全局库函数进行解析。解析程序获得库函数的真正的目的地址并将其写入到GOT表中,因此GOT表必须是可写的。在Linux操作系统中,应用进程的地址空间布局是相对固定的,特别地,应用进程的代码和数据段在地址空间中的位置是固定的,GOT表的位置也是固定的,因而节.got.plt实际上是位于固定内存空间的一组可写的函数指针。利用这一属性,恶意代码可以通过修改GOT表的值来劫持程序的控制流程。
现有的GOT表保护方法,如RELRO,通过禁用延迟解析来保护GOT表,其实现思路是:在为进程加载程序时,一次性解析所有的全局库函数,完成GOT表的初始化,而后将GOT表所在的页标记为只读页,禁止再对其进行修改。然而函数解析工作比较耗时,加载时解析所有的库函数会延缓程序的启动过程, 而且很多库函数可能根本不会被执行到,对它们的解析也是一种浪费,所以该方法并未在GCC编译器中默认启用。
发明内容
针对现有技术中的不足,本发明提供一种基于地址随机和段隔离的全局偏移表保护方法,增加随机化处理,性能开销较小,安全性能高,进一步防止恶意代码通过修改GOT表值来劫持程序控制流程。
按照本发明所提供的设计方案,一种基于地址随机和段隔离的全局偏移表保护方法,包含如下步骤:
步骤1.ELF程序完成加载后,随机申请内存空间,并将ELF节段内容拷贝到该内存空间中,赋予新的节段名称,在ELF程序表头中定义加载字段PT_DYNAMIC,用于描述.dynamic节的信息;
步骤2.对步骤1中随机申请的内存空间创建段描述符,选择一个空闲的段寄存器作为特殊段寄存器,将段描述符加载到该特殊段寄存器中;
步骤3.修改程序表头及步骤1中赋予新的节段名称的节段内容,使之满足ELF中节段的指向关系,并修改.plt节中的代码,使其通过特殊段寄存器访问GOT表;
步骤4.初始化动态链接器,修改程序表头中PT_DYNAMIC段内容,并隐藏.dynamic节所在地址。
上述的,所述步骤1中随机申请内存空间并将ELF节段内容拷贝到该内存空间中具体包含随机地按需申请至少三页内存空间,包含可读可执行页、只可读页和可读可写页,其中,.plt拷贝到可读可执行页中,记为.new.plt;.rel.plt拷贝到只可读页中,记为.new.rel.plt;.dynamic和.got.plt拷贝到可读可写页中,并分别记为.new.dynamic和.new.got.plt。
上述的,步骤1中将ELF节段内容拷贝到该内存空间中,赋予新的节段名称具体包含:将.plt、.rel.plt、.dynamic、.got.plt节的内容拷贝到该内存空间中,并分别标记为.new.plt、.new.rel.plt、.new.dynamic、.new.got.plt,其中.plt为过程链接表,通过jmp指令对GOT表进行引用,.rel.plt包含与过程链接表相关联的重定向地址,.dynamic用于提供动态链接器所需信息,.got.plt用于记录全局函数符号的目的地址。
上述的,所述步骤3中ELF中节段的指向关系具体为ELF文件头指向ELF程序表头内存位置,ELF程序表头指向加载字段PT_DYNAMIC内存位置,加载字段PT_DYNAMIC指向.got.plt、.rel.plt的内存位置,通过.got.plt中的第一个函数初始值计算.plt内存位置。
本发明的有益效果:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军信息工程大学;上海红神信息技术有限公司,未经中国人民解放军信息工程大学;上海红神信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510463850.X/2.html,转载请声明来源钻瓜专利网。