操作系统/虚拟化安全知识域:系统强化之代码和数据完整性检查以及异常检测

安全 应用安全
监视器,无论是在虚拟机管理程序还是在操作系统中,也可用于监视系统的异常事件 - 异常检测。例如,连续崩溃数百次的系统可能会受到试图破坏系统地址空间布局随机化的人的攻击。当然,没有确凿的证据,仅仅因为 发生了异常并不意味着有攻击。异常检测系统必须在引发太多错误警报(处理成本高昂)和引发太少(这意味着它错过实际攻击)之间取得平衡。

代码和数据完整性检查

减少操作系统中代码可利用性的一种方法是确保代码和/或数据未经修改并由受信任的供应商提供。例如,多年来,Windows一直采用驱动程序签名。一些较新的版本更进一步,使用 硬件和软件 安全功能 的组合来锁定计算机,确保它仅运行受信任的代码/应用程序 - 此过程被Microsoft称为“Device Guard”。 即使是特权恶意软件也无法 轻松让未经授权的应用程序 运行,因为  检查是否允许应用程序运行的机制位于硬件辅助虚拟化环境中。大多数代码签名解决方案将与操作系统扩展关联的数字签名相关联, 允许 操作系统检查代码的完整性是否完整以及供应商 是否合法。类似的过程通常用于更新。

但是,检查签名的代码以及操作系统本身呢 — 我们确定 它 没有 被 恶意引导工具包篡改吗? 确保在引导期间 加载 的系统软件的完整性涉及 许多步骤 ,主要与引导过程本身的多个步骤有关。从最早的商用计算机开始,启动涉及多个阶段。即使是  IBM 701, 年代初期流行的计算机,安装多达 19 次,也已经具有这样的多阶段启动过程,从按下 特殊的“加载”按钮开始 ,使 系统加载 单个 36 位字 通常来自打孔卡。它将执行(部分)这个词 以加载更多指令,然后开始执行这些指令作为“引导程序”。

通常,安全启动设备从启动 启动过程 的初始“信任根”开始,并且通常基于 硬件,例如,微控制器从内部不可变存储器或根本无法重新编程的内部闪存开始执行软件,或者只能通过严格的身份验证和授权检查。例如,现代Apple计算机使用单独的处理器T2安全芯片来为安全启动等提供硬件信任根,而Google还为此开发了一种称为Titan的定制处理器。我们现在将讨论硬件信任根如何帮助 验证 系统是否安全启动。

启动通用计算机通常从固件开始,固件启动一系列阶段,以完全启动的系统结束。例如, 固件可以加载一个特殊的引导加载程序,然后加载操作系统内核,而 操作系统内核 又可以 加载额外的引导   驱动程序,直到最终操作系统完全初始化并准备好与用户或应用程序交互。所有这些阶段都需要保护。例如,统一可扩展固件接口 (UEFI)可以通过安全启动来保护第一阶段 (即验证 引导加载程序的完整性)。安全启动验证启动加载程序是否使用 适当的密钥进行签名 ,即使用与固件中存储的密钥信息一致的  密钥。 这将防止没有 适当签名的加载程序和驱动程序获得对系统的控制。 引导加载程序 现在可以在加载操作系统内核 之前 验证其数字签名。接下来,内核在启动操作系统 的 所有其他组件(例如启动驱动程序和可能集成的反恶意软件)之前对其进行验证。 通过在其他驱动程序 之前启动 反恶意软件程序,它随后可以检查所有这些 后续组件,并将 信任链扩展到完全已初始化操作系统。

 下一个问题是:我们怎么 知道是  这种情况? 换句话说, 我们如何知道 系统 确实安全启动 ,并且 我们可以信任 屏幕?这里的诀窍是使用证明,(远程)方可以检测到对我们系统所做的任何更改。远程证明通常使用特殊硬件,例如充当信任根的受信任平台模块 TPM),包括分步验证系统是否加载了“正确”类型的软件。特别是,TPM 是一个加密硬件模块,支持一系列加密功能、密钥生成 和管理、安全存储(例如,密钥和其他 安全 敏感信息),以及重要的完整性测量。有关进一步讨论,请参阅硬件安全CyBOK知识领域[65]。

