内核 ASLR(KASLR)
内核 ASLR(KASLR) 是什么?
内核 ASLR(KASLR)内核地址空间随机化(KASLR)在每次启动时随机化内核基址与模块加载地址,防止攻击者依赖固定内核符号进行本地提权。
KASLR 将 ASLR 延伸到内核:内核映像、模块、vmalloc 区、physmap 与栈在每次启动时以随机偏移加载。Linux 于 2014 年引入基本 KASLR,并通过 KAISER/KPTI 缓解 Meltdown;Windows 自 Vista 起支持并在 Windows 10 中持续完善。由于内核常使用单一共享地址空间,泄露一个内核指针往往就能破坏 KASLR;研究人员已展示通过缓存、TLB、prefetch 与推测执行侧信道恢复偏移的方法。KASLR 通常需配合 SMEP/SMAP、KPTI、kCFI,以及对 /proc 与 dmesg 的严格限制以防止地址泄露。
● 示例
- 01
Linux 在每次启动时以 1 GiB 对齐的随机偏移移动内核基址。
- 02
Windows 10 在每次启动时随机化 ntoskrnl.exe 的加载地址。
● 常见问题
内核 ASLR(KASLR) 是什么?
内核地址空间随机化(KASLR)在每次启动时随机化内核基址与模块加载地址,防止攻击者依赖固定内核符号进行本地提权。 它属于网络安全的 应用安全 分类。
内核 ASLR(KASLR) 是什么意思?
内核地址空间随机化(KASLR)在每次启动时随机化内核基址与模块加载地址,防止攻击者依赖固定内核符号进行本地提权。
内核 ASLR(KASLR) 是如何工作的?
KASLR 将 ASLR 延伸到内核:内核映像、模块、vmalloc 区、physmap 与栈在每次启动时以随机偏移加载。Linux 于 2014 年引入基本 KASLR,并通过 KAISER/KPTI 缓解 Meltdown;Windows 自 Vista 起支持并在 Windows 10 中持续完善。由于内核常使用单一共享地址空间,泄露一个内核指针往往就能破坏 KASLR;研究人员已展示通过缓存、TLB、prefetch 与推测执行侧信道恢复偏移的方法。KASLR 通常需配合 SMEP/SMAP、KPTI、kCFI,以及对 /proc 与 dmesg 的严格限制以防止地址泄露。
如何防御 内核 ASLR(KASLR)?
针对 内核 ASLR(KASLR) 的防御通常结合技术控制与运营实践,详见上方完整定义。
内核 ASLR(KASLR) 还有哪些其他名称?
常见的别称包括: 内核 ASLR。
● 相关术语
- appsec№ 064
地址空间布局随机化(ASLR)
ASLR 在每次运行时随机化代码、栈、堆和共享库的内存地址,使攻击者无法可靠预测利用所需的目标地址。
- appsec№ 1058
SMEP / SMAP
SMEP 与 SMAP 是阻止内核执行或访问用户空间页面的 CPU 特性,可阻断常见的本地提权技术。
- appsec№ 217
控制流完整性(CFI)
控制流完整性(CFI)将程序的间接调用和返回限制在预先计算的合法目标集合内,阻断 ROP 与 JOP 等控制流劫持利用。
- appsec№ 670
内存安全
内存安全指程序绝不读取、写入或执行未合法分配的内存,从而消除整类漏洞的属性。
- appsec№ 545
Intel CET
Intel CET(控制流强制技术)是一项 CPU 功能,结合硬件影子栈与间接分支跟踪(IBT)以阻断 ROP、JOP 和 COP 利用。
- appsec№ 671
内存安全语言
Rust、Go、Swift、Java、C# 等内存安全语言可在源头消除导致 C/C++ 大多数可利用漏洞的空间与时间型内存错误。