说明
该系列文章主要是从ctf比赛入手,针对linux内核上的漏洞分析、挖掘与利用做讲解,本篇文章主要介绍内核漏洞利用所需的前置知识以及准备工作。
linux内核态与用户态的区别
以 Intel CPU 为例,按照权限级别划分,Intel把 CPU指令集
操作的权限由高到低划为4级:
- ring 0 (通常被称为内核态,cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序)
- ring 1 (保留)
- ring 2 (保留)
- ring 3 (通常被称为用户态,只能受限的访问内存,且不允许访问外围设备)
如下图所示:
越是内环则cpu的权限越高,并且内环可以随意访问外环的资源而外环则被禁止。
因此相比用户态的漏洞,内核态的漏洞具有更强的破坏力,拿到了内核的权限则基本上相当于控制了整个操作系统。
linux内核分析环境搭建
如果只是单纯的搭建内核的分析调试环境,一般来说需要自己手动下载对应版本的内核并进行编译,从kernel官网下载即可,这里笔者下了4.19的内核版本,在编译安装过程中可能会遇到模块缺失的问题,在ubuntu上使用apt安装对应的模块即可,笔者本地手动安装的模块如下:
sudo apt-get install libncurses5-dev
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install libopenssl-dev
首先使用make menuconfig
来生成默认的config文件,这是一个图形化的配置,可以在kernel hacking
选项中启用部分调试选项来更好的分析kernel上的漏洞。接着使用make
命令来进行编译,当然这只是默认的编译选项,针对linux内核的编译非常多的选择,有兴趣的同学可以参考Linux Insides这本书。
默认的编译会生成多个文件,包含了vmlinux、System.map、bzImage等文件,这里主要关注bzImage文件,因为它是可加载的内核镜像文件,x86架构的默认生成于arch/x86/boot
目录。一般来说ctf题目都会给出对应的内核镜像文件、启动脚本、根文件系统等3个文件,通过这三个文件基本可以通过qemu加载起整个操作系统便于进行后续的分析、调试。
接下来需要编译文件系统了,这里使用busybox进行编译,下载好源码后,通过make menuconfig控制编译选项,在build options选择static binary,接下来执行make install
可在当前目录生成一个_install目录,保存着编译后的文件,之后通过下面的脚本对系统运行时所需内容进行初始化,需在_install
目录下进行
#!/bin/sh mkdir -pv {bin,sbin,etc,proc,sys,usr/{bin,sbin}} echo """#!/bin/sh mount -t proc none /proc mount -t sysfs none /sys mount -t debugfs none /sys/kernel/debug mkdir /tmp mount -t tmpfs none /tmp mdev -s exec /bin/sh""">>init chmod +x init
感谢您的来访,获取更多精彩文章请收藏本站。
![](https://www.gyzsq.com/wp-content/uploads/2022/07/9259adea4619.gif)
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
![头像](/wp-content/themes/zibll/img/avatar-default.png)
- 最新
- 最热
只看作者