对于完整性测量,TPM 具有 一组  称为 PCR-0、PCR-1  的平台  配置寄存器。 . . , 在每次引导时 都设置为已知值。 这些寄存器 不是用于直接写入 ,而是 用于扩展。因此 ,如果          PCR-0寄存器的当前值为X,并且我们想用Y扩展它,则TPM计算哈希(X,Y)并存储  PCR-0 的结果。 现在,如果我们想进一步 扩展它, 比如 使用 Z,  TPM 会再次计算 Z 的   哈希和当前在 中的值,并将结果存储在 PCR-0 中。换句话说,它将计算哈希(Z  哈希X,Y))。我们现在可以 进一步扩展它 ,并创建一个任意长的“哈希链”。

PCR  中的值可以作为  系统处于可信状态的证据。具体而言,引导系统时执行的第一个代码是固件引导代码,有时称为用于测量的核心信任根CRTM) 或 BIOS 引导块。此代码将通过生成其内容的哈希来“测量”完整固件,在开始执行之前,它会将其发送到 TPM 以扩展 PCR-0。接下来,现在正在执行的固件将测量启动过程的下一个组件,并在执行 之前再次将值存储在TPM的 中 (例如,通过扩展PCR-0)。  经过 多个 阶段后, PCR寄存器包含 系统 启动时采取的所有步骤 的哈希链。 远程方 现在 可以通过向  TPM 请求  “报价”来验证系统是否安全启动:当前在 PCR  中的 一组 PCR 值的报告  (以及   远程方 提供的随机数),该密钥使用 TPM 的专用证明标识密钥  进行签名 ,该密钥永远不会离开 TPM(并且派生自硬编码    在制造时创建的密钥)。由于公钥 是众所周知 的,因此任何人都可以 验证报价是否来自TPM。 收到报价并验证它来自 TPM 并且它是最新的后,远程方知道启动过程只能遵循在 PCR中创建这些哈希的步骤.如果它们对应于已知和受信任代码的哈希值,则远程方知道系统已安全启动。

代码和数据 完整性检查很可能会 在运行时继续进行。例如,虚拟机管理程序可以提供对其 虚拟机 执行自省 的功能:代码是否仍然相同,数据结构是否仍然有意义?此技术称为虚拟机侦测VMI)。 VMI 功能可能驻留在 虚拟机管理程序本身中,尽管它可能位于单独的应用程序中。除了代码之外,VMI解决方案中要检查的常见内容还包括进程列表(是否有任何 rootkit 试图隐藏?)、系统调用表(是否有人劫持特定的系统调用?)、中断向量表等。

异常检测

监视器,无论是在虚拟机管理程序还是在操作系统中,也可用于监视系统的异常事件 - 异常检测。例如,连续崩溃数百次的系统可能会受到试图破坏系统地址空间布局随机化的人的攻击。当然,没有确凿的证据,仅仅因为 发生了异常并不意味着有攻击。异常检测系统必须在引发太多错误警报(处理成本高昂)和引发太少(这意味着它错过实际攻击)之间取得平衡。

责任编辑:武晓燕 来源: 河南等级保护测评
相关推荐

2023-02-02 00:06:06

2023-02-03 00:14:43

2010-04-14 09:28:44

Unix操作系统

2023-02-07 00:24:24

2023-01-09 00:08:37

2023-01-08 00:31:14

2023-01-31 00:10:32

2023-01-27 09:17:02

操作系统虚拟化内存

2023-01-30 00:05:02

操作系统虚拟化安全

2010-06-01 18:14:55

Rsync 使用

2015-03-12 15:44:59

2010-06-01 18:11:25

Rsync 使用

2010-05-07 13:54:10

Unix操作系统

2019-01-28 10:00:42

CPU操作系统存储器

2010-04-14 17:54:06

2009-02-17 17:09:59

虚拟化操作系统服务器

2021-12-08 00:02:46

网络安全计算机

2010-06-17 14:43:59

Rsync 使用

2010-04-07 10:29:01

Unix操作系统

2021-11-02 11:55:07

macOS macOS Monte漏洞
点赞
收藏

51CTO技术栈公众号