本文主要是介绍Linux Rootkit之三:系统调用劫持简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
3.1 系统调用的功能
Linux中进程运行的模式有两个:用户态和内核态。运行的用户态的进程功能比较少,要想与硬件设备交互就必须切换到内核态。系统调用就是进程由用户态进入到内核态的唯一入口。
这种实现方式有很多优点:
(1)简化编程方式
编码人员不需要学习过多的硬件设备的编程特性;
(2)极大地提高了系统的安全性
内核在满足莫个请求之前在接口级就可以检查这种请求的合法性;
(3)增强了程序的可移植性
系统通过维持接口不变来隐藏了不同的底层平台和硬件的差异,使得应用程序的跨平台移植更加容易。
3.2 系统调用的实现方式
Linux所有的系统调用的执行流程都是:(1)在用户态发起系统调用请求
(2)进程切换到内核态
(3)找到sys_call_table中与系统调用号对应的函数
(4)执行内核函数
(5)返回到用户态
根据进程切换到内核态所执行指令的不同系统调用可分为int 0x80模式、sysenter模式和syscall模式三种。
int 0x80中断模式是最古老的模式,它通过用户态进程使用int指令发起0x80中断的方式进入内核态,由相应的内核中断处理函数找到sys_call_table中的函数并执行。
进程使用sysenter指令也可以切换到内核态,且效率比int 0x80方式更高。在CPU支持sysenter的情况下,系统调用由sysenter指令实现。
在32位系统中Linux使用int 0x80和sysenter切换到内核态,在64位环境下使用的时syscall指令。
3.3 系统调用劫持简介
系统调用劫持是指在内核设置hook点,使得所有系统调用在陷入到先调用hook点中的函数,然后才调用真正的内核处理函数。这样就能截获并控制系统调用。
系统调用劫持的方法有:
(1)截获sys_call_table
(2)截获0x80中断向量
(3)截获sysenter处理函数指针
(4)截获syscall处理函数指针
接下来详细讨论各种劫持方法。
这篇关于Linux Rootkit之三:系统调用劫持简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!