kernel pwn资料整理(更新ing)

linux kernel

进行分析的大致流程如下:首先要会搭建环境,复现相应版本的相应漏洞,可以用gdb+qemu,也可以用另一台机器编译内核。然后查看源码并调试,这可以折腾自己喜欢的编辑器,并对照相应的补丁,了解更多细节。最后可以尝试在poc的基础上写自己的exp。自己直接阅读 Linux kernel 源码的话可能无从下手,可以先了解一下Linux内核源码目录结构,比如 drivers是设备驱动、arch是cpu相关代码、virt是虚拟化相关、security实现安全特性等等。然后从Linux内核可以被攻击的方面出发,比如系统调用、驱动、进程管理、网络,然后查找相应cve,比如CVE-2017-5123属于系统调用的漏洞。了解常见的攻击类型,比如栈溢出、堆溢出、UAF、整数溢出、race condition、权限检查不当、类型转换错误等等。了解Linux内核的防护机制,比如KASLR、SMEP、SELINUX等等。

Interactive map of Linux kernel

http://www.makelinux.net/kernel_map/

书籍

《A Guide to Kernel Exploitation: Attacking the Core》,Enrico Perla, Massimiliano Oldani

http://library1.org/_ads/373CE0A3D91F602AC181CA04E04BDDF8

《Linux Kernel Architecture》,Wolfgang Mauerer

http://library1.org/_ads/43D6ABBD76FE1BD19BDE10E904CD0C79

《Linux Kernel Development (3rd Edition) 》,Robert Lovetorvalds

http://library1.org/_ads/8799C7900BCC639DB78BC2CD0F8CB3AC

源码

Linux内核源码

https://github.com/torvalds/linux

Linux各版本内核

https://www.kernel.org/pub/linux/kernel/

Linux内核代码在线查看

http://lxr.free-electrons.com

exp及分析文章

linux-kernel-exploits

https://github.com/SecWiki/linux-kernel-exploits

kernel exploit

https://github.com/lucyoa/kernel-exploits

kernel heap overflow利用

https://zhuanlan.zhihu.com/p/26674557

kernel exploit(适合入门)

https://github.com/eternalsakura/ctf_pwn/blob/master/kernel_pwn/kernel-exploits.pdf

blackhat kernel议题

https://www.blackhat.com/presentations/bh-usa-03/bh-us-03-cesare.pdf

FUZZ

syzkaller

这个链接的前半部分的内容详细解释了如何搭建一个qemu + gdb的环境
https://github.com/google/syzkaller/blob/master/docs/linux/setup_ubuntu-host_qemu-vm_x86-64-kernel.md

Awesome-Fuzzing

https://github.com/secfigo/Awesome-Fuzzing

其他

x86_64 Assembly

https://0xax.github.io/categories/assembler/

64-bit system call numbers and entry vectors

https://github.com/torvalds/linux/blob/master/arch/x86/entry/syscalls/syscall_64.tbl

翻过的文章记录

深入理解linux系统下proc文件系统内容
http://www.cnblogs.com/cute/archive/2011/04/20/2022280.html
What is mode_t in C?
https://jameshfisher.com/2017/02/24/what-is-mode_t.html
Understanding a Kernel Oops!
http://opensourceforu.com/2011/01/understanding-a-kernel-oops/
Linux Kernel Procfs Guide
https://kernelnewbies.org/Documents/Kernel-Docbooks?action=AttachFile&do=get&target=procfs-guide_2.6.29.pdf
用户空间与内核空间数据交换的方式(2)——procfs
http://www.cnblogs.com/hoys/archive/2011/04/10/2011141.html
用户空间和内核空间传递数据:get_user;put_user;copy_to_user;copy_from_user
http://www.cnblogs.com/wanghetao/archive/2012/06/02/2532225.html
谈结构体struct 初始化多出的点号“.”,数组[]初始化多出的逗号“,”
https://blog.csdn.net/comwise/article/details/9087279
Root exploit for Android and Linux(CVE-2010-4258)
https://blog.csdn.net/hu3167343/article/details/36892563