摘要:
eBPF 介绍 BPF(Berkeley Packet Filter)使普通用户拥有了让啮合执行用户代码并共享数据的能力。用户可以讲 eBPF 指令直接码传输给内核,然后通过 socket 写时间来触发内核执行代码。并且在用户空间和内核空间共享一个 map 内存,用户空间和内核空间都对其拥有读写能力 阅读全文
摘要:
Slub 简介 Linux 内核内存管理用了两个算法:伙伴算法(以页为单位的大内存)和 slub 算法(以字节为单位的小内存),其中 slub 系统运行在伙伴系统之上。 slub 进行内存分组管理,分别设置 2^3 ~ 2^11 字节和 96B、192B 共 11 个组, 在内核中的控制结构为 km 阅读全文
摘要:
关于 ret2dir 用来绕 smep、smap、pxn 等用户空间与内核空间隔离的防护手段。 首先,在内核中存在 direct mapping area,线性地直接映射了整个物理内存空间。这就意味着,对于一个被用户进程使用的物理页框,同时存在着一个用户空间地址与内核空间地址到物理页框的映射,那么对 阅读全文
摘要:
double fetch 由于内核态和用户态之间的数据访问竞争导致的条件竞争漏洞。 通常条件下,用户向内核传递数据时,内核先通过 copy_from_user 等函数向内核拷贝数据,但大量复杂数据的时候内核可能只引用其指针,而数据将暂时保存在用户空间,那么此时,这个数据就有被其它恶意线程篡改的风险, 阅读全文
摘要:
环境搭建 首先解包 core.cpio,去掉 init 中 poweroff 强制关机那一句,然后重新打包 ./gen_cpio.sh core.cpio 启动 qemu 的时候出现了报错 Kernel panic - not syncing: Out of memory and no killab 阅读全文
摘要:
漏洞分析 在内核态实现了一个队列管理程序,主要部分还是堆的增删改查。 队列结构: // 管理结构 queue typedef struct{ uint16_t data_size; // 队列每一项 entry 的大小 uint64_t queue_size; // 队列整体的大小 uint32_t 阅读全文