Trusted Execution Technology (TXT) --- 基本原理篇

版权声明:本文为博主原创文章,未经博主允许不得转载。 http://www.cnblogs.com/tsec/p/8409600.html 

1. Intel TXT 介绍

TXT是Trusted Execution Technology的简称,即可信执行技术,TXT技术源自Intel。其主要目标是通过使用特定的Intel CPU、专用硬件以及相关固件,建立一个从一开机就可信的环境,进而为系统软件提供多种方法,来实现更安全的系统以及更好的数据完整性保护。

通常来讲,Intel TXT是:

  1. 安全功能的集合;
  2. 验证这些功能正在使用的一种方法;
  3. 安全度量(Measurement)和验证系统配置与系统代码的方法;
  4. 通过设置策略来建立基于度量的信任级别的方法;
  5. 为可信操作系统提供额外安全功能的方法。

度量(Measurement)在Intel TXT技术中是必不可少的。TPM芯片是Intel TXT技术的基础部件之一,它提供了安全度量软件组件的方法,这些软件组件包括Bios code、平台配置、引导代码、引导配置、系统代码、系统设置等,从而为平台组件和系统软件构建一系列凭证。TPM还提供了准确使用度量来作为信任的证明以及保护这些度量的能力。

Intel TXT引入了两个TCG概念 ------ 静态信任链(Static Chain of Trust)和动态信任链(Dynamic Chain of Trust),如下图所示。静态信任链度量平台配置,动态信任链度量系统软件、软件配置及策略。对于Intel TXT而言,信任根(Root of Trust)就是支持TXT技术的Intel CPU。

1.1 静态信任链

 静态信任链(Static Chain of Trust)在平台开机后度量,由硬件发起,度量值由TPM来防护免受篡改,代码在执行前都要被度量。

  1. 静态信任链由CPU中的uCode启动,度量由芯片厂商提供的BIOS ACM,即认证代码模块(Authenticated Code Module),可用来执行特定安全功能,度量之前需要验证该ACM的签名和完整性;
  2. BIOS ACM先度量一部分BIOS code,即Start BIOS code,然后,Start BIOS再去度量其它BIOS code和configuration,直到BIOS code度量结束BIOS才真正开始执行;
  3. 度量值被存储在TPM内特定的PCRs中,即平台配置寄存器(Platform Configuration Register);
  4. BIOS在执行过程中可调用BIOS ACM中的安全功能来进行安全检查;
  5. BIOS在执行任何附加code之前,如Option ROM,都需要先度量后执行;
  6. 引导OS时,BIOS也度量主引导记录(MBR)和OS Loader。

需要说明的是,静态度量只在平台开机后执行一次。

1.2 动态信任链

 动态信任链(Dynamic Chain of Trust)由OS的需求而来。

  1. 开启动态度量,通过特殊的CPU指令度量和验证SINIT ACM;
  2. SINIT ACM执行安全检查,包括确认BIOS已经通过安全检查以及平台配置已锁定;
  3. SINIT ACM度量可信OS,即TBoot,并调用启动控制策略(Launch Control Policy,LCP)引擎来判断平台配置和OS是否可信。

1.3 MLE

对于Intel TXT而言,可信OS指的是度量过的启动环境,即Measured Launch Environment(MLE)。

 

2. TXT技术基本原理

Intel TXT依赖于一系列支持TXT技术的硬件、软件与固件。如下图所示,具有Intel TXT功能的平台所需组件包括支持TXT与VT-x技术的CPU、Chipset、TPM芯片、ACMs、BIOS、MLE。

2.1 TXT平台组件

2.1.1 CPU

CPU需要支持TXT和SMX技术,SMX包括一条安全指令GETSEC,可执行多种安全功能。GETSEC[ENTERACCS]和GETSEC[SENTER]指令提供:

  1. 安全验证ACM,
  2. 若验证通过,将ACM调入CPU 安全域内执行。

支持TXT技术的CPU也都支持虚拟化技术(VMX)。

