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

2019-07-26 约 216 字 预计阅读 2 分钟

声明:本文 【Linux kernel Exploit 内核漏洞学习(0)-环境安装】 由作者 钞sir 于 2019-07-26 09:40:00 首发 先知社区 曾经 浏览数 17 次

感谢 钞sir 的辛苦付出!

前言

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

方法步骤

编译内核

首先到linux内核的官网下载一份内核源代码并解压:

至于需要下载的版本,随意就好,我下载的是5.2.1的....
然后先安装有些依赖:

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

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

make menuconfig


这里会跳出一个设置框:

注意下面的配置就好:

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

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

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

然后:

make -j4

虚拟机分配了4个核,使用-j4可以快一点....

这个过程是比较漫长的,如果你的kernel内核比较低或依赖不够的话,就会报比较多的错误,这需要根据你具体情况百度了,耐心...
当make结束了就可以:

make all


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

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 Busybox as a static binary 编译成静态文件

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

编译完make install后,在busybox源代码的根目录下会有一个 _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


最后我们就可以使用 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

加载驱动

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

gdb调试

我们用qemu运行内核的时候,加了一个-gdb tcp::1234的参数, qemu会在1234端口起一个gdb_server我们直接用gdb连上去:

同时我们为了调试内核模块,利用add-symbol-file命令加载了驱动的符号文件,并且加上了系统里面驱动的加载基地址....

后续

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

关键词:[‘安全技术’, ‘二进制安全’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now