《【文章导读】什么是旁道攻击?Meltdown Redux英特尔漏洞(MDS攻击);KAISER:从用户空间隐藏内核(KAISER);Meltdown/Spectre分析》

《Meltdown(熔断漏洞)- Reading Kernel Memory from User Space/KASLR | 原文+中文翻译》

原文资源:《Meltdown- Reading Kernel Memory from User Space》

目录

前身

Meltdown漏洞与KPTI

实现

用户空间

地址空间配置随机加载


内核页表隔离(Kernel page-table isolation,缩写KPTI,也简称PTI,旧称KAISER)是Linux内核中的一种强化技术,旨在更好地隔离用户空间与内核空间的内存来提高安全性,缓解现代x86 CPU中的“熔毁”硬件安全缺陷。

前身

KPTI补丁基于KAISER,它是一个用于缓解不太重要问题的早期补丁,当时业界还未了解到Meltdown的存在。

如果没有KPTI,每当执行用户空间代码(应用程序)时,Linux会在其分页表中保留整个内核内存的映射,并保护其访问。这样做的优点是当应用程序向内核发送系统调用或收到中断时,内核页表始终存在,可以避免绝大多数上下文交换相关的开销(TLB刷新、页表交换等)。

2005年,Linux内核采用了地址空间配置随机加载(KASLR)隐匿用户空间中的相关内核地址,增加了利用其他内核漏洞的难度。尽管阻止了对这些内核映射的访问,但在此后发现,现有的英特尔x86处理器(截至2017年12月)还存在着多处可能泄露这些内存位置的旁路攻击,可能绕过KASLR。AMD称其处理器不受这些攻击的影响,所以不需要KPTI作为缓解措施。 [1]

Meltdown漏洞与KPTI

2018年1月,影响Intelx86处理器的熔毁漏洞被公布。KAISER补丁改为修复此问题,并更名为KPTI,因为新型攻击很类似,尽管更为严重。 [1]

实现

KPTI通过完全分离用户空间与内核空间页表来解决页表泄露。支持进程上下文标识符(PCID)特性的x86处理器可以用它来避免TLB刷新,但即便如此,它依然有很高的性能成本。据KAISER原作者称,其开销为0.28%;一名Linux开发者称大多数工作负载下测得约为5%,但即便有PCID优化,在某些情况下开销高达30%。

KPTI在2018年早期被合并到Linux内核4.15版,并被反向移植到Linux内核4.14.11。Windows和macOS也发布了类似的更新。

使用内核启动选项“pti=off”可以部分禁用内核页表隔离。依规定也可对已修复漏洞的新款处理器禁用内核页表隔离。 [2]

用户空间

编辑 语音

在操作系统中,虚拟内存通常会被分成用户空间(英语:User space,又译为使用者空间),与核心空间(英语:Kernel space,又译为内核空间)这两个区块。

这是存储器保护机制中的一环。内核、核心扩充(kernel extensions)、以及驱动程序,运行在核心空间上。而其他的应用程序,则运行在用户空间上。所有运行在用户空间的应用程序,都被统称为用户级(userland)。 [2]

地址空间配置随机加载

编辑 语音

在计算机科学中,地址空间配置随机加载(英语:Address space layout randomization,缩写ASLR,又称地址空间配置随机化地址空间布局随机化)是一种防范内存损坏漏洞被利用的计算机安全技术。ASLR通过随机放置进程关键数据区域的地址空间来防止攻击者能可靠地跳转到内存的特定位置来利用函数。现代操作系统一般都加设这一机制,以防范恶意程序对已知地址进行Return-to-libc攻击。 [2]

参考资料

  • 1.  Corbet, Jonathan. KAISER: hiding the kernel from user space. LWN.net. 15 November 2017.
  • 2.  Hund, R.; Willems, C.; Holz, T. Practical Timing Side Channel Attacks against Kernel Space ASLR (PDF). 2013 IEEE Symposium on Security and Privacy. May 2013: 191–205.

内核页表隔离(Kernel page-table isolation,KPTI,简称PTI,旧称KAISER)相关推荐

  1. linux内核学习笔记【一】临时内核页表 Provisional kernel Page Tables

    最近开始学习linux内核,看了<深入理解linux内核>,开始写点学习收获.内核版本为2.6.11 临时全局目录(provisional page global directory)是在 ...

  2. Linux内核学习笔记——内核页表隔离KPTI机制(源码分析)

    KPTI(Kernel PageTable Isolation)全称内核页表隔离,它通过完全分离用户空间与内核空间页表来解决页表泄露. KPTI中每个进程有两套页表--内核态页表与用户态页表(两个地址 ...

  3. 第三章 页表管理(Page Table Management)

    3.1 Describing the Page Directory 在代表进程的struct task_struct->mm(struct mm_struct)->pgd(pgd_t)中指 ...

  4. Kernel Page Global Directory (PGD) of Page table of Process created in Linux Kernel

    Kernel Page Global Directory (PGD) of User process created 在早期版本: 在fork一个进程的时候,必须建立进程自己的内核页目录项(内核页目录 ...

  5. linux那些事之 page table基本操作

    通过遍历page table查找一个虚拟地址已经做了对应的物理内存映射是一个很常用的操作,因此整个walk遍历过程耗时要尽量小. show_pte() 以show_pte()函数为例说明如何根据一个虚 ...

  6. ARM64 Linux 内核页表的块映射

    作者 | 宋宝华  责编 | 张文 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 内核文档 Documentation/arm64/memory.rst 描述了 A ...

  7. 深入理解Linux内核页表映射分页机制原理

    前言 操作系统用于处理内存访问异常的入口操作系统的核心任务是对系统资源的管理,而重中之重的是对CPU和内存的管理.为了使进程摆脱系统内存的制约,用户进程运行在虚拟内存之上,每个用户进程都拥有完整的虚拟 ...

  8. Linux内核页表管理-那些鲜为人知的秘密

    1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.11 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 通用操作系统,通常都会开启mmu来支持虚拟 ...

  9. linux那些事之page table

    内核中page table决定了一个虚拟地址如何查找到对应的物理地址关键,维护着整个整个虚拟地址与物理地址对应信息,是实现整个内存虚拟化的基础.在虚拟地址到物理地址的转换过程中为了减少整个物理空间的占 ...

最新文章

  1. 同盾反欺诈云防垃圾灌水帖体验分享
  2. Android 自定义debug.keystore
  3. 【Java】练习题:三角形法则
  4. 白话详细解读(六)----- BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation
  5. 手机经常提示找不到服务器,为什么我的手机显示无法连接到服务器
  6. 说说如何用JavaScript实现一个模板引擎
  7. 有限元课堂笔记03:钢架(Frame)
  8. datatables隐藏列设置及获取隐藏列的值
  9. 电脑桌面归纳小窗口_电脑一分钟小技巧:如何将电脑设置为定时关机?
  10. 话里话外:家族化管理模式和职业化管理模式孰优孰劣
  11. mfc mysql 选择删除文件_MFC应用实例:[60]删除指定类型的文件
  12. CefSharp 支持MP4
  13. 【Html】Html基本标记
  14. Spring Cloud Alibaba系列教程-03-搭建生产可用的Nacos集群
  15. 超轻薄笔记本电脑软件测试,一口气测了三款轻薄本 这三个核心问题有答案了...
  16. 基于布谷鸟搜索算法的无线传感器网络覆盖优化
  17. php制作水印图片,PHP实例制作水印图片
  18. c# 用action做参数进行封装操作
  19. java 全角_java全角、半角字符的关系以及转换详解
  20. 在我的世界里玩我的世界是一种怎样的体验?

热门文章

  1. VCL组件之Name属性
  2. SQL2008数据类型
  3. Graphviz 入口
  4. 【6.18校内test】T1多项式输出
  5. pip 通过pqi切换源到国内镜像
  6. winafl 源码分析
  7. 每日一题20180401-Linux
  8. android调用webservice发送header身份验证不成功
  9. 移动客户端UI设计指南
  10. 《数据结构》双链循环线性表