QNX Hypervisor 实施多种策略来保护自己及其guest操作系统,并减轻故障的不良影响。 QNX Hypervisor包括QNX Neutrino微内核和libmod_qvm虚拟化扩展。因此,hypervisor可以依赖其微内核所采用的安全相关技术。
干扰类型
干扰有多种类型,根据系统的组件是主动协作还是完全独立而有所不同。以下是不完整的列表。 一个组件可能:
- 抢夺系统资源的另一个组件(文件描述符、互斥锁、闪存等)。通过周期性地使用和不释放文件描述符,一个进程最终可能会消耗系统的所有文件描述符,并阻止关键进程在需要时在闪存中打开文件。
- 占用处理时间的另一部分,使其无法完成任务。通过执行处理器密集型计算或在故障条件下进入紧密循环,进程会阻碍关键进程在需要时运行。
- 访问另一个组件的专用内存。在读取访问的情况下,这可能是一种安全漏洞,可能会导致以后的安全问题;在写访问的情况下,这可能会立即造成危险的情况。
- 损坏与其他组件共享的数据,导致其他组件以意外且可能不安全的方式运行。
- 与与其合作的另一个组件创建死锁或活锁。在这两种情况下,该系统都没有取得任何进展,从而导致不作为而出现危险局面。导致死锁和活锁的情况通常是微妙的,由于其时间性,测试很少能够检测到或再现。
- 通过“胡言乱语”(以高速率发送消息或重复消息)或发送带有错误数据的消息来打破与合作组件的合作。
权限级别的使用
QNX Hypervisor使用硬件支持的权限级别,以确保系统免受错误代码的影响(参考Manage privilege levels)。
Security
QNX Hypervisor继承了QNX Neutrino RTOS的安全功能。这些功能包括保护hypervisor主机域的机制,以及定义虚拟机管理器(qvm进程)security policy的操作系统功能。 例如,通过设置访问控制列表( access control lists )和强制认证(PAM),可以使在hypervisor主机域中运行的设备驱动程序更安全。 更多信息,参考System Security Guide。
Temporal isolation 时间隔离
由于QNX Hypervisor包含QNX Neutrino微内核,因此Hypervisor使用操作系统的时间分区(包括在适当时的自适应分区),以确保Hypervisor主机与guests之间以及VM与guests之间的时间隔离。 hypervisor 还使用操作系统的优先级和调度,以确保对CPU资源的冲突请求进行正确管理。
Spatial isolation 空间隔离
qvm进程实例在微内核空间之外运行,因此qvm进程中的错误(或qvm进程示例的恶意损坏)不会妨碍微内核的正确操作。 Guest通过中间阶段表访问内存(对于ARM,阶段2页表;对于x86,扩展页表(EPT))。 内存分配和设备分配是静态的;它们在设备树中定义,在启动时验证,然后加载。系统启动后无法更改(参考Memory。
hypervisor 实现SMMU管理器(smmuman),以确保硬件SMMU通过直接内存访问(DMA)设备捕获并失败访问其分配的内存区域之外的内存的尝试。smmuman服务跟踪这些违规行为,并保留这些信息,直到查询到为止(参考DMA device containment (smmuman))。
Data isolation 数据隔离
在hypervisor系统中,hypervisor主机配置和虚拟机配置将物理设备分配给hypervisor主机或虚拟机。 如果设备分配给多个VM或分配给VM和hypervisor 主机,则qvm进程实例的启动失败。 因此,单个实体(hypervisor主机或guest操作系统)将对每个设备具有独占控制权。 来自一个设备的数据仅在不拥有该设备的实体明确请求时传递给该实体。
管理无响应的服务
hypervisor可以使用 server-monitor
实用程序监视指定的服务器,并在这些服务器由于超时而无法处理解除锁定脉冲时采取行动。也就是说,hypervisor可以保护自己不受服务器无响应的影响。
当server-monitor
在系统中实现时,它会监视一个服务器列表,如果其中任何一个服务器在指定的时间间隔内无法响应解锁脉冲,则会采取指定的操作。因此,如果客户端无法通过向服务器发送解锁脉冲来解锁服务器,则服务器监视器可以通过采取适当的措施来纠正这种情况。这些操作包括什么都不做,向服务器发送信号以使其做出响应,以及重新启动系统 ( 参考QNX Neutrino Utilities Reference中的server-monitor)。
Watchdog
hardware watchdogs 和 host-based watchdogs 的设计和实现不在hypervisor的范围之内,但您可以为hypervisor 主机实现自己的监视器。
hypervisor 不会为其guest实现watchdog 。但是,它提供了watchdog vdevs
。
(参考Watchdogs以及Virtual Device Reference章节的vdev wdt-ib700和vdev wdt-sp805)。
你可以使用它们在guest中实现watchdog。