2.1.2 Chipset

 为支持TXT技术,Chipset需要包括:

  1. 专门的TXT寄存器
  2. 一个增强架构
  3. 对TPM的受控访问

根据访问TXT寄存器的实体安全级别,Chipset执行TPM的locality,以及对TXT寄存器的不同访问权限。

2.1.3 TPM

 Intel TXT技术广泛使用TPM芯片,TPM提供了一个安全存储空间和使用度量值的机制。系统使用度量值的目的是报告和评估当前的平台配置以及提供对敏感信息的长期保护。

2.1.4 BIOS

BIOS职责:

  1. 提供ACM,ACM由芯片组厂商制造并作为BIOS镜像的一部分提供给BIOS开发者;
  2. 配置TXT操作平台;
  3. 使用ACM执行安全检查和注册;
  4. 使用处理器的GETSEC安全指令来锁定平台配置。

    一旦锁定,BIOS和其它Firmware就不能再修改配置,BIOS在执行其它任何第三方代码(Option Rom等)之前进行锁定。

2.1.5 ACM

ACM是由芯片组厂商提供的代码,由厂商签名,并由GETSEC安全指令调用,然后在CPU内部的专用安全内存中以最高安全级别执行。

ACM需要与芯片组相匹配,类型可分为:BIOS ACM和SINIT ACM。前者度量BIOS并执行多个基于BIOS的安全功能;后者用来执行系统软件/操作系统的安全启动。

BIOS ACM和SINIT ACM code都会被包含在BIOS binary中,另外,OS在安全启动中可能选择更新版的SINIT ACM。

ACM被认为是Core Root of Trusted Measurement (CRTM),需要进行验证和保护:

  1. 在执行ACM之前,CPU Microcode会先执行如下安全检查:
    • ACM 必须匹配芯片组
    • ACM版本不能使早已被撤销大的
    • ACM必须签名
    • 签名必须有效
  2. 在执行上述检查之前,CPU会将ACM从Bios binary拷贝到CPU内的受保护内存中,目的是保证ACM不会被篡改;
  3. ACM由芯片厂商提供的私钥所签名,该私钥被硬编码到芯片组内,CPU microcode使用其自身包含的公钥验证ACM的签名;
  4. 签名使用密码算法来验证ACM没有被篡改。

在上述检查全部通过的情况下,ACM才真正被执行。

2.2 TPM功能与接口

TPM芯片是TXT平台中必不可少的组件,其主要提供如下安全功能:

  1. 非易失性存储器
  2. 平台配置寄存器(PCR)
  3. 身份认证密钥
  4. 随机数发生器
  5. SHA-1/RSA/密钥生成器

TPM通过LPC(Low Pin Count)或SPI(Serial Peripheral Interface)总线连接到chipset,且仅能通过由chipset保护的MMIO寄存器访问,意味着I/O设备无法访问TPM,但OS可以控制哪个处理器有权访问TPM。通常,TPM通过Locality和控制协议来执行保护和访问权限。

2.2.1 Locality

TPM有不同的特权级别,称为locality。每个locality通过不同的4KB大小的页面来访问,允许硬件和软件控制访问每一个locality。Chipset可以决定哪些locality是活跃的(即对该页面的读写操作是否将被忽略),系统软件通过正常的内存管理和分页功能来决定哪些进程可以访问这些页面。Locality总共分为5级(0 - 4):

  • Locality 0,总是对一般用途开放,可以是Non-trusted operation;
  • Locality 1,OS (不作为TXT的一部分);
  • Locality 2,MLE,即安全模式下的系统软件,只有在OS完成安全启动后,OS才可以随时关闭此访问;
  • Locality 3,ACM,只有GETSEC调用的ACM才有权访问;
  • Locality 4,TXT hardware only。

注意:locality不分层级,不存在隶属关系,Locality 4也不是一个超级用户,不会访问其它locality的资源。

2.2.2 控制协议

TPM的接口是基于消息的。就是说,一个实体创建请求消息并通过locality页面发送到TPM,然后通过locality页面读取响应消息。协议允许实体建立安全会话,会话允许用户对消息内容进行加密,尤其是对验证授权的方法进行加密。为此,TPM使用HMAC来实现授权认证。

