Kernel

与 Syzkaller 类似,Healer 使用 Syzlang 描述所提供的 syscall 信息来生成确认参数结构约束和部分语义约束的系统调用序列,并通过不断执行生成的调用序列来发现内核错误,导致内核崩溃。
近来笔者计划从脏牛漏洞入手,分析Linux内核漏洞,故在开始之前学习了Linux内核中内存管理部分相关内容,下文权当笔者学习过程整理的笔记。如有不当之处,望读者不吝赐教。
InCTF 国际赛据称为印度的“强网杯”,比赛时笔者所在的战队没有报名所以未能参加,赛后笔者看到了Scupax0s 师傅的 WP后把其中一道kernel pwn简单复现了一下,感觉还是挺不错的一道 kernel pwn 入门题。
前些日子打了 TCTF 2021 FINAL,其中刚好有两道 Linux kernel pwn 题,笔者在比赛期间没有多少头绪,而这两道题在新星赛中也是全场零解。
接上文 Kernel pwn CTF 入门 - 2。
这里选用 CISCN2017_babydriver 作为笔者入门的第一题。之所以选用这一题是因为网上资料较多,方便学习。
本文不会介绍CPU特权级别,中断,MSR,段机制及页机制等相关前置知识,如果读者此前未接触过这些,建议阅读Intel SDM对应篇章或者参阅链接之后再继续下面篇幅。
内核 CTF 入门,主要参考 CTF-Wiki。
是否开启NX取决于参数-z设置,而gcc仅仅是将-z keyword传递给linker——ld,并不会真正解析该参数。
Linux内核中按位操作(AND、OR 和 XOR)的 eBPF ALU32 边界跟踪没有正确更新 32 位边界,造成 Linux 内核中的越界读取和写入,从而导致任意代码执行。