[发明专利]基于地址随机的反内核挂钩方法在审
申请号: | 201511000483.6 | 申请日: | 2015-12-28 |
公开(公告)号: | CN105653906A | 公开(公告)日: | 2016-06-08 |
发明(设计)人: | 郭玉东;林键;何红旗;董卫宇;王立新;娄睿;李登;周少皇;蔄羽佳;魏小锋;陈刚 | 申请(专利权)人: | 中国人民解放军信息工程大学 |
主分类号: | G06F21/12 | 分类号: | G06F21/12 |
代理公司: | 郑州大通专利商标代理有限公司 41111 | 代理人: | 陈大通 |
地址: | 450052 河*** | 国省代码: | 河南;41 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 地址 随机 内核 挂钩 方法 | ||
1.一种基于地址随机的反内核挂钩方法,其特征在于:包含如下步骤:
步骤1.加载内核模块,进行符号解析和地址重定位,执行内核模块中的初始 化函数,并记录内核模块在初始化过程中的注册信息,内存模块占用内存 空间区域包括模块初始化区域和模块核心区域,初始化完毕后,模块初始 化区域被释放;
步骤2.随机申请一个内存空间,将内核模块的数据信息由原内存空间拷贝到 随机申请的内存空间中,对随机申请的内存空间中的内核模块进行地址再 重定位,并释放内核模块占用的原内存空间,将注册信息在内核子系统中 内存地址记录下来;
步骤3.修改内核模块管理信息及注册信息,使其指向内核模块随机申请的内 存空间的位置。
2.根据权利要求1所述的基于地址随机的反内核挂钩方法,其特征在于:步骤 1具体包含如下步骤:
步骤1.1将内核模块中的节信息分别对应加载到模块初始化区域和模块核 心区域,内核模块初始化完毕后,模块初始化区域被释放,模块核心区域 驻留在内存空间中直到内核模块被卸载;
步骤1.2将内核模块自身符号和内核模块需要用到的外部符号转换成实际 内存地址,需要解析的符号的实际内存地址写入内核模块符号表中,内核 模块符号表为记录需要解析的符号的名字、地址值及所关联节的索引号的 结构体数组;
步骤1.3将内核模块中指令和数据地址修正为实际内存地址,ELF格式的内 核模块文件按节组织重定位信息,将一个节中需要修正的地址及修正方法 记录在另一个类型为REL或RELA的重定位节中;
步骤1.4内核模块加载到内核空间后执行内核模块初始化函数,完成内核模 块自身的初始化工作,记录内核模块在初始化过程中的注册信息,将内核 模块注册的函数和操作集地址写入内核子系统,将内核模块通过钩子挂接 到内核子系统中,钩子即为内核子系统中用于保存函数和操作集地址的指 针。
3.根据权利要求1所述的基于地址随机的反内核挂钩方法,其特征在于:步骤 2中随机申请一个内存空间在内核模块初始化函数执行完毕之后,内核模块 加载函数返回之前进行。
4.根据权利要求1或3所述的基于地址随机的反内核挂钩方法,其特征在于: 所述步骤2具体包含如下步骤:
步骤2.1.将内核模块的数据信息由原内存空间拷贝到随机申请的内存空间 中;
步骤2.2.修正模块结构体中的成员信息,每个加载的内核模块在Linux内核 中对应一个模块结构体,模块结构体记录内核模块的管理信息,模块核心 区域的信息记录在模块结构体中,修正模块结构体中模块核心区域的指 针,使其指向随机申请的内存空间的模块核心区域地址;修正内核模块符 号表,使其指向随机申请的内存空间的模块核心区域中的地址;修正双向 链表中的模块结构体,将双向链表中对应的原模块结构体替换成随机申请 的内存空间模块核心区域中的模块结构体;修正模块结构链表中的依赖关 系,将模块结构链表中的模块结构体替换成随机申请的内存空间模块核心 区域中的模块结构体;
步骤2.3.依据内核模块地址的变化,按照模块核心区域的节对内核模块地址 进行地址再重定位。
5.根据权利要求1所述的基于地址随机的反内核挂钩方法,其特征在于:步骤 3中修改内核模块管理信息及注册信息,指修正内核模块注册信息的钩子, 钩子即为内核子系统中用于保存函数和操作集地址的指针,指向内核模块实 现字符设备的函数和操作集,具体包含如下内容:
步骤3.1.内核模块加载时,在模块核心区域和模块初始化区域预留用于 存放模块Header结构的Header区域,模块Header结构包含标识单元 和双链表单元,标识单元用于搜索模块核心区域和模块初始化区域, 定位模块Header结构;双链表单元,用于连接注册信息中注册函数信 息;
步骤3.2.对内核子系统提供的注册函数进行修改,确定调用者,通过被 调用注册函数的核心模块,进一步搜索到对应的模块Header结构;创 建Register结构,并将其添加到模块Header结构的双链表单元,Register 结构包含容器结构地址、指针个数及记录钩子偏移量和大小的结构数 组;
步骤3.3.依次读取模块初始化区域和模块核心区域的模块Header结构, 遍历其双链表单元,按照Register结构,逐个通过在钩子上增加偏移 量,完成内核模块注册信息的钩子的修正。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军信息工程大学,未经中国人民解放军信息工程大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201511000483.6/1.html,转载请声明来源钻瓜专利网。