2.2.3 平台配置寄存器(PCR)

在TPM中,平台配置寄存器(Platform Configuration Register,PCR)可被作为对象访问,也是可信证明的基础,通常用于启动控制策略(LCP)。

TPM提供PCR来存储度量值,每个PCR都拥有一个20-byte的hash摘要。PCR的内容是基于“扩展”的,而非直接写入,即TPM使用当前PCR的值,拼接需要扩展的数据,将两者的组合进行hash运算,产生的摘要就是新的PCR值。这意味着,PCR是唯一且不可欺骗的,将相同的度量值按照相同的顺序扩展,才可以计算出相同的PCR值。

TXT技术会使用到24个PCR,一些PCR是静态的,只有在系统刚开机或重启时才会重置静态PCR。其它动态PCR,在不重启的情况下,可通过特定的locality重置动态PCR。

2.3 TXT度量

Intel TXT帮助探测或阻止如下攻击:

  1. 试图插入不可信的VMM
  2. 危害内存中秘密的复位攻击
  3. BIOS与Firmware的升级攻击

2.3.1 安全度量

度量(Measure)是对任何能够载入内存的代码或数据的Hash,产生固定长度的摘要。

  1. 度量是基于硬件的(硬件信任根),对TXT而言,信任根就是CPU
  2. 度量是免受篡改、受保护的

度量值(Measurement)被扩展(Extend)到TPM提供的一组PCRs中。这些PCRs不能被覆写,只能被Extend,即使用现有的PCR值与新的度量值构成一个组合值后,再进行Hash,最后将hash值存储到该PCR中。

2.3.2 静态和动态度量

静态度量在每次平台启动时只执行一次,16个静态PCR:PCR0~PCR15。这些PCR仅在平台开机或硬件重启时才进行清除,也就是使所有组件(TPM、CPU、Chipset)返回到开机状态的一个信号。

静态PCR用来度量平台配置:

  1. PCR0:CRTM、BIOS以及宿主平台扩展项
  2. PCR1:宿主平台配置
  3. PCR2:Option Rom代码
  4. PCR3:Option Rom配置和数据
  5. PCR4:IPL代码,通常使MBR
  6. PCR5:IPL配置和数据,被IPL code所使用
  7. PCR6:宿主迁移和唤醒事件
  8. PCR7:宿主平台制造商控制
  9. PCR8~PCR15:为OS保留,不被TXT使用

    PCR0是主要的CRTM PCR,且关乎PCR1~PCR7的完整性。CRTM代表可信度量根(Core Root of Trust Measurement),意味着它要被第一个度量并为静态PCR开启度量链

动态度量是能够不用重启平台就可以使PCR重置的度量,有8个动态PCR,使用如下:

  1. PCR16:为调试保留
  2. PCR17:DRTM和启动控制策略
  3. PCR18~PCR20:可信OS启动代码、配置、内核和其它代码
  4. PCR21~PCR22:由可信OS定义
  5. PCR23:为应用程序保留,能够被任意locality重置和扩展

PCR17~PCR20可依据一次成功的安全启动进行重置,PCR20~PCR22能够通过安全模式下的可信OS进行重置。

总之,TXT提供了安全度量和报告各种平台组件的方法,因此可以检测这些组件的变化。

2.4 启动控制策略

Intel TXT包含一个启动策略控制(Launch Control Policy,LCP)引擎,用于指定哪些是已知良好的平台配置以及哪些系统软件允许安全启动。实际上存在两个策略引擎,一个在BIOS ACM内部,当发生复位攻击时,它会启动用来验证BIOS完整性的策略,另一个在SINIT ACM内,负责启动控制策略的强制执行。

