加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

竟把Linux内核攻陷了!

发布时间:2021-04-08 14:50:17 所属栏目:传媒 来源:互联网
导读:统的安全防线是建立在内核至高权限掌控的基础之上,无论是杀毒软件,沙箱,还是防火墙都运行在内核态。要突破安全包围,必须获得内核级权限的执行能力,才能和这些安全防护正面PK。 我们常常听到的Android系统ROOT和iOS系统的越狱就是内核攻击的典型应用。



统的安全防线是建立在内核至高权限掌控的基础之上,无论是杀毒软件,沙箱,还是防火墙都运行在内核态。要突破安全包围,必须获得内核级权限的执行能力,才能和这些安全防护正面PK。

我们常常听到的Android系统ROOT和iOS系统的越狱就是内核攻击的典型应用。

获得内核权限以后,攻击者可安装rootkit级木马病毒,实现文件隐藏、进程隐藏、通信隐藏等高级木马功能,对系统危害极为严重。

内核0day漏洞,在APT攻击中是核武器级别的存在,地下网络安全交易市场价值巨大。

进入内核的四种方式

实际上,我们的程序每时每刻都在往返于用户空间和内核空间,只不过这些进出的大门都被操作系统提前安排好了,进入内核后该去哪里执行什么代码,是操作系统说了算,由不得我们自己的程序做主。

从用户态空间进入内核,有四种方式:

中断:

中断分为两种:硬中断和软中断

硬中断:硬件设备向CPU发起的中断信号

软中断:CPU执行int指令触发,早期的操作系统中实现系统调用就是通过这种方式,如Windows上的 int 2e,Linux上的 int 80

不管是硬中断还是软中断,CPU遇到以后都会保留当前执行的现场上下文,进入内核去执行中断处理函数。这些函数记录在中断描述符表IDT中,由操作系统初始化系统的时候预先安排。

异常:

异常是CPU在执行指令的过程中出现的问题,如除法指令的除数为0,访问的内存地址无效等等。

异常和中断处理逻辑类似,也是通过记录在IDT中的异常处理函数来执行,同样由操作系统初始化系统的时候预先安排。

系统调用:

系统调用大家应该就很熟悉了,我们要实现文件系统访问、网络I/O、进程线程使用、内存分配释放等等行为,都需要借助操作系统提供的编程接口来实现,这些接口叫做:系统调用。

前面提到,早期的x86架构下的CPU,没有专门的系统调用机制,操作系统们都使用软中断的形式来进入内核完成系统调用。

后来,因为系统调用是一个很高频的需求,软中断的方式效率有些低下,CPU加入了专门的系统调用机制,这包括一些专用的寄存器和一些专用的系统调用指令。如sysenter(x86)、syscall(x64)、swi(arm)。

通过系统调用进入内核后,该转向哪里执行也是操作系统提前安排好了,由不得应用程序做主。

开发驱动程序:

最后一种进入内核的方式就是开发驱动程序了,但加载驱动本身就需要极高的权限,所以这一点就不详述了。

以上就是通过正规途径,让我们的程序进入内核态运行的方式,可见,一旦进入内核态,执行流就进入了操作系统提前设置好的代码,攻击者没办法胡来。

有正规途径,当然就有不正规途径,也就是通过形形色色的漏洞攻击系统内核,从而使我们的程序进入内核态执行,这也是这篇文章的重点。

下面列举一些常见的攻击手法。

零地址攻击

学过C语言的朋友都知道,零地址,也就是NULL,在C语言中代表着空指针。

一些没有经验的程序员在写一些接口函数时,往往容易忘记检查指针参数是否是NULL,而导致程序的崩溃异常。

以32位操作系统为例,进程的地址空间是:

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读