ctf中linux 内核态的漏洞挖掘与利用系列(一)

说明

该系列文章主要是从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
------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞9赞赏 分享
评论 共2条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片
    • 头像长撒0
    • 头像果虚0