您的位置:首页 > 运维架构 > Linux

Linux Rootkit之三:系统调用劫持简介

2015-07-24 22:09 621 查看

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处理函数指针

接下来详细讨论各种劫持方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: