操作系统/虚拟化安全知识域:攻击者模型

 人参与 | 时间:2025-11-27 00:04:38

攻击者模型

我们假设攻击者有兴趣违反操作系统或虚拟机监控程序提供的操作安全保证  :泄露机密数据(例如  ,加密密钥),系统虚拟型修改不应访问的化安数据(例如 ,提升权限)或限制系统及其服务的全知可用性(例如,通过崩溃系统或占用其资源)。识域在这个知识领域 ,攻击我们专注于安全的操作技术方面  ,撇开内部威胁、系统虚拟型人类行为 、化安物理攻击 、全知项目管理、识域公司政策等 。攻击不是源码库操作因为它们不重要 ,而是系统虚拟型因为它们超出了操作系统的控制范围 ,并且需要自己的化安知识领域  。表1列出了我们考虑的一些威胁和攻击方法。

危害系统的最简单方法是将恶意扩展注入操作系统的核心。例如,在Linux和Windows等单片系统中,这可能是恶意驱动程序或内核模块,亿华云可能无意中加载为特洛伊木马 ,可以访问所有特权功能。无论操作系统或虚拟机管理程序可能做什么,为了以隐蔽的方式保持对系统的控制,攻击者可能会进一步感染系统的启动过程(例如,通过覆盖主启动记录或统一可扩展固件接口)(UEFI) ,固件)—在每次重新启动时(甚至在操作系统运行之前)让恶意代码控制引导过程,从而允许其绕过任何和所有操作系统等级防御。

除了使用特洛伊木马外,攻击者还经常利用漏洞在没有任何用户帮助的情况下违反安全属性 。事实上  ,攻击者可能会使用多种方法 。服务器租用例如  ,他们通常滥用软件中的漏洞 ,例如内存错误来更改操作系统中的代码指针或数据,并违反其完整性,机密性或可用性  。通过损坏代码指针 ,它们控制程序在使用损坏的代码指针的调用、跳转或返回指令后恢复执行的位置。更改数据或数据指针开辟了其他可能性,例如将非特权进程的特权级别提升为“root”(提供全能的建站模板“系统”特权)或修改页表以允许进程访问任意内存页 。同样,他们可能会使用此类错误通过更改系统调用或网络请求返回的数据量或数据量来从操作系统泄漏信息。

攻击

描述

恶意扩展

攻击者设法诱使系统加载恶意驱动程序或内核模块(例如 ,作为特洛伊木马) 。

Bootkit

攻击者甚至在操作系统开始运行之前就破坏了启动过程以获得控制权 。

内存错误(软件)

空间和时间内存错误允许攻击者(本地或远程)转移控制流或泄露敏感信息 。

内存损坏(硬件)

DRAM中的Rowhammer等漏洞允许攻击者(本地或远程)修改他们无法访问的数据。

统一数据泄露

操作系统将数据返回到未正确初始化且可能包含敏感数据的用户程序。

并发错误和双重提取

示例 :操作系统两次使用用户空间中的值(例如,大小值使用一次来分配缓冲区 ,云计算然后复制到该缓冲区中) ,并且该值在两次使用之间发生变化。

侧通道(硬件)

攻击者使用共享资源(如缓存和TLB)的访问时间来检测另一个安全域是否使用了该资源 ,从而允许他们泄露敏感数据。

侧通道(推测)

在推测或乱序执行中会绕过安全检查 ,当结果被压缩时 ,它们会在机器的微架构状态中留下可测量的痕迹 。

侧通道(软件)

示例 :当操作系统/虚拟机管理程序使用内存重复数据删除等功能时 ,攻击者可以判断另一个安全域是否具有相同的内容。

资源枯竭

通过占用资源(内存、源码下载CPU、总线等),攻击者阻止其他程序取得进展 ,从而导致拒绝服务 。

死锁/挂起(DoS)

攻击者使系统处于软件的某些部分无法取得进展的状态 ,例如,由于死锁(DoS) 。

表1 :现代操作系统的已知攻击方法/安全威胁

攻击者还可能滥用硬件中的漏洞 ,例如许多DRAM芯片中存在的Rowhammer错误 。由于内存芯片中的位是按行组织并非常紧密地打包在一起的 ,因此访问一行中的位可能会导致相邻位中的相邻位行 ,将少量电荷泄漏到其电容器上-即使该位位于内存中完全不同的页面中  。通过以高频(“锤击”)反复访问该行 ,干扰会累积 ,因此在某些情况下 ,相邻位可能会翻转。我们事先不知道连续哪个位(如果有的话)会翻转 ,但是一旦一个位翻转,如果我们重复实验,它会再次翻转。如果攻击者成功翻转内核内存中的位 ,他们就会启用类似于基于软件的内存损坏的攻击  。例如  ,损坏页表以获取对其他域内存的访问权限 。

另一类攻击是并发错误和双重获取 。双重获取对于操作系统来说是一个重要的问题,当它两次使用用户空间中的值时就会发生(例如  ,大小值一次用于分配缓冲区,然后复制到该缓冲区中) 。如果操作系统和攻击者之间存在争用,并且攻击者在两次访问之间更改用户空间值并使其更小  ,则会出现内存损坏等安全问题。它类似于检查使用时间(TOCTOU)攻击  ,不同之处在于修改的值被使用了两次 。

除了直接攻击之外  ,攻击者还可以使用侧信道间接泄漏信息 ,例如通过缓存侧信道。有许多变体,但常见的变体包括攻击者用自己的数据或代码填充缓存集,然后定期访问这些地址。如果任何访问明显变慢 ,他们将知道其他人(可能是受害者)也访问了属于同一缓存集中的数据/代码 。现在假设受害者代码以秘密依赖的方式调用函数 。例如 ,加密例程逐位处理密钥,如果位为0 ,则调用函数foo,如果为1 ,则调用bar,其中foo和bar位于不同的缓存集中 。通过监控侧信道使用哪些缓存集 ,攻击者可以快速了解密钥。

另一个著名的硬件侧信道家族滥用投机和无序执行。为了提高性能,现代CPU可能会在上述指令完成之前提前执行指令  。例如,在等待条件分支的条件被解析时,分支预测器可能会推测结果将是“分支被接受”(因为那是最后n次的结果) ,并推测性地执行与taken分支对应的指令 。如果事实证明它是错误的 ,CPU将压缩推测执行指令的所有结果 ,以便没有任何存储存在于寄存器或内存中。但是 ,在微架构状态下可能仍然存在执行的痕迹(例如在指令集架构中不直接可见的缓存 、TLB和分支预测器的内容) 。例如,如果用户程序中的推测指令从寄存器中的内存中读取一个敏感且通常无法访问的字节 ,随后将其用作用户空间数组中的偏移量,该偏移量的数组元素将位于缓存中  ,即使一旦CPU发现寄存器中的值不应该允许访问 ,寄存器中的值就会被压缩。攻击者可以对数组中每个元素的访问进行计时 ,并查看一个元素是否明显更快(在缓存中) 。该元素的偏移量将是机密字节。换句话说 ,攻击者可以使用缓存侧通道来提取推测访问的数据。

最近的攻击表明,与推测和乱序执行相关的硬件漏洞可能比我们想象的更具灾难性  。Foreshadow攻击滥用了这样一个事实 ,即每当内存页被标记为不存在时 ,英特尔CPU就会在推测执行下从1级高速缓存中读取数据 ,而没有正确检查该物理地址上数据的所有权。更糟糕的是,被称为流氓飞行数据(RIDL)的漏洞(攻击者可以在没有权限的情况下利用该漏洞 ,甚至可以从浏览器中的JavaScript中利用)并且不关心地址 ,这表明英特尔CPUs通过各种临时微架构缓冲区 ,不断向推测执行指令提供来自任意安全域的数据 。

缓解这些攻击不仅需要更改硬件  ,还需要操作系统的深入且通常复杂的参与 。例如,操作系统可能需要刷新可能泄漏数据的缓存和缓冲区 ,保证某些分支之间不会发生推测,或者安排不同的时间不同内核上的安全域等 。

除了缓存之外,硬件侧通道还可以使用各种共享资源,包括TLB 、MMU和许多其他组件[17]。实际上 ,侧信道根本不需要与硬件相关 。例如 ,在操作系统中实现的内存重复数据删除和页面缓存是众所周知的侧通道源 。为了便于说明,重点介绍前者,请考虑一个主动删除重复内存页的系统 :每当它看到两个页面具有相同的内容时 ,它就会调整虚拟内存布局 ,以便两个虚拟页面都指向同一物理页面 。这样 ,它只需要保留一个物理页面来存储内容,它可以以写入时复制的方式共享内容。在这种情况下 ,写入该页需要更长的时间(因为操作系统必须再次复制该页并调整其页表映射) ,攻击者可以测量这一点 。因此,如果写入页面花费的时间要长得多 ,攻击者就会知道其他某个程序也有该内容的副本-一个侧信道,告诉攻击者有关受害者数据的一些信息。研究人员已经表明,攻击者可能会使用这种粗粒度的侧信道来泄露非常细粒度的秘密[18]  。在许多侧信道中,问题在于软件和硬件中的安全域之间缺乏隔离(例如 ,在硬件实现的推测执行期间可能没有隔离或隔离太少)。重要的是要认识到域隔离问题扩展到硬件/软件接口。

特别是为了保密,信息泄露可能是微妙的 ,看似无害的,仍然会导致严重的安全问题。例如,对象的物理甚至虚拟地址可能看起来都不像非常敏感的信息 ,直到我们考虑到代码重用或Rowhammer攻击 ,滥用地址知识将控制流转移到特定地址或翻转特定位 。

至于攻击的来源,它们可能是从用户空间中受害者机器上本机运行的本地代码 、(恶意)操作系统扩展、通过网络获取并在本地执行的脚本代码(例如浏览器中的JavaScript)、恶意外围设备甚至远程系统发起的(攻击者通过网络发起攻击)。显然 ,远程攻击比本地攻击更难执行。

在某些情况下,我们会显式扩展攻击者模型,以包括恶意操作系统或恶意虚拟机监控程序。这些攻击者可能与基于云的系统相关 ,其中云提供商不受信任 ,或者操作系统本身已受到损害 。在这些情况下 ,目标是保护敏感应用程序(或其片段),这些应用程序可能在特殊的受硬件保护的受信任执行环境或安全区中运行 ,免受内核或虚拟机监控程序的影响 。

估计系统安全性的一个有用指标是攻击面,攻击者可以到达或获取数据的所有不同点。为了尝试破坏系统 。例如 ,对于本地运行的本机代码,攻击面包括攻击者可以执行的所有系统调用以及系统调用的参数和返回值,以及实现攻击者可以访问的系统调用的所有代码。对于远程攻击者,攻击面包括网络设备驱动程序 、网络堆栈的一部分以及处理请求的所有应用程序代码。对于恶意设备,攻击面可能包括设备可能使用DMA访问的所有内存或设备可能与之交互的代码和硬件功能。但请注意 ,向攻击者暴露更多代码只是一个代理指标 ,因为代码的质量不同 。在极端情况下,系统会经过正式验证 ,因此不再可能出现各种常见漏洞 。

顶: 4踩: 421