可以尝试使用如下几种方案来拦截Linux内核函数:
使用Linux安全API
从最佳实践的角度来说suse linux 下载,我们觉得使用Linux安全API的hook函数是最佳选择,由于这个插口就是因此而设计的。内核代码的关键点包含安全函数调用,这种调用可能造成安全模块安装的拉升。该模块可以研究特定操作的上下文,并决定是容许还是严禁它。不幸的是,LinuxSecurityAPI有两个主要限制:
其实内核开发人员对系统是否可以包含多个安全模块有不同的想法linux定时关机命令,而且模块未能动态加载是可以肯定的事实。为了确保系统从一开始就保持安全,安全模块必须是内核的一部份。为此,为了使用Linux安全API,我们须要建立一个订制的Linux内核。
更改系统调用表
因为主要用于由用户应用程序执行的操作,所以我们可以在系统调用级别上实现它。所有Linux系统调用处理程序都储存在sys_call_table表中。修改此表中的值会造成修改系统的行为。为此,我们可以通过保存旧的处理程序值并将自己的处理程序添加到表中来hook系统调用。这些方式也有一些优点和缺点。
主要优点如下:
不过,这些方式也有几个缺点:
技术施行较复杂。其实替换表中的值并不困难调用linux内核函数,但还有一些额外的任务须要个别条件和一些不显著的解决方案:
只hook系统调用。因为此方式容许你替换系统调用处理程序,因而它极大地限制了入口点。所有的附加检测都可以在系统调用之前或以后立刻执行,我们只有系统调用参数及其返回值。因而,有时我们可能须要仔细检测进程的访问权限和系统调用参数的有效性。据悉,在个别情况下,须要复制两次用户进程显存会形成额外的开支费用。诸如,当参数通过表针传递时,会有两个副本:一个是我们自己创建的副本,另一个是由原始处理程序创建的副本。
使用Kprobes
Kprobes—一种专为Linux内核跟踪和调试而设计的API。Kprobes准许为任何内核指令以及函数入口和函数返回处理程序安装预处理程序和后处理程序。处理程序可以访问寄存器并可以修改它们。这样,我们就有机会监控文件执行流程并改变它。
使用Kprobes跟踪Linux内核函数的主要用处如下:
Kprobes也有缺点:
拼接
一种配置内核函数hooking的精典方式:将函数开头的指令替换为通向自定义处理程序的无条件跳转。原始指令被联通到不同的位置,并在跳回到截取的函数之前执行。为此,两次跳转,就可以将代码拼接成一个函数。此方式的工作方法与kprobes跳转优化的方法相同。使用拼接,也可以获得与使用kprobes相同的结果,但开支更低,而且可以完全控制流程。
使用拼接的优点十分显着:
但是,这些方式有一个主要缺点—技术复杂性。更换函数中的机器代码并不容易。为了使用拼接调用linux内核函数,须要完成以下几项操作:
相对而言,拼接可能是一种十分有用的方式来hookLinux内核函数。但此方式的实现过分复杂。因为考虑到我们自身能力和一些其他诱因,我们暂时不准备采用这些方式,所以将其作为候选方案。
以上是可以尝试使用如下几种方案来拦截Linux内核函数的详细内容。更多信息请关注PHP中文网其他相关文章!