首页
论坛
专栏
课程

[原创]Linux kernel Exploit 内核漏洞学习(0)-环境安装

2019-7-21 19:07 2752

[原创]Linux kernel Exploit 内核漏洞学习(0)-环境安装

2019-7-21 19:07
2752

前言

在Linux上面搞事情很多东西都可能需要我们利用源码来自己编译,相对于Windows来讲可能会比较麻烦和耗时,这个过程中肯定会遇到很多报错,所以一定要有耐心.....

方法步骤

编译内核

首先到linux内核的官网下载一份内核源代码并解压:
kernel_download
至于需要下载的版本,随意就好,我下载的是5.2.1的....
然后先安装有些依赖:

sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc

这些依赖并不一定全部概况完了,在编译的过程中可能在报错信息中还要提示你安装一些依赖,具体根据报错提示再进行安装就可以...
然后进入解压目录:

make menuconfig

linuk-kernel
这里会跳出一个设置框:
set
注意下面的配置就好:

KernelHacking -->
选中Compile the kernel with debug info
选中Compile the kernel with frame pointers

Processor type and features-->
去掉Paravirtualized guest support

然后sava,保存.config就可以:
config
然后:

make -j4

虚拟机分配了4个核,使用-j4可以快一点....
make -j4
这个过程是比较漫长的,如果你的kernel内核比较低或依赖不够的话,就会报比较多的错误,这需要根据你具体情况百度了,耐心...
当make结束了就可以:

make all

make_all
还是可能会报错,不过都可以百度到,最多改一下Makefile文件的,不紧张...
最后就可以:

make modules

make modules
我们可以从./arch/x86/boot/拿到bzImage,从源码根目录拿到vmlinux....

编译busybox && 构建文件系统

cd ..
wget https://busybox.net/downloads/busybox-1.31.0.tar.bz2
tar -jxvf busybox-1.19.4.tar.bz2
cd busybox-1.19.4
make menuconfig  
make install

其中busybox-1.31.0.tar.bz2建议下载最新版的...
同样make menuconfig的时候需要设置:
busybox

Settings -> Build Options -> Build static binary (no shared libs) 编译成静态文件

关闭下面两个选项:
Linux System Utilities -> [] Support mounting NFS file system 网络文件系统
Networking Utilities -> [] inetd (Internet超级服务器)

编译完make install后,在busybox源代码的根目录下会有一个 _install目录下会存放好编译后的文件:
_install
然后我们需要在里面配置一下:

cd _install
mkdir proc sys dev etc etc/init.d
vim etc/init.d/rcS
chmod +x etc/init.d/rcS

其中vim etc/init.d/rcS的内容:

#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s

然后利用命令创建文件系统:

find . | cpio -o --format=newc > ../rootfs.img

img
最后我们就可以使用 qemu 来运行内核了:

qemu-system-x86_64 \
-kernel ~/tools/linux-5.2.1/arch/x86_64/boot/bzImage \
-initrd ~/tools/busybox-1.31.0/rootfs.img \
-append "console=ttyS0 root=/dev/ram rdinit=/sbin/init" \
-cpu kvm64,+smep,+smap \
-nographic \
-gdb tcp::1234

其中:

-cpu kvm64,+smep,+smap 设置CPU的安全选项,这里开启了smap和smep
-kernel 设置内核bzImage文件的路径
-initrd 设置刚才利用busybox创建的rootfs.img,作为内核启动的文件系统
-gdb tcp::1234 设置gdb的调试端口为1234

qemu

加载驱动

加载驱动很简单,只需要命令insmod就可以,然后rmmod可以卸载驱动,lsmod可以查看加载了的驱动....
insmod

gdb调试

我们用qemu运行内核的时候,加了一个-gdb tcp::1234的参数, qemu会在1234端口起一个gdb_server我们直接用gdb连上去:
gdb
同时我们为了调试内核模块,利用add-symbol-file命令加载了驱动的符号文件,并且加上了系统里面驱动的加载基地址....

后续

之后我会主要利用kernel pwn来帮助学习Linux kernel Exploit内核漏洞学习,掌握一些基本的内核漏洞利用技巧....另外如果文章有错误和改进之处,还请大家可以指出....



[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最后于 2019-7-22 09:36 被钞sir编辑 ,原因:
最新回复 (8)
fengyunabc 1 2019-7-21 21:33
2
0
感谢分享!
Thunder J 2 2019-7-22 09:08
3
0
peekl 2019-7-22 14:53
4
0
这样编译出来的内核可以下断点吗?
钞sir 1 2019-7-23 09:05
5
0
peekl 这样编译出来的内核可以下断点吗?
可以的....
极目楚天舒 3 2019-8-6 12:59
6
0
详细
Snowleo 1 2019-9-5 19:40
7
0
感谢分享!
freesec 2019-9-7 20:51
8
0
purplewall 2019-9-10 11:13
9
0
可以把gcc编译优化改成O1,qemu加上 -append nokalsr 取消内核地址随机化便于准确下断点。
游客
登录 | 注册 方可回帖
返回