0%

linux内核路线总结

0x00 前言

回顾过去已经学Linux一年多了,学了很多,也走了许多弯路,一直没有总结,今天补上

0x01 学前基础

学习kernel一个重要的前提就是对操作系统的理解,可以看看《操作系统-精髓与原理》这本书。如果,你看不下去kernel的代码,大概率是由于操作系统的基础不够,不知道kernel为什么要这么做,说到底kernel就是操作系统的实现,当你对操作系统有一个整体的认识的时候,在看kernel的某一部分代码的时候,就知道kernel为什么这么实现,他解决了什么问题,用了什么机制。

0x02 环境搭建

参考我的写的 CVE-2020-8647分析 文章的环境搭建,他可以构建一个完整文件系统,你可以用ssh登录他,也可以配合远程vscode写exp,然后,编译比较方便,也比较舒服,这个是基于 debootstrap 如果你发现镜像下载比较慢,可以考虑国内的源,具体操作百度debootstrap 用法即可

0x03 保护机制

linux kernel主要的保护方式有4种,cannary ,kaslr,smep,smap这个网上文章有很多不在赘述

0x04 漏洞类型及利用方式

参考 https://xz.aliyun.com/u/20469

这几篇系列文章包括了大部分漏洞类型及利用方式,还差ret2dir参考下面这两篇文章

之后还有著名的脏牛漏洞利用方式,攻击vdso,然后还有可以call 内核函数 run_cmd 虽然他不能直接给一个root的shell,但是,他可以root权限执行一个系统命令,间接提权应该不是难事

当然还有一些硬核的提权的方式,比如你能控制某一个物理页,你就可以通过改这个物理页来改变其他程序的代码,从而达到提权的效果,不太常用一般用不到

0x05 通用堆喷技巧

参考这篇文章:

https://xz.aliyun.com/t/2814

这个技巧好用是好用,但是linux内核默认是不开启userfaultfd系统调用的,较为鸡肋

0x06 实战分析

利用方式学完了,就可以考虑自己实战分析一些漏洞了,由于linux的源码是开源的,有一个交叉引用的网址,可以让我们很好的分析各个版本的源代码

之后,就是实际环境搭建了,那么当我们拿到了漏洞版本的内核,需要编译成我们想要的模块,那么我们必然了解linux的kernel的编译方式,可以参考我的文章 linux kernel kconfig

环境搭建好了就是调试了 不再赘述

0x07 总结

想要入门kernel其实远远没有我讲的这么容易,可能你需要缺很多基础,人和人学的是不一样的,当你学不下去kernel的时候,就应该回头看自己缺什么,这个是比较难的,我就因为操作系统基础不够卡了半年,而不自知,难搞