先来说一下TXT是如何防止复位攻击的。当OS成功地执行安全启动时,它会设置一个非易失性Secret标志,用于表明内存中存在隐私和其它特权信息。当OS正常关机并退出安全环境时,它会重置该Secret标志,且只能通过可信OS调用GETSEC指令的方式来重置。如果发生复位攻击(Reset Attack),即在可信OS清除Secret标志之前reset OS,此时BIOS ACM会首先确保BIOS会清理内存中的隐私数据,否则DRAM Controller将不可用,只有将CMOS移除才可恢复。然而,BIOS ACM也不能盲目信任BIOS,因为BIOS可能被攻击者插入恶意代码,因此BIOS ACM有两种方法来验证BIOS是可信的:Autopromotion和Signed BIOS Policy。

  1.  Autopromotion:意味着BIOS ACM知道BIOS的度量值,会提醒用户当前BIOS的度量值与移植良好的度量值不匹配,将由用户决定当前BIOS是否可信。
  2. Signed BIOS Policy:由OEM提供一份已知良好的、由OEM签名的BIOS度量值列表,如果当前BIOS度量值不与列表中的任意一个值相匹配,则认为BIOS是不可信的。

上述两种验证BIOS完整性的方法将在以后的文章中详细介绍。

对于LCP,有两个策略制定者:平台供应商(PS)策略和平台属主(PO)策略。PS策略是平台出厂前由平台供应商创建的,也被称为默认策略。这里主要讨论PO策略。LCP包含两个元素:

  1. PCONF元素,即有效平台定义。前文我们知道TXT将平台配置信息的度量值扩展到PCR0~PCR7中,PCONF策略元素就是基于这些静态度量PCR创建而来的。策略属主基于一个或多个相关PCR值创建一个复合Hash值,称为PCRInfo,PCONF元素可以容纳任何数量的PCRInfo。在安全启动过程中,LCP引擎将从指定的PCR值生成复合Hash值,并与策略中PCRInfo相比较。若匹配,则说明当前平台是 可信的。
  2. MLE元素,即启动度量环境,允许进行安全启动的OS。与PCONF元素不同,MLE元素不使用动态的PCR17~PCR22,因为此时的动态PCR还没有被扩展,都是默认值。MLE元素只包含已知良好的TBoot度量值,将SINIT ACM度量过Tboot度量值与MLE元素中的良好度量值比较,若匹配,则将该度量值扩展到PCR18中,并执行安全启动。

那么如何保护LCP以防止篡改呢?这就有使用到TPM芯片提供的NVRAM。为节省TPM NVRAM空间,LCP会被分解成若干个NV策略数据(用于创建PO策略索引),以及一个可选的策略数据结构(包含PCONF元素和MLE元素)。

3. 总结

Intel TXT符合TCG PC Client和Server规范。加密安全Hash算法生成平台组件、平台配置、系统软件和软件配置的唯一度量值。这些度量值被存贮在受TPM保护的PCR中,每个PCR都可由多个度量值扩展,PCR日志记录了这个PCR扩展的每个元素,利用该PCR中的值可以用来验证PCR日志是否被篡改。

PCR0包含静态可信度量根,以及BIOS code的度量。这些度量不能被篡改,因为它们都根植于硬件。PCR1~PCR7依赖于PCR0的有效性,也就是说,仅当PCR0的度量值是可信的,PCR1~PCR7才是可信的。所以,在创建LCP的PCONF元素时,PCR0是必不可少的。PCR17包含动态可信度量根,以及策略的度量值,同样是基于硬件的可信根。PCR18包含可信OS(TBoot)的度量值,且依赖于PCR17的有效性。

平台属主(PO)控制着有效的平台配置,以及哪些OS被允许执行度量启动。在MLE环境下,符合LCP的OS具有TPM Locality 2的访问权限。度量启动意味着OS的度量值已经扩展到动态PCR中。

[TSEC] 以上简单介绍了TXT平台所需组件以及基本原理,Launch Control Policy在TXT平台上的作用是基于TXT度量结果做出信任决策,本文仅涉及LCP基础知识,后续会对LCP做详细介绍。若有问题,请留言,一起学习,一起进步,谢谢。

 

posted @ 2018-02-04 14:38  chipsec  阅读(16475)  评论(1编辑  收藏  举报