用于检测虚拟化环境的用户可信设备的制造方法
【技术领域】
[0001] 本发明总体涉及使计算机能从中引导的用户可信设备的领域以及相关的设备、系 统和方法。
【背景技术】
[0002] 需要这样一种技术,其可以让软件在任何非事先准备或审查的计算机(例如,员 工的私人电脑)上执行,同时确保软件的执行是安全的,例如,同在企业/公司的电脑上一 样安全。这种技术将能实现一个可信的(trusted) "自带"(BY0)计算工作环境。BY0-般 涉及"自带设备"(BY0D)、"自带技术"(BY0T)或密切相关的"自带行为"(BY0B)。BY0D或 BY0T关系到这样的企业/业务政策--即员工如何如何才能把个人移动设备带到工作中, 用个人移动设备访问雇主的电子邮件、数据库和文件,除此之外还在家中使用这种设备,由 此通过相同的设备访问个人的应用程序/数据。除了硬件,BY0B则将其扩展到到设备上使 用的软件。
[0003] 人们现在知道,在计算机上执行的任何软件,都可能受到PC (个人电脑)的操作系 统中存在的许多病毒和恶意的软件(恶意软件)的攻击。这个问题的一个解决方案是,例 如从用户可信设备一一通常是安全设备一一上存储的外部引导介质重新启动PC,从该外部 介质启动一个新的、从安全的角度来说是干净的操作系统(0S)。
[0004] 然而,发明人意识到,这种方法明显产生一个显著的技术缺陷,这就是本发明要解 决的问题。
[0005] 此外,可信设备(包括安全、防篡改设备)上往往提供外部引导介质,这类设备 广为人知。例如,为在线交易开发的一种解决方案,是所谓的区域可信信息通道(Zone Trusted Information Channel或ZTIC)。ZTIC是用于交易数据认证的安全的非可编 程设备。由于ZTIC保持与服务器的安全的端到端网络连接,ZTIC本身就是防篡改的, 不受恶意软件的攻击,并且,由于ZTIC自己有独立于其所连接的主机的输入和输出部 件,ZTIC显示器上显示的数据是真的(genuine)。更多的细节例如可参看"The Zurich Trusted Information Channel-An Efficient Defence against Man-in-the-Middle and Malicious Software Attacks'',by Thomas ffeigold, Thorsten Kramp,Reto Hermann,Frank Hori ng, Peter Buhler,Michael Baentsch. In P. Lipp, A. -R. Sadeghi, and K.-M. Koch(Eds.) :TRUST 2008,LNCS 4968,pp. 75-91,2008. Springer-Verlag Berlin Heidelberg 2008。
【发明内容】
[0006] -方面,本发明体现为一种用户可信设备,包含:
[0007] 使得能够与计算机连接的连接接口;和
[0008] 存储模块的持久性存储器,其被配置得用于在用户可信设备与所述计算机通过所 述连接接口连接后:
[0009] 使所述计算机从用户可信设备开始引导;
[0010] 指示计算机的处理器在开始引导期间执行虚拟化敏感代码并在执行完成后发布 完成数据;
[0011] 根据所述完成数据,确定该执行是否没有在虚拟化环境中进行;和
[0012] 在确定该执行是否没有在虚拟化环境中进行后,使计算机能从用户可信设备完成 引导。
[0013] 优选地,所述模块包含:
[0014] 使所述计算机能从设备开始并完成引导的引导加载器;
[0015]处理器的指令模块,可在计算机处执行,以指示处理器执行虚拟化敏感代码和发 布完成数据;
[0016] 验证模块,被配置得用于指示根据所述完成数据确定该执行是否没有在虚拟化环 境中进行,该验证模块可在设备和/或计算机处执行,
[0017]其中,引导加载器在用户可信设备与所述计算机连接后可被初始化固件检测到, 并包含让固件发起向计算机上传送所述处理器指令模块、用于在计算机处的后续执行的指 令。
[0018]按照第一类实施例,处理器指令模块进一步被配置得用于在计算机处的执行后, 指示处理器执行为处理器设计的虚拟化敏感代码,以生成由计算机支持的、优选地由该处 理器自身支持的一个或多个功能的列表,作为完成数据的一部分。
[0019]按照第二类实施例,处理器指令模块进一步被配置得用于在计算机处的执行后, 指示处理器生成取决于处理器执行所述虚拟化敏感代码所需的计算量的最终状态值,作为 完成数据的一部分,并且,优选地,处理器指令模块进一步被配置得用于在计算机处的执行 后,指示处理器生成反映处理器在执行所述虚拟化敏感代码之前的状态的初始状态值。
[0020] 在实施例中,验证模块是在设备10处可执行的,用于根据初始状态值和最终状态 值,生成量化处理器执行虚拟化敏感代码所需的计算量的处理器用量值,如计算持续时间、 处理器周期数、或计数器,并且,验证模块进一步被配置得用于指示根据所述处理器用量 值,确定该执行是否没有在虚拟化环境中进行。
[0021] 在其它实施例中,处理器指令模块进一步被配置得用于在计算机处的执行后,指 示处理器生成量化处理器执行虚拟化敏感代码所需的计算量的处理器用量值,如计算持续 时间、处理器周期数、或计数器,作为完成数据的一部分,并且,验证模块进一步被配置得用 于根据所述处理器用量值,确定该执行是否没有在虚拟化环境中进行。
[0022] 有益地,验证模块可以进一步被配置得用于指示优选地通过所述计算机连接到服 务器,以至少部分地在服务器处确定该执行是否没有在虚拟化环境中进行。
[0023] 例如,验证模块可以被配置得用于执行以下的一项或多项:
[0024] _与所述固件互相作用,以便随后与计算机的网卡互相作用,以便在所述网卡所启 用的网络上发起通信,以连接到服务器;
[0025]-访问在用户可信设备上存储的网卡驱动程序以直接与计算机的网卡互相作用, 以便在所述网卡所启用的网络上发起通信,以连接到服务器;和/或
[0026]-优选地通过引导加载器与固件互相作用,以部分地运行计算机的操作系统,以按 需通过所述计算机连接到服务器。
[0027] 优选地,虚拟化敏感代码包含以下的一种或多种指令:
[0028]-将处理器从保护模式切换到实模式的指令和/或将处理器从实模式切换到保护 模式的指令;
[0029] _让处理器读取机器特定的寄存器的指令;
[0030]-让处理器写入机器特定的寄存器的指令。
[0031] 另一方面,本发明体现为用于使计算机能从用户可信设备引导的方法,用户可信 设备包含使得能与所述计算机连接的连接接口,该方法包括:
[0032] 在可信设备与计算机通过所述连接接口连接后,使计算机能从可信设备开始引 导;
[0033] 指示计算机的处理器
[0034] 执行虚拟化敏感代码;
[0035] 在执行完成后发布完成数据,其中完成数据取决于虚拟化敏感代码及其被处理器 的执行;
[0036] 根据所述完成数据,判定该执行是否没有在虚拟化环境中进行;及
[0037] 在确定该执行没有在虚拟化环境下进行后,使所述计算机能从用户可信设备完成 引导。
[0038] 优选地,该方法进一步包含:在用户可信设备与所述计算机连接后,与计算机的初 始化固件互动,以
[0039] 使所述计算机能从用户可信设备引导;和
[0040] 发起将处理器指令模块向计算机上的传送,用于后续在计算机处的执行,以使处 理器执行虚拟化敏感代码并在执行完成时发布完成数据。
[0041] 在优选实施例中,确定该执行是否没有在虚拟化环境中进行包含:在设备和/或 计算机处执行验证模块,并且,执行验证模块优选地包含:更优选地通过计算机连接到服务 器,以至少部分地在服务器处确定该执行是否没有在虚拟化环境中进行。
[0042] 按照所述第一类实施例,处理器进一步被指示生成由计算机、优选地由处理器自 身支持的一个或多个功能的列表,作为完成数据的一部分。
[0043] 按照所述第二类实施例,处理器进一步被指示生成取决于处理器执行虚拟化敏感 代码所需的计算量的最终状态值,如计算持续时间、处理器周期数、或计数器,作为完成数 据的一部分,
[0044]其中,优选地,处理器进一步被指示生成在执行虚拟化敏感代码之前的初始状态 值。
[0045] 最后一个方面,本发明体现为一种用于使计算机能从用户可信设备引导的计算机 程序产品,该计算机程序产品包含体现有模块的计算机可读存储介质,这些模块可执行按 照上述实施例的方法的任何之一的所有步骤
[0046] 现在将通过非限定性例子并参照各附图,说明体现本发明的设备、系统和方法。
【附图说明】
[0047]-图1示意性地表示一个适于实现本发明实施例中涉及的一个或多个方法步骤的 通用计算系统;
[0048]-图2示意性地示出实施例中涉及的用户可信设备的选择的组件;和
[0049]-图3是如实施例中所述、使计算机能从诸如图1所示的用户可信设备引导的方法 的高层级流程图。
【具体实施方式】
[0050] 以下的说明的结构如下。首先,描述一般实施方案和高级变通方案(第1节)。下 一节讨论更具体的实施方案和技术实现细节(第2节)。
[0051] 1.一般实施方案和高层级变通方案
[0052] 图1示意性地表示一个适于实现本发明实施例中涉及的一个或多个方法步骤的 通用计算系统。
[0053] 可以理解,这里描述的方法很大程度上是非交互式的,并且是通过诸如服务器或 嵌入式系统的计算系统自动化了的。在示例性实施例中,本文描述的方法可以在(部分) 交互的或非交互的系统中实现。这些方法进一步可以在软件(例如固件)、硬件、或它们的 组合中实现。在示例性实施例中,本文所述的方法在软件中实现,作为可执行程序,并由诸 如个人电脑、工作站、小型机、或主机计算机的专用或通用数字计算机执行。最通用的系统 100因此包括通用计算机101。
[0054] 在示例性实施例中,在硬件结构方面,如图1所示,计算机101包括处理器105、耦 合到存储器控制器115的存储器110以及通过本地输入/输出控制器135通信地耦合的一 个或多个输入/输出(I/O)设备(或外围设备)10、145。输入/输出控制器135可以是一一 但不限于一一如在本领域中已知的一个或多个总线或其它有线或无线连接。输入/输出控 制器135可以有额外的元件以便能够通信,如控制器、缓冲器(高速缓存)、驱动器、中继器 和接收器,为了简明,图中作了省略。此外,本地接口可以包括地址、控制、和/或数据连接, 以便使上述部件之间能进行适当的通信。本文所述的I/O设备10、145-般可以包括现有技 术已知的任何广义的加密卡或智能卡。其中一种设备是下面详细讨论的用户可信设备10。
[0055] 处理器105是用于执行软件、特别是存储在存储器110中的软件的硬件设备。处 理器105可以是任何定制的或商业上可获得的处理器,中央处理单元(CPU),与计算机101 相关的几个处理器中的辅助处理器,基于半导体的微处理器(微晶片或芯片组的形式),宏 处理器(macroprocessor),或者用于执行软件指令的任何一般设备。
[0056] 存储器110可以包括以下的任何一个或组合:易失性存储器元件(例如随机存取 存储器(RAM,诸如0狀11、5狀11、
50狀11,等等))和非易失性(持久性)存储元件(例如1?(通、 可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPR0M)、可编程只读存 储器(PR0M)、磁带、光盘只读存储器(CD-ROM)、硬盘、软盘、卡带,等等)。此外,存储器110 可包括电子的、磁性的、光学的、和/或其他类型的存储介质。注意,存储器110可以有分布 式的体系结构,其中各个组成部分彼此远离,但可以被处理器105访问。特别地,存储器110 包括一个给定的存储部分121,可以向其传送处理器指令模块(PM) 15和验证模块17的全 部或部分,用于后续的执行。
[0057] 存储器110中的软件可以包括一个或多个独立的程序,每个程序包含用于实现逻 辑功能(特别是本发明实施例中涉及的逻辑功能)的可执行指令的列表。在图1的例子中, 存储器110可以装载指令,如果某些条件得到验证,这些指令使计算机101能从用户可信设 备10启动引导(booting)并完成引导。
[0058] 存储器110中的软件可以包括合适的操作系统(0S) 111,即使这里所讨论的新方 法至少部分地是在主机101上完全加载了任何0S "之前"就操作的(至少有一些步骤操作 是在另一个层面操作的、更接近硬件,计算机101的正常行为由此受到影响)。〇S 111-旦 (如果)被加载,就将基本上控制其他计算机程序的执行,并提供调度、输入输出控制、文件 和数据管理、内存管理、以及通信控制和相关的服务。
[0059]注意,要加载的操作系统最好一开始没有存储在计算机的硬盘驱动器120上。在 以下这种情况下可能就是这样:要启动一个私人电脑,而又不使用电脑主人在电脑上存储 的任何私人数据。然而,在某些情况下,把由可信设备启动的0S缓存电脑硬盘上的一个单 独区域可能是有用的。在下面描述的优选实施例中,要被加载的0S最初是被包含在用户设 备10中的,通过网络加载的,或者是被缓存在计算机的硬盘驱动器上的。在后一种情况下, 通常验证该操作系统的签名。
[0060]本文所述的方法的至少一部分的形式可以是源程序、可执行程序(目标代码)、脚 本、或包含一组要被执行的指令的任何其他实体。如果是源程序,则该程序需要通过设备10 和/或主机101的存储器内可能包括、可能不包括的编译器、汇编器、解释器等进行翻译。此 外,本文所述的方法,可以用具有数据类和方法类的面向对象的编程语言编写,或者用具有 例程、子例程和/或函数的过程编程语言编写。在所有的情况下,本文所讨论的新方法被设 计得能结合固件122-一如果需要的话一一并在需要时结合设备的CPU 11而适当操作。
[0061]在不例性实施例中,可将传统的键盘150和鼠标155親合到输入/输出控制器 135。其他的输出设备,如I/O设备145,可以包括输入设备,例如但不限于打印机、扫描仪、 麦克风,等等。最后,I/O设备1〇、145可以进一步包括传送输入和输出的设备,例如但不限 于网络接口卡(NIC)或调制器/解调器(用于访问其他文件、设备、系统或网络)、射频(RF) 或其他收发机、电话接口、桥、路由器,等等。如本文所述的I/O设备140、145可以是现有技 术已知的任何一般的密码卡或智能卡。系统100可以进一步包括耦合到显示器130的显示 控制器125。在示例性实施例中,系统100可以进一步包括网络接口 160,用于耦合到网络 165。网络165可以是基于IP网络,用于通过宽带连接在计算机101与任何外部服务器、客 户端等之间进行通信。网络165在计算机101与外部系统一一例如服务器30-一之间发送 和接收数据。在示例性实施例中,网络165可以是由服务供应商管理的被管理IP网络。网 络165可以以无线方式实现,例如采用无线协议和技术,诸如WiFi、WiMAX网络,等等。网络 165也可以是分组交换网络,诸如局域网、广域网、城域网、因特网、或其他类似类型的网络 环境。网络165可以是固定的无线网络、无线局域网(LAN)、无线广域网(WAN)、个人区域网 (PAN)、虚拟专用网(VPN),内联网或其他合适的网络系统,并包括用于接收和发送信号的装 置。
[0062]如果计算机101是PC、工作站、智能装置之类,则存储器110中的软件可以进一步 包括一个基本输入输出系统(BIOS)或任何类似的初始化软件122。BIOS是在启动时初始 化硬件并测试硬件的一套基本软件例程。BIOS -般来说能启动一个操作系统,支持硬件设 备之间的数据传输。BIOS通常存储在ROM中,当计算机101被激活时,BIOS就能被以执行。
[0063]为了实现如本文所述的方法,可以使用BIOS122(与BIOS互动)来启动引导过程 和完成引导过程,也可能在网络上发起一个通信。不过,更一般来说,为此可以使用任何合 适的固件122或固件的接口(即,持久性存储器与其中存储的程序代码和数据的组合,该组 合在软件栈中任何〇S 111的"下面"运行)。这通常就是BIOS。然而,合适的固件122或固 件接口 的例子,包括 Preboot execution Environment (PXE) BIOS (预启动执行环境 BIOS)、 所谓的Extensible Firmware Interface(EFI)BIOS(可扩展固件接口 BIOS)、或 Unified Extensible Firmware Interface (UEFI)(统一可扩展固件接口)。后者是定义操作系统与 平台固件之间的软件接口的规范。UEFI被用来取代BIOS固件接口,存在于目前所有的IBM PC兼容的计算机。在实践中,大多数的UEFI映像都有对BIOS服务的传统支持。更一般地, 任何具有对BIOS服务或类似服务的传统支持的固件,都可以考虑用于实现本文所描述的 方法。更一般地,在软件栈中操作系统下层运行的任何初始化固件都可以用于实现本发明。 [0064]当计算机101运行时,处理器105被配置得能执行存储器110中存储的软件,以便 在存储器110读、写数据,以及根据软件控制计算机101的操作。本文所述的方法的全部或 部分,但一般是部分方法,由处理器105读取,可能要在处理器105内缓存,然后被执行。 [0065]本文所述的方法中可以在软件中实现的部分,可以存储在任何计算机可读介质 中,供任何计算机相关的系统或方法所用,或者与任何计算机相关的系统或方法结合使用。 [0066] 所述技术领域的熟练人员应明白,本发明的各方面可以体现为系统、方法和计算 机程序产品。因此,本发明的各方面所采取的形式,可以是完全硬件体现,完全固件和/或 软件体现(固件、常驻软件、微代码,等等)或组合了固件/软件和硬件的体现,在本文中总 体被称为"模块"、"计算机化的方法"、"过程"或"方案,等等。此外,本发明的各方面所采取 的形式,也可以是在一个或多个其中体现有计算机可读程序的计算机可读介质中体现的计 算机程序产品。
[0067]可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算 机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是一一但不限 于一一电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算 机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便 携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(R0M)、可擦式可编程只读存储器 (EPR0M或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者 上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的 有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0068] 计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号, 其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括一一但 不限于一一电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是 计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者 传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0069]计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括一一但不限 于一一无线、有线、光缆、RF等等,或者上述的任意合适的组合。
[0070]可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算 机程序代码,所述程序设计语言包括面向对象的程序设计语言一诸如Java、Smalltalk、C++ 等,还包括常规的过程式程序设计语言一诸如"C"语言或类似的程序设计语言。程序代码可 以完全地在用户计算机上执行、部分地在用户计算机上执行(作为一个独立的软件包)、还 可以在以下的两个或多个设备上执行:用户计算机101、用户可信设备10、远程计算机30。 主机计算机可以通过任意种类的网络一一包括局域网(LAN)、广域网(WAN)、至外部计算机 的连接(例如利用因特网服务提供商来通过因特网连接)一连接到服务器。
[0071] 下面将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图 和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图 中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计 算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计 算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程 图和/或框图中的一个或多个方框中规定的功能/动作的装置。
[0072] 也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、 其它可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的 指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令 的制造品。
[0073] 也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其他设备 上,使得在计算机、其它可编程数据处理装置、或其他设备上执行一系列操作步骤,以产生 计算机实现的过程,使得在计算机或其它可编程数据处理装置上执行的指令提供实现流程 图和/或框图中的一个或多个方框中规定的功能/动作的过程。
[0074] 附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程 序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以 代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个 用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所 标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以 基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的 是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行 规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的 组合来实现。
[0075] 如前文所述,从外部引导介质重启计算机以及从外部介质启动一个"干净"0S(从 安全的角度来说是"干净的"),或启动其它可信的0S,是解决PC上执行的任何软件都可能 遭到PC的操作系统中存在的病毒或恶意的软件(恶意软件)的攻击这一问题的一种方式。 [0076]然而,发明人已经意识到,这种方法明显产生以下的问题:重新启动电脑的用户是 可信的用户吗?还是某恶意的虚拟化环境被启动,目的是篡改新启动的干净0S ?此外,也 有可能,缺乏安全意识和/或贪图省事的用户试图利用这种想法来避开对计算机的重启。
[0077] 参看图1至3,首先描述本发明的一个方面,其涉及到一个安全设备10(或更一般 地,用户可信设备,也称"外部信任锚")。这个设备是公司或个人的设备,即公司或
用户拥有 并控制的设备,诸如USB设备一一最好是USB闪存驱动器(一种数据存储设备,除了集成的 通用串行总线(USB)接口,还包括闪存)、移动电话或个人数字助理(PDA),只有这个用户使 用该设备或者这个用户为其工作的公司拥有和控制该设备。通常,这种设备重不足200克, 优选地轻于60克、甚至40克。有助于使其"安全"的设备10的其它特点,将在稍后讨论。
[0078] 这个设备至少包括:实现与计算机101的连接的连接接口 12;以及持久性存储器 14,其明显地存储有多个模块15、16、17。这些模块被设计得使得在设备10与计算机101通 过所述接口 12连接时,能在设备10和/或计算机101上执行许多操作。
[0079] 假设提供这样的设备10和计算机101 (图3中的步骤S1)。则在该设备连接后(步 骤S2),上述操作在高层次上主要包括:
[0080] 1.使所述计算机101能从用户可信设备10开始引导(步骤S3);
[0081] 2?指示处理器105执行(步骤S7)某种参考代码(some reference code);
[0082] 注意,该代码最好由设备10自身提供,例如由处理器指令模块15提供。在变通方 案中,可以将该代码的标识符、甚至地址,传送给处理器105。这个代码通常包括几个指令, 具体视所测试的机器而定;
[0083] 该代码的选择要使其对虚拟化环境敏感,因此该代码被称为"虚拟化敏感代码"。 即,视在虚拟化环境中执行还是在本地执行而定,该代码执行方式不同并产生不同的执行 特性。执行特性可能在以下方面显著地不同:
[0084] 从执行产生的结果(这涉及如下所述的第一类实施例);和/或
[0085] 通过计时(timing)特性、处理器周期等可测量的计算量(第二类实施例)。
[0086] 鲁例如,对基于x86的PC来说特别感兴趣的计算是在实模式(与保护模式(之间 切换。
[0087] ?虚拟化敏感代码的其它例子将在稍后给出;
[0088] 按照对处理器的指令,虚拟化敏感代码的执行在计算机101开始引导期间进行, 即在启动过程已经开始但尚未完成之前进行,即在操作系统的主要/关键组件被加载之前 进行。
[0089] 在执行完成时,处理器105进一步被指令发布一些完成数据(例如结果、时间戳、 或者可以打上时间戳的事件,等等),图3的步骤S8 ;
[0090] 3.下一个操作集合(S9-S13)要根据完成数据来确定执行是否没有在虚拟化环 境中进行(或者,等效地,确定执行是否是在安全的环境中进行的,例如在原生环境中进行 的);和
[0091] 4.最后,如果确定执行没有在虚拟化环境中进行,则可以使计算机101能从设备 10完成引导(步骤S15)。在实施例中,这个条件是间接地确定的,例如可能需要用户交互, 如以下第2. 1节中特别讨论的那样。在虚拟化环境中运行的条件并不一定是充分条件:它 在本发明的上下文中是一个必要条件;也可能涉及其它条件,如以下第2. 2节中特别讨论 的那样(例如,也可能测试BIOS)。
[0092]如果确定执行没有在虚拟化环境中进行,则引导过程继续(步骤S15),例如为此 可以向计算机101提供更多的数据、密钥、软件、引导映像等。
[0093] 如果相反地,如果确定执行是在虚拟化环境中执行的,则引导过程中止(步骤 S14)。例如可以关闭设备10,即不向计算机101提供数据、密钥、软件等。
[0094] 可以预期,中间的情形可能会导致加载约束版本的操作系统(不是所有的组件都 被允许),或加载修改版本的操作系统,其中加载补丁 /程序以清理计算机101。
[0095]计算机101 -般是个人计算机(PC),最好是供移动使用的PC,笔记本或上网本、或 者PDA或智能手机。为了简要,将其称为(主机)计算机或PC。
[0096] 综上所述,本发明所基于的原则是:
[0097] -将模块15-17最初存储在可信设备(trusted device) 10中,以便用户能信任它 们;
[0098]-这些模块至少部分地在PC上是可执行的,使其处理器执行虚拟化敏感代码。
[0099]-所述模块导致分析执行的输出,以确定环境不是虚拟的,并且,如果确实如此,则 引导过程继续。
[0100] 识别虚拟化环境具有明显的优点,理由如下:
[0101] ?被修改的BIOS可能对可信设备10伪装成是正常地从主机计算机引导的,而实 际上计算机是虚拟化的。虚拟化的计算机在可信设备看来就像真的计算机,但是可以修改 某些计算机指令,以便可以修改在虚拟化层认为合适时要用可信设备启动的系统。
[0102] 鲁在虚拟化环境中用户可能主动地试图引导可信设备上的/通过可信设备提供 的系统。这么做的原因可能是为了不要重启私人PC和保持已经开始的私人程序。即,不要 停止他的私人程序来做公司工作,并在公司工作完成后重新启动私人程序。然而,通过这样 做,用户将把系统从可信设备暴露到如上述相同的风险。即,系统将被暴露给实现作为虚拟 机执行的部分而执行的敏感计算的计算机上的任何恶意软件。
[0103] 由于上述两方面的原因,可信设备10需要能识别被提供给该设备的计算机101是 真实的还是虚拟化的,因此需要本发明的解决方案。
[0104] 现在更具体地参看图2:在实施例中,所述模块15-17分解为:
[0105]-引导加载器016,使PC 101开始(并最终完成)从设备10的引导;
[0106]-处理器指令模块(或PM) 15,它必需可在PC上执行,以指示其处理器105执行 虚拟化敏感代码并发布完成数据;和
[0107]-验证模块17,该模块可在设备10和/或计算机101上执行,用于分析(直接地 或非直接地)完成数据。
[0108] 引导加载器16是在可信设备10与PC 101连接后能被例如BIOS 122的初始化固 件检测到的。引导加载器还包括这样的指令-其让固件122发起PM 15向PC 101上的传 送,用于在PC上的后续执行。
[0109]顺便指出,模块15和17可以被视为单一的实体(称之为虚拟化分析模块或VAM), 其功能不但是指示处理器,而且还分析完成数据。
[0110] 如上所述,在第一类实施例中,PM 15可以指示处理器105执行代码,使它产生作 为完成数据的一部份的、被计算机101-最好是处理器自身-支持的功能(feature)的列 表。其中一个这样的功能是,CPU是否提供硬件虚拟化支持(即,以在CPU的特征寄存器 (feature register)中设置的vtx位和在对应的模型特定的寄存器中的vtx使能位的形 式)。如果不是,但是由cpuid指令报告的CPU具有硬件虚拟化的能力,这是在不以软件模 拟这些指令的虚拟化环境内运行的指示。其它的这种功能可以是检查系统中的硬件是否存 在虚拟化图形(在典型的准虚拟化环境的情况下)卡或真实的图形卡。
[0111] 其次,验证模块或VAM可以比较所支持的功能的列表与一些参考数据,判定执行 是否是在虚拟化环境中进行的。这样的操作可以直接由CPU 105执行,或在用户设备10上 执行,或者在设备和CPU上共同执行。
[0112] 然而,更为强大的是,使处理器105产生或使用一一执行完成时的、并且作为完成 数据一部分的一一最终状态值。该值依赖于-即受影响于一一处理器为执行虚拟化敏感的 编码所需的计算量。这样的一个值例如可以是时间戳,或者是设备10或其任何模块(无论 是在设备10还是在PC上执行的)的指令,其被接收时能被打上时间戳,等等。该值可进一 步是或者引用(refer to)截至执行后的处理器周期数、在给定的数个周期或给定时间期间 的最大CPU使用量、时间,等等。通过比较该值与合适的参考值,就有可能判定执行是否是 在虚拟化环境中进行的。
[0113] 第二类实施例比第一类更可靠,因为处理器105或计算机101所支持的某些功能 可能已被(例如,厂商)禁用,以致要确定非虚拟化环境很不容易。
[0114] 优选地,处理器105可以进一步产生或使用初始状态值,即反映处理器在执行虚 拟化敏感代码之前的状态的值。同样,初始状态值可以是时间戳,设备10或其模块的指令, 处理器周期数,时间,等等。
[0115] 有了初始值和最终值,就容易导出处理器的用量值(usage value) 即,直接和明确 地量化执行虚拟化敏感代码所需要的计算量的值。这样的处理器用量值,例如可以是计算 持续时间、处理器周期数、或任何适当的计数器。还有,处理器用量值可以独立于初始值而 生成。例如(在给定数量的在前周期或给定的在前时间期间的)最大CPU用量可以表示执 行一个给定的指令集所需的计算量。
[0116] 虽然最终状态值可能已经足够,使用如上定义的处理器用量值使得可以进行更直 接相关的比较(因为它直接和明确地量化执行所需的计算量)。
[0117] 验证模块17接着参与分析最终状态值/处理器用量值,然后确定执行是否没有在 虚拟化环境中进行。为此,验证模块17可以简单地对比最终状态值/处理器用量值与设备 10上可得的或通过第三方30可得的参考值,。在变通方案中,验证模块17可以在判定之 前,先触发与处理器105所执行的相同的虚拟化敏感代码(在设备10或第三方30的)并 发执行,然后进行比较。
[0118] 同时,需要注意的是,处理器用量值的计算,可由处理器105或由(无论在设备或 PC上执行的)验证模块17用为此目的记录或发布的初始和最终状态值直接执行。不过, 最好在设备(其运行要用到CPU 11)上执行此计算,因为这样的解决方案可以更不容易被 篡改,原因是在设备10中计算的用量值不能很容易被操纵。然而,(PC101和设备10之间) 额外的通信开销是必需的,这可能会增加一些不准确。
[0119] 验证模块17对最终状态值或处理器用量值的分析,可以在PC或在设备10执行。 在设备或PC上执行用量值的计算和分析,可以在设计阶段确定,或者,甚至可以在执行时, 根据已知的或检测到的PC的通信开销的特点,动态地确定。
[0120] 若是由处理器来计算处理器用量值(例如,递增PC上的计数器),那么最好是依 靠CPU的时间戳计数器。此计数器对CPU周期进行计数,因此高度精确。篡改CPU的时间 戳计数器需要大量的工作。
[0121] 以下是操作序列的例子:
[0122] 1.提供可信设备10和PC 101 ;
[0123] 2.把设备 10 插入 PC 101 ;
[0124] 3.初始化固件122检测到引导加载器16, PC从设备10开始引导;
[0125] 4.引导加载器16命令PC把PM 15 (甚至VAM 15+17)传送到给定的存储器位置 121 ;
[0126] 5. PM 15开始执行,即被处理器105执行;
[0127] 6. PM的指令被处理器执行期间,导致处理器:
[0128] a?记录(或发布)初始状态值;
[0129] b.开始执行由PIM 15所指出的虚拟化敏感代码;
[0130] 记录最终状态值;
[0131] 计算处理器用量值,例如,持续时间;
[0132] 7.下一步,验证模块17或VAM 15+17通过CPU 105和/或设备的处理器11的指 令进行干预,触发以下操作:
[0133] 比较(或指令例如外部实体30的另一个实体来比较)处理器用量值与参考值;
[0134] 判定执行是否是在虚拟化环境中进行的。
[0135] 最后两个操作,可以直接由CPU 105执行或在用户设备1
0上执行,或者在该设备 和CPU上共同执行,或者运用另一个实体30,如后文将要讨论的那样。
[0136] 虚拟化敏感代码可以包括一个或多个指令,例如如前文所述的、把处理器从保护 模式切换到实模式的指令和/或把处理器从实模式切换到保护模式的指令。这些指令对基 于x86的PC特别有利。计算可以在硬件中进行,非常快。相反,当在虚拟机中执行时,虚拟 机必须抓取这些指令(这只能通过一个CPU例外来完成),然后用软件或其它机制来执行这 些指令,花费更长的时间。即使具有硬件虚拟化支持的CPU并非就能在硬件中做到这一点, 因为实模式是传统的,而硬件虚拟化不提供这些功能。
[0137] 还有可以有利地用于本发明上下文的虚拟化敏感指令的其它例子,比如:
[0138]-用于处理器读取机器特定的寄存器的指令,即"rdmsr";
[0139] -用于处理器写到机器特定的寄存器的指令("WRMSR");和/或
[0140]-用于使能所谓的A20门的指令(但是,由于所需实现的复杂性,这不是优选的)。
[0141] 更一般地,在本地执行与在虚化环境中执行具有不同的资源特点的任何其它指 令,都可以考虑。
[0142] 为了说明起见,假设所有的指令都是由处理器105执行(包括处理器用量值的计 算)。在这种情况下,一般区分PM/VAM 15、17的两种类型的指令(设置指令与虚拟化敏感 代码),现在参考图3加以说明:
[0143]初始设置(initial setup):
[0144] 使处理器105进入保护模式(以下简称PM),以确定处理器处于保护模式 (protected mode);
[0145] 为后续的计算(步骤S7)和完成数据发布(步骤S8)分配内存;
[0146] 记录开始时间(步骤S6);
[0147] 虚拟化敏感指令能使用例如以下的任何指令:
[0148] 板式切换指令,包括:
[0149] 从PM到实模式(以下简称RM)的切换,其中,相比较而言,虚拟化环境需要更长的 时间来模拟;
[0150] 从RM到PM的切换;
[0151] 用于读取机器特定的寄存器的读指令(rdmsr);
[0152] 写入机器特定的寄存器的写指令(WRMSR);
[0153] 需要注意的是,虚拟化敏感指令可以通过(由处理器执行的)子程序执行,由处理 器在来自PIM/VAM的指令上调用。在虚拟化敏感指令包括需要虚拟化的诸如图形卡的其它 硬件组件时,这个选项尤其值得推荐。在这种情况下,虚拟化敏感代码将与图形处理单元 (GPU)互动并执行指令,若在虚拟化环境中运行就要用软件模拟,因此需要更长的时间。还 有其它可能的变体。
[0154]最终设置(final setup):
[0155] 记录最终状态值(例如,结束时间);
[0156] 计算处理器用量值(例如,持续时间)
[0157] 参考值对比;
[0158] 虚拟化环境的结论
[0159] 再次,虽然在上面的例子中假设最终设置是针对处理器105的,最终的操 作(final operations)可以在处理器和/或设备10执行。如果最终的指令(final instructions)至少部分是针对设备10的,需要将这些指令设置得有所不同,以便让处理 器通知设备10执行最终的指令。
[0160]上文提到的一种可能性是要利用第三方,例如服务器30 (见图1),来完成对所获 得的处理器用量值的分析的一部分或全部(甚至仅仅是最终状态值)。在这种情况下,验 证模块17被进一步配置得指示设备或者一一优选地一一计算机101连接到服务器30。"中 央"服务器可以各种可能的、不断变化的机器状态而更容易被更新。
[0161] 为此,可以将验证模块17配置得与以下的一个或多个相互作用:
[0162]_与初始化固件122互相作用,以便随后与计算机101的网卡124互相作用,以便 在(由网卡124所启用的)网络165上发起通信并连接到服务器30;
[0163] -直接与计算机101的网卡124交互:这需要访问在这种情况下可信设备10中存 储的网卡驱动程序;和/或
[0164] -与固件122互相作用,例如,通过引导加载器与固件122互相作用,以部分地运行 计算机101的〇S,即,加载通过PC 101连接到服务器30所需的0S的这些组件。
[0165] 设备10和外部实体30之间的通信,最好应用:
[0166]-通过计算机101从服务器30到设备10的HTTP连接;
[0167] -端到端认证;及
[0168] _签名和其它加密数据13-一如果需要的话,它们可被存储在设备10的安全存储 器141上。
[0169] 作为激进的替选方案,可以让设备10配备网络接入手段,例如配备网络设备(有 线的或无线的),以便直接连接到服务器。这样的解决方案有点昂贵。然而,由于无需与计 算机101进行额外的交互就能联系服务器,可以减少延迟。此处,与服务器30的通信也可 以使用端到端的认证和加密。
[0170] 接下来更特别地参照图2,持久性存储器14应包括:
[0171] 安全存储器141,其上可以存储PM 15或VAM 15-17的第一部分151 (或给定部 分);和
[0172] 非安全存储器142,例如SD卡,其上可以存储模块15、17的第二部分152 (或其它 部分)。
[0173] 安全存储器的存在,使用户可信设备成为安全装置。例如,模块15的一部分可以 加密地驻留在非安全存储器142上,同时将对应的加密密钥13存储在安全存储141上。由 于成本原因,安全存储器通常被限制到128ko或256ko。因此可以优先将其用来仅仅存储加 密数据,例如哈希表/签名13。模块的一部分151因此可以驻留在安全存储器141,同时, 模块的其它部分152可以加密地驻留在非安全存储器142。同样,引导加载器16也可以驻 留在SD卡上,而用驻留在安全存储器141上的签名加密。当计算机101请求引导加载器的 给定块或数据块时,设备的CPU 11将被存储器14中驻留的软件提示对所请求的块进行解 密,例如用存储在安全存储器141上的加密数据进行解密。
[0174] 优选地,由于存储器限制,驻留在安全存储器上的模块15-17占用不到一半大小 的安全存储器。不过,理想的情况是这些模块的所有部分应尽量少地占用存储器。例如,已 经成功测试了模块15的一些实现,其中模块15-1的各部分占用不到4ko (不含用于联系网 络服务器的代码,其消耗约32ko, 一般不到64ko)。所属技术领域的熟练人员明白,实现与 远程服务器联系的功能的代码,是可以在用户可信设备10上存储的多个模块之间共享的。
[0175] 设备10的连接接口 12例如可以是下列类型:
[0176] 通用串行总线或USB;
[0177] 外部小型计算机系统接口或SCSI;
[0178] 外部串行高级技术附件或SATA;
[0179]-火线(Firewire);或
[0180]雷电(。
[0181] 不过,更一般地说,连接接口可以是使计算机能从外部设备10引导的任何当前或 未来的(有线或无线)连接器。此外,相同的接口 12更能让用户可信设备10与诸如投影 仪、打印机、或其它输出设备等任何外部设备进行通信。
[0182] 用户可信设备10可以正常配备耦接到存储器的处理装置(或计算装置,即 CPU) 11,诸如密码处理器(crypto Processor),它一般包含持久性存储器14,优选地,也包 含非持久性存储器(非持久性存储器未予明确显示,但是可以被认为是处理装置方式11的 一部分)。
[0183] 在本发明的上下文中,持久性存储器明显地存储着要由处理装置11、105执行的 计算机化的方法,例如,上文所述的模块15-17。当然,这里所述的模块15-17可以被视为具 有不同功能的单一模块,并能在设备或计算机上执行。
[0184] 如果有必要,安全设备10有一个读卡器用于读取在诸如非安全存储器142或任何 智能卡的储卡上存储的用户凭据,适当的使用可以安全地适当利用这种数据,例如卡上存 储的用户凭据。特别地,通过主机101并使用这种数据,可以在用户(或严格来说,设备10) 与第三方一一例如服务器30-一之间建立值得信赖的连接。在变通方案中,用户凭据可以 直接存储在安全装置上。可以提供进一步的接口(如控制按钮和显示器)以允许与用户的 互相作用。
[0185] 接下来,本发明同样可以被视为一种用于使计算机101从用户可信设备10引导的 方法。该方法至少包括已经参照设备10描述过的以下基本步骤:
[0186] -在可信设备与计算机101通过设备10的连接接口 12连接(S2)后,使计算机 101能从可信设备10开始引导(S3);
[0187] -指示处理器105:
[0188] 〇执行虚拟化敏感代码(S7);
[0189] 〇在执行完成后发布完成数据(S8);
[0190] 一根据所述完成数据,判定该执行是否没有在虚拟化环境中进行(S9-S13);及
[0191] 一假定已经确定执行没有在虚拟化环境中进行,使计算机101从用户可信设备10 完成引导(S15)。
[0192] 如上所述,最好运用引导加载器来与初始化固件122互动,以:
[0193]-使计算机101能从用户可信设备10开始引导(S3);和
[0194]-发起PM 15(或VAM 15+17)向计算机101上的传送(S4),用于后续的执行 (S5-S6)。如上所述,这使处理器105执行虚拟化敏感代码(S7)并在完成后发布完成数据 (S8)〇
[0195] 此外,确定步骤S9-S13可能涉及在设备10和/或计算机101处执行的验证模块 17,以及优选地通过计算机101连接的服务器30。
[0196] 因此,验证模块17可以:
[0197] _在设备10或计算机10或101处本地评估完成数据;或者
[0198] _连接到例如通过比较完成数据与参考数据而评估完成数据的服务器。
[0199] 在后一种情况下,服务器可以继续进行比较,判定执行是不是在虚拟化环境中进 行的(在这种情况下,模块17只从服务器接收一个指示是要完成引导还是要执行某个其它 动作的指令);或者,服务器可以将评估的结果发送给验证模块17,模块17完成该确定并判 定执行是否在虚拟化环境中进行的。必要的话,可能涉及额外的步骤和与服务器的通信步 骤,具体取决于方案的复杂性。
[0200] 如果有必要,验证模块17可能例如为了澄清第一次测试的不可信的结果而触发 由处理器105执行的额外的指令,步骤S16。
[0201] 上述实施方案已参照附图简要地作了描述,并可以包含许多变通方案。可以考虑 上述几个功能的组合。下一节给出一些例子。
[0202] 2.特定实施例/技术实现细节
[0203] 现在讨论组合了上一节中讨论的一些可选功能的特定实施方案。此外,作为对虚 拟化敏感代码是否在虚拟化环境中执行(第2. 1节)的补充,在第2. 2节给出了允许识别 PC的固件122是否已被篡改的新颖方法。在2. 3节给出了能被用于实施例的指令的典型例 子。
[0204] 2. 1检测虚拟机内的执行:特定实施例和变通方案
[0205] 在一个具体实施例中,执行下面的步骤序列。假设可信设备10与PC 101连接,PC 被重新启动,引导加载器被检测到,PM 15已经被传送到PC用于后续的执行:
[0206] 向可信设备10通知在PC 101上开始一个已知的计算。外部设备10记录初始状 态时间,即,就在计算开始之前的最后已知时间值。
[0207] 计算开始。计算本身具有这样的特性,即,在本机执行时与在虚拟化环境中执行 时--例如执行在实模式与保护模式之间切换的指令--计时特征有所不同。更一般地, 如果能使用硬件,任何指令处理器都能迅速执行。这种指令的例子有rdmsr、WRMSR (读/写 模型特定的寄存器指令,如上文所述)、或RDTSC (读取时间戳计数器)一一如果对应的模型 特定的寄存器中也被设置。其它的例子可见于例如x86汇编指令手册。
[0208] 在计算结束时,联系外部设备10。
[0209] 4.可信设备然后检查该计算花费了多长时间,并根据与参考值的比较(参考值例 如可以通过例如在设备10处内部并行执行的相同的计算而获得,或者或可能是已预先计 算的),确定该计算在虚拟化环境中执行的可能性。
[0210] 发明人目前为止检查到的最快的虚拟化支持,大约比本机(natively)执行代码 长8倍;
[0211] 虚拟化环境是在快速的桌面PC上执行的,而本机(native)环境是平均笔记电脑, 因此,在相同的硬件上的时间差,预计超过8倍。这为对所提出的测试代码是不是在虚拟化 环境中执行的判定,给予了充足的空间。
[0212] 例如,可以选择较小的因子(factor)作为阈值因子,例如,4的倍数(这已经是谨 慎的);
[0213] 如果外部设备10确定存在一个虚拟机,它可能会中止操作,或者优选地通知用 户-和/或安全地连接的服务器30-要中止操作并停止工作。
[0214] 如果没有检测到虚拟化环境,该设备继续操作,如让PC检索可能在设备10上存储 的更多软件组件,或向要被执行的软件或如前所述的干净0S发放加密密钥或其它验证令 牌。
[0215] 可以考虑上述步骤的多种变通方案。
[0216] 可以将以上的步骤1和3,与虚拟化环境不能或难以操控的计时源一一如PC的时 间戮计数器(TSC) 组合。
[0217] 可以将所获得的计时值与PC中的CPU关联,以得到对其是否是在虚拟机下执行的 更好的估计。
[0218] 鲁在以上的步骤4中,该设备可以不采用完全自动化的过程,而是提供信息给用 户,问用户是否要继续引导0S。这在用户被认为可信(并被认为能够做出这样的判断)的 情况下是有益的。例如,可以通知用户以下事实,即PC执行某给定指令花了 30毫秒的时间, 在干净的环境中这通常需要10-15毫秒,而而恶意的执行通常需要100毫秒。在这种情况 下,用户可能会认为该计算时间是合理的,原因例如是他的机器比较旧。在另一个例子中, 如果所指示的时间为65毫秒,用户就可能认为处于恶意环境中,原因例如是机器近来是快 的;时间应在7-10毫秒的范围。
[0219] ?这个信息可以客观地呈现,也可以加以编码化(绿色、红色或橙色的标志,123, 等)。
[0220] ?这些设计变通,有助于适应计算机速度日益变快的实际。然而,这需要用户方面 的知识。
[0221] 鲁在步骤4中,外部设备可以另以【背景技术】部分引证的""一文中描述的方式与服 务器互相作用,请求服务器允许继续进行。
[0222] 2. 2检测已被篡改的BIOS
[0223] 发明人也已意识到,从外部引导介质重新启动计算机和从外部介质启动"干净"操 作系统或其它可信操作系统,引发了另一个问题:能信任BIOS吗?更一般来说,能信任PC 启动时涉及的任何初始化固件122吗?事实上,在启动可能也被感染了的计算机期间,能 够并且可能促使其它的初始化固件执行。
[0224] 为了解决这个额外的问题,在实施例中,设备10能触发或执行额外操作,额外操 作在高层面上包含:
[0225] 1.在计算机101开始从设备10引导时(或在已经检查过虚拟化之后),将固件 数据映射到代码(即映射代码),其中,固件数据包含初始化固件122的程序码和/或例如 BIOS 122的初始化固件在开始引导期间可访问的数据;
[0226] 2.证明该映射代码的可信性;和
[0227] 3.如果映射代码得到证明,则使计算机101能完成从设备10的引导(这是除是否 能判定没有涉及虚拟化环境以外的进一步的条件)。
[0228] 这个额外的方法通过获取包含初始化固件的程序码和/或开始引导期间初始化 固件可访问的数据的数据以及随后检查固件数据,可以证明这种固件的可信性。因此,在实 施例中,除是否能判定没有涉及虚拟化环境以外,仅当固件数据得到证明时,计算机才可以 完成从外部引导介质10的引导过程。
[0229] 这个额外的方法的一个关键要素,还是需要一个PC外部的信任锚(trust anchor)10,根据定义,与一般的PC、PDA相比,它被恶意软件或攻击者访问的可能性更小。 这些额外的步骤的另一个关键要素,是在正确的时刻,即,在操作系统启动(或至少全面启 动)之前,收集关于PC的关键信息,并例如通过安全通道报告给值得信赖的分析,最后作出 是否开始执行干净0S的决策。
[0230] 至于要使用什么关键信息,即什么固件数据,可以有若干可能的变通。使用固件本 身的程序码已经令人满意,因为这可以防止攻击者改变程序码。独立于固件的程序码本身, 使用初始化固件可访问的数据一一如初始化固件的配置数据,也是有利的,这是因为,事实 上,(仅)配置数据可能被篡改。所以,理想的情况是,初始化固件的固件的程序码和初始 化固件可访问的数据,二者都被使用。关于配置数据:我们可以使用例如在固件122专用的 或在启动期间可访问的(因此包括固件的程序码和配置数据二者的)ROM或CMOS ROM以及 其它主要标识串(key identification strings)上计算的哈希值。这样的数据既表征固 件也表征固件的状态,因此为判断初始化固件是否被危害奠定了良好的基础。
[0231] 将这样的数据映射到到单一的代码也使得能够进行快速检查,从而进行快速认 证。人们可以采用例如在BIOS的R0M、BI0S的CMOS ROM和/或其它主要BIOS识别串上计 算的哈希值。更一般地,任何能够将固件数据集映射到代码一一代码最好是固定长度的,比 如是一个整数一一的算法/子程序,都可用于方便随后的检查。尽管使用哈希函数从许多 方面来看更合适,一个简单的校验和就是可以依赖的。现在,根据所需的安全级别,有人可 能仍然喜欢使用指纹,即,唯一地标识实体数据集的高效的哈希函数、加密哈希函数或者依 旧是随机函数。
[0232] 代码映射可以在测试虚拟化环境之前或之后进行。不需要重新启动(reboot)。 例如,执行虚拟化检查和CMOS校验和的执行顺序并不要紧。然而,计算和在数据库中检查 数据项(虚拟化数据和硬件指纹)是有利的。这样,虚拟化和硬件指纹都需要与一个白 列表(whitelist)匹配。此外,可以对虚拟化和硬件指纹进行相关的测试,而非独立的测 试。例如,有人可能获得本身是可以接受的、与一个本身是可以接受的硬件指纹搭配的虚 拟化数据,然而却形成一个不被确定为正确的组合,即,虚拟化数据不匹配正确的硬件简档 (profile)。例如,如果硬件指纹标识某PC为快速计算机,但虚拟化数据生成慢速计算机的 时间戳,则可以通过组合这两种数据并在例如同一个数据库中检查结果组合而加以标识。
[0233] 例如,结合在第2. 1和2. 2节中描述的两种方法,本发明可以体现为用户可信设备 或相应的用于使计算机101从用户可信设备10引导的方法。从本质上讲,用户可信设备10 也包括使得能与所述计算机101连接S2的连接接口 12,该方法包括:
[0234] 1.在设备10与所述计算机101通过所述连接接口 12连接后,使计算机101能从 设备10开始引导;
[0235] 2.将固件数据映射到一个映射代码,该固件数据包含初始化固件的代码和/或在 开始引导期间计算机的初始化固件122可访问的数据,以及最好是初始化固件的硬件数据 集;
[0236] 3.证明该映射代码的可信性;
[0237] 4.指示计算机101的处理器105执行以下步骤:
[0238] 执行虚拟化敏感代码
[0239] 在执行完成后发布完成数据,其中,完成数据依赖于虚拟化敏感代码及其被处理 器105的执行;
[0240] 根据所述完成数据,确定该执行是否没有在虚拟化环境中进行;和
[0241] 6.如果确定以下情况,则使所述计算机101完成从用户可信设备10的引导:
[0242] a.该执行没有在虚拟化环境中进行;及
[0243] 映射代码被证明;或
[0244] 虚拟化指标、映射代码正确,以及虚拟化指标与(相对于)映射代码相关。
[0245] 注意,在变通方案中,步骤2-3可以在步骤4-5之前进行,与步骤4-5并行地进行 或与步骤4-5交错地进行。
[0246] 如前所述,在步骤2与4之间没有重新启动的必要。不过作为最后的评论,要指出 是,计算机在连接到设备10后,或者以其它方式进入使其能从外部设备10启动(执行上述 步骤1,即启动引导)的状态后,大多需要启动(重新启动),例如,下面的选项皆有可能:
[0247] 计算机101关闭;插上设备10 ;启动计算机;或
[0248] 计算机101已经在运行;插上设备,重启计算机。
[0249] 2. 3实施例中所用的指令的例子
[0250] 前文已经讨论过虚拟化敏感指令的例子。现在接着说明可以有利地用于实现本发 明实施例的其它指令(序列)的例子。所属技术领域的熟练技术人员应明白,存在具有相 同/相似功能的其它指令,可用来实现基本上相同的功能。
[0251] 首先,下面是一例允许读取BIOS信息("固件配置数据")的API:
[0252]其中,cmos_data_address 在区间 0......max_cmos_data_address 上迭代。读取固 件的程序码本身和/或其配置数据的其它类似指令。
[0253] 在EFI BIOS中,可以用相同的指令来获得BIOS信息,特别是如果使用例如Intel Firmware Hub (英特尔固件集线器)。
[0254] 接下来,给出允许从PC与用户可信设备互相作用的指令的例子:
[0255] 从用户可信设备(海量存储设备)读一个块
[0256] mov ah,42h
[0257] mov dl, the_drive_to_read_from
[0258] mov ds :si, disk_address_packet_describing_what_to_read
[0259] int 13h
[0260] 向用户可信设备(海量存储设备)写一个块
[0261] mov ah,43h
[0262] mov dl, the_drive_to_write_to
[0263] mov ds :si, disk_address_packet_describing_what_to_write
[0264] int 13h
[0265] 在 EFI BIOS 中,可以使用所谓的 EFI_DISK_I0_PR0T0C0L 或 EFI_BL0CK_I0_ PROTOCOL,二者都提供读(Read)和写(Write)功能。
[0266] 合适的磁盘1/0命令,对于所述技术领域的熟练人员来说是容易获得的。
[0267] 最后,可被模块用来初始化PXE BIOS的指令序列的例子,
包括但不限于:
[0268] Load UNDI ROM
[0269] PXENV_START_UNDI
[0270] PXENV_UNDI_STARTUP
[0271] PXENV_UNDI_INITIALIZE
[0272] PXENV_UNDI_0PEN
[0273] 可以附加一个额外的指令(例如,pxenv_undi_transmit),用于通过网络卡124向 服务器30发送数据包。通过这样的指令,在主机处执行后,模块与PXE BIOS 122互相作用, 以初始化网卡124,由此可以启动网络上的通信。
[0274] EFI_SMPLE_NETW0RK API中的EFI和UEFI BIOS提供类似的指令(初始化,启动, 停止,接收,发送)。BIOS也可能提供TCP/IP栈的高级协议实现以及其它也能使用的网络 协议。
[0275] 已经参照有限数量的实施例、变通方案和附图描述了本发明,所属技术领域的熟 练人员应当明白,在不脱离本发明的范围的情况下可以作出各种变更和可替换的等同方 案。特别地,在给定实施例、变通方案中描述的、或在某个附图中表示的一个特征(装置特 征或方法特征),可以与另一个实施例、变通方案或附图中的另一个特征结合,或者取代另 一个特征,而不脱离本发明的范围。可以相应地设想就任何上述实施例或变通方案变异所 描述的特征的各种组合,它们都落在后附权利要求的范围内。此外,在不脱离本发明的范围 的情况下,可以作出许多微小的修改,使特定的情况或材料适应本发明的教导。因此,本发 明并不局限于所公开的【具体实施方式】,而是要包括落在后附的权利要求的范围内的所有实 施方式。此外,还可以设想上文未予明确触及的许多其它变通方案。例如,为了描述清楚起 见,已经描述的主要功能被分配到各个模块15、16、17。然而,可以等价地描述本发明的实施 例,其具有分布在一个或多个模块的相同功能,每个模块各有这些功能的不同功能。例如, 可以将引导加载器16和PIM 15看作单一的模块,其可能被称为"引导加载器",而仍然执行 在本文其它部分描述的相同功能。
[0276] 附图标记
[0277] 10 用户可信设备
[0278] 11 安全设备的CPU
[0279] 12 连接接口
[0280] 14 持久性存储器
[0281] 141 安全存储器
[0282] 142 非安全存储期
[0283] 15 处理器指令模块(PM)
[0284] 151 处理器指令模块(PM)的第一部分
[0285] 152 处理器指令模块(PM)的第二部分
[0286] 16 引导加载器
[0287] 17 验证模块
[0288] 30 服务器
[0289] 15, 17 虚拟化分析模块
[0290] 100 通用计算系统
[0291] 101 主机计算机
[0292] 105 计算机处理器
[0293] 110 存储器
[0294] 111 操作系统(0S)
[0295] 115 存储器控制器
[0296] 120 物理存储介质(物理磁盘)
[0297] 122 主机计算机的固件(BIOS)
[0298] 124 网卡
[0299] 125 显示控制器
[0300] 130 显示器
[0301] 145 输入/输出设备(外围设备)
[0302] 150 键盘
[0303] 155 鼠标
[0304] 165 网络
【主权项】
1. 一种用户可信设备(10),包含: 使得能够与计算机(101)连接的连接接口(12);和 存储模块(15,16,17)的持久性存储器(14),其被配置得用于在用户可信设备(10)与 所述计算机(101)通过所述连接接口(12)连接后: 使所述计算机(101)从用户可信设备(10)开始引导; 指示计算机(101)的处理器(105)在开始引导期间执行虚拟化敏感代码并在执行完成 后发布完成数据; 根据所述完成数据,确定该执行是否没有在虚拟化环境中进行;和 在确定该执行是否没有在虚拟化环境中进行后,使计算机(101)能从用户可信设备 (10)完成引导。2. 按照用户可信设备(10),其中,所述模块包含: 使所述计算机(101)能从设备(10)开始并完成引导的引导加载器(16); 处理器的指令模块(15),可在计算机(101)处执行,以指示处理器(105)执行虚拟化敏 感代码和发布完成数据; 验证模块(17),被配置得用于指示根据所述完成数据确定该执行是否没有在虚拟化环 境中进行,该验证模块(17)可在设备(10)和/或计算机(101)处执行, 并且其中, 引导加载器(16)在用户可信设备(10)与所述计算机(101)连接后可被初始化固件 (122)检测到,并包含让固件(122)发起向计算机(101)上传送所述处理器指令模块(15)、 用于在计算机(101)处的后续执行的指令。3. 按照权利要求2的用户可信设备(10),其中,处理器指令模块(15)进一步被配置得 用于在计算机(101)处的执行后,指示处理器(105)执行为处理器设计的虚拟化敏感代码, 以生成由计算机(101)支持的、优选地由该处理器自身支持的的一个或多个功能的列表, 作为完成数据的一部分。4. 按照权利要求2或3的用户可信设备(10),其中处理器指令模块(15)进一步被配 置得用于在计算机(101)处的执行后,指示处理器(105)生成取决于处理器执行所述虚拟 化敏感代码所需的计算量的最终状态值,作为完成数据的一部分。 并且其中,优选地,处理器指令模块(15)进一步被配置得用于在计算机(101)处的执 行后,指示处理器(105)生成反映处理器在执行所述虚拟化敏感代码之前的状态的初始状 态值。5. 按照权利要求4的用户可信设备(10),其中,验证模块(17)进一步被配置得用于 根据初始状态值和最终状态值,生成量化处理器执行虚拟化敏感代码所需的计算量的 处理器用量值,如计算持续时间、处理器周期数、或计数器;和 根据所述处理器用量值,确定该执行是否没有在虚拟化环境中进行。6. 按照权利要求4的用户可信设备(10),其中,处理器指令模块(15)进一步被配置得 用于在计算机(101)处的执行后,指示处理器(105)生成量化处理器执行虚拟化敏感代码 所需的计算量的处理器用量值,如计算持续时间、处理器周期数、或计数器,作为完成数据 的一部分, 并且其中,验证模块(17)进一步被配置得用于根据所述处理器用量值,确定该执行是 否没有在虚拟化环境中进行。7. 按照权利要求2到6的任何一个的用户可信设备(10),其中验证模块(17)进一步 被配置得用于指示优选地通过所述计算机(101)连接到服务器(30),以至少部分地在服务 器处确定该执行是否没有在虚拟化环境中进行。8. 按照权利要求7的用户可信设备(10),其中,验证模块(17)进一步被配置得用于执 行以下的一项或多项: 与所述固件(122)互相作用,以便随后与计算机(101)的网卡(124)互相作用,以便在 所述网卡(124)所启用的网络(165)上发起通信,以连接到服务器(30): 访问在用户可信设备(10)上存储的网卡驱动程序以直接与计算机(101)的网卡(124) 互相作用,以便在所述网卡所启用的网络(165)上发起通信,以连接到服务器;和/或 优选地通过引导加载器与固件(122)互相作用,以部分地运行计算机的操作系统,以 按需通过所述计算机(101)连接到服务器。9. 按照权利要求1到8的任何一个的用户可信设备(10),其中,虚拟化敏感代码包含 以下的一个或多个: -将处理器从保护模式切换到实模式的指令和/或将处理器从实模式切换到保护模式 的指令; -让处理器读取机器特定的寄存器的指令; -让处理器写入机器特定的寄存器的指令。10. -种用于使计算机(101)能从用户可信设备(10)引导的方法,用户可信设备(10) 包含使得能与所述计算机(101)连接(S2)的连接接口(12),该方法包括: 在可信设备与计算机(101)通过所述连接接口 12连接(S2)后,使计算机(101)能从 可信设备10开始引导(S3); 指示计算机(101)的处理器(105) 执行虚拟化敏感代码(S7); 在执行完成后发布完成数据(S8),其中完成数据取决于虚拟化敏感代码及其被处理器 (105)的执行; 根据所述完成数据,判定该执行是否没有在虚拟化环境中进行(S9-S13);及 在确定该执行没有在虚拟化环境下进行后,使所述计算机(101)能从用户可信设备 (10)完成引导(S15)。11. 按照权利要求10的方法,进一步包含:在用户可信设备(10)与所述计算机(101) 连接后,与计算机(101)的初始化固件(122)互动,以 使所述计算机(101)能从用户可信设备(10)引导(S3);和 发起将处理器指令模块(15)向计算机(101)上的传送,用于后续的执行(S5-S6),以使 处理器(105)执行虚拟化敏感代码(S7)并在执行完成时发布完成数据(S8)。12. 按照权利要求10或11的方法,其中确定(S9-S14)该执行是否没有在虚拟化环境 中进行包含:在设备(10)和/或计算机(101)处执行(S9)验证模块(17),其中执行(S9) 验证模块(17)优选地包含更优选地通过计算机(101)连接(SlO)到服务器(30),以至少部 分地在服务器确定(Sll)该执行是否没有在虚拟化环境中进行。13. 按照权利要求10到12的任何之一的方法,其中,处理器(105)进一步被指示生成 由计算机(101)、优选地由处理器自身支持的一个或多个功能的列表,作为完成数据的一部 分。14. 按照权利要求10到13的任何之一的方法,其中,处理器(105)进一步被指示生成 (S8)取决于处理器执行虚拟化敏感代码所需的计算量的最终状态值,如计算持续时间、处 理器周期数、或计数器,作为完成数据的一部分, 并且其中,优选地,处理器(105)进一步被指示生成(S6)在执行(S7)虚拟化敏感代码 之前的初始状态值。15. -种用于使计算机(101)能从用户可信设备(10)引导的计算机程序产品,该计算 机程序产品包含体现有模块(15、16、17)的计算机可读存储介质,这些模块可执行按照权 利要求10至14的方法的任何之一的所有步骤。
【专利摘要】本发明针对一种用于使计算机(101)能从用户可信设备(10)引导的方法,用户可信设备(10)包含使得能与所述计算机(101)连接(S2)的连接接口(12),该方法包括:在可信设备与计算机(101)通过所述连接接口12连接(S2)后,使计算机(101)能从可信设备10开始引导(S3);指示计算机(101)的处理器(105)执行虚拟化敏感代码(S7);在执行完成后发布完成数据(S8),其中完成数据取决于虚拟化敏感代码及其被处理器(105)的执行;根据所述完成数据,判定该执行是否没有在虚拟化环境中进行(S9-S14);以及在确定该执行没有在虚拟化环境下进行后,使所述计算机(101)能从用户可信设备(10)完成引导(S15)。本发明进一步针对能实现这个方法的用户可信设备和相关系统。
【IPC分类】G06F9/445
【公开号】CN104903854
【申请号】CN201380065399
【发明人】迈克尔·巴恩施, T·格施温德, 安德里斯·沙德
【申请人】国际商业机器公司
【公开日】2015年9月9日
【申请日】2013年11月26日
【公告号】DE112013005184T5, US20150317472, WO2014091343A1