命令行工具
bcoles/kasld avatar
bcoles/kasld

KASLD:从本地进程视角探测内核 KASLR 布局的推理引擎

KASLD 利用其优势、特权、配置和限制,从本地进程中取消 Linux 内核的虚拟和物理内存布局的随机性。

546 个 Star56 个 ForkCMIT
GitHub

秒懂

它是什么?
KASLD 是一个用 C 编写的开源工具,它从本地进程出发,利用权限、系统配置和容器隔离等条件,尝试还原 Linux 内核的虚拟和物理内存布局。本文分析其工作原理、使用方式、局限性和适用场景。
适合谁用?
KASLD 适合安全研究人员、渗透测试人员和内核开发者,用于评估特定环境下 KASLR 的实际保护强度。它不适合作为通用漏洞利用工具,也不适合在生产环境随意运行,因为其设计上就是“吵闹”的,会在目标主机留下明显痕迹。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 1 天前。
用什么语言写的?
主要是 C(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题

KASLR(内核地址空间布局随机化)是现代 Linux 内核的一项基本缓解措施,它让内核代码段和数据结构在每次启动时位于随机地址。攻击者若想利用内核漏洞,通常需要先知道这些地址。KASLD 正是针对这一环节的工具:它从一个本地进程出发,尝试还原内核的虚拟和物理内存布局,尤其是内核文本基址。它的目标用户是安全研究人员、渗透测试者,以及需要评估自身系统 KASLR 有效性的防御者。它不是一个漏洞利用框架,而是一个信息收集与推理引擎,输出的是对内核布局的估计,以及这个估计的可信度。

核心机制:证据融合与窗口收缩

KASLD 不是单一漏洞利用,而是一个推理引擎。它集成了数十种独立的技术,每种技术可能泄露内核布局的某一方面。这些技术包括文件系统泄露(如 /proc/kallsyms、/boot/System.map)、侧信道(如 prefetch、时序)、系统调用或 ioctl 泄露、弱熵源,以及利用已修补 CVE 的路径。引擎将这些证据与架构的已知不变量(例如 x86-64 的 2 MiB 对齐、虚拟地址布局的固定区间)融合,逐步缩小内核基址的可能范围。最终输出一个“剩余窗口”,以候选槽位数量和熵的比特数表示。这个窗口是当前视角下 KASLR 保留的保护上限,而不是绝对保证。文档明确指出,在完全修补且侧信道被缓解的现代内核上,完全恢复往往不可能,但约束集很少为空。

视角(vantage)概念:权限、配置、隔离的三维门控

KASLD 的核心设计概念是“视角”,它由三个独立维度组成:权限(uid、组、capabilities)、系统配置(kptr_restrict、dmesg_restrict、perf_event_paranoid、unprivileged BPF、lockdown)以及容器隔离(namespace、seccomp)。这三个维度分别控制不同的泄露源。例如,一个拥有 CAP_SYS_RAWIO 的容器任务可以读取 /proc/kcore,而普通用户不能;但 root 在 kptr_restrict=2 下也无法读取 /proc/kallsyms。侧信道则完全绕过这些 sysctl。因此,更多的权限并不自动意味着更大的能力,配置可以单独拒绝某个源,侧信道则独立于所有配置。KASLD 默认假设最少的权限,并机会主义地利用视角允许的一切。

快速上手:编译与运行

KASLD 的编译和运行非常简单。README 给出的快速开始命令是:sudo apt install libc-dev make gcc binutils git,然后 git clone https://github.com/bcoles/kasld,进入目录执行 make。编译产物位于 build/<arch>/ 目录,该目录自包含,可以整体复制到目标系统。运行方式是 ./build/<arch>/kasld。默认文本模式会先输出一个概览,例如显示虚拟镜像基址的候选窗口和物理镜像基址。命令行选项包括 -v(详细输出)、-j(JSON 输出)、-1(单行可管道输出)、-m(Markdown 格式)、-H(附加加固评估)。额外脚本 extra/weaken-kernel-hardening 可以临时放宽内核加固设置,但需要 root 权限。

输出解读:保证窗口与可能性

KASLD 的输出区分“保证”和“可能”两个层次。所谓“保证”窗口,是指无论视角如何,都能通过证据和架构不变量证明的布局范围。例如,在示例输出中,虚拟镜像基址被标记为“guaranteed”,候选槽位 1 个,粒度 2 MiB,这意味着从该视角已完全确定。物理镜像基址同样被保证。而其他技术可能只给出概率性的估计。文档强调,一个“保证”窗口并不代表攻击者无法通过其他途径突破,它只是当前证据下的最小范围。这种区分很重要,因为它让使用者知道哪些结论是坚实的,哪些只是推测。

局限性:何时它不适用

KASLD 的文档明确列出其局限。首先,在完全修补且侧信道已缓解的现代内核上,完全恢复往往不可能,但约束集很少为空,这意味着它可能只给出一个范围而非精确地址。其次,它假设进程有一定视角,如果视角极小(例如完全无权限、无泄露源、强配置、强隔离),可能无法得出任何有意义的窗口。第三,它设计上是“吵闹”的,运行时会留下明显的行为特征,容易被监控系统检测。第四,它依赖的目标架构和内核版本有限,某些架构(如 s390)支持但可能不完整。最后,它不能保证绕过 KASLR,只能提供证据支持的上限。因此,在需要精确地址且目标环境高度加固时,KASLD 可能不是正确的工具。

替代方案与差异

与 KASLD 类似功能的工具包括传统的 /proc/kallsyms 直接读取(如果权限允许)和利用已知 CVE 的漏洞利用代码。但它们在方法上有本质区别:直接读取是单一、直接的泄露,而 KASLD 是融合多源证据的推理。另一个方向是使用内核崩溃转储(如 kdump)来分析内存布局,但需要 root 权限和系统崩溃。KASLD 的独特之处在于它不依赖单一漏洞,而是通过组合多个弱信号来缩小范围,并且输出带置信度。相比之下,专门针对某个 CVE 的利用代码可能更精确,但只适用于特定内核版本,而 KASLD 更通用。

维护与许可证

KASLD 采用 MIT 许可证,允许自由使用和修改。项目最近更新频繁,最新版本 v0.3.0 发布于 2026 年 6 月。维护成本方面,由于它依赖内核的特定行为和架构细节,内核更新可能导致某些技术失效,需要持续跟进。文档提供了 CONTRIBUTING.md 指导如何添加新的泄露组件或推理规则,这意味着项目设计上鼓励社区扩展。对于使用者来说,升级到新版本可能带来行为变化,需要重新验证输出。许可证没有额外限制,但作为安全工具,使用时需遵守当地法律和道德规范。

编辑结论

KASLD 适合安全研究人员、渗透测试人员和内核开发者,用于评估特定环境下 KASLR 的实际保护强度。它不适合作为通用漏洞利用工具,也不适合在生产环境随意运行,因为其设计上就是“吵闹”的,会在目标主机留下明显痕迹。在采用前,应先阅读 docs/limitations.md 理解“保证”窗口与“可能”窗口的区别,并确认目标架构和内核版本是否在支持列表内。最终判断:KASLD 的价值不在于总能破解 KASLR,而在于它把“从当前视角能推断出多少内核布局信息”这个问题变成了一个可重复、可审计的工程过程。

官方来源

  1. Official README
  2. Project repository
  3. Release notes
社区笔记

社区笔记