[发明专利]一种Linux平台系统调用表hook稳定性控制方法及系统在审
申请号: | 202310147910.1 | 申请日: | 2023-02-21 |
公开(公告)号: | CN116244096A | 公开(公告)日: | 2023-06-09 |
发明(设计)人: | 王世元;姜向前 | 申请(专利权)人: | 安芯网盾(北京)科技有限公司 |
主分类号: | G06F9/54 | 分类号: | G06F9/54;G06F9/448;G06F9/445 |
代理公司: | 北京中创云知识产权代理事务所(普通合伙) 11837 | 代理人: | 龙明涛 |
地址: | 100085 北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 linux 平台 系统 调用 hook 稳定性 控制 方法 | ||
1.一种Linux平台系统调用表hook稳定性控制方法,其特征在于,包括如下步骤:
编写可装载内核模块,获取系统调用表地址和原始系统调用函数地址,对hook的过程设置互斥锁并保存当前hook信息;
编写自定义钩子函数,利用RCU锁对访问所述当前hook信息以调用所述系统调用表中现有钩子函数的过程进行保护;
注册所述可装载内核模块的模块通知回调,判断待卸载模块的模块指针与所述当前hook信息中的模块指针是否相同,如相同则分配内存保存新的hook信息并替换当前hook信息,在所述当前hook信息中的引用计数值为预设数值时确定自定义钩子函数已经执行完现有钩子函数,对所述系统调用表进行hook。
2.根据权利要求1所述的Linux平台系统调用表hook稳定性控制方法,其特征在于,所述编写可装载内核模块并获取系统调用表地址和原始系统调用函数地址,包括:
编写所述可装载内核模块,在其初始化函数中注册kprobe以获取ka llsyms_on_each_symbol函数在linux内核中的地址,保存到函数指针变量pfn_kallsyms_on_each_symbol中并反注册kprobe;
通过调用函数指针pfn_kallsyms_lookup_name获取linux内核中的所述系统调用表地址,保存到全局变量sys_call_table_ptr中;
通过调用函数指针pfn_kallsyms_lookup_name获取所述系统调用表里存储的所述原始系统调用函数地址,并保存在全局变量real_sys_call_ptr中。
3.根据权利要求1所述的Linux平台系统调用表hook稳定性控制方法,其特征在于,所述对hook的过程设置互斥锁并保存当前hook信息,包括:
对需hook的系统调用设置互斥锁,记为lock_for_sys_call_hook,并对其初始化;
对需hook的系统调用分配内存以保存所述当前hook信息,把返回的内存地址保存在全局变量hook_info_ptr中;
其中,所述当前hook信息包含:所述现有钩子函数的引用计数、地址、所在模块指针及所述原始系统调用函数地址。
4.根据权利要求1所述的Linux平台系统调用表hook稳定性控制方法,其特征在于,所述编写自定义钩子函数并利用RCU锁对访问所述当前hook信息以调用所述系统调用表中现有钩子函数的过程进行保护,包括:
编写所述自定义钩子函数,所述自定义钩子函数利用RCU锁保护访问所述当前hook信息过程,所述过程包含:访问所述当前hook信息并对所述引用计数进行原子地加1;如果所述当前hook信息存在,则调用所述当前hook信息里保存的所述原始系统调用函数地址;然后对所述当前hook信息的所述引用计数原子地减1。
5.根据权利要求4所述的Linux平台系统调用表hook稳定性控制方法,其特征在于,所述在调用所述现有钩子函数的前后分别对所述引用计数进行原子地加1和减1,包括:
调用rcu_read_lock进入读者临界区;
通过调用rcu_dereference对全局变量hook_info_ptr解引用并保存在局部变量tmp_hook_info_ptr中;
当局部变量tmp_hook_info_ptr保存的地址为空则使所述现有钩子函数返回,当局部变量tmp_hook_info_ptr保存的地址不为空则对tmp_hoo k_info_ptr-reference_count进行原子地加1;
调用rcu_read_unlock退出读者临界区;
当局部变量tmp_hook_info_ptr保存的地址为空则使所述现有钩子函数返回,当局部变量tmp_hook_info_ptr保存的地址不为空则调用tmp_hook_info_ptr-previous_sys_call_ptr保存的函数指针,对tmp_hook_info_ptr-reference_count进行原子地减1。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于安芯网盾(北京)科技有限公司,未经安芯网盾(北京)科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202310147910.1/1.html,转载请声明来源钻瓜专利网。